payi 0.1.0a5__py3-none-any.whl → 0.1.0a7__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/_utils/__init__.py +4 -1
- payi/_utils/_reflection.py +34 -0
- payi/_version.py +1 -1
- payi/lib/helpers.py +32 -0
- payi/resources/ingest.py +5 -5
- payi/types/__init__.py +1 -1
- payi/types/budgets/__init__.py +1 -1
- payi/types/budgets/budget_tags.py +16 -0
- payi/types/budgets/tag_create_response.py +2 -2
- payi/types/budgets/tag_delete_response.py +2 -2
- payi/types/budgets/tag_list_response.py +2 -2
- payi/types/budgets/tag_remove_response.py +2 -2
- payi/types/budgets/tag_update_response.py +2 -2
- payi/types/{successful_proxy_result.py → proxy_result.py} +2 -2
- {payi-0.1.0a5.dist-info → payi-0.1.0a7.dist-info}/METADATA +1 -1
- {payi-0.1.0a5.dist-info → payi-0.1.0a7.dist-info}/RECORD +18 -17
- payi/types/budgets/budget_tags_response.py +0 -18
- {payi-0.1.0a5.dist-info → payi-0.1.0a7.dist-info}/WHEEL +0 -0
- {payi-0.1.0a5.dist-info → payi-0.1.0a7.dist-info}/licenses/LICENSE +0 -0
payi/_utils/__init__.py
CHANGED
|
@@ -49,4 +49,7 @@ from ._transform import (
|
|
|
49
49
|
maybe_transform as maybe_transform,
|
|
50
50
|
async_maybe_transform as async_maybe_transform,
|
|
51
51
|
)
|
|
52
|
-
from ._reflection import
|
|
52
|
+
from ._reflection import (
|
|
53
|
+
function_has_argument as function_has_argument,
|
|
54
|
+
assert_signatures_in_sync as assert_signatures_in_sync,
|
|
55
|
+
)
|
payi/_utils/_reflection.py
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
1
3
|
import inspect
|
|
2
4
|
from typing import Any, Callable
|
|
3
5
|
|
|
@@ -6,3 +8,35 @@ def function_has_argument(func: Callable[..., Any], arg_name: str) -> bool:
|
|
|
6
8
|
"""Returns whether or not the given function has a specific parameter"""
|
|
7
9
|
sig = inspect.signature(func)
|
|
8
10
|
return arg_name in sig.parameters
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def assert_signatures_in_sync(
|
|
14
|
+
source_func: Callable[..., Any],
|
|
15
|
+
check_func: Callable[..., Any],
|
|
16
|
+
*,
|
|
17
|
+
exclude_params: set[str] = set(),
|
|
18
|
+
) -> None:
|
|
19
|
+
"""Ensure that the signature of the second function matches the first."""
|
|
20
|
+
|
|
21
|
+
check_sig = inspect.signature(check_func)
|
|
22
|
+
source_sig = inspect.signature(source_func)
|
|
23
|
+
|
|
24
|
+
errors: list[str] = []
|
|
25
|
+
|
|
26
|
+
for name, source_param in source_sig.parameters.items():
|
|
27
|
+
if name in exclude_params:
|
|
28
|
+
continue
|
|
29
|
+
|
|
30
|
+
custom_param = check_sig.parameters.get(name)
|
|
31
|
+
if not custom_param:
|
|
32
|
+
errors.append(f"the `{name}` param is missing")
|
|
33
|
+
continue
|
|
34
|
+
|
|
35
|
+
if custom_param.annotation != source_param.annotation:
|
|
36
|
+
errors.append(
|
|
37
|
+
f"types for the `{name}` param are do not match; source={repr(source_param.annotation)} checking={repr(source_param.annotation)}"
|
|
38
|
+
)
|
|
39
|
+
continue
|
|
40
|
+
|
|
41
|
+
if errors:
|
|
42
|
+
raise AssertionError(f"{len(errors)} errors encountered when comparing signatures:\n\n" + "\n\n".join(errors))
|
payi/_version.py
CHANGED
payi/lib/helpers.py
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Step 1: Define the new methods outside of the Payi class definition
|
|
2
|
+
from typing import Dict, List, Union
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
def create_budget_header_from_ids(budget_ids: List[str]) -> Dict[str, str]:
|
|
6
|
+
if not isinstance(budget_ids, list): # type: ignore
|
|
7
|
+
raise TypeError("budget_ids must be a list")
|
|
8
|
+
|
|
9
|
+
valid_ids = [id.strip() for id in budget_ids if isinstance(id, str) and id.strip()] # type: ignore
|
|
10
|
+
|
|
11
|
+
return {"xProxy-Budget-IDs": ",".join(valid_ids)} if valid_ids else {}
|
|
12
|
+
|
|
13
|
+
def create_request_header_from_tags(request_tags: List[str]) -> Dict[str, str]:
|
|
14
|
+
if not isinstance(request_tags, list): # type: ignore
|
|
15
|
+
raise TypeError("request_tags must be a list")
|
|
16
|
+
|
|
17
|
+
valid_tags = [tag.strip() for tag in request_tags if isinstance(tag, str) and tag.strip()] # type: ignore
|
|
18
|
+
|
|
19
|
+
return {"xProxy-Request-Tags": ",".join(valid_tags)} if valid_tags else {}
|
|
20
|
+
|
|
21
|
+
def create_headers(
|
|
22
|
+
budget_ids: Union[List[str], None] = None,
|
|
23
|
+
request_tags: Union[List[str], None] = None
|
|
24
|
+
) -> Dict[str, str]:
|
|
25
|
+
headers: Dict[str, str] = {}
|
|
26
|
+
|
|
27
|
+
if budget_ids:
|
|
28
|
+
headers.update(create_budget_header_from_ids(budget_ids))
|
|
29
|
+
if request_tags:
|
|
30
|
+
headers.update(create_request_header_from_tags(request_tags))
|
|
31
|
+
|
|
32
|
+
return headers
|
payi/resources/ingest.py
CHANGED
|
@@ -22,7 +22,7 @@ from .._response import (
|
|
|
22
22
|
from .._base_client import (
|
|
23
23
|
make_request_options,
|
|
24
24
|
)
|
|
25
|
-
from ..types.
|
|
25
|
+
from ..types.proxy_result import ProxyResult
|
|
26
26
|
|
|
27
27
|
__all__ = ["IngestResource", "AsyncIngestResource"]
|
|
28
28
|
|
|
@@ -51,7 +51,7 @@ class IngestResource(SyncAPIResource):
|
|
|
51
51
|
extra_query: Query | None = None,
|
|
52
52
|
extra_body: Body | None = None,
|
|
53
53
|
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
54
|
-
) ->
|
|
54
|
+
) -> ProxyResult:
|
|
55
55
|
"""
|
|
56
56
|
Ingest a request
|
|
57
57
|
|
|
@@ -103,7 +103,7 @@ class IngestResource(SyncAPIResource):
|
|
|
103
103
|
options=make_request_options(
|
|
104
104
|
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
105
105
|
),
|
|
106
|
-
cast_to=
|
|
106
|
+
cast_to=ProxyResult,
|
|
107
107
|
)
|
|
108
108
|
|
|
109
109
|
|
|
@@ -131,7 +131,7 @@ class AsyncIngestResource(AsyncAPIResource):
|
|
|
131
131
|
extra_query: Query | None = None,
|
|
132
132
|
extra_body: Body | None = None,
|
|
133
133
|
timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
|
|
134
|
-
) ->
|
|
134
|
+
) -> ProxyResult:
|
|
135
135
|
"""
|
|
136
136
|
Ingest a request
|
|
137
137
|
|
|
@@ -183,7 +183,7 @@ class AsyncIngestResource(AsyncAPIResource):
|
|
|
183
183
|
options=make_request_options(
|
|
184
184
|
extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
|
|
185
185
|
),
|
|
186
|
-
cast_to=
|
|
186
|
+
cast_to=ProxyResult,
|
|
187
187
|
)
|
|
188
188
|
|
|
189
189
|
|
payi/types/__init__.py
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from .proxy_result import ProxyResult as ProxyResult
|
|
5
6
|
from .budget_response import BudgetResponse as BudgetResponse
|
|
6
7
|
from .default_response import DefaultResponse as DefaultResponse
|
|
7
8
|
from .paged_budget_list import PagedBudgetList as PagedBudgetList
|
|
@@ -10,4 +11,3 @@ from .ingest_units_params import IngestUnitsParams as IngestUnitsParams
|
|
|
10
11
|
from .budget_create_params import BudgetCreateParams as BudgetCreateParams
|
|
11
12
|
from .budget_update_params import BudgetUpdateParams as BudgetUpdateParams
|
|
12
13
|
from .budget_history_response import BudgetHistoryResponse as BudgetHistoryResponse
|
|
13
|
-
from .successful_proxy_result import SuccessfulProxyResult as SuccessfulProxyResult
|
payi/types/budgets/__init__.py
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from .budget_tags import BudgetTags as BudgetTags
|
|
5
6
|
from .tag_create_params import TagCreateParams as TagCreateParams
|
|
6
7
|
from .tag_list_response import TagListResponse as TagListResponse
|
|
7
8
|
from .tag_remove_params import TagRemoveParams as TagRemoveParams
|
|
@@ -10,4 +11,3 @@ from .tag_create_response import TagCreateResponse as TagCreateResponse
|
|
|
10
11
|
from .tag_delete_response import TagDeleteResponse as TagDeleteResponse
|
|
11
12
|
from .tag_remove_response import TagRemoveResponse as TagRemoveResponse
|
|
12
13
|
from .tag_update_response import TagUpdateResponse as TagUpdateResponse
|
|
13
|
-
from .budget_tags_response import BudgetTagsResponse as BudgetTagsResponse
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
+
|
|
3
|
+
from typing import Optional
|
|
4
|
+
from datetime import datetime
|
|
5
|
+
|
|
6
|
+
from ..._models import BaseModel
|
|
7
|
+
|
|
8
|
+
__all__ = ["BudgetTags"]
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class BudgetTags(BaseModel):
|
|
12
|
+
created_on: Optional[datetime] = None
|
|
13
|
+
|
|
14
|
+
tag_id: Optional[int] = None
|
|
15
|
+
|
|
16
|
+
tag_name: Optional[str] = None
|
|
@@ -4,7 +4,7 @@ from typing import Dict, List, Optional
|
|
|
4
4
|
|
|
5
5
|
from .._models import BaseModel
|
|
6
6
|
|
|
7
|
-
__all__ = ["
|
|
7
|
+
__all__ = ["ProxyResult", "Budgets", "Cost", "CostInput", "CostOutput", "CostTotal"]
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class Budgets(BaseModel):
|
|
@@ -33,7 +33,7 @@ class Cost(BaseModel):
|
|
|
33
33
|
total: Optional[CostTotal] = None
|
|
34
34
|
|
|
35
35
|
|
|
36
|
-
class
|
|
36
|
+
class ProxyResult(BaseModel):
|
|
37
37
|
budgets: Optional[Dict[str, Budgets]] = None
|
|
38
38
|
|
|
39
39
|
cost: Optional[Cost] = None
|
|
@@ -11,24 +11,25 @@ payi/_resource.py,sha256=j2jIkTr8OIC8sU6-05nxSaCyj4MaFlbZrwlyg4_xJos,1088
|
|
|
11
11
|
payi/_response.py,sha256=W6pADUzbnMFGnVzGY4M3FkX9uvw8AFSMTPZKPgQ_TV4,28363
|
|
12
12
|
payi/_streaming.py,sha256=Z_wIyo206T6Jqh2rolFg2VXZgX24PahLmpURp0-NssU,10092
|
|
13
13
|
payi/_types.py,sha256=04q-KHD-qZ1xlfwEb_muyIHWmD-nZ-KxnRxA_QEjqNk,6125
|
|
14
|
-
payi/_version.py,sha256
|
|
14
|
+
payi/_version.py,sha256=-vmo3fywvo5AGfodfzLGcUWjnejIqRqvWr3CvKlqw38,164
|
|
15
15
|
payi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
16
|
-
payi/_utils/__init__.py,sha256=
|
|
16
|
+
payi/_utils/__init__.py,sha256=Uzq1-FIih_VUjzdNVWXks0sdC39KBKLMrZoz-_JOjJ4,1988
|
|
17
17
|
payi/_utils/_logs.py,sha256=fmnf5D9TOgkgZKfgYmSa3PiUc3SZgkchn6CzJUeo0SQ,768
|
|
18
18
|
payi/_utils/_proxy.py,sha256=DjcB-BBIRagSbMut2pF_jZavjda9sPvmQCKtVXBhs0I,1910
|
|
19
|
-
payi/_utils/_reflection.py,sha256=
|
|
19
|
+
payi/_utils/_reflection.py,sha256=k20KwLejVHcQCvu4mT2S61NDvbmuXF7KsMDapiocYS0,1364
|
|
20
20
|
payi/_utils/_streams.py,sha256=SMC90diFFecpEg_zgDRVbdR3hSEIgVVij4taD-noMLM,289
|
|
21
21
|
payi/_utils/_sync.py,sha256=9ex9pfOyd8xAF1LxpFx4IkqL8k0vk8srE2Ee-OTMQ0A,2840
|
|
22
22
|
payi/_utils/_transform.py,sha256=NCz3q9_O-vuj60xVe-qzhEQ8uJWlZWJTsM-GwHDccf8,12958
|
|
23
23
|
payi/_utils/_typing.py,sha256=tFbktdpdHCQliwzGsWysgn0P5H0JRdagkZdb_LegGkY,3838
|
|
24
24
|
payi/_utils/_utils.py,sha256=FaZdW0tWil7IERdxUfKt7pVcyXL2aCnR3lo73q66qgI,11447
|
|
25
25
|
payi/lib/.keep,sha256=wuNrz-5SXo3jJaJOJgz4vFHM41YH_g20F5cRQo0vLes,224
|
|
26
|
+
payi/lib/helpers.py,sha256=IdB_pi8dLtVh9b4DG-zasA1i9Yk-5xAayoUTNWBAFpc,1235
|
|
26
27
|
payi/resources/__init__.py,sha256=1p8kzMES8NNDQQoK3TEDE-8vVuQ59xxUjyyblZJBTjw,1015
|
|
27
|
-
payi/resources/ingest.py,sha256=
|
|
28
|
+
payi/resources/ingest.py,sha256=bMWFiUsMbV913HmE61CEGnPcqTydM6OLNQP22Kg1_Eg,7631
|
|
28
29
|
payi/resources/budgets/__init__.py,sha256=w1UhOdDXtUH4A91ME5Tw2nr9bRvPJyJY1YWiVVy7jj0,989
|
|
29
30
|
payi/resources/budgets/budgets.py,sha256=aMu39MrRsVTtNfYwQPMeFK329ouwnHuFXM_vK9Ewj0k,24047
|
|
30
31
|
payi/resources/budgets/tags.py,sha256=jzP0nal287bL2htY1TwDcdFRJyNMm6IdM936O1jCeMo,17850
|
|
31
|
-
payi/types/__init__.py,sha256=
|
|
32
|
+
payi/types/__init__.py,sha256=JMz6gOsVi5Z6cdRl7S-5PTPvRwYaywHJkNYRIZnjrIE,744
|
|
32
33
|
payi/types/budget_create_params.py,sha256=dDQvPOY8lx5oGuumAYQybAx-jPTRupsipVeezBd0l7I,543
|
|
33
34
|
payi/types/budget_history_response.py,sha256=SeOabYz6xQvH4YkJSejbk_dUB49LZy7Y2MXZFPvrYMY,2702
|
|
34
35
|
payi/types/budget_list_params.py,sha256=Win-Spveurf6WarTgCXXsP-yDIxr_HCP7oV_4JbqKOc,674
|
|
@@ -37,18 +38,18 @@ payi/types/budget_update_params.py,sha256=TTH7uu1c1zBK5zYhh2SPuRWEwr1XwDX_8bVS_G
|
|
|
37
38
|
payi/types/default_response.py,sha256=o617LpRsCIZHCZxAc5nVI2JQ3HPGZo4gCDvSDkxkIJ8,270
|
|
38
39
|
payi/types/ingest_units_params.py,sha256=NhC7wRF0lpoKikUPQUAgE1OxpU8dqMxtRZNIbiXkYCA,575
|
|
39
40
|
payi/types/paged_budget_list.py,sha256=HNm834IAAy3eRNz0BjZwcbD9e-I8unWWKWxiSnlijWY,2553
|
|
40
|
-
payi/types/
|
|
41
|
-
payi/types/budgets/__init__.py,sha256=
|
|
42
|
-
payi/types/budgets/
|
|
41
|
+
payi/types/proxy_result.py,sha256=qyROzJvfaJDWHZ8UKxCFmf2HyechYri9UzQDwjqdWgc,873
|
|
42
|
+
payi/types/budgets/__init__.py,sha256=5ByVuqOcgSYLHmGzhuj6-HG48mtQhC6oT5U5tNjQtxk,725
|
|
43
|
+
payi/types/budgets/budget_tags.py,sha256=nOYMf7YgRdTZgGdedJw0UbQ2uupCq9MHlevLJoXxWB4,348
|
|
43
44
|
payi/types/budgets/tag_create_params.py,sha256=_zEYfH2uKF44WenAdedx4TB9Az6RbIoAUMwqW8SAiuc,314
|
|
44
|
-
payi/types/budgets/tag_create_response.py,sha256=
|
|
45
|
-
payi/types/budgets/tag_delete_response.py,sha256=
|
|
46
|
-
payi/types/budgets/tag_list_response.py,sha256=
|
|
45
|
+
payi/types/budgets/tag_create_response.py,sha256=ybpccmzfOnLrgzRNYj_dDQF6NVFwBM7HdakqAU0nQpQ,219
|
|
46
|
+
payi/types/budgets/tag_delete_response.py,sha256=z7LQaTsdjQ3ilWsaKKHr5VLAsqa80tdFmDkEkQC96Ok,219
|
|
47
|
+
payi/types/budgets/tag_list_response.py,sha256=yfdMEFy4Cy0-7EPbaedjBJXwiLnAjmSuFt0PdRIL1ok,215
|
|
47
48
|
payi/types/budgets/tag_remove_params.py,sha256=fNiHex1U11o_B0bfJDkpGARkEf99J-bd-wbzKkZ9mVM,314
|
|
48
|
-
payi/types/budgets/tag_remove_response.py,sha256=
|
|
49
|
+
payi/types/budgets/tag_remove_response.py,sha256=Wt4KwC76y3qxdEqKhXzFkYu2iECYePgXcpidXkuheWQ,219
|
|
49
50
|
payi/types/budgets/tag_update_params.py,sha256=bWWeDqfySt7CZ6HDsZzENREOWGWGWFgnAtyleNMwUsE,314
|
|
50
|
-
payi/types/budgets/tag_update_response.py,sha256=
|
|
51
|
-
payi-0.1.
|
|
52
|
-
payi-0.1.
|
|
53
|
-
payi-0.1.
|
|
54
|
-
payi-0.1.
|
|
51
|
+
payi/types/budgets/tag_update_response.py,sha256=Vlf-zxLZzvmhUodhzF7hiqWcxyjrb7Ri_lSajg8vOPM,219
|
|
52
|
+
payi-0.1.0a7.dist-info/METADATA,sha256=INYWWYKrbqUJ33Qxv3DwK0rYSCXa_GqFLDLQS1wLARM,11872
|
|
53
|
+
payi-0.1.0a7.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
|
|
54
|
+
payi-0.1.0a7.dist-info/licenses/LICENSE,sha256=8vX1pjh3esb6D5DvXAf6NxiBcVyon8aHWNJCxmmHXeY,11334
|
|
55
|
+
payi-0.1.0a7.dist-info/RECORD,,
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
|
|
2
|
-
|
|
3
|
-
from typing import Optional
|
|
4
|
-
from datetime import datetime
|
|
5
|
-
|
|
6
|
-
from pydantic import Field as FieldInfo
|
|
7
|
-
|
|
8
|
-
from ..._models import BaseModel
|
|
9
|
-
|
|
10
|
-
__all__ = ["BudgetTagsResponse"]
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class BudgetTagsResponse(BaseModel):
|
|
14
|
-
created_on: Optional[datetime] = FieldInfo(alias="createdOn", default=None)
|
|
15
|
-
|
|
16
|
-
tag_id: Optional[int] = FieldInfo(alias="tagId", default=None)
|
|
17
|
-
|
|
18
|
-
tag_name: Optional[str] = FieldInfo(alias="tagName", default=None)
|
|
File without changes
|
|
File without changes
|