openai/openai-python

Public

mirrored from https://github.com/openai/openai-pythonAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
e279088e935519bfef005adfcb180e868a25682d

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

tests/test_legacy_response.py

83lines · modecode

1import json
2from typing import cast
3from typing_extensions import Annotated
4
5import httpx
6import pytest
7import pydantic
8
9from openai import OpenAI, BaseModel
10from openai._streaming import Stream
11from openai._base_client import FinalRequestOptions
12from openai._legacy_response import LegacyAPIResponse
13
14
15class PydanticModel(pydantic.BaseModel): ...
16
17
18def test_response_parse_mismatched_basemodel(client: OpenAI) -> None:
19 response = LegacyAPIResponse(
20 raw=httpx.Response(200, content=b"foo"),
21 client=client,
22 stream=False,
23 stream_cls=None,
24 cast_to=str,
25 options=FinalRequestOptions.construct(method="get", url="/foo"),
26 )
27
28 with pytest.raises(
29 TypeError,
30 match="Pydantic models must subclass our base model type, e.g. `from openai import BaseModel`",
31 ):
32 response.parse(to=PydanticModel)
33
34
35def test_response_parse_custom_stream(client: OpenAI) -> None:
36 response = LegacyAPIResponse(
37 raw=httpx.Response(200, content=b"foo"),
38 client=client,
39 stream=True,
40 stream_cls=None,
41 cast_to=str,
42 options=FinalRequestOptions.construct(method="get", url="/foo"),
43 )
44
45 stream = response.parse(to=Stream[int])
46 assert stream._cast_to == int
47
48
49class CustomModel(BaseModel):
50 foo: str
51 bar: int
52
53
54def test_response_parse_custom_model(client: OpenAI) -> None:
55 response = LegacyAPIResponse(
56 raw=httpx.Response(200, content=json.dumps({"foo": "hello!", "bar": 2})),
57 client=client,
58 stream=False,
59 stream_cls=None,
60 cast_to=str,
61 options=FinalRequestOptions.construct(method="get", url="/foo"),
62 )
63
64 obj = response.parse(to=CustomModel)
65 assert obj.foo == "hello!"
66 assert obj.bar == 2
67
68
69def test_response_parse_annotated_type(client: OpenAI) -> None:
70 response = LegacyAPIResponse(
71 raw=httpx.Response(200, content=json.dumps({"foo": "hello!", "bar": 2})),
72 client=client,
73 stream=False,
74 stream_cls=None,
75 cast_to=str,
76 options=FinalRequestOptions.construct(method="get", url="/foo"),
77 )
78
79 obj = response.parse(
80 to=cast("type[CustomModel]", Annotated[CustomModel, "random metadata"]),
81 )
82 assert obj.foo == "hello!"
83 assert obj.bar == 2
84