checkout-intents 0.9.0__py3-none-any.whl → 0.11.0__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.
@@ -9,6 +9,7 @@ import asyncio
9
9
  import inspect
10
10
  import logging
11
11
  import platform
12
+ import warnings
12
13
  import email.utils
13
14
  from types import TracebackType
14
15
  from random import random
@@ -51,9 +52,11 @@ from ._types import (
51
52
  ResponseT,
52
53
  AnyMapping,
53
54
  PostParser,
55
+ BinaryTypes,
54
56
  RequestFiles,
55
57
  HttpxSendArgs,
56
58
  RequestOptions,
59
+ AsyncBinaryTypes,
57
60
  HttpxRequestFiles,
58
61
  ModelBuilderProtocol,
59
62
  not_given,
@@ -477,8 +480,19 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
477
480
  retries_taken: int = 0,
478
481
  ) -> httpx.Request:
479
482
  if log.isEnabledFor(logging.DEBUG):
480
- log.debug("Request options: %s", model_dump(options, exclude_unset=True))
481
-
483
+ log.debug(
484
+ "Request options: %s",
485
+ model_dump(
486
+ options,
487
+ exclude_unset=True,
488
+ # Pydantic v1 can't dump every type we support in content, so we exclude it for now.
489
+ exclude={
490
+ "content",
491
+ }
492
+ if PYDANTIC_V1
493
+ else {},
494
+ ),
495
+ )
482
496
  kwargs: dict[str, Any] = {}
483
497
 
484
498
  json_data = options.json_data
@@ -532,7 +546,13 @@ class BaseClient(Generic[_HttpxClientT, _DefaultStreamT]):
532
546
  is_body_allowed = options.method.lower() != "get"
533
547
 
534
548
  if is_body_allowed:
535
- if isinstance(json_data, bytes):
549
+ if options.content is not None and json_data is not None:
550
+ raise TypeError("Passing both `content` and `json_data` is not supported")
551
+ if options.content is not None and files is not None:
552
+ raise TypeError("Passing both `content` and `files` is not supported")
553
+ if options.content is not None:
554
+ kwargs["content"] = options.content
555
+ elif isinstance(json_data, bytes):
536
556
  kwargs["content"] = json_data
537
557
  else:
538
558
  kwargs["json"] = json_data if is_given(json_data) else None
@@ -1194,6 +1214,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1194
1214
  *,
1195
1215
  cast_to: Type[ResponseT],
1196
1216
  body: Body | None = None,
1217
+ content: BinaryTypes | None = None,
1197
1218
  options: RequestOptions = {},
1198
1219
  files: RequestFiles | None = None,
1199
1220
  stream: Literal[False] = False,
@@ -1206,6 +1227,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1206
1227
  *,
1207
1228
  cast_to: Type[ResponseT],
1208
1229
  body: Body | None = None,
1230
+ content: BinaryTypes | None = None,
1209
1231
  options: RequestOptions = {},
1210
1232
  files: RequestFiles | None = None,
1211
1233
  stream: Literal[True],
@@ -1219,6 +1241,7 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1219
1241
  *,
1220
1242
  cast_to: Type[ResponseT],
1221
1243
  body: Body | None = None,
1244
+ content: BinaryTypes | None = None,
1222
1245
  options: RequestOptions = {},
1223
1246
  files: RequestFiles | None = None,
1224
1247
  stream: bool,
@@ -1231,13 +1254,25 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1231
1254
  *,
1232
1255
  cast_to: Type[ResponseT],
1233
1256
  body: Body | None = None,
1257
+ content: BinaryTypes | None = None,
1234
1258
  options: RequestOptions = {},
1235
1259
  files: RequestFiles | None = None,
1236
1260
  stream: bool = False,
1237
1261
  stream_cls: type[_StreamT] | None = None,
1238
1262
  ) -> ResponseT | _StreamT:
1263
+ if body is not None and content is not None:
1264
+ raise TypeError("Passing both `body` and `content` is not supported")
1265
+ if files is not None and content is not None:
1266
+ raise TypeError("Passing both `files` and `content` is not supported")
1267
+ if isinstance(body, bytes):
1268
+ warnings.warn(
1269
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1270
+ "Please pass raw bytes via the `content` parameter instead.",
1271
+ DeprecationWarning,
1272
+ stacklevel=2,
1273
+ )
1239
1274
  opts = FinalRequestOptions.construct(
1240
- method="post", url=path, json_data=body, files=to_httpx_files(files), **options
1275
+ method="post", url=path, json_data=body, content=content, files=to_httpx_files(files), **options
1241
1276
  )
1242
1277
  return cast(ResponseT, self.request(cast_to, opts, stream=stream, stream_cls=stream_cls))
1243
1278
 
@@ -1247,11 +1282,23 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1247
1282
  *,
1248
1283
  cast_to: Type[ResponseT],
1249
1284
  body: Body | None = None,
1285
+ content: BinaryTypes | None = None,
1250
1286
  files: RequestFiles | None = None,
1251
1287
  options: RequestOptions = {},
1252
1288
  ) -> ResponseT:
1289
+ if body is not None and content is not None:
1290
+ raise TypeError("Passing both `body` and `content` is not supported")
1291
+ if files is not None and content is not None:
1292
+ raise TypeError("Passing both `files` and `content` is not supported")
1293
+ if isinstance(body, bytes):
1294
+ warnings.warn(
1295
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1296
+ "Please pass raw bytes via the `content` parameter instead.",
1297
+ DeprecationWarning,
1298
+ stacklevel=2,
1299
+ )
1253
1300
  opts = FinalRequestOptions.construct(
1254
- method="patch", url=path, json_data=body, files=to_httpx_files(files), **options
1301
+ method="patch", url=path, json_data=body, content=content, files=to_httpx_files(files), **options
1255
1302
  )
1256
1303
  return self.request(cast_to, opts)
1257
1304
 
@@ -1261,11 +1308,23 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1261
1308
  *,
1262
1309
  cast_to: Type[ResponseT],
1263
1310
  body: Body | None = None,
1311
+ content: BinaryTypes | None = None,
1264
1312
  files: RequestFiles | None = None,
1265
1313
  options: RequestOptions = {},
1266
1314
  ) -> ResponseT:
1315
+ if body is not None and content is not None:
1316
+ raise TypeError("Passing both `body` and `content` is not supported")
1317
+ if files is not None and content is not None:
1318
+ raise TypeError("Passing both `files` and `content` is not supported")
1319
+ if isinstance(body, bytes):
1320
+ warnings.warn(
1321
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1322
+ "Please pass raw bytes via the `content` parameter instead.",
1323
+ DeprecationWarning,
1324
+ stacklevel=2,
1325
+ )
1267
1326
  opts = FinalRequestOptions.construct(
1268
- method="put", url=path, json_data=body, files=to_httpx_files(files), **options
1327
+ method="put", url=path, json_data=body, content=content, files=to_httpx_files(files), **options
1269
1328
  )
1270
1329
  return self.request(cast_to, opts)
1271
1330
 
@@ -1275,9 +1334,19 @@ class SyncAPIClient(BaseClient[httpx.Client, Stream[Any]]):
1275
1334
  *,
1276
1335
  cast_to: Type[ResponseT],
1277
1336
  body: Body | None = None,
1337
+ content: BinaryTypes | None = None,
1278
1338
  options: RequestOptions = {},
1279
1339
  ) -> ResponseT:
1280
- opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, **options)
1340
+ if body is not None and content is not None:
1341
+ raise TypeError("Passing both `body` and `content` is not supported")
1342
+ if isinstance(body, bytes):
1343
+ warnings.warn(
1344
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1345
+ "Please pass raw bytes via the `content` parameter instead.",
1346
+ DeprecationWarning,
1347
+ stacklevel=2,
1348
+ )
1349
+ opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, content=content, **options)
1281
1350
  return self.request(cast_to, opts)
1282
1351
 
1283
1352
  def get_api_list(
@@ -1717,6 +1786,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1717
1786
  *,
1718
1787
  cast_to: Type[ResponseT],
1719
1788
  body: Body | None = None,
1789
+ content: AsyncBinaryTypes | None = None,
1720
1790
  files: RequestFiles | None = None,
1721
1791
  options: RequestOptions = {},
1722
1792
  stream: Literal[False] = False,
@@ -1729,6 +1799,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1729
1799
  *,
1730
1800
  cast_to: Type[ResponseT],
1731
1801
  body: Body | None = None,
1802
+ content: AsyncBinaryTypes | None = None,
1732
1803
  files: RequestFiles | None = None,
1733
1804
  options: RequestOptions = {},
1734
1805
  stream: Literal[True],
@@ -1742,6 +1813,7 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1742
1813
  *,
1743
1814
  cast_to: Type[ResponseT],
1744
1815
  body: Body | None = None,
1816
+ content: AsyncBinaryTypes | None = None,
1745
1817
  files: RequestFiles | None = None,
1746
1818
  options: RequestOptions = {},
1747
1819
  stream: bool,
@@ -1754,13 +1826,25 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1754
1826
  *,
1755
1827
  cast_to: Type[ResponseT],
1756
1828
  body: Body | None = None,
1829
+ content: AsyncBinaryTypes | None = None,
1757
1830
  files: RequestFiles | None = None,
1758
1831
  options: RequestOptions = {},
1759
1832
  stream: bool = False,
1760
1833
  stream_cls: type[_AsyncStreamT] | None = None,
1761
1834
  ) -> ResponseT | _AsyncStreamT:
1835
+ if body is not None and content is not None:
1836
+ raise TypeError("Passing both `body` and `content` is not supported")
1837
+ if files is not None and content is not None:
1838
+ raise TypeError("Passing both `files` and `content` is not supported")
1839
+ if isinstance(body, bytes):
1840
+ warnings.warn(
1841
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1842
+ "Please pass raw bytes via the `content` parameter instead.",
1843
+ DeprecationWarning,
1844
+ stacklevel=2,
1845
+ )
1762
1846
  opts = FinalRequestOptions.construct(
1763
- method="post", url=path, json_data=body, files=await async_to_httpx_files(files), **options
1847
+ method="post", url=path, json_data=body, content=content, files=await async_to_httpx_files(files), **options
1764
1848
  )
1765
1849
  return await self.request(cast_to, opts, stream=stream, stream_cls=stream_cls)
1766
1850
 
@@ -1770,11 +1854,28 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1770
1854
  *,
1771
1855
  cast_to: Type[ResponseT],
1772
1856
  body: Body | None = None,
1857
+ content: AsyncBinaryTypes | None = None,
1773
1858
  files: RequestFiles | None = None,
1774
1859
  options: RequestOptions = {},
1775
1860
  ) -> ResponseT:
1861
+ if body is not None and content is not None:
1862
+ raise TypeError("Passing both `body` and `content` is not supported")
1863
+ if files is not None and content is not None:
1864
+ raise TypeError("Passing both `files` and `content` is not supported")
1865
+ if isinstance(body, bytes):
1866
+ warnings.warn(
1867
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1868
+ "Please pass raw bytes via the `content` parameter instead.",
1869
+ DeprecationWarning,
1870
+ stacklevel=2,
1871
+ )
1776
1872
  opts = FinalRequestOptions.construct(
1777
- method="patch", url=path, json_data=body, files=await async_to_httpx_files(files), **options
1873
+ method="patch",
1874
+ url=path,
1875
+ json_data=body,
1876
+ content=content,
1877
+ files=await async_to_httpx_files(files),
1878
+ **options,
1778
1879
  )
1779
1880
  return await self.request(cast_to, opts)
1780
1881
 
@@ -1784,11 +1885,23 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1784
1885
  *,
1785
1886
  cast_to: Type[ResponseT],
1786
1887
  body: Body | None = None,
1888
+ content: AsyncBinaryTypes | None = None,
1787
1889
  files: RequestFiles | None = None,
1788
1890
  options: RequestOptions = {},
1789
1891
  ) -> ResponseT:
1892
+ if body is not None and content is not None:
1893
+ raise TypeError("Passing both `body` and `content` is not supported")
1894
+ if files is not None and content is not None:
1895
+ raise TypeError("Passing both `files` and `content` is not supported")
1896
+ if isinstance(body, bytes):
1897
+ warnings.warn(
1898
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1899
+ "Please pass raw bytes via the `content` parameter instead.",
1900
+ DeprecationWarning,
1901
+ stacklevel=2,
1902
+ )
1790
1903
  opts = FinalRequestOptions.construct(
1791
- method="put", url=path, json_data=body, files=await async_to_httpx_files(files), **options
1904
+ method="put", url=path, json_data=body, content=content, files=await async_to_httpx_files(files), **options
1792
1905
  )
1793
1906
  return await self.request(cast_to, opts)
1794
1907
 
@@ -1798,9 +1911,19 @@ class AsyncAPIClient(BaseClient[httpx.AsyncClient, AsyncStream[Any]]):
1798
1911
  *,
1799
1912
  cast_to: Type[ResponseT],
1800
1913
  body: Body | None = None,
1914
+ content: AsyncBinaryTypes | None = None,
1801
1915
  options: RequestOptions = {},
1802
1916
  ) -> ResponseT:
1803
- opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, **options)
1917
+ if body is not None and content is not None:
1918
+ raise TypeError("Passing both `body` and `content` is not supported")
1919
+ if isinstance(body, bytes):
1920
+ warnings.warn(
1921
+ "Passing raw bytes as `body` is deprecated and will be removed in a future version. "
1922
+ "Please pass raw bytes via the `content` parameter instead.",
1923
+ DeprecationWarning,
1924
+ stacklevel=2,
1925
+ )
1926
+ opts = FinalRequestOptions.construct(method="delete", url=path, json_data=body, content=content, **options)
1804
1927
  return await self.request(cast_to, opts)
1805
1928
 
1806
1929
  def get_api_list(
@@ -31,8 +31,9 @@ from ._base_client import (
31
31
  )
32
32
 
33
33
  if TYPE_CHECKING:
34
- from .resources import brands, checkout_intents
34
+ from .resources import betas, brands, checkout_intents
35
35
  from .resources.brands import BrandsResource, AsyncBrandsResource
36
+ from .resources.betas.betas import BetasResource, AsyncBetasResource
36
37
  from .resources.checkout_intents import CheckoutIntentsResource, AsyncCheckoutIntentsResource
37
38
 
38
39
  __all__ = [
@@ -172,6 +173,12 @@ class CheckoutIntents(SyncAPIClient):
172
173
 
173
174
  return CheckoutIntentsResource(self)
174
175
 
176
+ @cached_property
177
+ def betas(self) -> BetasResource:
178
+ from .resources.betas import BetasResource
179
+
180
+ return BetasResource(self)
181
+
175
182
  @cached_property
176
183
  def brands(self) -> BrandsResource:
177
184
  from .resources.brands import BrandsResource
@@ -395,6 +402,12 @@ class AsyncCheckoutIntents(AsyncAPIClient):
395
402
 
396
403
  return AsyncCheckoutIntentsResource(self)
397
404
 
405
+ @cached_property
406
+ def betas(self) -> AsyncBetasResource:
407
+ from .resources.betas import AsyncBetasResource
408
+
409
+ return AsyncBetasResource(self)
410
+
398
411
  @cached_property
399
412
  def brands(self) -> AsyncBrandsResource:
400
413
  from .resources.brands import AsyncBrandsResource
@@ -528,6 +541,12 @@ class CheckoutIntentsWithRawResponse:
528
541
 
529
542
  return CheckoutIntentsResourceWithRawResponse(self._client.checkout_intents)
530
543
 
544
+ @cached_property
545
+ def betas(self) -> betas.BetasResourceWithRawResponse:
546
+ from .resources.betas import BetasResourceWithRawResponse
547
+
548
+ return BetasResourceWithRawResponse(self._client.betas)
549
+
531
550
  @cached_property
532
551
  def brands(self) -> brands.BrandsResourceWithRawResponse:
533
552
  from .resources.brands import BrandsResourceWithRawResponse
@@ -547,6 +566,12 @@ class AsyncCheckoutIntentsWithRawResponse:
547
566
 
548
567
  return AsyncCheckoutIntentsResourceWithRawResponse(self._client.checkout_intents)
549
568
 
569
+ @cached_property
570
+ def betas(self) -> betas.AsyncBetasResourceWithRawResponse:
571
+ from .resources.betas import AsyncBetasResourceWithRawResponse
572
+
573
+ return AsyncBetasResourceWithRawResponse(self._client.betas)
574
+
550
575
  @cached_property
551
576
  def brands(self) -> brands.AsyncBrandsResourceWithRawResponse:
552
577
  from .resources.brands import AsyncBrandsResourceWithRawResponse
@@ -566,6 +591,12 @@ class CheckoutIntentsWithStreamedResponse:
566
591
 
567
592
  return CheckoutIntentsResourceWithStreamingResponse(self._client.checkout_intents)
568
593
 
594
+ @cached_property
595
+ def betas(self) -> betas.BetasResourceWithStreamingResponse:
596
+ from .resources.betas import BetasResourceWithStreamingResponse
597
+
598
+ return BetasResourceWithStreamingResponse(self._client.betas)
599
+
569
600
  @cached_property
570
601
  def brands(self) -> brands.BrandsResourceWithStreamingResponse:
571
602
  from .resources.brands import BrandsResourceWithStreamingResponse
@@ -585,6 +616,12 @@ class AsyncCheckoutIntentsWithStreamedResponse:
585
616
 
586
617
  return AsyncCheckoutIntentsResourceWithStreamingResponse(self._client.checkout_intents)
587
618
 
619
+ @cached_property
620
+ def betas(self) -> betas.AsyncBetasResourceWithStreamingResponse:
621
+ from .resources.betas import AsyncBetasResourceWithStreamingResponse
622
+
623
+ return AsyncBetasResourceWithStreamingResponse(self._client.betas)
624
+
588
625
  @cached_property
589
626
  def brands(self) -> brands.AsyncBrandsResourceWithStreamingResponse:
590
627
  from .resources.brands import AsyncBrandsResourceWithStreamingResponse
@@ -3,7 +3,20 @@ from __future__ import annotations
3
3
  import os
4
4
  import inspect
5
5
  import weakref
6
- from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, Optional, cast
6
+ from typing import (
7
+ IO,
8
+ TYPE_CHECKING,
9
+ Any,
10
+ Type,
11
+ Union,
12
+ Generic,
13
+ TypeVar,
14
+ Callable,
15
+ Iterable,
16
+ Optional,
17
+ AsyncIterable,
18
+ cast,
19
+ )
7
20
  from datetime import date, datetime
8
21
  from typing_extensions import (
9
22
  List,
@@ -787,6 +800,7 @@ class FinalRequestOptionsInput(TypedDict, total=False):
787
800
  timeout: float | Timeout | None
788
801
  files: HttpxRequestFiles | None
789
802
  idempotency_key: str
803
+ content: Union[bytes, bytearray, IO[bytes], Iterable[bytes], AsyncIterable[bytes], None]
790
804
  json_data: Body
791
805
  extra_json: AnyMapping
792
806
  follow_redirects: bool
@@ -805,6 +819,7 @@ class FinalRequestOptions(pydantic.BaseModel):
805
819
  post_parser: Union[Callable[[Any], Any], NotGiven] = NotGiven()
806
820
  follow_redirects: Union[bool, None] = None
807
821
 
822
+ content: Union[bytes, bytearray, IO[bytes], Iterable[bytes], AsyncIterable[bytes], None] = None
808
823
  # It should be noted that we cannot use `json` here as that would override
809
824
  # a BaseModel method in an incompatible fashion.
810
825
  json_data: Union[Body, None] = None
@@ -13,9 +13,11 @@ from typing import (
13
13
  Mapping,
14
14
  TypeVar,
15
15
  Callable,
16
+ Iterable,
16
17
  Iterator,
17
18
  Optional,
18
19
  Sequence,
20
+ AsyncIterable,
19
21
  )
20
22
  from typing_extensions import (
21
23
  Set,
@@ -56,6 +58,13 @@ if TYPE_CHECKING:
56
58
  else:
57
59
  Base64FileInput = Union[IO[bytes], PathLike]
58
60
  FileContent = Union[IO[bytes], bytes, PathLike] # PathLike is not subscriptable in Python 3.8.
61
+
62
+
63
+ # Used for sending raw binary data / streaming data in request bodies
64
+ # e.g. for file uploads without multipart encoding
65
+ BinaryTypes = Union[bytes, bytearray, IO[bytes], Iterable[bytes]]
66
+ AsyncBinaryTypes = Union[bytes, bytearray, IO[bytes], AsyncIterable[bytes]]
67
+
59
68
  FileTypes = Union[
60
69
  # file (or bytes)
61
70
  FileContent,
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "checkout_intents"
4
- __version__ = "0.9.0" # x-release-please-version
4
+ __version__ = "0.11.0" # x-release-please-version
@@ -1,5 +1,13 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
+ from .betas import (
4
+ BetasResource,
5
+ AsyncBetasResource,
6
+ BetasResourceWithRawResponse,
7
+ AsyncBetasResourceWithRawResponse,
8
+ BetasResourceWithStreamingResponse,
9
+ AsyncBetasResourceWithStreamingResponse,
10
+ )
3
11
  from .brands import (
4
12
  BrandsResource,
5
13
  AsyncBrandsResource,
@@ -24,6 +32,12 @@ __all__ = [
24
32
  "AsyncCheckoutIntentsResourceWithRawResponse",
25
33
  "CheckoutIntentsResourceWithStreamingResponse",
26
34
  "AsyncCheckoutIntentsResourceWithStreamingResponse",
35
+ "BetasResource",
36
+ "AsyncBetasResource",
37
+ "BetasResourceWithRawResponse",
38
+ "AsyncBetasResourceWithRawResponse",
39
+ "BetasResourceWithStreamingResponse",
40
+ "AsyncBetasResourceWithStreamingResponse",
27
41
  "BrandsResource",
28
42
  "AsyncBrandsResource",
29
43
  "BrandsResourceWithRawResponse",
@@ -0,0 +1,33 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from .betas import (
4
+ BetasResource,
5
+ AsyncBetasResource,
6
+ BetasResourceWithRawResponse,
7
+ AsyncBetasResourceWithRawResponse,
8
+ BetasResourceWithStreamingResponse,
9
+ AsyncBetasResourceWithStreamingResponse,
10
+ )
11
+ from .checkout_sessions import (
12
+ CheckoutSessionsResource,
13
+ AsyncCheckoutSessionsResource,
14
+ CheckoutSessionsResourceWithRawResponse,
15
+ AsyncCheckoutSessionsResourceWithRawResponse,
16
+ CheckoutSessionsResourceWithStreamingResponse,
17
+ AsyncCheckoutSessionsResourceWithStreamingResponse,
18
+ )
19
+
20
+ __all__ = [
21
+ "CheckoutSessionsResource",
22
+ "AsyncCheckoutSessionsResource",
23
+ "CheckoutSessionsResourceWithRawResponse",
24
+ "AsyncCheckoutSessionsResourceWithRawResponse",
25
+ "CheckoutSessionsResourceWithStreamingResponse",
26
+ "AsyncCheckoutSessionsResourceWithStreamingResponse",
27
+ "BetasResource",
28
+ "AsyncBetasResource",
29
+ "BetasResourceWithRawResponse",
30
+ "AsyncBetasResourceWithRawResponse",
31
+ "BetasResourceWithStreamingResponse",
32
+ "AsyncBetasResourceWithStreamingResponse",
33
+ ]
@@ -0,0 +1,102 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from ..._compat import cached_property
6
+ from ..._resource import SyncAPIResource, AsyncAPIResource
7
+ from .checkout_sessions import (
8
+ CheckoutSessionsResource,
9
+ AsyncCheckoutSessionsResource,
10
+ CheckoutSessionsResourceWithRawResponse,
11
+ AsyncCheckoutSessionsResourceWithRawResponse,
12
+ CheckoutSessionsResourceWithStreamingResponse,
13
+ AsyncCheckoutSessionsResourceWithStreamingResponse,
14
+ )
15
+
16
+ __all__ = ["BetasResource", "AsyncBetasResource"]
17
+
18
+
19
+ class BetasResource(SyncAPIResource):
20
+ @cached_property
21
+ def checkout_sessions(self) -> CheckoutSessionsResource:
22
+ return CheckoutSessionsResource(self._client)
23
+
24
+ @cached_property
25
+ def with_raw_response(self) -> BetasResourceWithRawResponse:
26
+ """
27
+ This property can be used as a prefix for any HTTP method call to return
28
+ the raw response object instead of the parsed content.
29
+
30
+ For more information, see https://www.github.com/rye-com/checkout-intents-python#accessing-raw-response-data-eg-headers
31
+ """
32
+ return BetasResourceWithRawResponse(self)
33
+
34
+ @cached_property
35
+ def with_streaming_response(self) -> BetasResourceWithStreamingResponse:
36
+ """
37
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
38
+
39
+ For more information, see https://www.github.com/rye-com/checkout-intents-python#with_streaming_response
40
+ """
41
+ return BetasResourceWithStreamingResponse(self)
42
+
43
+
44
+ class AsyncBetasResource(AsyncAPIResource):
45
+ @cached_property
46
+ def checkout_sessions(self) -> AsyncCheckoutSessionsResource:
47
+ return AsyncCheckoutSessionsResource(self._client)
48
+
49
+ @cached_property
50
+ def with_raw_response(self) -> AsyncBetasResourceWithRawResponse:
51
+ """
52
+ This property can be used as a prefix for any HTTP method call to return
53
+ the raw response object instead of the parsed content.
54
+
55
+ For more information, see https://www.github.com/rye-com/checkout-intents-python#accessing-raw-response-data-eg-headers
56
+ """
57
+ return AsyncBetasResourceWithRawResponse(self)
58
+
59
+ @cached_property
60
+ def with_streaming_response(self) -> AsyncBetasResourceWithStreamingResponse:
61
+ """
62
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
63
+
64
+ For more information, see https://www.github.com/rye-com/checkout-intents-python#with_streaming_response
65
+ """
66
+ return AsyncBetasResourceWithStreamingResponse(self)
67
+
68
+
69
+ class BetasResourceWithRawResponse:
70
+ def __init__(self, betas: BetasResource) -> None:
71
+ self._betas = betas
72
+
73
+ @cached_property
74
+ def checkout_sessions(self) -> CheckoutSessionsResourceWithRawResponse:
75
+ return CheckoutSessionsResourceWithRawResponse(self._betas.checkout_sessions)
76
+
77
+
78
+ class AsyncBetasResourceWithRawResponse:
79
+ def __init__(self, betas: AsyncBetasResource) -> None:
80
+ self._betas = betas
81
+
82
+ @cached_property
83
+ def checkout_sessions(self) -> AsyncCheckoutSessionsResourceWithRawResponse:
84
+ return AsyncCheckoutSessionsResourceWithRawResponse(self._betas.checkout_sessions)
85
+
86
+
87
+ class BetasResourceWithStreamingResponse:
88
+ def __init__(self, betas: BetasResource) -> None:
89
+ self._betas = betas
90
+
91
+ @cached_property
92
+ def checkout_sessions(self) -> CheckoutSessionsResourceWithStreamingResponse:
93
+ return CheckoutSessionsResourceWithStreamingResponse(self._betas.checkout_sessions)
94
+
95
+
96
+ class AsyncBetasResourceWithStreamingResponse:
97
+ def __init__(self, betas: AsyncBetasResource) -> None:
98
+ self._betas = betas
99
+
100
+ @cached_property
101
+ def checkout_sessions(self) -> AsyncCheckoutSessionsResourceWithStreamingResponse:
102
+ return AsyncCheckoutSessionsResourceWithStreamingResponse(self._betas.checkout_sessions)
@@ -0,0 +1,208 @@
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 Iterable
6
+
7
+ import httpx
8
+
9
+ from ..._types import Body, Omit, Query, Headers, NotGiven, SequenceNotStr, omit, not_given
10
+ from ..._utils import maybe_transform, async_maybe_transform
11
+ from ..._compat import cached_property
12
+ from ..._resource import SyncAPIResource, AsyncAPIResource
13
+ from ..._response import (
14
+ to_raw_response_wrapper,
15
+ to_streamed_response_wrapper,
16
+ async_to_raw_response_wrapper,
17
+ async_to_streamed_response_wrapper,
18
+ )
19
+ from ...types.betas import checkout_session_create_params
20
+ from ..._base_client import make_request_options
21
+ from ...types.checkout_session import CheckoutSession
22
+ from ...types.variant_selection_param import VariantSelectionParam
23
+
24
+ __all__ = ["CheckoutSessionsResource", "AsyncCheckoutSessionsResource"]
25
+
26
+
27
+ class CheckoutSessionsResource(SyncAPIResource):
28
+ @cached_property
29
+ def with_raw_response(self) -> CheckoutSessionsResourceWithRawResponse:
30
+ """
31
+ This property can be used as a prefix for any HTTP method call to return
32
+ the raw response object instead of the parsed content.
33
+
34
+ For more information, see https://www.github.com/rye-com/checkout-intents-python#accessing-raw-response-data-eg-headers
35
+ """
36
+ return CheckoutSessionsResourceWithRawResponse(self)
37
+
38
+ @cached_property
39
+ def with_streaming_response(self) -> CheckoutSessionsResourceWithStreamingResponse:
40
+ """
41
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
42
+
43
+ For more information, see https://www.github.com/rye-com/checkout-intents-python#with_streaming_response
44
+ """
45
+ return CheckoutSessionsResourceWithStreamingResponse(self)
46
+
47
+ def create(
48
+ self,
49
+ *,
50
+ product_url: str,
51
+ quantity: int,
52
+ buyer: checkout_session_create_params.Buyer | Omit = omit,
53
+ constraints: checkout_session_create_params.Constraints | Omit = omit,
54
+ promo_codes: SequenceNotStr[str] | Omit = omit,
55
+ variant_selections: Iterable[VariantSelectionParam] | Omit = omit,
56
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
57
+ # The extra values given here take precedence over values defined on the client or passed to this method.
58
+ extra_headers: Headers | None = None,
59
+ extra_query: Query | None = None,
60
+ extra_body: Body | None = None,
61
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
62
+ ) -> CheckoutSession:
63
+ """
64
+ Create a new checkout session.
65
+
66
+ Checkout sessions are hosted checkout forms your shoppers can use to complete
67
+ their purchases.
68
+
69
+ Args:
70
+ buyer: Optional buyer information, used to pre-fill the checkout form with the buyer's
71
+ information.
72
+
73
+ extra_headers: Send extra headers
74
+
75
+ extra_query: Add additional query parameters to the request
76
+
77
+ extra_body: Add additional JSON properties to the request
78
+
79
+ timeout: Override the client-level default timeout for this request, in seconds
80
+ """
81
+ return self._post(
82
+ "/api/v1/betas/checkout-sessions",
83
+ body=maybe_transform(
84
+ {
85
+ "product_url": product_url,
86
+ "quantity": quantity,
87
+ "buyer": buyer,
88
+ "constraints": constraints,
89
+ "promo_codes": promo_codes,
90
+ "variant_selections": variant_selections,
91
+ },
92
+ checkout_session_create_params.CheckoutSessionCreateParams,
93
+ ),
94
+ options=make_request_options(
95
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
96
+ ),
97
+ cast_to=CheckoutSession,
98
+ )
99
+
100
+
101
+ class AsyncCheckoutSessionsResource(AsyncAPIResource):
102
+ @cached_property
103
+ def with_raw_response(self) -> AsyncCheckoutSessionsResourceWithRawResponse:
104
+ """
105
+ This property can be used as a prefix for any HTTP method call to return
106
+ the raw response object instead of the parsed content.
107
+
108
+ For more information, see https://www.github.com/rye-com/checkout-intents-python#accessing-raw-response-data-eg-headers
109
+ """
110
+ return AsyncCheckoutSessionsResourceWithRawResponse(self)
111
+
112
+ @cached_property
113
+ def with_streaming_response(self) -> AsyncCheckoutSessionsResourceWithStreamingResponse:
114
+ """
115
+ An alternative to `.with_raw_response` that doesn't eagerly read the response body.
116
+
117
+ For more information, see https://www.github.com/rye-com/checkout-intents-python#with_streaming_response
118
+ """
119
+ return AsyncCheckoutSessionsResourceWithStreamingResponse(self)
120
+
121
+ async def create(
122
+ self,
123
+ *,
124
+ product_url: str,
125
+ quantity: int,
126
+ buyer: checkout_session_create_params.Buyer | Omit = omit,
127
+ constraints: checkout_session_create_params.Constraints | Omit = omit,
128
+ promo_codes: SequenceNotStr[str] | Omit = omit,
129
+ variant_selections: Iterable[VariantSelectionParam] | Omit = omit,
130
+ # Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
131
+ # The extra values given here take precedence over values defined on the client or passed to this method.
132
+ extra_headers: Headers | None = None,
133
+ extra_query: Query | None = None,
134
+ extra_body: Body | None = None,
135
+ timeout: float | httpx.Timeout | None | NotGiven = not_given,
136
+ ) -> CheckoutSession:
137
+ """
138
+ Create a new checkout session.
139
+
140
+ Checkout sessions are hosted checkout forms your shoppers can use to complete
141
+ their purchases.
142
+
143
+ Args:
144
+ buyer: Optional buyer information, used to pre-fill the checkout form with the buyer's
145
+ information.
146
+
147
+ extra_headers: Send extra headers
148
+
149
+ extra_query: Add additional query parameters to the request
150
+
151
+ extra_body: Add additional JSON properties to the request
152
+
153
+ timeout: Override the client-level default timeout for this request, in seconds
154
+ """
155
+ return await self._post(
156
+ "/api/v1/betas/checkout-sessions",
157
+ body=await async_maybe_transform(
158
+ {
159
+ "product_url": product_url,
160
+ "quantity": quantity,
161
+ "buyer": buyer,
162
+ "constraints": constraints,
163
+ "promo_codes": promo_codes,
164
+ "variant_selections": variant_selections,
165
+ },
166
+ checkout_session_create_params.CheckoutSessionCreateParams,
167
+ ),
168
+ options=make_request_options(
169
+ extra_headers=extra_headers, extra_query=extra_query, extra_body=extra_body, timeout=timeout
170
+ ),
171
+ cast_to=CheckoutSession,
172
+ )
173
+
174
+
175
+ class CheckoutSessionsResourceWithRawResponse:
176
+ def __init__(self, checkout_sessions: CheckoutSessionsResource) -> None:
177
+ self._checkout_sessions = checkout_sessions
178
+
179
+ self.create = to_raw_response_wrapper(
180
+ checkout_sessions.create,
181
+ )
182
+
183
+
184
+ class AsyncCheckoutSessionsResourceWithRawResponse:
185
+ def __init__(self, checkout_sessions: AsyncCheckoutSessionsResource) -> None:
186
+ self._checkout_sessions = checkout_sessions
187
+
188
+ self.create = async_to_raw_response_wrapper(
189
+ checkout_sessions.create,
190
+ )
191
+
192
+
193
+ class CheckoutSessionsResourceWithStreamingResponse:
194
+ def __init__(self, checkout_sessions: CheckoutSessionsResource) -> None:
195
+ self._checkout_sessions = checkout_sessions
196
+
197
+ self.create = to_streamed_response_wrapper(
198
+ checkout_sessions.create,
199
+ )
200
+
201
+
202
+ class AsyncCheckoutSessionsResourceWithStreamingResponse:
203
+ def __init__(self, checkout_sessions: AsyncCheckoutSessionsResource) -> None:
204
+ self._checkout_sessions = checkout_sessions
205
+
206
+ self.create = async_to_streamed_response_wrapper(
207
+ checkout_sessions.create,
208
+ )
@@ -70,7 +70,7 @@ class CheckoutIntentsResource(SyncAPIResource):
70
70
  *,
71
71
  buyer: BuyerParam,
72
72
  product_url: str,
73
- quantity: float,
73
+ quantity: int,
74
74
  constraints: checkout_intent_create_params.Constraints | Omit = omit,
75
75
  promo_codes: SequenceNotStr[str] | Omit = omit,
76
76
  variant_selections: Iterable[VariantSelectionParam] | Omit = omit,
@@ -295,7 +295,7 @@ class CheckoutIntentsResource(SyncAPIResource):
295
295
  *,
296
296
  buyer: BuyerParam,
297
297
  product_url: str,
298
- quantity: float,
298
+ quantity: int,
299
299
  constraints: checkout_intent_purchase_params.Constraints | Omit = omit,
300
300
  promo_codes: SequenceNotStr[str] | Omit = omit,
301
301
  variant_selections: Iterable[VariantSelectionParam] | Omit = omit,
@@ -563,7 +563,7 @@ class CheckoutIntentsResource(SyncAPIResource):
563
563
  *,
564
564
  buyer: BuyerParam,
565
565
  product_url: str,
566
- quantity: float,
566
+ quantity: int,
567
567
  variant_selections: Iterable[VariantSelectionParam] | Omit = omit,
568
568
  poll_interval: float = 5.0,
569
569
  max_attempts: int = 120,
@@ -731,7 +731,7 @@ class AsyncCheckoutIntentsResource(AsyncAPIResource):
731
731
  *,
732
732
  buyer: BuyerParam,
733
733
  product_url: str,
734
- quantity: float,
734
+ quantity: int,
735
735
  constraints: checkout_intent_create_params.Constraints | Omit = omit,
736
736
  promo_codes: SequenceNotStr[str] | Omit = omit,
737
737
  variant_selections: Iterable[VariantSelectionParam] | Omit = omit,
@@ -956,7 +956,7 @@ class AsyncCheckoutIntentsResource(AsyncAPIResource):
956
956
  *,
957
957
  buyer: BuyerParam,
958
958
  product_url: str,
959
- quantity: float,
959
+ quantity: int,
960
960
  constraints: checkout_intent_purchase_params.Constraints | Omit = omit,
961
961
  promo_codes: SequenceNotStr[str] | Omit = omit,
962
962
  variant_selections: Iterable[VariantSelectionParam] | Omit = omit,
@@ -1224,7 +1224,7 @@ class AsyncCheckoutIntentsResource(AsyncAPIResource):
1224
1224
  *,
1225
1225
  buyer: BuyerParam,
1226
1226
  product_url: str,
1227
- quantity: float,
1227
+ quantity: int,
1228
1228
  variant_selections: Iterable[VariantSelectionParam] | Omit = omit,
1229
1229
  poll_interval: float = 5.0,
1230
1230
  max_attempts: int = 120,
@@ -8,6 +8,7 @@ from .offer import Offer as Offer
8
8
  from .buyer_param import BuyerParam as BuyerParam
9
9
  from .payment_method import PaymentMethod as PaymentMethod
10
10
  from .checkout_intent import CheckoutIntent as CheckoutIntent
11
+ from .checkout_session import CheckoutSession as CheckoutSession
11
12
  from .variant_selection import VariantSelection as VariantSelection
12
13
  from .base_checkout_intent import BaseCheckoutIntent as BaseCheckoutIntent
13
14
  from .payment_method_param import PaymentMethodParam as PaymentMethodParam
@@ -27,7 +27,7 @@ class BaseCheckoutIntent(BaseModel):
27
27
 
28
28
  product_url: str = FieldInfo(alias="productUrl")
29
29
 
30
- quantity: float
30
+ quantity: int
31
31
 
32
32
  constraints: Optional[Constraints] = None
33
33
 
@@ -0,0 +1,5 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from __future__ import annotations
4
+
5
+ from .checkout_session_create_params import CheckoutSessionCreateParams as CheckoutSessionCreateParams
@@ -0,0 +1,62 @@
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 Iterable
6
+ from typing_extensions import Required, Annotated, TypedDict
7
+
8
+ from ..._types import SequenceNotStr
9
+ from ..._utils import PropertyInfo
10
+ from ..variant_selection_param import VariantSelectionParam
11
+
12
+ __all__ = ["CheckoutSessionCreateParams", "Buyer", "Constraints"]
13
+
14
+
15
+ class CheckoutSessionCreateParams(TypedDict, total=False):
16
+ product_url: Required[Annotated[str, PropertyInfo(alias="productUrl")]]
17
+
18
+ quantity: Required[int]
19
+
20
+ buyer: Buyer
21
+ """
22
+ Optional buyer information, used to pre-fill the checkout form with the buyer's
23
+ information.
24
+ """
25
+
26
+ constraints: Constraints
27
+
28
+ promo_codes: Annotated[SequenceNotStr[str], PropertyInfo(alias="promoCodes")]
29
+
30
+ variant_selections: Annotated[Iterable[VariantSelectionParam], PropertyInfo(alias="variantSelections")]
31
+
32
+
33
+ class Buyer(TypedDict, total=False):
34
+ """
35
+ Optional buyer information, used to pre-fill the checkout form with the buyer's information.
36
+ """
37
+
38
+ address1: str
39
+
40
+ address2: str
41
+
42
+ city: str
43
+
44
+ country: str
45
+
46
+ email: str
47
+
48
+ first_name: Annotated[str, PropertyInfo(alias="firstName")]
49
+
50
+ last_name: Annotated[str, PropertyInfo(alias="lastName")]
51
+
52
+ phone: str
53
+
54
+ postal_code: Annotated[str, PropertyInfo(alias="postalCode")]
55
+
56
+ province: str
57
+
58
+
59
+ class Constraints(TypedDict, total=False):
60
+ max_shipping_price: Annotated[int, PropertyInfo(alias="maxShippingPrice")]
61
+
62
+ max_total_price: Annotated[int, PropertyInfo(alias="maxTotalPrice")]
@@ -18,7 +18,7 @@ class CheckoutIntentCreateParams(TypedDict, total=False):
18
18
 
19
19
  product_url: Required[Annotated[str, PropertyInfo(alias="productUrl")]]
20
20
 
21
- quantity: Required[float]
21
+ quantity: Required[int]
22
22
 
23
23
  constraints: Constraints
24
24
 
@@ -21,7 +21,7 @@ class CheckoutIntentPurchaseParams(TypedDict, total=False):
21
21
 
22
22
  product_url: Required[Annotated[str, PropertyInfo(alias="productUrl")]]
23
23
 
24
- quantity: Required[float]
24
+ quantity: Required[int]
25
25
 
26
26
  constraints: Constraints
27
27
 
@@ -0,0 +1,16 @@
1
+ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
+
3
+ from .._models import BaseModel
4
+
5
+ __all__ = ["CheckoutSession"]
6
+
7
+
8
+ class CheckoutSession(BaseModel):
9
+ """
10
+ A checkout session represents a hosted checkout form that shoppers can use to complete their purchases.
11
+
12
+ Checkout sessions provide a pre-built UI for collecting payment and shipping information, allowing you to quickly integrate checkout functionality without building your own forms.
13
+ """
14
+
15
+ url: str
16
+ """URL to send your user to for checkout. This URL is valid for 4 hours."""
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: checkout-intents
3
- Version: 0.9.0
3
+ Version: 0.11.0
4
4
  Summary: The official Python library for the Checkout Intents API
5
5
  Project-URL: Homepage, https://github.com/rye-com/checkout-intents-python
6
6
  Project-URL: Repository, https://github.com/rye-com/checkout-intents-python
@@ -82,7 +82,7 @@ checkout_intent = client.checkout_intents.purchase(
82
82
  "province": "NY",
83
83
  },
84
84
  payment_method={
85
- "stripe_token": "tok_visa",
85
+ "stripe_token": "tok_1RkrWWHGDlstla3f1Fc7ZrhH",
86
86
  "type": "stripe_token",
87
87
  },
88
88
  product_url="https://rye-protocol.myshopify.com/products/rye-sticker",
@@ -217,7 +217,7 @@ async def main() -> None:
217
217
  "province": "NY",
218
218
  },
219
219
  payment_method={
220
- "stripe_token": "tok_visa",
220
+ "stripe_token": "tok_1RkrWWHGDlstla3f1Fc7ZrhH",
221
221
  "type": "stripe_token",
222
222
  },
223
223
  product_url="https://rye-protocol.myshopify.com/products/rye-sticker",
@@ -270,7 +270,7 @@ async def main() -> None:
270
270
  "province": "NY",
271
271
  },
272
272
  payment_method={
273
- "stripe_token": "tok_visa",
273
+ "stripe_token": "tok_1RkrWWHGDlstla3f1Fc7ZrhH",
274
274
  "type": "stripe_token",
275
275
  },
276
276
  product_url="https://rye-protocol.myshopify.com/products/rye-sticker",
@@ -408,7 +408,7 @@ from checkout_intents import CheckoutIntents
408
408
  client = CheckoutIntents()
409
409
 
410
410
  try:
411
- client.checkout_intents.purchase(
411
+ client.checkout_intents.create(
412
412
  buyer={
413
413
  "address1": "123 Main St",
414
414
  "city": "New York",
@@ -420,10 +420,6 @@ try:
420
420
  "postal_code": "10001",
421
421
  "province": "NY",
422
422
  },
423
- payment_method={
424
- "stripe_token": "tok_visa",
425
- "type": "stripe_token",
426
- },
427
423
  product_url="https://rye-protocol.myshopify.com/products/rye-sticker",
428
424
  quantity=1,
429
425
  )
@@ -489,7 +485,7 @@ client = CheckoutIntents(
489
485
  )
490
486
 
491
487
  # Or, configure per-request:
492
- client.with_options(max_retries=5).checkout_intents.purchase(
488
+ client.with_options(max_retries=5).checkout_intents.create(
493
489
  buyer={
494
490
  "address1": "123 Main St",
495
491
  "city": "New York",
@@ -501,10 +497,6 @@ client.with_options(max_retries=5).checkout_intents.purchase(
501
497
  "postal_code": "10001",
502
498
  "province": "NY",
503
499
  },
504
- payment_method={
505
- "stripe_token": "tok_visa",
506
- "type": "stripe_token",
507
- },
508
500
  product_url="https://rye-protocol.myshopify.com/products/rye-sticker",
509
501
  quantity=1,
510
502
  )
@@ -530,7 +522,7 @@ client = CheckoutIntents(
530
522
  )
531
523
 
532
524
  # Override per-request:
533
- client.with_options(timeout=5.0).checkout_intents.purchase(
525
+ client.with_options(timeout=5.0).checkout_intents.create(
534
526
  buyer={
535
527
  "address1": "123 Main St",
536
528
  "city": "New York",
@@ -542,10 +534,6 @@ client.with_options(timeout=5.0).checkout_intents.purchase(
542
534
  "postal_code": "10001",
543
535
  "province": "NY",
544
536
  },
545
- payment_method={
546
- "stripe_token": "tok_visa",
547
- "type": "stripe_token",
548
- },
549
537
  product_url="https://rye-protocol.myshopify.com/products/rye-sticker",
550
538
  quantity=1,
551
539
  )
@@ -589,7 +577,7 @@ The "raw" Response object can be accessed by prefixing `.with_raw_response.` to
589
577
  from checkout_intents import CheckoutIntents
590
578
 
591
579
  client = CheckoutIntents()
592
- response = client.checkout_intents.with_raw_response.purchase(
580
+ response = client.checkout_intents.with_raw_response.create(
593
581
  buyer={
594
582
  "address1": "123 Main St",
595
583
  "city": "New York",
@@ -601,16 +589,12 @@ response = client.checkout_intents.with_raw_response.purchase(
601
589
  "postal_code": "10001",
602
590
  "province": "NY",
603
591
  },
604
- payment_method={
605
- "stripe_token": "tok_visa",
606
- "type": "stripe_token",
607
- },
608
592
  product_url="https://rye-protocol.myshopify.com/products/rye-sticker",
609
593
  quantity=1,
610
594
  )
611
595
  print(response.headers.get('X-My-Header'))
612
596
 
613
- checkout_intent = response.parse() # get the object that `checkout_intents.purchase()` would have returned
597
+ checkout_intent = response.parse() # get the object that `checkout_intents.create()` would have returned
614
598
  print(checkout_intent)
615
599
  ```
616
600
 
@@ -625,7 +609,7 @@ The above interface eagerly reads the full response body when you make the reque
625
609
  To stream the response body, use `.with_streaming_response` instead, which requires a context manager and only reads the response body once you call `.read()`, `.text()`, `.json()`, `.iter_bytes()`, `.iter_text()`, `.iter_lines()` or `.parse()`. In the async client, these are async methods.
626
610
 
627
611
  ```python
628
- with client.checkout_intents.with_streaming_response.purchase(
612
+ with client.checkout_intents.with_streaming_response.create(
629
613
  buyer={
630
614
  "address1": "123 Main St",
631
615
  "city": "New York",
@@ -637,10 +621,6 @@ with client.checkout_intents.with_streaming_response.purchase(
637
621
  "postal_code": "10001",
638
622
  "province": "NY",
639
623
  },
640
- payment_method={
641
- "stripe_token": "tok_visa",
642
- "type": "stripe_token",
643
- },
644
624
  product_url="https://rye-protocol.myshopify.com/products/rye-sticker",
645
625
  quantity=1,
646
626
  ) as response:
@@ -1,17 +1,17 @@
1
1
  checkout_intents/__init__.py,sha256=5m0_Ktnyya4CJ0vdWZbAv7qZMeR1VnXqN_MJtH3RJTM,2833
2
- checkout_intents/_base_client.py,sha256=ve_gIFHs2dgQ-FduM6A7GxMihxAowCXVcsBYzf_k5_4,67257
3
- checkout_intents/_client.py,sha256=l4Pa_x5hI16yMF3hrMIJTkXEv2i3F61QF7N9OdQVSIA,23941
2
+ checkout_intents/_base_client.py,sha256=Y7hFug5-aMslho0bjwHHlk_gCxYhwuceCHEib1ByJxU,73419
3
+ checkout_intents/_client.py,sha256=tClhspFXBkudspX5xGUhIy8MnG2caIt_5svkHi0qhCk,25244
4
4
  checkout_intents/_compat.py,sha256=DQBVORjFb33zch24jzkhM14msvnzY7mmSmgDLaVFUM8,6562
5
5
  checkout_intents/_constants.py,sha256=S14PFzyN9-I31wiV7SmIlL5Ga0MLHxdvegInGdXH7tM,462
6
6
  checkout_intents/_exceptions.py,sha256=oQn7Y6LzccgRDOtdg20l68bXtgf2tgVNKIrufJPDsuk,4252
7
7
  checkout_intents/_files.py,sha256=KnEzGi_O756MvKyJ4fOCW_u3JhOeWPQ4RsmDvqihDQU,3545
8
- checkout_intents/_models.py,sha256=m6hDet9vdfyY7TuzbLCBYhMPoIN6hddOZp9qDZ-zfVU,31995
8
+ checkout_intents/_models.py,sha256=2mDFEHhVuMWY5cPIhZ9ON1hHDoLVevmuk9P8aezzdAQ,32270
9
9
  checkout_intents/_qs.py,sha256=craIKyvPktJ94cvf9zn8j8ekG9dWJzhWv0ob34lIOv4,4828
10
10
  checkout_intents/_resource.py,sha256=X-eWffEBAgzTZvakLqNUjwgidMKfBFRmCeeOiuko4lg,1154
11
11
  checkout_intents/_response.py,sha256=sLqxWBxzmVqPsdr2x5z6d87h8jb1U-Huvh2YFg-U6nE,28876
12
12
  checkout_intents/_streaming.py,sha256=y8SjBVAw2SDdVczQsP1T3dufnx4040C5fQqz-jGSvmg,10257
13
- checkout_intents/_types.py,sha256=PTRxqWPBW57h6JvfwcVuR42gIMpY4nwSZbqAtv85Ado,7305
14
- checkout_intents/_version.py,sha256=PprqsKyOgvzP25SDKE6EvLaOv0CXi5Iznh9kfIZFQcM,168
13
+ checkout_intents/_types.py,sha256=8crq0wrqM8FR-GJ-nXMwjLlp0QEjfJT5H01fve7mjs4,7604
14
+ checkout_intents/_version.py,sha256=oH4MSe6tCtyuBhXFqKM_xSWWc763yD4crOrrZ6szjVc,169
15
15
  checkout_intents/pagination.py,sha256=VMe3ftq-qqAku2ERRTOz7iZOoMQ_KKp2HIUl_I8oAXE,2908
16
16
  checkout_intents/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
17
17
  checkout_intents/_utils/__init__.py,sha256=7fch0GT9zpNnErbciSpUNa-SjTxxjY6kxHxKMOM4AGs,2305
@@ -27,27 +27,33 @@ checkout_intents/_utils/_transform.py,sha256=NjCzmnfqYrsAikUHQig6N9QfuTVbKipuP3u
27
27
  checkout_intents/_utils/_typing.py,sha256=N_5PPuFNsaygbtA_npZd98SVN1LQQvFTKL6bkWPBZGU,4786
28
28
  checkout_intents/_utils/_utils.py,sha256=g9ftElB09kVT6EVfCIlD_nUfANhDX5_vZO61FDWoIQI,12334
29
29
  checkout_intents/lib/.keep,sha256=wuNrz-5SXo3jJaJOJgz4vFHM41YH_g20F5cRQo0vLes,224
30
- checkout_intents/resources/__init__.py,sha256=sHRW0nwo1GnFBFPoTNohkEbvOk7au-R3MdfVn_yb8Ds,1120
30
+ checkout_intents/resources/__init__.py,sha256=zjz0ozirEslXBkOUq4FwPABJaLruYwIXS7HZ-0am5S4,1557
31
31
  checkout_intents/resources/brands.py,sha256=jJ5Jn2GG3MPkdKSg6_OG89dSQTaSGM9e7lBtovn-ABE,6389
32
- checkout_intents/resources/checkout_intents.py,sha256=CY1YZYBBdntsMmShiQxHN4oMI10Q_dES6IGHw7uBEJ0,60280
33
- checkout_intents/types/__init__.py,sha256=VhZDCRhKlUnKs1h-8UNWj0HUUtJBjHFo16Stxy_kgS4,1298
34
- checkout_intents/types/base_checkout_intent.py,sha256=0lS_qyJd8xz-DIukZEPKkEUl52wPs4CiXMOV7Aulc8M,997
32
+ checkout_intents/resources/checkout_intents.py,sha256=gL9bDh0zexqLhDbae4awEHlxYXm0ztQfhBEcXpJH4DU,60268
33
+ checkout_intents/resources/betas/__init__.py,sha256=DQKAlEq_xKd67cDJhihmsFJowbKXwPwZVi6zbGUykfQ,1120
34
+ checkout_intents/resources/betas/betas.py,sha256=48PbcJQb3RFRJ2pbvr7aAR1KYi64bWBQgfxg6KtcqeU,3892
35
+ checkout_intents/resources/betas/checkout_sessions.py,sha256=OT4o41rvVshRjAGY5hUs2E1K7XyvRv4pVEclafgoSCQ,8219
36
+ checkout_intents/types/__init__.py,sha256=VlReDJoTw4Sps0a4Q5Bfm_ePZnfk61wVBNSgDR-rGVc,1363
37
+ checkout_intents/types/base_checkout_intent.py,sha256=CgRzAWjEQXi1G4uCG6nqVXtwdHvT1BMP9UyEAxDZmTE,995
35
38
  checkout_intents/types/brand_retrieve_response.py,sha256=c8DCAJvHFHcrIOW6onHj5Y51Yba7zyOrRXZuGfqYkBc,561
36
39
  checkout_intents/types/buyer.py,sha256=Ov6mVD-Hjm9A-i9p2dWCXtniLhYpG_6jvy9DReC54YQ,530
37
40
  checkout_intents/types/buyer_param.py,sha256=DAtEoK4VSzv2qDBBlC4RRE4FbHd87pieTOlfRntbjqg,695
38
41
  checkout_intents/types/checkout_intent.py,sha256=LLTGXwIRdZmxaHRcHAYZ6DPWnZurym2yG0pOfmkQ2eg,2726
39
42
  checkout_intents/types/checkout_intent_add_payment_params.py,sha256=s8KKWVM3XainGTLCwdfUjb5vgS80o2_W0wwUwRCFbk0,479
40
43
  checkout_intents/types/checkout_intent_confirm_params.py,sha256=v_fcmuH5GoEwUJLbV7N9BDti63dg8z1nmhpcr4-1qcs,473
41
- checkout_intents/types/checkout_intent_create_params.py,sha256=J5jIPp7PkRxv2-IQdb_-UMd8U1OF-Ub6cOQ5cZLPwSM,1055
44
+ checkout_intents/types/checkout_intent_create_params.py,sha256=rS83w5jDs6_6O4204B-YGXTbpH9rkATKLrgV8KwLnKA,1053
42
45
  checkout_intents/types/checkout_intent_list_params.py,sha256=zc8_xwBHChOcl7bTMSjU7ZbHKIyQGYeUy5UrxeloJj0,521
43
- checkout_intents/types/checkout_intent_purchase_params.py,sha256=GSb1wJVAq0RiJmTNcvhqhIT0gpd7uU2FfhkWgin_QpE,1210
46
+ checkout_intents/types/checkout_intent_purchase_params.py,sha256=TxT3yhTfaJF_vMt6w-oQk3d5fQfN1CtZ18QCiBWY0DU,1208
47
+ checkout_intents/types/checkout_session.py,sha256=e1Ay_2GYO9Ybmz53S0Z0o3R4Et5Gm2kiS5wn1y1Ey3g,589
44
48
  checkout_intents/types/money.py,sha256=-AfFFrfnUy6cAaFykF_gWZQxDGlzA1r_dJzJZRxhUto,328
45
49
  checkout_intents/types/offer.py,sha256=9nGYAlA3tEiRU9lvsktnVl6EWj5dLNr6K9LB8WprckI,985
46
50
  checkout_intents/types/payment_method.py,sha256=-v5-L5RPojm8IDrdAhIMGmhVb89vwqT1jhgb-ZWOG7Q,1069
47
51
  checkout_intents/types/payment_method_param.py,sha256=_yzwZ5nw7bStK4U2-1ybtpjdJz5funCOMN7MALtF0xk,1225
48
52
  checkout_intents/types/variant_selection.py,sha256=y6mlU-qGwDfE77mU-x1GTXkDsmn6vuPpy5lBYXqXCBw,259
49
53
  checkout_intents/types/variant_selection_param.py,sha256=ahwTmDVIUMV8jvpggEo2jDUTIm9xvXbntDxmIZqT2_k,355
50
- checkout_intents-0.9.0.dist-info/METADATA,sha256=YefXWCLHIhjrvpzN5tCqy9A6K4zZ5qnYpKViu6yhO-U,24749
51
- checkout_intents-0.9.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
52
- checkout_intents-0.9.0.dist-info/licenses/LICENSE,sha256=dRDmL6lFnLaphTaman8kAc21qY1IQ_qsAETk1F-b6jY,1056
53
- checkout_intents-0.9.0.dist-info/RECORD,,
54
+ checkout_intents/types/betas/__init__.py,sha256=ZeKE1oI6DbXReHgxvn2kIS3G3_k8MH8a-o22ONpi5dc,226
55
+ checkout_intents/types/betas/checkout_session_create_params.py,sha256=tfxZQyVfwqfwihaJDT2y9bl_6x867up072g_rtsjeqs,1602
56
+ checkout_intents-0.11.0.dist-info/METADATA,sha256=Uz6DACSypO-jn15rWeRJeMOghBfFrPsucDYr5DTBDIs,24302
57
+ checkout_intents-0.11.0.dist-info/WHEEL,sha256=C2FUgwZgiLbznR-k0b_5k3Ai_1aASOXDss3lzCUsUug,87
58
+ checkout_intents-0.11.0.dist-info/licenses/LICENSE,sha256=BnK3I8R5OpT_XsQObbpssF9h8-B0aZaerlZjRgSPNpU,1056
59
+ checkout_intents-0.11.0.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
- Copyright 2025 Checkout Intents
1
+ Copyright 2026 Checkout Intents
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
4
4