Skip to content

Commit b78db53

Browse files
Adding an RPC codegen test
1 parent 9b57ee1 commit b78db53

File tree

5 files changed

+145
-0
lines changed

5 files changed

+145
-0
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
# Code generated by river.codegen. DO NOT EDIT.
2+
from pydantic import BaseModel
3+
from typing import Literal
4+
5+
import replit_river as river
6+
7+
8+
from .test_service import Test_ServiceService
9+
10+
11+
class RpcClient:
12+
def __init__(self, client: river.Client[Literal[None]]):
13+
self.test_service = Test_ServiceService(client)
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Code generated by river.codegen. DO NOT EDIT.
2+
from collections.abc import AsyncIterable, AsyncIterator
3+
from typing import Any
4+
import datetime
5+
6+
from pydantic import TypeAdapter
7+
8+
from replit_river.error_schema import RiverError
9+
import replit_river as river
10+
11+
12+
from .rpc_method import encode_Rpc_MethodInput, Rpc_MethodInput, Rpc_MethodOutput
13+
14+
15+
class Test_ServiceService:
16+
def __init__(self, client: river.Client[Any]):
17+
self.client = client
18+
19+
async def rpc_method(
20+
self,
21+
input: Rpc_MethodInput,
22+
timeout: datetime.timedelta,
23+
) -> Rpc_MethodOutput:
24+
return await self.client.send_rpc(
25+
'test_service',
26+
'rpc_method',
27+
input,
28+
encode_Rpc_MethodInput,
29+
lambda x: TypeAdapter(Rpc_MethodOutput).validate_python(
30+
x # type: ignore[arg-type]
31+
),
32+
lambda x: TypeAdapter(RiverError).validate_python(
33+
x # type: ignore[arg-type]
34+
),
35+
timeout,
36+
)
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# ruff: noqa
2+
# Code generated by river.codegen. DO NOT EDIT.
3+
from collections.abc import AsyncIterable, AsyncIterator
4+
import datetime
5+
from typing import (
6+
Any,
7+
Callable,
8+
Dict,
9+
List,
10+
Literal,
11+
Optional,
12+
Mapping,
13+
Union,
14+
Tuple,
15+
TypedDict,
16+
)
17+
18+
from pydantic import BaseModel, Field, TypeAdapter
19+
from replit_river.error_schema import RiverError
20+
21+
import replit_river as river
22+
23+
24+
encode_Rpc_MethodInput: Callable[['Rpc_MethodInput'], Any] = lambda x: {
25+
k: v
26+
for (k, v) in (
27+
{
28+
'data': x.get('data'),
29+
}
30+
).items()
31+
if v is not None
32+
}
33+
34+
35+
class Rpc_MethodInput(TypedDict):
36+
data: str
37+
38+
39+
class Rpc_MethodOutput(BaseModel):
40+
data: str

tests/codegen/rpc/schema.json

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
{
2+
"services": {
3+
"test_service": {
4+
"procedures": {
5+
"rpc_method": {
6+
"input": {
7+
"type": "object",
8+
"properties": {
9+
"data": {
10+
"type": "string"
11+
}
12+
},
13+
"required": ["data"]
14+
},
15+
"output": {
16+
"type": "object",
17+
"properties": {
18+
"data": {
19+
"type": "string"
20+
}
21+
},
22+
"required": ["data"]
23+
},
24+
"errors": {
25+
"not": {}
26+
},
27+
"type": "rpc"
28+
}
29+
}
30+
}
31+
}
32+
}

tests/codegen/test_rpc.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
from datetime import timedelta
2+
3+
import pytest
4+
5+
from replit_river.client import Client
6+
from replit_river.codegen.client import schema_to_river_client_codegen
7+
from tests.common_handlers import basic_rpc_method
8+
9+
10+
@pytest.mark.asyncio
11+
@pytest.mark.parametrize("handlers", [{**basic_rpc_method}])
12+
async def test_basic_rpc(client: Client) -> None:
13+
schema_to_river_client_codegen(
14+
"tests/codegen/rpc/schema.json", "tests/codegen/rpc/generated", "RpcClient", True
15+
)
16+
from tests.codegen.rpc.generated import RpcClient
17+
18+
res = await RpcClient(client).test_service.rpc_method(
19+
{
20+
"data": "feep",
21+
},
22+
timedelta(seconds=5),
23+
)
24+
assert res.data == "Hello, feep!", f"Expected 'Hello, feep!' received {res.data}"

0 commit comments

Comments
 (0)