File tree Expand file tree Collapse file tree 5 files changed +171
-0
lines changed
Expand file tree Collapse file tree 5 files changed +171
-0
lines changed Original file line number Diff line number Diff line change 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 StreamClient :
12+ def __init__ (self , client : river .Client [Literal [None ]]):
13+ self .test_service = Test_ServiceService (client )
Original file line number Diff line number Diff line change 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 .stream_method import (
13+ encode_Stream_MethodInput ,
14+ Stream_MethodOutput ,
15+ Stream_MethodInput ,
16+ )
17+
18+
19+ class Test_ServiceService :
20+ def __init__ (self , client : river .Client [Any ]):
21+ self .client = client
22+
23+ async def stream_method (
24+ self ,
25+ inputStream : AsyncIterable [Stream_MethodInput ],
26+ ) -> AsyncIterator [Stream_MethodOutput | RiverError ]:
27+ return self .client .send_stream (
28+ "test_service" ,
29+ "stream_method" ,
30+ None ,
31+ inputStream ,
32+ None ,
33+ encode_Stream_MethodInput ,
34+ lambda x : TypeAdapter (Stream_MethodOutput ).validate_python (
35+ x # type: ignore[arg-type]
36+ ),
37+ lambda x : TypeAdapter (RiverError ).validate_python (
38+ x # type: ignore[arg-type]
39+ ),
40+ )
Original file line number Diff line number Diff line change 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_Stream_MethodInput : Callable [["Stream_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 Stream_MethodInput (TypedDict ):
36+ data : str
37+
38+
39+ class Stream_MethodOutput (BaseModel ):
40+ data : str
Original file line number Diff line number Diff line change 1+ {
2+ "services" : {
3+ "test_service" : {
4+ "procedures" : {
5+ "stream_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" : " stream"
28+ }
29+ }
30+ }
31+ }
32+ }
Original file line number Diff line number Diff line change 1+ import importlib
2+ import shutil
3+ from typing import AsyncIterable
4+
5+ import pytest
6+
7+ from replit_river .client import Client
8+ from replit_river .codegen .client import schema_to_river_client_codegen
9+ from tests .codegen .stream .generated .test_service .stream_method import (
10+ Stream_MethodInput ,
11+ Stream_MethodOutput ,
12+ )
13+ from tests .common_handlers import basic_stream
14+
15+
16+ @pytest .fixture (scope = "session" , autouse = True )
17+ def generate_stream_client () -> None :
18+ import tests .codegen .stream .generated
19+
20+ shutil .rmtree ("tests/codegen/stream/generated" )
21+ schema_to_river_client_codegen (
22+ "tests/codegen/stream/schema.json" ,
23+ "tests/codegen/stream/generated" ,
24+ "StreamClient" ,
25+ True ,
26+ )
27+ importlib .reload (tests .codegen .stream .generated )
28+
29+
30+ @pytest .mark .asyncio
31+ @pytest .mark .parametrize ("handlers" , [{** basic_stream }])
32+ async def test_basic_stream (client : Client ) -> None :
33+ from tests .codegen .stream .generated import StreamClient
34+
35+ async def emit () -> AsyncIterable [Stream_MethodInput ]:
36+ for i in range (5 ):
37+ yield {"data" : str (i )}
38+
39+ res = await StreamClient (client ).test_service .stream_method (emit ())
40+
41+ i = 0
42+ async for datum in res :
43+ assert isinstance (datum , Stream_MethodOutput )
44+ assert f"Stream response for { i } " == datum .data , f"{ i } == { datum .data } "
45+ i = i + 1
46+ assert i == 5
You can’t perform that action at this time.
0 commit comments