payi 0.1.0a23__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.

Files changed (34) hide show
  1. payi/_base_client.py +60 -48
  2. payi/_client.py +8 -0
  3. payi/_compat.py +2 -0
  4. payi/_utils/_utils.py +4 -3
  5. payi/_version.py +1 -1
  6. payi/resources/__init__.py +14 -0
  7. payi/resources/budgets/budgets.py +24 -2
  8. payi/resources/budgets/tags.py +22 -0
  9. payi/resources/categories/categories.py +22 -0
  10. payi/resources/categories/resources.py +22 -0
  11. payi/resources/evaluations/__init__.py +47 -0
  12. payi/resources/evaluations/evaluations.py +134 -0
  13. payi/resources/evaluations/experiences.py +188 -0
  14. payi/resources/evaluations/requests.py +200 -0
  15. payi/resources/experiences/experiences.py +32 -10
  16. payi/resources/experiences/types.py +93 -51
  17. payi/resources/ingest.py +22 -0
  18. payi/types/__init__.py +1 -0
  19. payi/types/category_delete_response.py +2 -2
  20. payi/types/evaluations/__init__.py +6 -0
  21. payi/types/evaluations/experience_create_params.py +14 -0
  22. payi/types/evaluations/request_create_params.py +14 -0
  23. payi/types/experiences/__init__.py +1 -0
  24. payi/types/experiences/experience_type.py +0 -2
  25. payi/types/experiences/type_list_params.py +12 -0
  26. payi/types/experiences/type_update_params.py +2 -5
  27. payi/types/requests_data.py +8 -4
  28. payi/types/shared/__init__.py +3 -0
  29. payi/types/shared/evaluation_response.py +11 -0
  30. payi/types/total_cost_data.py +2 -18
  31. {payi-0.1.0a23.dist-info → payi-0.1.0a25.dist-info}/METADATA +12 -1
  32. {payi-0.1.0a23.dist-info → payi-0.1.0a25.dist-info}/RECORD +34 -24
  33. {payi-0.1.0a23.dist-info → payi-0.1.0a25.dist-info}/WHEEL +0 -0
  34. {payi-0.1.0a23.dist-info → payi-0.1.0a25.dist-info}/licenses/LICENSE +0 -0
@@ -2,8 +2,6 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Optional
6
-
7
5
  import httpx
8
6
 
9
7
  from ..._types import NOT_GIVEN, Body, Query, Headers, NotGiven
@@ -20,7 +18,7 @@ from ..._response import (
20
18
  async_to_streamed_response_wrapper,
21
19
  )
22
20
  from ..._base_client import make_request_options
23
- from ...types.experiences import type_create_params, type_update_params
21
+ from ...types.experiences import type_list_params, type_create_params, type_update_params
24
22
  from ...types.experiences.experience_type import ExperienceType
25
23
  from ...types.experiences.type_list_response import TypeListResponse
26
24
 
@@ -30,10 +28,21 @@ __all__ = ["TypesResource", "AsyncTypesResource"]
30
28
  class TypesResource(SyncAPIResource):
31
29
  @cached_property
32
30
  def with_raw_response(self) -> TypesResourceWithRawResponse:
31
+ """
32
+ This property can be used as a prefix for any HTTP method call to return the
33
+ the raw response object instead of the parsed content.
34
+
35
+ For more information, see https://www.github.com/Pay-i/pay-i-python#accessing-raw-response-data-eg-headers
36
+ """
33
37
  return TypesResourceWithRawResponse(self)
34
38
 
35
39
  @cached_property
36
40
  def with_streaming_response(self) -> TypesResourceWithStreamingResponse:
41
+ """
42
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
43
+
44
+ For more information, see https://www.github.com/Pay-i/pay-i-python#with_streaming_response
45
+ """
37
46
  return TypesResourceWithStreamingResponse(self)
38
47
 
39
48
  def create(
@@ -49,7 +58,7 @@ class TypesResource(SyncAPIResource):
49
58
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
50
59
  ) -> ExperienceType:
51
60
  """
52
- Create an Experience Type
61
+ Create an new Experience Type
53
62
 
54
63
  Args:
55
64
  extra_headers: Send extra headers
@@ -77,7 +86,7 @@ class TypesResource(SyncAPIResource):
77
86
 
78
87
  def retrieve(
79
88
  self,
80
- experience_type_id: str,
89
+ experience_name: str,
81
90
  *,
82
91
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
83
92
  # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -98,10 +107,10 @@ class TypesResource(SyncAPIResource):
98
107
 
99
108
  timeout: Override the client-level default timeout for this request, in seconds
100
109
  """
101
- if not experience_type_id:
102
- raise ValueError(f"Expected a non-empty value for `experience_type_id` but received {experience_type_id!r}")
110
+ if not experience_name:
111
+ raise ValueError(f"Expected a non-empty value for `experience_name` but received {experience_name!r}")
103
112
  return self._get(
104
- f"/api/v1/experiences/types/{experience_type_id}",
113
+ f"/api/v1/experiences/types/{experience_name}",
105
114
  options=make_request_options(
106
115
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
107
116
  ),
@@ -110,10 +119,9 @@ class TypesResource(SyncAPIResource):
110
119
 
111
120
  def update(
112
121
  self,
113
- experience_type_id: str,
122
+ experience_name: str,
114
123
  *,
115
- description: Optional[str] | NotGiven = NOT_GIVEN,
116
- name: Optional[str] | NotGiven = NOT_GIVEN,
124
+ description: str,
117
125
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
118
126
  # The extra values given here take precedence over values defined on the client or passed to this method.
119
127
  extra_headers: Headers | None = None,
@@ -133,17 +141,11 @@ class TypesResource(SyncAPIResource):
133
141
 
134
142
  timeout: Override the client-level default timeout for this request, in seconds
135
143
  """
136
- if not experience_type_id:
137
- raise ValueError(f"Expected a non-empty value for `experience_type_id` but received {experience_type_id!r}")
144
+ if not experience_name:
145
+ raise ValueError(f"Expected a non-empty value for `experience_name` but received {experience_name!r}")
138
146
  return self._patch(
139
- f"/api/v1/experiences/types/{experience_type_id}",
140
- body=maybe_transform(
141
- {
142
- "description": description,
143
- "name": name,
144
- },
145
- type_update_params.TypeUpdateParams,
146
- ),
147
+ f"/api/v1/experiences/types/{experience_name}",
148
+ body=maybe_transform({"description": description}, type_update_params.TypeUpdateParams),
147
149
  options=make_request_options(
148
150
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
149
151
  ),
@@ -153,6 +155,7 @@ class TypesResource(SyncAPIResource):
153
155
  def list(
154
156
  self,
155
157
  *,
158
+ name: str | NotGiven = NOT_GIVEN,
156
159
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
157
160
  # The extra values given here take precedence over values defined on the client or passed to this method.
158
161
  extra_headers: Headers | None = None,
@@ -160,18 +163,35 @@ class TypesResource(SyncAPIResource):
160
163
  extra_body: Body | None = None,
161
164
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
162
165
  ) -> TypeListResponse:
163
- """Get all Experience Types"""
166
+ """
167
+ Get all Experience Types
168
+
169
+ Args:
170
+ name: Experience Type Name
171
+
172
+ extra_headers: Send extra headers
173
+
174
+ extra_query: Add additional query parameters to the request
175
+
176
+ extra_body: Add additional JSON properties to the request
177
+
178
+ timeout: Override the client-level default timeout for this request, in seconds
179
+ """
164
180
  return self._get(
165
181
  "/api/v1/experiences/types",
166
182
  options=make_request_options(
167
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
183
+ extra_headers=extra_headers,
184
+ extra_query=extra_query,
185
+ extra_body=extra_body,
186
+ timeout=timeout,
187
+ query=maybe_transform({"name": name}, type_list_params.TypeListParams),
168
188
  ),
169
189
  cast_to=TypeListResponse,
170
190
  )
171
191
 
172
192
  def delete(
173
193
  self,
174
- experience_type_id: str,
194
+ experience_name: str,
175
195
  *,
176
196
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
177
197
  # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -192,10 +212,10 @@ class TypesResource(SyncAPIResource):
192
212
 
193
213
  timeout: Override the client-level default timeout for this request, in seconds
194
214
  """
195
- if not experience_type_id:
196
- raise ValueError(f"Expected a non-empty value for `experience_type_id` but received {experience_type_id!r}")
215
+ if not experience_name:
216
+ raise ValueError(f"Expected a non-empty value for `experience_name` but received {experience_name!r}")
197
217
  return self._delete(
198
- f"/api/v1/experiences/types/{experience_type_id}",
218
+ f"/api/v1/experiences/types/{experience_name}",
199
219
  options=make_request_options(
200
220
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
201
221
  ),
@@ -206,10 +226,21 @@ class TypesResource(SyncAPIResource):
206
226
  class AsyncTypesResource(AsyncAPIResource):
207
227
  @cached_property
208
228
  def with_raw_response(self) -> AsyncTypesResourceWithRawResponse:
229
+ """
230
+ This property can be used as a prefix for any HTTP method call to return the
231
+ the raw response object instead of the parsed content.
232
+
233
+ For more information, see https://www.github.com/Pay-i/pay-i-python#accessing-raw-response-data-eg-headers
234
+ """
209
235
  return AsyncTypesResourceWithRawResponse(self)
210
236
 
211
237
  @cached_property
212
238
  def with_streaming_response(self) -> AsyncTypesResourceWithStreamingResponse:
239
+ """
240
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
241
+
242
+ For more information, see https://www.github.com/Pay-i/pay-i-python#with_streaming_response
243
+ """
213
244
  return AsyncTypesResourceWithStreamingResponse(self)
214
245
 
215
246
  async def create(
@@ -225,7 +256,7 @@ class AsyncTypesResource(AsyncAPIResource):
225
256
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
226
257
  ) -> ExperienceType:
227
258
  """
228
- Create an Experience Type
259
+ Create an new Experience Type
229
260
 
230
261
  Args:
231
262
  extra_headers: Send extra headers
@@ -253,7 +284,7 @@ class AsyncTypesResource(AsyncAPIResource):
253
284
 
254
285
  async def retrieve(
255
286
  self,
256
- experience_type_id: str,
287
+ experience_name: str,
257
288
  *,
258
289
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
259
290
  # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -274,10 +305,10 @@ class AsyncTypesResource(AsyncAPIResource):
274
305
 
275
306
  timeout: Override the client-level default timeout for this request, in seconds
276
307
  """
277
- if not experience_type_id:
278
- raise ValueError(f"Expected a non-empty value for `experience_type_id` but received {experience_type_id!r}")
308
+ if not experience_name:
309
+ raise ValueError(f"Expected a non-empty value for `experience_name` but received {experience_name!r}")
279
310
  return await self._get(
280
- f"/api/v1/experiences/types/{experience_type_id}",
311
+ f"/api/v1/experiences/types/{experience_name}",
281
312
  options=make_request_options(
282
313
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
283
314
  ),
@@ -286,10 +317,9 @@ class AsyncTypesResource(AsyncAPIResource):
286
317
 
287
318
  async def update(
288
319
  self,
289
- experience_type_id: str,
320
+ experience_name: str,
290
321
  *,
291
- description: Optional[str] | NotGiven = NOT_GIVEN,
292
- name: Optional[str] | NotGiven = NOT_GIVEN,
322
+ description: str,
293
323
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
294
324
  # The extra values given here take precedence over values defined on the client or passed to this method.
295
325
  extra_headers: Headers | None = None,
@@ -309,17 +339,11 @@ class AsyncTypesResource(AsyncAPIResource):
309
339
 
310
340
  timeout: Override the client-level default timeout for this request, in seconds
311
341
  """
312
- if not experience_type_id:
313
- raise ValueError(f"Expected a non-empty value for `experience_type_id` but received {experience_type_id!r}")
342
+ if not experience_name:
343
+ raise ValueError(f"Expected a non-empty value for `experience_name` but received {experience_name!r}")
314
344
  return await self._patch(
315
- f"/api/v1/experiences/types/{experience_type_id}",
316
- body=await async_maybe_transform(
317
- {
318
- "description": description,
319
- "name": name,
320
- },
321
- type_update_params.TypeUpdateParams,
322
- ),
345
+ f"/api/v1/experiences/types/{experience_name}",
346
+ body=await async_maybe_transform({"description": description}, type_update_params.TypeUpdateParams),
323
347
  options=make_request_options(
324
348
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
325
349
  ),
@@ -329,6 +353,7 @@ class AsyncTypesResource(AsyncAPIResource):
329
353
  async def list(
330
354
  self,
331
355
  *,
356
+ name: str | NotGiven = NOT_GIVEN,
332
357
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
333
358
  # The extra values given here take precedence over values defined on the client or passed to this method.
334
359
  extra_headers: Headers | None = None,
@@ -336,18 +361,35 @@ class AsyncTypesResource(AsyncAPIResource):
336
361
  extra_body: Body | None = None,
337
362
  timeout: float | httpx.Timeout | None | NotGiven = NOT_GIVEN,
338
363
  ) -> TypeListResponse:
339
- """Get all Experience Types"""
364
+ """
365
+ Get all Experience Types
366
+
367
+ Args:
368
+ name: Experience Type Name
369
+
370
+ extra_headers: Send extra headers
371
+
372
+ extra_query: Add additional query parameters to the request
373
+
374
+ extra_body: Add additional JSON properties to the request
375
+
376
+ timeout: Override the client-level default timeout for this request, in seconds
377
+ """
340
378
  return await self._get(
341
379
  "/api/v1/experiences/types",
342
380
  options=make_request_options(
343
- extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
381
+ extra_headers=extra_headers,
382
+ extra_query=extra_query,
383
+ extra_body=extra_body,
384
+ timeout=timeout,
385
+ query=await async_maybe_transform({"name": name}, type_list_params.TypeListParams),
344
386
  ),
345
387
  cast_to=TypeListResponse,
346
388
  )
347
389
 
348
390
  async def delete(
349
391
  self,
350
- experience_type_id: str,
392
+ experience_name: str,
351
393
  *,
352
394
  # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
353
395
  # The extra values given here take precedence over values defined on the client or passed to this method.
@@ -368,10 +410,10 @@ class AsyncTypesResource(AsyncAPIResource):
368
410
 
369
411
  timeout: Override the client-level default timeout for this request, in seconds
370
412
  """
371
- if not experience_type_id:
372
- raise ValueError(f"Expected a non-empty value for `experience_type_id` but received {experience_type_id!r}")
413
+ if not experience_name:
414
+ raise ValueError(f"Expected a non-empty value for `experience_name` but received {experience_name!r}")
373
415
  return await self._delete(
374
- f"/api/v1/experiences/types/{experience_type_id}",
416
+ f"/api/v1/experiences/types/{experience_name}",
375
417
  options=make_request_options(
376
418
  extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
377
419
  ),
payi/resources/ingest.py CHANGED
@@ -33,10 +33,21 @@ __all__ = ["IngestResource", "AsyncIngestResource"]
33
33
  class IngestResource(SyncAPIResource):
34
34
  @cached_property
35
35
  def with_raw_response(self) -> IngestResourceWithRawResponse:
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 IngestResourceWithRawResponse(self)
37
43
 
38
44
  @cached_property
39
45
  def with_streaming_response(self) -> IngestResourceWithStreamingResponse:
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 IngestResourceWithStreamingResponse(self)
41
52
 
42
53
  def bulk(
@@ -183,10 +194,21 @@ class IngestResource(SyncAPIResource):
183
194
  class AsyncIngestResource(AsyncAPIResource):
184
195
  @cached_property
185
196
  def with_raw_response(self) -> AsyncIngestResourceWithRawResponse:
197
+ """
198
+ This property can be used as a prefix for any HTTP method call to return the
199
+ the raw response object instead of the parsed content.
200
+
201
+ For more information, see https://www.github.com/Pay-i/pay-i-python#accessing-raw-response-data-eg-headers
202
+ """
186
203
  return AsyncIngestResourceWithRawResponse(self)
187
204
 
188
205
  @cached_property
189
206
  def with_streaming_response(self) -> AsyncIngestResourceWithStreamingResponse:
207
+ """
208
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
209
+
210
+ For more information, see https://www.github.com/Pay-i/pay-i-python#with_streaming_response
211
+ """
190
212
  return AsyncIngestResourceWithStreamingResponse(self)
191
213
 
192
214
  async def bulk(
payi/types/__init__.py CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ from .shared import EvaluationResponse as EvaluationResponse
5
6
  from .cost_data import CostData as CostData
6
7
  from .cost_details import CostDetails as CostDetails
7
8
  from .requests_data import RequestsData as RequestsData
@@ -1,10 +1,10 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
- from typing import Dict, List
3
+ from typing import List
4
4
  from typing_extensions import TypeAlias
5
5
 
6
6
  from .category_resource_response import CategoryResourceResponse
7
7
 
8
8
  __all__ = ["CategoryDeleteResponse"]
9
9
 
10
- CategoryDeleteResponse: TypeAlias = Dict[str, List[CategoryResourceResponse]]
10
+ CategoryDeleteResponse: TypeAlias = List[CategoryResourceResponse]
@@ -0,0 +1,6 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from .request_create_params import RequestCreateParams as RequestCreateParams
6
+ from .experience_create_params import ExperienceCreateParams as ExperienceCreateParams
@@ -0,0 +1,14 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ __all__ = ["ExperienceCreateParams"]
9
+
10
+
11
+ class ExperienceCreateParams(TypedDict, total=False):
12
+ evaluation: Required[int]
13
+
14
+ user_id: Optional[str]
@@ -0,0 +1,14 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Optional
6
+ from typing_extensions import Required, TypedDict
7
+
8
+ __all__ = ["RequestCreateParams"]
9
+
10
+
11
+ class RequestCreateParams(TypedDict, total=False):
12
+ evaluation: Required[int]
13
+
14
+ user_id: Optional[str]
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from .experience_type import ExperienceType as ExperienceType
6
+ from .type_list_params import TypeListParams as TypeListParams
6
7
  from .type_create_params import TypeCreateParams as TypeCreateParams
7
8
  from .type_list_response import TypeListResponse as TypeListResponse
8
9
  from .type_update_params import TypeUpdateParams as TypeUpdateParams
@@ -10,8 +10,6 @@ __all__ = ["ExperienceType"]
10
10
  class ExperienceType(BaseModel):
11
11
  description: str
12
12
 
13
- experience_type_id: str
14
-
15
13
  name: str
16
14
 
17
15
  request_id: str
@@ -0,0 +1,12 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing_extensions import TypedDict
6
+
7
+ __all__ = ["TypeListParams"]
8
+
9
+
10
+ class TypeListParams(TypedDict, total=False):
11
+ name: str
12
+ """Experience Type Name"""
@@ -2,13 +2,10 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Optional
6
- from typing_extensions import TypedDict
5
+ from typing_extensions import Required, TypedDict
7
6
 
8
7
  __all__ = ["TypeUpdateParams"]
9
8
 
10
9
 
11
10
  class TypeUpdateParams(TypedDict, total=False):
12
- description: Optional[str]
13
-
14
- name: Optional[str]
11
+ description: Required[str]
@@ -1,6 +1,6 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
- from typing import Optional
3
+
4
4
 
5
5
  from .._models import BaseModel
6
6
 
@@ -10,8 +10,12 @@ __all__ = ["RequestsData"]
10
10
  class RequestsData(BaseModel):
11
11
  blocked: int
12
12
 
13
- error: int
13
+ blocked_external: int
14
+
15
+ exceeded: int
16
+
17
+ failed: int
14
18
 
15
- successful: int
19
+ ok: int
16
20
 
17
- total: Optional[int] = None
21
+ total: int
@@ -0,0 +1,3 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from .evaluation_response import EvaluationResponse as EvaluationResponse
@@ -0,0 +1,11 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+
4
+
5
+ from ..._models import BaseModel
6
+
7
+ __all__ = ["EvaluationResponse"]
8
+
9
+
10
+ class EvaluationResponse(BaseModel):
11
+ request_id: str
@@ -1,31 +1,15 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
- from typing import Optional
3
+
4
4
 
5
5
  from .._models import BaseModel
6
6
  from .cost_data import CostData
7
7
  from .requests_data import RequestsData
8
8
 
9
- __all__ = ["TotalCostData", "BudgetTransactions"]
10
-
11
-
12
- class BudgetTransactions(BaseModel):
13
- blocked: int
14
-
15
- blocked_external: int
16
-
17
- exceeded: int
18
-
19
- successful: int
20
-
21
- error: Optional[int] = None
22
-
23
- total: Optional[int] = None
9
+ __all__ = ["TotalCostData"]
24
10
 
25
11
 
26
12
  class TotalCostData(BaseModel):
27
13
  cost: CostData
28
14
 
29
15
  requests: RequestsData
30
-
31
- budget_transactions: Optional[BudgetTransactions] = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: payi
3
- Version: 0.1.0a23
3
+ Version: 0.1.0a25
4
4
  Summary: The official Python library for the payi API
5
5
  Project-URL: Homepage, https://github.com/Pay-i/pay-i-python
6
6
  Project-URL: Repository, https://github.com/Pay-i/pay-i-python
@@ -356,6 +356,17 @@ We take backwards-compatibility seriously and work hard to ensure you can rely o
356
356
 
357
357
  We are keen for your feedback; please open an [issue](https://www.github.com/Pay-i/pay-i-python/issues) with questions, bugs, or suggestions.
358
358
 
359
+ ### Determining the installed version
360
+
361
+ If you've upgraded to the latest version but aren't seeing any new features you were expecting then your python environment is likely still using an older version.
362
+
363
+ You can determine the version that is being used at runtime with:
364
+
365
+ ```py
366
+ import payi
367
+ print(payi.__version__)
368
+ ```
369
+
359
370
  ## Requirements
360
371
 
361
372
  Python 3.7 or higher.