danielgtaylor / danielgtaylor/python-betterproto

Disappears from the generated `ServiceBase` if there is a `ID` in the name [2.0.0b3]

Offen
#230 1 Kommentar 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
compiler-bug
Vorherrschende Sprache
Python
Sterne
1.8k
Forks
234
PR-Merge-Kennzahlen
Keine gemergten PRs in 30 T.

Beschreibung

## Env

Python: 3.9
protoc: 3.15.6
betterproto: 2.0.0b3
OS: linux

---

### Given proto

```proto
syntax = "proto3";
package com.test.v1;
import "google/protobuf/empty.proto";

service TestService {
rpc Test(PublisherUserID) returns (google.protobuf.Empty);
}

message PublisherUserID {
int64 publisher_user_id = 1;
}
```

### Generated `TestServiceBase`

Parameter `PublisherUserID` of `test()` disappered.

```py3
class TestServiceBase(ServiceBase):
async def test(self) -> "betterproto_lib_google_protobuf.Empty":
raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

async def __rpc_test(self, stream: grpclib.server.Stream) -> None:
request = await stream.recv_message()

request_kwargs = {}

response = await self.test(**request_kwargs)
await stream.send_message(response)

def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
return {
"/com.test.v1.TestService/Test": grpclib.const.Handler(
self.__rpc_test,
grpclib.const.Cardinality.UNARY_UNARY,
PublisherUserId,
betterproto_lib_google_protobuf.Empty,
),
}
```

---

### Midified proto

Rename `ID` to `Id`

```proto
syntax = "proto3";
package com.test.v1;
import "google/protobuf/empty.proto";

service TestService {
rpc Test(PublisherUserId) returns (google.protobuf.Empty);
}

message PublisherUserId {
int64 publisher_user_id = 1;
}
```

### Generated `TestServiceBase`

```py3
class TestServiceBase(ServiceBase):
async def test(
self, publisher_user_id: int
) -> "betterproto_lib_google_protobuf.Empty":
raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

async def __rpc_test(self, stream: grpclib.server.Stream) -> None:
request = await stream.recv_message()

request_kwargs = {
"publisher_user_id": request.publisher_user_id,
}

response = await self.test(**request_kwargs)
await stream.send_message(response)

def __mapping__(self) -> Dict[str, grpclib.const.Handler]:
return {
"/com.test.v1.TestService/Test": grpclib.const.Handler(
self.__rpc_test,
grpclib.const.Cardinality.UNARY_UNARY,
PublisherUserId,
betterproto_lib_google_protobuf.Empty,
),
}
```

Beitragsleitfaden

Beitragsleitfaden öffnen

Rechercherichtung

Verwende die bereitgestellten proto-Definitionen und vergleiche die generierte Ausgabe von TestServiceBase für PublisherUserID mit der für PublisherUserId. Beginne am Generator-Einstiegspunkt, der die Servicemethode und request_kwargs erzeugt, und füge anschließend einen Regressionstest hinzu, der die Schreibweise der ID abdeckt. Erledigt ist die Aufgabe, wenn die generierte Methode publisher_user_id beibehält und es über request_kwargs weitergibt.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
compilers
Issue-Typ
Bug
Schwierigkeit
3/5
Geschätzter Aufwand
1-2 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.