File tree Expand file tree Collapse file tree 5 files changed +169
-0
lines changed
Expand file tree Collapse file tree 5 files changed +169
-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 asyncio
2+ import importlib
3+ import shutil
4+ from typing import AsyncIterable
5+
6+ import pytest
7+
8+ from replit_river .client import Client
9+ from replit_river .codegen .client import schema_to_river_client_codegen
10+ from tests .codegen .stream .generated .test_service .stream_method import Stream_MethodInput , Stream_MethodOutput
11+ from tests .common_handlers import basic_stream
12+
13+
14+ @pytest .fixture (scope = "session" , autouse = True )
15+ def generate_stream_client () -> None :
16+ import tests .codegen .stream .generated
17+
18+ shutil .rmtree ("tests/codegen/stream/generated" )
19+ schema_to_river_client_codegen (
20+ "tests/codegen/stream/schema.json" ,
21+ "tests/codegen/stream/generated" ,
22+ "StreamClient" ,
23+ True ,
24+ )
25+ importlib .reload (tests .codegen .stream .generated )
26+
27+
28+ @pytest .mark .asyncio
29+ @pytest .mark .parametrize ("handlers" , [{** basic_stream }])
30+ async def test_basic_stream (client : Client ) -> None :
31+ from tests .codegen .stream .generated import StreamClient
32+
33+ async def emit () -> AsyncIterable [Stream_MethodInput ]:
34+ for i in range (5 ):
35+ yield {"data" : str (i )}
36+
37+ res = await StreamClient (client ).test_service .stream_method (emit ())
38+
39+ i = 0
40+ async for datum in res :
41+ assert isinstance (datum , Stream_MethodOutput )
42+ assert f"Stream response for { i } " == datum .data , f"{ i } == { datum .data } "
43+ i = i + 1
44+ assert i == 5
You can’t perform that action at this time.
0 commit comments