Skip to content

Commit 60c8265

Browse files
committed
fix tests
1 parent 9aec430 commit 60c8265

File tree

9 files changed

+276
-162
lines changed

9 files changed

+276
-162
lines changed

servicestack/reflection.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import base64
2-
import collections
2+
import collections.abc as collections
33
import decimal
44
import inspect
55
import json

tests/aiserver_dtos.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
""" Options:
2-
Date: 2024-10-23 04:53:20
2+
Date: 2024-10-23 07:43:31
33
Version: 8.41
44
Tip: To override a DTO option, remove "#" prefix before updating
55
BaseUrl: https://openai.servicestack.net

tests/config.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
# TEST_URL = "https://localhost:5001"
88
# TEST_URL = "http://localhost:5000"
9-
TEST_URL = "http://test.servicestack.net"
9+
TEST_URL = "https://test.servicestack.net"
1010
TECHSTACKS_URL = "https://techstacks.io"
1111
# Load AI Server URL from environment variable
1212
AI_SERVER_URL = os.getenv('AI_SERVER_URL')
@@ -38,4 +38,7 @@ def create_aiserver_client():
3838
client = JsonServiceClient(url)
3939
client.set_bearer_token(api_key)
4040

41-
return client
41+
return client
42+
43+
def log():
44+
pass

tests/dtos.py

Lines changed: 202 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
""" Options:
2-
Date: 2021-07-11 19:01:31
3-
Version: 5.111
4-
Tip: To override a DTO option, remove "//" prefix before updating
2+
Date: 2024-10-23 07:43:28
3+
Version: 8.41
4+
Tip: To override a DTO option, remove "#" prefix before updating
55
BaseUrl: https://test.servicestack.net
66
77
#GlobalNamespace:
8-
#MakePropertiesOptional: False
98
#AddServiceStackTypes: True
109
#AddResponseStatus: False
1110
#AddImplicitVersion:
@@ -84,6 +83,11 @@ class FluentSingleValidation:
8483
value: Optional[str] = None
8584

8685

86+
class IGeneration:
87+
ref_id: Optional[str] = None
88+
tag: Optional[str] = None
89+
90+
8791
class IAuthTokens:
8892
provider: Optional[str] = None
8993
user_id: Optional[str] = None
@@ -157,6 +161,9 @@ class AuthUserSession:
157161
two_factor_enabled: Optional[bool] = None
158162
security_stamp: Optional[str] = None
159163
type: Optional[str] = None
164+
recovery_token: Optional[str] = None
165+
ref_id: Optional[int] = None
166+
ref_id_str: Optional[str] = None
160167

161168

162169
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
@@ -300,12 +307,6 @@ class ScopeType(IntEnum):
300307
SALE = 2
301308

302309

303-
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
304-
@dataclass
305-
class PingService:
306-
pass
307-
308-
309310
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
310311
@dataclass
311312
class Channel:
@@ -515,6 +516,57 @@ class MessageCrud(IReturnVoid, ISaveDb["MessageCrud"]):
515516
name: Optional[str] = None
516517

517518

519+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
520+
@dataclass
521+
class ArtifactOutput:
522+
"""
523+
Output object for generated artifacts
524+
"""
525+
526+
# @ApiMember(Description="URL to access the generated image")
527+
url: Optional[str] = None
528+
"""
529+
URL to access the generated image
530+
"""
531+
532+
533+
# @ApiMember(Description="Filename of the generated image")
534+
file_name: Optional[str] = None
535+
"""
536+
Filename of the generated image
537+
"""
538+
539+
540+
# @ApiMember(Description="Provider used for image generation")
541+
provider: Optional[str] = None
542+
"""
543+
Provider used for image generation
544+
"""
545+
546+
547+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
548+
@dataclass
549+
class TextOutput:
550+
"""
551+
Output object for generated text
552+
"""
553+
554+
# @ApiMember(Description="The generated text")
555+
text: Optional[str] = None
556+
"""
557+
The generated text
558+
"""
559+
560+
561+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
562+
@dataclass
563+
class UploadInfo:
564+
name: Optional[str] = None
565+
file_name: Optional[str] = None
566+
content_length: int = 0
567+
content_type: Optional[str] = None
568+
569+
518570
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
519571
@dataclass
520572
class MetadataTestNestedChild:
@@ -683,7 +735,7 @@ class CustomHttpErrorResponse:
683735
class QueryResponseAlt(Generic[T]):
684736
offset: int = 0
685737
total: int = 0
686-
results: Optional[List[T]] = None
738+
results: Optional[List[Item]] = None
687739
meta: Optional[Dict[str, str]] = None
688740
response_status: Optional[ResponseStatus] = None
689741

@@ -694,6 +746,12 @@ class Items:
694746
results: Optional[List[Item]] = None
695747

696748

749+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
750+
@dataclass
751+
class ReturnCustom400Response:
752+
response_status: Optional[ResponseStatus] = None
753+
754+
697755
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
698756
@dataclass
699757
class ThrowTypeResponse:
@@ -715,6 +773,43 @@ class ThrowBusinessErrorResponse:
715773
response_status: Optional[ResponseStatus] = None
716774

717775

776+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
777+
@dataclass
778+
class GenerationResponse:
779+
"""
780+
Response object for generation requests
781+
"""
782+
783+
# @ApiMember(Description="List of generated outputs")
784+
outputs: Optional[List[ArtifactOutput]] = None
785+
"""
786+
List of generated outputs
787+
"""
788+
789+
790+
# @ApiMember(Description="List of generated text outputs")
791+
text_outputs: Optional[List[TextOutput]] = None
792+
"""
793+
List of generated text outputs
794+
"""
795+
796+
797+
# @ApiMember(Description="Detailed response status information")
798+
response_status: Optional[ResponseStatus] = None
799+
"""
800+
Detailed response status information
801+
"""
802+
803+
804+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
805+
@dataclass
806+
class TestFileUploadsResponse:
807+
id: Optional[int] = None
808+
ref_id: Optional[str] = None
809+
files: Optional[List[UploadInfo]] = None
810+
response_status: Optional[ResponseStatus] = None
811+
812+
718813
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
719814
@dataclass
720815
class Account:
@@ -1190,6 +1285,13 @@ class GetNakedItems(IReturn[List[Item]]):
11901285
pass
11911286

11921287

1288+
# @ValidateRequest(Validator="IsAuthenticated")
1289+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
1290+
@dataclass
1291+
class DeclarativeValidationAuth:
1292+
name: Optional[str] = None
1293+
1294+
11931295
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
11941296
@dataclass
11951297
class DeclarativeCollectiveValidationTest(IReturn[EmptyResponse]):
@@ -1265,6 +1367,14 @@ class ThrowCustom400:
12651367
message: Optional[str] = None
12661368

12671369

1370+
# @Route("/returncustom400")
1371+
# @Route("/returncustom400/{Message}")
1372+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
1373+
@dataclass
1374+
class ReturnCustom400(IReturn[ReturnCustom400Response]):
1375+
message: Optional[str] = None
1376+
1377+
12681378
# @Route("/throw/{Type}")
12691379
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
12701380
@dataclass
@@ -1289,6 +1399,43 @@ class ThrowBusinessError(IReturn[ThrowBusinessErrorResponse]):
12891399
pass
12901400

12911401

1402+
# @Api(Description="Convert speech to text")
1403+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
1404+
@dataclass
1405+
class SpeechToText(IReturn[GenerationResponse], IGeneration):
1406+
"""
1407+
Convert speech to text
1408+
"""
1409+
1410+
# @ApiMember(Description="The audio stream containing the speech to be transcribed")
1411+
# @Required()
1412+
audio: Optional[bytes] = None
1413+
"""
1414+
The audio stream containing the speech to be transcribed
1415+
"""
1416+
1417+
1418+
# @ApiMember(Description="Optional client-provided identifier for the request")
1419+
ref_id: Optional[str] = None
1420+
"""
1421+
Optional client-provided identifier for the request
1422+
"""
1423+
1424+
1425+
# @ApiMember(Description="Tag to identify the request")
1426+
tag: Optional[str] = None
1427+
"""
1428+
Tag to identify the request
1429+
"""
1430+
1431+
1432+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
1433+
@dataclass
1434+
class TestFileUploads(IReturn[TestFileUploadsResponse]):
1435+
id: Optional[int] = None
1436+
ref_id: Optional[str] = None
1437+
1438+
12921439
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
12931440
@dataclass
12941441
class RootPathRoutes:
@@ -1468,6 +1615,14 @@ class Hello(IReturn[HelloResponse]):
14681615
title: Optional[str] = None
14691616

14701617

1618+
# @Route("/hello-secure/{Name}")
1619+
# @ValidateRequest(Validator="IsAuthenticated")
1620+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
1621+
@dataclass
1622+
class HelloSecure(IReturn[HelloResponse]):
1623+
name: Optional[str] = None
1624+
1625+
14711626
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
14721627
@dataclass
14731628
class HelloAnnotated(IReturn[HelloAnnotatedResponse]):
@@ -1497,6 +1652,18 @@ class HelloArray(IReturn[List[ArrayResult]]):
14971652
names: Optional[List[str]] = None
14981653

14991654

1655+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
1656+
@dataclass
1657+
class HelloMap(IReturn[Dict[str, ArrayResult]]):
1658+
names: Optional[List[str]] = None
1659+
1660+
1661+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
1662+
@dataclass
1663+
class HelloQueryResponse(IReturn[QueryResponse[str]]):
1664+
names: Optional[List[str]] = None
1665+
1666+
15001667
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
15011668
@dataclass
15021669
class HelloWithEnum:
@@ -1748,6 +1915,27 @@ class ReturnStream(IReturn[bytes]):
17481915
data: Optional[bytes] = None
17491916

17501917

1918+
# @Route("/return/json")
1919+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
1920+
@dataclass
1921+
class ReturnJson:
1922+
pass
1923+
1924+
1925+
# @Route("/return/json/header")
1926+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
1927+
@dataclass
1928+
class ReturnJsonHeader:
1929+
pass
1930+
1931+
1932+
# @Route("/write/json")
1933+
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
1934+
@dataclass
1935+
class WriteJson:
1936+
pass
1937+
1938+
17511939
# @Route("/Request1", "GET")
17521940
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)
17531941
@dataclass
@@ -1768,6 +1956,7 @@ class GetRequest2(IReturn[List[ReturnedDto]], IGet):
17681956
class SendJson(IReturn[str]):
17691957
id: int = 0
17701958
name: Optional[str] = None
1959+
request_stream: Optional[bytes] = None
17711960

17721961

17731962
# @Route("/sendtext")
@@ -1777,6 +1966,7 @@ class SendText(IReturn[str]):
17771966
id: int = 0
17781967
name: Optional[str] = None
17791968
content_type: Optional[str] = None
1969+
request_stream: Optional[bytes] = None
17801970

17811971

17821972
# @Route("/sendraw")
@@ -1786,6 +1976,7 @@ class SendRaw(IReturn[bytes]):
17861976
id: int = 0
17871977
name: Optional[str] = None
17881978
content_type: Optional[str] = None
1979+
request_stream: Optional[bytes] = None
17891980

17901981

17911982
@dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE)

0 commit comments

Comments
 (0)