payi 0.1.0a24__py3-none-any.whl → 0.1.0a25__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of payi might be problematic. Click here for more details.
- payi/_base_client.py +60 -48
- payi/_client.py +8 -0
- payi/_compat.py +2 -0
- payi/_utils/_utils.py +4 -3
- payi/_version.py +1 -1
- payi/resources/__init__.py +14 -0
- payi/resources/budgets/budgets.py +22 -0
- payi/resources/budgets/tags.py +22 -0
- payi/resources/categories/categories.py +22 -0
- payi/resources/categories/resources.py +22 -0
- payi/resources/evaluations/__init__.py +47 -0
- payi/resources/evaluations/evaluations.py +134 -0
- payi/resources/evaluations/experiences.py +188 -0
- payi/resources/evaluations/requests.py +200 -0
- payi/resources/experiences/experiences.py +22 -0
- payi/resources/experiences/types.py +22 -0
- payi/resources/ingest.py +22 -0
- payi/types/__init__.py +1 -0
- payi/types/evaluations/__init__.py +6 -0
- payi/types/evaluations/experience_create_params.py +14 -0
- payi/types/evaluations/request_create_params.py +14 -0
- payi/types/experiences/experience_type.py +0 -2
- payi/types/shared/__init__.py +3 -0
- payi/types/shared/evaluation_response.py +11 -0
- {payi-0.1.0a24.dist-info → payi-0.1.0a25.dist-info}/METADATA +12 -1
- {payi-0.1.0a24.dist-info → payi-0.1.0a25.dist-info}/RECORD +28 -19
- {payi-0.1.0a24.dist-info → payi-0.1.0a25.dist-info}/WHEEL +0 -0
- {payi-0.1.0a24.dist-info → payi-0.1.0a25.dist-info}/licenses/LICENSE +0 -0
payi/_base_client.py
CHANGED
|
@@ -400,14 +400,7 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
|
|
|
400
400
|
) -> _exceptions.APIStatusError:
|
|
401
401
|
raise NotImplementedError()
|
|
402
402
|
|
|
403
|
-
def
|
|
404
|
-
self,
|
|
405
|
-
remaining_retries: Optional[int],
|
|
406
|
-
options: FinalRequestOptions,
|
|
407
|
-
) -> int:
|
|
408
|
-
return remaining_retries if remaining_retries is not None else options.get_max_retries(self.max_retries)
|
|
409
|
-
|
|
410
|
-
def _build_headers(self, options: FinalRequestOptions) -> httpx.Headers:
|
|
403
|
+
def _build_headers(self, options: FinalRequestOptions, *, retries_taken: int = 0) -> httpx.Headers:
|
|
411
404
|
custom_headers = options.headers or {}
|
|
412
405
|
headers_dict = _merge_mappings(self.default_headers, custom_headers)
|
|
413
406
|
self._validate_headers(headers_dict, custom_headers)
|
|
@@ -419,6 +412,8 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
|
|
|
419
412
|
if idempotency_header and options.method.lower() != "get" and idempotency_header not in headers:
|
|
420
413
|
headers[idempotency_header] = options.idempotency_key or self._idempotency_key()
|
|
421
414
|
|
|
415
|
+
headers.setdefault("x-stainless-retry-count", str(retries_taken))
|
|
416
|
+
|
|
422
417
|
return headers
|
|
423
418
|
|
|
424
419
|
def _prepare_url(self, url: str) -> URL:
|
|
@@ -440,6 +435,8 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
|
|
|
440
435
|
def _build_request(
|
|
441
436
|
self,
|
|
442
437
|
options: FinalRequestOptions,
|
|
438
|
+
*,
|
|
439
|
+
retries_taken: int = 0,
|
|
443
440
|
) -> httpx.Request:
|
|
444
441
|
if log.isEnabledFor(logging.DEBUG):
|
|
445
442
|
log.debug("Request options: %s", model_dump(options, exclude_unset=True))
|
|
@@ -455,7 +452,7 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
|
|
|
455
452
|
else:
|
|
456
453
|
raise RuntimeError(f"Unexpected JSON data type, {type(json_data)}, cannot merge with `extra_body`")
|
|
457
454
|
|
|
458
|
-
headers = self._build_headers(options)
|
|
455
|
+
headers = self._build_headers(options, retries_taken=retries_taken)
|
|
459
456
|
params = _merge_mappings(self.default_query, options.params)
|
|
460
457
|
content_type = headers.get("Content-Type")
|
|
461
458
|
files = options.files
|
|
@@ -489,12 +486,17 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
|
|
|
489
486
|
if not files:
|
|
490
487
|
files = cast(HttpxRequestFiles, ForceMultipartDict())
|
|
491
488
|
|
|
489
|
+
prepared_url = self._prepare_url(options.url)
|
|
490
|
+
if "_" in prepared_url.host:
|
|
491
|
+
# work around https://github.com/encode/httpx/discussions/2880
|
|
492
|
+
kwargs["extensions"] = {"sni_hostname": prepared_url.host.replace("_", "-")}
|
|
493
|
+
|
|
492
494
|
# TODO: report this error to httpx
|
|
493
495
|
return self._client.build_request( # pyright: ignore[reportUnknownMemberType]
|
|
494
496
|
headers=headers,
|
|
495
497
|
timeout=self.timeout if isinstance(options.timeout, NotGiven) else options.timeout,
|
|
496
498
|
method=options.method,
|
|
497
|
-
url=
|
|
499
|
+
url=prepared_url,
|
|
498
500
|
# the `Query` type that we use is incompatible with qs'
|
|
499
501
|
# `Params` type as it needs to be typed as `Mapping[str, object]`
|
|
500
502
|
# so that passing a `TypedDict` doesn't cause an error.
|
|
@@ -933,12 +935,17 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
933
935
|
stream: bool = False,
|
|
934
936
|
stream_cls: type[_StreamT] | None = None,
|
|
935
937
|
) -> ResponseT | _StreamT:
|
|
938
|
+
if remaining_retries is not None:
|
|
939
|
+
retries_taken = options.get_max_retries(self.max_retries) - remaining_retries
|
|
940
|
+
else:
|
|
941
|
+
retries_taken = 0
|
|
942
|
+
|
|
936
943
|
return self._request(
|
|
937
944
|
cast_to=cast_to,
|
|
938
945
|
options=options,
|
|
939
946
|
stream=stream,
|
|
940
947
|
stream_cls=stream_cls,
|
|
941
|
-
|
|
948
|
+
retries_taken=retries_taken,
|
|
942
949
|
)
|
|
943
950
|
|
|
944
951
|
def _request(
|
|
@@ -946,7 +953,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
946
953
|
*,
|
|
947
954
|
cast_to: Type[ResponseT],
|
|
948
955
|
options: FinalRequestOptions,
|
|
949
|
-
|
|
956
|
+
retries_taken: int,
|
|
950
957
|
stream: bool,
|
|
951
958
|
stream_cls: type[_StreamT] | None,
|
|
952
959
|
) -> ResponseT | _StreamT:
|
|
@@ -958,8 +965,8 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
958
965
|
cast_to = self._maybe_override_cast_to(cast_to, options)
|
|
959
966
|
options = self._prepare_options(options)
|
|
960
967
|
|
|
961
|
-
|
|
962
|
-
request = self._build_request(options)
|
|
968
|
+
remaining_retries = options.get_max_retries(self.max_retries) - retries_taken
|
|
969
|
+
request = self._build_request(options, retries_taken=retries_taken)
|
|
963
970
|
self._prepare_request(request)
|
|
964
971
|
|
|
965
972
|
kwargs: HttpxSendArgs = {}
|
|
@@ -977,11 +984,11 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
977
984
|
except httpx.TimeoutException as err:
|
|
978
985
|
log.debug("Encountered httpx.TimeoutException", exc_info=True)
|
|
979
986
|
|
|
980
|
-
if
|
|
987
|
+
if remaining_retries > 0:
|
|
981
988
|
return self._retry_request(
|
|
982
989
|
input_options,
|
|
983
990
|
cast_to,
|
|
984
|
-
|
|
991
|
+
retries_taken=retries_taken,
|
|
985
992
|
stream=stream,
|
|
986
993
|
stream_cls=stream_cls,
|
|
987
994
|
response_headers=None,
|
|
@@ -992,11 +999,11 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
992
999
|
except Exception as err:
|
|
993
1000
|
log.debug("Encountered Exception", exc_info=True)
|
|
994
1001
|
|
|
995
|
-
if
|
|
1002
|
+
if remaining_retries > 0:
|
|
996
1003
|
return self._retry_request(
|
|
997
1004
|
input_options,
|
|
998
1005
|
cast_to,
|
|
999
|
-
|
|
1006
|
+
retries_taken=retries_taken,
|
|
1000
1007
|
stream=stream,
|
|
1001
1008
|
stream_cls=stream_cls,
|
|
1002
1009
|
response_headers=None,
|
|
@@ -1019,13 +1026,13 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
1019
1026
|
except httpx.HTTPStatusError as err: # thrown on 4xx and 5xx status code
|
|
1020
1027
|
log.debug("Encountered httpx.HTTPStatusError", exc_info=True)
|
|
1021
1028
|
|
|
1022
|
-
if
|
|
1029
|
+
if remaining_retries > 0 and self._should_retry(err.response):
|
|
1023
1030
|
err.response.close()
|
|
1024
1031
|
return self._retry_request(
|
|
1025
1032
|
input_options,
|
|
1026
1033
|
cast_to,
|
|
1027
|
-
|
|
1028
|
-
err.response.headers,
|
|
1034
|
+
retries_taken=retries_taken,
|
|
1035
|
+
response_headers=err.response.headers,
|
|
1029
1036
|
stream=stream,
|
|
1030
1037
|
stream_cls=stream_cls,
|
|
1031
1038
|
)
|
|
@@ -1044,26 +1051,26 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
1044
1051
|
response=response,
|
|
1045
1052
|
stream=stream,
|
|
1046
1053
|
stream_cls=stream_cls,
|
|
1047
|
-
retries_taken=
|
|
1054
|
+
retries_taken=retries_taken,
|
|
1048
1055
|
)
|
|
1049
1056
|
|
|
1050
1057
|
def _retry_request(
|
|
1051
1058
|
self,
|
|
1052
1059
|
options: FinalRequestOptions,
|
|
1053
1060
|
cast_to: Type[ResponseT],
|
|
1054
|
-
remaining_retries: int,
|
|
1055
|
-
response_headers: httpx.Headers | None,
|
|
1056
1061
|
*,
|
|
1062
|
+
retries_taken: int,
|
|
1063
|
+
response_headers: httpx.Headers | None,
|
|
1057
1064
|
stream: bool,
|
|
1058
1065
|
stream_cls: type[_StreamT] | None,
|
|
1059
1066
|
) -> ResponseT | _StreamT:
|
|
1060
|
-
|
|
1061
|
-
if
|
|
1067
|
+
remaining_retries = options.get_max_retries(self.max_retries) - retries_taken
|
|
1068
|
+
if remaining_retries == 1:
|
|
1062
1069
|
log.debug("1 retry left")
|
|
1063
1070
|
else:
|
|
1064
|
-
log.debug("%i retries left",
|
|
1071
|
+
log.debug("%i retries left", remaining_retries)
|
|
1065
1072
|
|
|
1066
|
-
timeout = self._calculate_retry_timeout(
|
|
1073
|
+
timeout = self._calculate_retry_timeout(remaining_retries, options, response_headers)
|
|
1067
1074
|
log.info("Retrying request to %s in %f seconds", options.url, timeout)
|
|
1068
1075
|
|
|
1069
1076
|
# In a synchronous context we are blocking the entire thread. Up to the library user to run the client in a
|
|
@@ -1073,7 +1080,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
|
|
|
1073
1080
|
return self._request(
|
|
1074
1081
|
options=options,
|
|
1075
1082
|
cast_to=cast_to,
|
|
1076
|
-
|
|
1083
|
+
retries_taken=retries_taken + 1,
|
|
1077
1084
|
stream=stream,
|
|
1078
1085
|
stream_cls=stream_cls,
|
|
1079
1086
|
)
|
|
@@ -1491,12 +1498,17 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1491
1498
|
stream_cls: type[_AsyncStreamT] | None = None,
|
|
1492
1499
|
remaining_retries: Optional[int] = None,
|
|
1493
1500
|
) -> ResponseT | _AsyncStreamT:
|
|
1501
|
+
if remaining_retries is not None:
|
|
1502
|
+
retries_taken = options.get_max_retries(self.max_retries) - remaining_retries
|
|
1503
|
+
else:
|
|
1504
|
+
retries_taken = 0
|
|
1505
|
+
|
|
1494
1506
|
return await self._request(
|
|
1495
1507
|
cast_to=cast_to,
|
|
1496
1508
|
options=options,
|
|
1497
1509
|
stream=stream,
|
|
1498
1510
|
stream_cls=stream_cls,
|
|
1499
|
-
|
|
1511
|
+
retries_taken=retries_taken,
|
|
1500
1512
|
)
|
|
1501
1513
|
|
|
1502
1514
|
async def _request(
|
|
@@ -1506,7 +1518,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1506
1518
|
*,
|
|
1507
1519
|
stream: bool,
|
|
1508
1520
|
stream_cls: type[_AsyncStreamT] | None,
|
|
1509
|
-
|
|
1521
|
+
retries_taken: int,
|
|
1510
1522
|
) -> ResponseT | _AsyncStreamT:
|
|
1511
1523
|
if self._platform is None:
|
|
1512
1524
|
# `get_platform` can make blocking IO calls so we
|
|
@@ -1521,8 +1533,8 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1521
1533
|
cast_to = self._maybe_override_cast_to(cast_to, options)
|
|
1522
1534
|
options = await self._prepare_options(options)
|
|
1523
1535
|
|
|
1524
|
-
|
|
1525
|
-
request = self._build_request(options)
|
|
1536
|
+
remaining_retries = options.get_max_retries(self.max_retries) - retries_taken
|
|
1537
|
+
request = self._build_request(options, retries_taken=retries_taken)
|
|
1526
1538
|
await self._prepare_request(request)
|
|
1527
1539
|
|
|
1528
1540
|
kwargs: HttpxSendArgs = {}
|
|
@@ -1538,11 +1550,11 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1538
1550
|
except httpx.TimeoutException as err:
|
|
1539
1551
|
log.debug("Encountered httpx.TimeoutException", exc_info=True)
|
|
1540
1552
|
|
|
1541
|
-
if
|
|
1553
|
+
if remaining_retries > 0:
|
|
1542
1554
|
return await self._retry_request(
|
|
1543
1555
|
input_options,
|
|
1544
1556
|
cast_to,
|
|
1545
|
-
|
|
1557
|
+
retries_taken=retries_taken,
|
|
1546
1558
|
stream=stream,
|
|
1547
1559
|
stream_cls=stream_cls,
|
|
1548
1560
|
response_headers=None,
|
|
@@ -1553,11 +1565,11 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1553
1565
|
except Exception as err:
|
|
1554
1566
|
log.debug("Encountered Exception", exc_info=True)
|
|
1555
1567
|
|
|
1556
|
-
if
|
|
1568
|
+
if retries_taken > 0:
|
|
1557
1569
|
return await self._retry_request(
|
|
1558
1570
|
input_options,
|
|
1559
1571
|
cast_to,
|
|
1560
|
-
|
|
1572
|
+
retries_taken=retries_taken,
|
|
1561
1573
|
stream=stream,
|
|
1562
1574
|
stream_cls=stream_cls,
|
|
1563
1575
|
response_headers=None,
|
|
@@ -1575,13 +1587,13 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1575
1587
|
except httpx.HTTPStatusError as err: # thrown on 4xx and 5xx status code
|
|
1576
1588
|
log.debug("Encountered httpx.HTTPStatusError", exc_info=True)
|
|
1577
1589
|
|
|
1578
|
-
if
|
|
1590
|
+
if remaining_retries > 0 and self._should_retry(err.response):
|
|
1579
1591
|
await err.response.aclose()
|
|
1580
1592
|
return await self._retry_request(
|
|
1581
1593
|
input_options,
|
|
1582
1594
|
cast_to,
|
|
1583
|
-
|
|
1584
|
-
err.response.headers,
|
|
1595
|
+
retries_taken=retries_taken,
|
|
1596
|
+
response_headers=err.response.headers,
|
|
1585
1597
|
stream=stream,
|
|
1586
1598
|
stream_cls=stream_cls,
|
|
1587
1599
|
)
|
|
@@ -1600,26 +1612,26 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1600
1612
|
response=response,
|
|
1601
1613
|
stream=stream,
|
|
1602
1614
|
stream_cls=stream_cls,
|
|
1603
|
-
retries_taken=
|
|
1615
|
+
retries_taken=retries_taken,
|
|
1604
1616
|
)
|
|
1605
1617
|
|
|
1606
1618
|
async def _retry_request(
|
|
1607
1619
|
self,
|
|
1608
1620
|
options: FinalRequestOptions,
|
|
1609
1621
|
cast_to: Type[ResponseT],
|
|
1610
|
-
remaining_retries: int,
|
|
1611
|
-
response_headers: httpx.Headers | None,
|
|
1612
1622
|
*,
|
|
1623
|
+
retries_taken: int,
|
|
1624
|
+
response_headers: httpx.Headers | None,
|
|
1613
1625
|
stream: bool,
|
|
1614
1626
|
stream_cls: type[_AsyncStreamT] | None,
|
|
1615
1627
|
) -> ResponseT | _AsyncStreamT:
|
|
1616
|
-
|
|
1617
|
-
if
|
|
1628
|
+
remaining_retries = options.get_max_retries(self.max_retries) - retries_taken
|
|
1629
|
+
if remaining_retries == 1:
|
|
1618
1630
|
log.debug("1 retry left")
|
|
1619
1631
|
else:
|
|
1620
|
-
log.debug("%i retries left",
|
|
1632
|
+
log.debug("%i retries left", remaining_retries)
|
|
1621
1633
|
|
|
1622
|
-
timeout = self._calculate_retry_timeout(
|
|
1634
|
+
timeout = self._calculate_retry_timeout(remaining_retries, options, response_headers)
|
|
1623
1635
|
log.info("Retrying request to %s in %f seconds", options.url, timeout)
|
|
1624
1636
|
|
|
1625
1637
|
await anyio.sleep(timeout)
|
|
@@ -1627,7 +1639,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
|
|
|
1627
1639
|
return await self._request(
|
|
1628
1640
|
options=options,
|
|
1629
1641
|
cast_to=cast_to,
|
|
1630
|
-
|
|
1642
|
+
retries_taken=retries_taken + 1,
|
|
1631
1643
|
stream=stream,
|
|
1632
1644
|
stream_cls=stream_cls,
|
|
1633
1645
|
)
|
payi/_client.py
CHANGED
|
@@ -50,6 +50,7 @@ class Payi(SyncAPIClient):
|
|
|
50
50
|
ingest: resources.IngestResource
|
|
51
51
|
categories: resources.CategoriesResource
|
|
52
52
|
experiences: resources.ExperiencesResource
|
|
53
|
+
evaluations: resources.EvaluationsResource
|
|
53
54
|
with_raw_response: PayiWithRawResponse
|
|
54
55
|
with_streaming_response: PayiWithStreamedResponse
|
|
55
56
|
|
|
@@ -111,6 +112,7 @@ class Payi(SyncAPIClient):
|
|
|
111
112
|
self.ingest = resources.IngestResource(self)
|
|
112
113
|
self.categories = resources.CategoriesResource(self)
|
|
113
114
|
self.experiences = resources.ExperiencesResource(self)
|
|
115
|
+
self.evaluations = resources.EvaluationsResource(self)
|
|
114
116
|
self.with_raw_response = PayiWithRawResponse(self)
|
|
115
117
|
self.with_streaming_response = PayiWithStreamedResponse(self)
|
|
116
118
|
|
|
@@ -224,6 +226,7 @@ class AsyncPayi(AsyncAPIClient):
|
|
|
224
226
|
ingest: resources.AsyncIngestResource
|
|
225
227
|
categories: resources.AsyncCategoriesResource
|
|
226
228
|
experiences: resources.AsyncExperiencesResource
|
|
229
|
+
evaluations: resources.AsyncEvaluationsResource
|
|
227
230
|
with_raw_response: AsyncPayiWithRawResponse
|
|
228
231
|
with_streaming_response: AsyncPayiWithStreamedResponse
|
|
229
232
|
|
|
@@ -285,6 +288,7 @@ class AsyncPayi(AsyncAPIClient):
|
|
|
285
288
|
self.ingest = resources.AsyncIngestResource(self)
|
|
286
289
|
self.categories = resources.AsyncCategoriesResource(self)
|
|
287
290
|
self.experiences = resources.AsyncExperiencesResource(self)
|
|
291
|
+
self.evaluations = resources.AsyncEvaluationsResource(self)
|
|
288
292
|
self.with_raw_response = AsyncPayiWithRawResponse(self)
|
|
289
293
|
self.with_streaming_response = AsyncPayiWithStreamedResponse(self)
|
|
290
294
|
|
|
@@ -399,6 +403,7 @@ class PayiWithRawResponse:
|
|
|
399
403
|
self.ingest = resources.IngestResourceWithRawResponse(client.ingest)
|
|
400
404
|
self.categories = resources.CategoriesResourceWithRawResponse(client.categories)
|
|
401
405
|
self.experiences = resources.ExperiencesResourceWithRawResponse(client.experiences)
|
|
406
|
+
self.evaluations = resources.EvaluationsResourceWithRawResponse(client.evaluations)
|
|
402
407
|
|
|
403
408
|
|
|
404
409
|
class AsyncPayiWithRawResponse:
|
|
@@ -407,6 +412,7 @@ class AsyncPayiWithRawResponse:
|
|
|
407
412
|
self.ingest = resources.AsyncIngestResourceWithRawResponse(client.ingest)
|
|
408
413
|
self.categories = resources.AsyncCategoriesResourceWithRawResponse(client.categories)
|
|
409
414
|
self.experiences = resources.AsyncExperiencesResourceWithRawResponse(client.experiences)
|
|
415
|
+
self.evaluations = resources.AsyncEvaluationsResourceWithRawResponse(client.evaluations)
|
|
410
416
|
|
|
411
417
|
|
|
412
418
|
class PayiWithStreamedResponse:
|
|
@@ -415,6 +421,7 @@ class PayiWithStreamedResponse:
|
|
|
415
421
|
self.ingest = resources.IngestResourceWithStreamingResponse(client.ingest)
|
|
416
422
|
self.categories = resources.CategoriesResourceWithStreamingResponse(client.categories)
|
|
417
423
|
self.experiences = resources.ExperiencesResourceWithStreamingResponse(client.experiences)
|
|
424
|
+
self.evaluations = resources.EvaluationsResourceWithStreamingResponse(client.evaluations)
|
|
418
425
|
|
|
419
426
|
|
|
420
427
|
class AsyncPayiWithStreamedResponse:
|
|
@@ -423,6 +430,7 @@ class AsyncPayiWithStreamedResponse:
|
|
|
423
430
|
self.ingest = resources.AsyncIngestResourceWithStreamingResponse(client.ingest)
|
|
424
431
|
self.categories = resources.AsyncCategoriesResourceWithStreamingResponse(client.categories)
|
|
425
432
|
self.experiences = resources.AsyncExperiencesResourceWithStreamingResponse(client.experiences)
|
|
433
|
+
self.evaluations = resources.AsyncEvaluationsResourceWithStreamingResponse(client.evaluations)
|
|
426
434
|
|
|
427
435
|
|
|
428
436
|
Client = Payi
|
payi/_compat.py
CHANGED
|
@@ -136,12 +136,14 @@ def model_dump(
|
|
|
136
136
|
exclude: IncEx = None,
|
|
137
137
|
exclude_unset: bool = False,
|
|
138
138
|
exclude_defaults: bool = False,
|
|
139
|
+
warnings: bool = True,
|
|
139
140
|
) -> dict[str, Any]:
|
|
140
141
|
if PYDANTIC_V2:
|
|
141
142
|
return model.model_dump(
|
|
142
143
|
exclude=exclude,
|
|
143
144
|
exclude_unset=exclude_unset,
|
|
144
145
|
exclude_defaults=exclude_defaults,
|
|
146
|
+
warnings=warnings,
|
|
145
147
|
)
|
|
146
148
|
return cast(
|
|
147
149
|
"dict[str, Any]",
|
payi/_utils/_utils.py
CHANGED
|
@@ -363,12 +363,13 @@ def file_from_path(path: str) -> FileTypes:
|
|
|
363
363
|
|
|
364
364
|
def get_required_header(headers: HeadersLike, header: str) -> str:
|
|
365
365
|
lower_header = header.lower()
|
|
366
|
-
if
|
|
367
|
-
|
|
366
|
+
if is_mapping_t(headers):
|
|
367
|
+
# mypy doesn't understand the type narrowing here
|
|
368
|
+
for k, v in headers.items(): # type: ignore
|
|
368
369
|
if k.lower() == lower_header and isinstance(v, str):
|
|
369
370
|
return v
|
|
370
371
|
|
|
371
|
-
|
|
372
|
+
# to deal with the case where the header looks like Stainless-Event-Id
|
|
372
373
|
intercaps_header = re.sub(r"([^\w])(\w)", lambda pat: pat.group(1) + pat.group(2).upper(), header.capitalize())
|
|
373
374
|
|
|
374
375
|
for normalized_header in [header, lower_header, header.upper(), intercaps_header]:
|
payi/_version.py
CHANGED
payi/resources/__init__.py
CHANGED
|
@@ -24,6 +24,14 @@ from .categories import (
|
|
|
24
24
|
CategoriesResourceWithStreamingResponse,
|
|
25
25
|
AsyncCategoriesResourceWithStreamingResponse,
|
|
26
26
|
)
|
|
27
|
+
from .evaluations import (
|
|
28
|
+
EvaluationsResource,
|
|
29
|
+
AsyncEvaluationsResource,
|
|
30
|
+
EvaluationsResourceWithRawResponse,
|
|
31
|
+
AsyncEvaluationsResourceWithRawResponse,
|
|
32
|
+
EvaluationsResourceWithStreamingResponse,
|
|
33
|
+
AsyncEvaluationsResourceWithStreamingResponse,
|
|
34
|
+
)
|
|
27
35
|
from .experiences import (
|
|
28
36
|
ExperiencesResource,
|
|
29
37
|
AsyncExperiencesResource,
|
|
@@ -58,4 +66,10 @@ __all__ = [
|
|
|
58
66
|
"AsyncExperiencesResourceWithRawResponse",
|
|
59
67
|
"ExperiencesResourceWithStreamingResponse",
|
|
60
68
|
"AsyncExperiencesResourceWithStreamingResponse",
|
|
69
|
+
"EvaluationsResource",
|
|
70
|
+
"AsyncEvaluationsResource",
|
|
71
|
+
"EvaluationsResourceWithRawResponse",
|
|
72
|
+
"AsyncEvaluationsResourceWithRawResponse",
|
|
73
|
+
"EvaluationsResourceWithStreamingResponse",
|
|
74
|
+
"AsyncEvaluationsResourceWithStreamingResponse",
|
|
61
75
|
]
|
|
@@ -45,10 +45,21 @@ class BudgetsResource(SyncAPIResource):
|
|
|
45
45
|
|
|
46
46
|
@cached_property
|
|
47
47
|
def with_raw_response(self) -> BudgetsResourceWithRawResponse:
|
|
48
|
+
"""
|
|
49
|
+
This property can be used as a prefix for any HTTP method call to return the
|
|
50
|
+
the raw response object instead of the parsed content.
|
|
51
|
+
|
|
52
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#accessing-raw-response-data-eg-headers
|
|
53
|
+
"""
|
|
48
54
|
return BudgetsResourceWithRawResponse(self)
|
|
49
55
|
|
|
50
56
|
@cached_property
|
|
51
57
|
def with_streaming_response(self) -> BudgetsResourceWithStreamingResponse:
|
|
58
|
+
"""
|
|
59
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
60
|
+
|
|
61
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#with_streaming_response
|
|
62
|
+
"""
|
|
52
63
|
return BudgetsResourceWithStreamingResponse(self)
|
|
53
64
|
|
|
54
65
|
def create(
|
|
@@ -297,10 +308,21 @@ class AsyncBudgetsResource(AsyncAPIResource):
|
|
|
297
308
|
|
|
298
309
|
@cached_property
|
|
299
310
|
def with_raw_response(self) -> AsyncBudgetsResourceWithRawResponse:
|
|
311
|
+
"""
|
|
312
|
+
This property can be used as a prefix for any HTTP method call to return the
|
|
313
|
+
the raw response object instead of the parsed content.
|
|
314
|
+
|
|
315
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#accessing-raw-response-data-eg-headers
|
|
316
|
+
"""
|
|
300
317
|
return AsyncBudgetsResourceWithRawResponse(self)
|
|
301
318
|
|
|
302
319
|
@cached_property
|
|
303
320
|
def with_streaming_response(self) -> AsyncBudgetsResourceWithStreamingResponse:
|
|
321
|
+
"""
|
|
322
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
323
|
+
|
|
324
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#with_streaming_response
|
|
325
|
+
"""
|
|
304
326
|
return AsyncBudgetsResourceWithStreamingResponse(self)
|
|
305
327
|
|
|
306
328
|
async def create(
|
payi/resources/budgets/tags.py
CHANGED
|
@@ -33,10 +33,21 @@ __all__ = ["TagsResource", "AsyncTagsResource"]
|
|
|
33
33
|
class TagsResource(SyncAPIResource):
|
|
34
34
|
@cached_property
|
|
35
35
|
def with_raw_response(self) -> TagsResourceWithRawResponse:
|
|
36
|
+
"""
|
|
37
|
+
This property can be used as a prefix for any HTTP method call to return the
|
|
38
|
+
the raw response object instead of the parsed content.
|
|
39
|
+
|
|
40
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#accessing-raw-response-data-eg-headers
|
|
41
|
+
"""
|
|
36
42
|
return TagsResourceWithRawResponse(self)
|
|
37
43
|
|
|
38
44
|
@cached_property
|
|
39
45
|
def with_streaming_response(self) -> TagsResourceWithStreamingResponse:
|
|
46
|
+
"""
|
|
47
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
48
|
+
|
|
49
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#with_streaming_response
|
|
50
|
+
"""
|
|
40
51
|
return TagsResourceWithStreamingResponse(self)
|
|
41
52
|
|
|
42
53
|
def create(
|
|
@@ -214,10 +225,21 @@ class TagsResource(SyncAPIResource):
|
|
|
214
225
|
class AsyncTagsResource(AsyncAPIResource):
|
|
215
226
|
@cached_property
|
|
216
227
|
def with_raw_response(self) -> AsyncTagsResourceWithRawResponse:
|
|
228
|
+
"""
|
|
229
|
+
This property can be used as a prefix for any HTTP method call to return the
|
|
230
|
+
the raw response object instead of the parsed content.
|
|
231
|
+
|
|
232
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#accessing-raw-response-data-eg-headers
|
|
233
|
+
"""
|
|
217
234
|
return AsyncTagsResourceWithRawResponse(self)
|
|
218
235
|
|
|
219
236
|
@cached_property
|
|
220
237
|
def with_streaming_response(self) -> AsyncTagsResourceWithStreamingResponse:
|
|
238
|
+
"""
|
|
239
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
240
|
+
|
|
241
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#with_streaming_response
|
|
242
|
+
"""
|
|
221
243
|
return AsyncTagsResourceWithStreamingResponse(self)
|
|
222
244
|
|
|
223
245
|
async def create(
|
|
@@ -37,10 +37,21 @@ class CategoriesResource(SyncAPIResource):
|
|
|
37
37
|
|
|
38
38
|
@cached_property
|
|
39
39
|
def with_raw_response(self) -> CategoriesResourceWithRawResponse:
|
|
40
|
+
"""
|
|
41
|
+
This property can be used as a prefix for any HTTP method call to return the
|
|
42
|
+
the raw response object instead of the parsed content.
|
|
43
|
+
|
|
44
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#accessing-raw-response-data-eg-headers
|
|
45
|
+
"""
|
|
40
46
|
return CategoriesResourceWithRawResponse(self)
|
|
41
47
|
|
|
42
48
|
@cached_property
|
|
43
49
|
def with_streaming_response(self) -> CategoriesResourceWithStreamingResponse:
|
|
50
|
+
"""
|
|
51
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
52
|
+
|
|
53
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#with_streaming_response
|
|
54
|
+
"""
|
|
44
55
|
return CategoriesResourceWithStreamingResponse(self)
|
|
45
56
|
|
|
46
57
|
def list(
|
|
@@ -172,10 +183,21 @@ class AsyncCategoriesResource(AsyncAPIResource):
|
|
|
172
183
|
|
|
173
184
|
@cached_property
|
|
174
185
|
def with_raw_response(self) -> AsyncCategoriesResourceWithRawResponse:
|
|
186
|
+
"""
|
|
187
|
+
This property can be used as a prefix for any HTTP method call to return the
|
|
188
|
+
the raw response object instead of the parsed content.
|
|
189
|
+
|
|
190
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#accessing-raw-response-data-eg-headers
|
|
191
|
+
"""
|
|
175
192
|
return AsyncCategoriesResourceWithRawResponse(self)
|
|
176
193
|
|
|
177
194
|
@cached_property
|
|
178
195
|
def with_streaming_response(self) -> AsyncCategoriesResourceWithStreamingResponse:
|
|
196
|
+
"""
|
|
197
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
198
|
+
|
|
199
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#with_streaming_response
|
|
200
|
+
"""
|
|
179
201
|
return AsyncCategoriesResourceWithStreamingResponse(self)
|
|
180
202
|
|
|
181
203
|
async def list(
|
|
@@ -31,10 +31,21 @@ __all__ = ["ResourcesResource", "AsyncResourcesResource"]
|
|
|
31
31
|
class ResourcesResource(SyncAPIResource):
|
|
32
32
|
@cached_property
|
|
33
33
|
def with_raw_response(self) -> ResourcesResourceWithRawResponse:
|
|
34
|
+
"""
|
|
35
|
+
This property can be used as a prefix for any HTTP method call to return the
|
|
36
|
+
the raw response object instead of the parsed content.
|
|
37
|
+
|
|
38
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#accessing-raw-response-data-eg-headers
|
|
39
|
+
"""
|
|
34
40
|
return ResourcesResourceWithRawResponse(self)
|
|
35
41
|
|
|
36
42
|
@cached_property
|
|
37
43
|
def with_streaming_response(self) -> ResourcesResourceWithStreamingResponse:
|
|
44
|
+
"""
|
|
45
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
46
|
+
|
|
47
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#with_streaming_response
|
|
48
|
+
"""
|
|
38
49
|
return ResourcesResourceWithStreamingResponse(self)
|
|
39
50
|
|
|
40
51
|
def create(
|
|
@@ -206,10 +217,21 @@ class ResourcesResource(SyncAPIResource):
|
|
|
206
217
|
class AsyncResourcesResource(AsyncAPIResource):
|
|
207
218
|
@cached_property
|
|
208
219
|
def with_raw_response(self) -> AsyncResourcesResourceWithRawResponse:
|
|
220
|
+
"""
|
|
221
|
+
This property can be used as a prefix for any HTTP method call to return the
|
|
222
|
+
the raw response object instead of the parsed content.
|
|
223
|
+
|
|
224
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#accessing-raw-response-data-eg-headers
|
|
225
|
+
"""
|
|
209
226
|
return AsyncResourcesResourceWithRawResponse(self)
|
|
210
227
|
|
|
211
228
|
@cached_property
|
|
212
229
|
def with_streaming_response(self) -> AsyncResourcesResourceWithStreamingResponse:
|
|
230
|
+
"""
|
|
231
|
+
An alternative to `.with_raw_response` that doesn't eagerly read the response body.
|
|
232
|
+
|
|
233
|
+
For more information, see https://www.github.com/Pay-i/pay-i-python#with_streaming_response
|
|
234
|
+
"""
|
|
213
235
|
return AsyncResourcesResourceWithStreamingResponse(self)
|
|
214
236
|
|
|
215
237
|
async def create(
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from .requests import (
|
|
4
|
+
RequestsResource,
|
|
5
|
+
AsyncRequestsResource,
|
|
6
|
+
RequestsResourceWithRawResponse,
|
|
7
|
+
AsyncRequestsResourceWithRawResponse,
|
|
8
|
+
RequestsResourceWithStreamingResponse,
|
|
9
|
+
AsyncRequestsResourceWithStreamingResponse,
|
|
10
|
+
)
|
|
11
|
+
from .evaluations import (
|
|
12
|
+
EvaluationsResource,
|
|
13
|
+
AsyncEvaluationsResource,
|
|
14
|
+
EvaluationsResourceWithRawResponse,
|
|
15
|
+
AsyncEvaluationsResourceWithRawResponse,
|
|
16
|
+
EvaluationsResourceWithStreamingResponse,
|
|
17
|
+
AsyncEvaluationsResourceWithStreamingResponse,
|
|
18
|
+
)
|
|
19
|
+
from .experiences import (
|
|
20
|
+
ExperiencesResource,
|
|
21
|
+
AsyncExperiencesResource,
|
|
22
|
+
ExperiencesResourceWithRawResponse,
|
|
23
|
+
AsyncExperiencesResourceWithRawResponse,
|
|
24
|
+
ExperiencesResourceWithStreamingResponse,
|
|
25
|
+
AsyncExperiencesResourceWithStreamingResponse,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
__all__ = [
|
|
29
|
+
"ExperiencesResource",
|
|
30
|
+
"AsyncExperiencesResource",
|
|
31
|
+
"ExperiencesResourceWithRawResponse",
|
|
32
|
+
"AsyncExperiencesResourceWithRawResponse",
|
|
33
|
+
"ExperiencesResourceWithStreamingResponse",
|
|
34
|
+
"AsyncExperiencesResourceWithStreamingResponse",
|
|
35
|
+
"RequestsResource",
|
|
36
|
+
"AsyncRequestsResource",
|
|
37
|
+
"RequestsResourceWithRawResponse",
|
|
38
|
+
"AsyncRequestsResourceWithRawResponse",
|
|
39
|
+
"RequestsResourceWithStreamingResponse",
|
|
40
|
+
"AsyncRequestsResourceWithStreamingResponse",
|
|
41
|
+
"EvaluationsResource",
|
|
42
|
+
"AsyncEvaluationsResource",
|
|
43
|
+
"EvaluationsResourceWithRawResponse",
|
|
44
|
+
"AsyncEvaluationsResourceWithRawResponse",
|
|
45
|
+
"EvaluationsResourceWithStreamingResponse",
|
|
46
|
+
"AsyncEvaluationsResourceWithStreamingResponse",
|
|
47
|
+
]
|