moovio_sdk 0.17.2__py3-none-any.whl → 0.17.4__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 moovio_sdk might be problematic. Click here for more details.

Files changed (27) hide show
  1. moovio_sdk/_version.py +2 -2
  2. moovio_sdk/models/components/__init__.py +78 -0
  3. moovio_sdk/models/components/amountdecimalvalidationerror.py +18 -0
  4. moovio_sdk/models/components/assignproductimage.py +16 -0
  5. moovio_sdk/models/components/assignproductimagevalidationerror.py +15 -0
  6. moovio_sdk/models/components/createproductoption.py +46 -0
  7. moovio_sdk/models/components/createproductoptiongroup.py +52 -0
  8. moovio_sdk/models/components/product.py +77 -0
  9. moovio_sdk/models/components/productimagemetadata.py +27 -0
  10. moovio_sdk/models/components/productoption.py +50 -0
  11. moovio_sdk/models/components/productoptiongroup.py +56 -0
  12. moovio_sdk/models/components/productoptiongroupvalidationerror.py +31 -0
  13. moovio_sdk/models/components/productoptionvalidationerror.py +34 -0
  14. moovio_sdk/models/components/productrequest.py +57 -0
  15. moovio_sdk/models/errors/__init__.py +8 -0
  16. moovio_sdk/models/errors/productrequestvalidationerror.py +58 -0
  17. moovio_sdk/models/operations/__init__.py +100 -0
  18. moovio_sdk/models/operations/createproduct.py +78 -0
  19. moovio_sdk/models/operations/disableproduct.py +67 -0
  20. moovio_sdk/models/operations/getproduct.py +71 -0
  21. moovio_sdk/models/operations/listproducts.py +81 -0
  22. moovio_sdk/models/operations/updateproduct.py +85 -0
  23. moovio_sdk/products.py +1232 -0
  24. moovio_sdk/sdk.py +3 -0
  25. {moovio_sdk-0.17.2.dist-info → moovio_sdk-0.17.4.dist-info}/METADATA +56 -45
  26. {moovio_sdk-0.17.2.dist-info → moovio_sdk-0.17.4.dist-info}/RECORD +27 -8
  27. {moovio_sdk-0.17.2.dist-info → moovio_sdk-0.17.4.dist-info}/WHEEL +0 -0
moovio_sdk/_version.py CHANGED
@@ -3,10 +3,10 @@
3
3
  import importlib.metadata
4
4
 
5
5
  __title__: str = "moovio_sdk"
6
- __version__: str = "0.17.2"
6
+ __version__: str = "0.17.4"
7
7
  __openapi_doc_version__: str = "latest"
8
8
  __gen_version__: str = "2.723.11"
9
- __user_agent__: str = "speakeasy-sdk/python 0.17.2 2.723.11 latest moovio_sdk"
9
+ __user_agent__: str = "speakeasy-sdk/python 0.17.4 2.723.11 latest moovio_sdk"
10
10
 
11
11
  try:
12
12
  if __package__ is not None:
@@ -69,6 +69,10 @@ if TYPE_CHECKING:
69
69
  from .adjustment import Adjustment, AdjustmentTypedDict
70
70
  from .amount import Amount, AmountTypedDict
71
71
  from .amountdecimal import AmountDecimal, AmountDecimalTypedDict
72
+ from .amountdecimalvalidationerror import (
73
+ AmountDecimalValidationError,
74
+ AmountDecimalValidationErrorTypedDict,
75
+ )
72
76
  from .amountupdate import AmountUpdate, AmountUpdateTypedDict
73
77
  from .amountvalidationerror import (
74
78
  AmountValidationError,
@@ -87,6 +91,11 @@ if TYPE_CHECKING:
87
91
  )
88
92
  from .applepayresponse import ApplePayResponse, ApplePayResponseTypedDict
89
93
  from .applicationscope import ApplicationScope
94
+ from .assignproductimage import AssignProductImage, AssignProductImageTypedDict
95
+ from .assignproductimagevalidationerror import (
96
+ AssignProductImageValidationError,
97
+ AssignProductImageValidationErrorTypedDict,
98
+ )
90
99
  from .asynccreatedrefund import AsyncCreatedRefund, AsyncCreatedRefundTypedDict
91
100
  from .asynctransfer import AsyncTransfer, AsyncTransferTypedDict
92
101
  from .authorizeduser import AuthorizedUser, AuthorizedUserTypedDict
@@ -330,6 +339,11 @@ if TYPE_CHECKING:
330
339
  CreateIndividualProfileTypedDict,
331
340
  )
332
341
  from .createpaymentlink import CreatePaymentLink, CreatePaymentLinkTypedDict
342
+ from .createproductoption import CreateProductOption, CreateProductOptionTypedDict
343
+ from .createproductoptiongroup import (
344
+ CreateProductOptionGroup,
345
+ CreateProductOptionGroupTypedDict,
346
+ )
333
347
  from .createprofile import CreateProfile, CreateProfileTypedDict
334
348
  from .createprofileerror import CreateProfileError, CreateProfileErrorTypedDict
335
349
  from .createrefund import CreateRefund, CreateRefundTypedDict
@@ -745,6 +759,22 @@ if TYPE_CHECKING:
745
759
  from .plaidpayload import PlaidPayload, PlaidPayloadTypedDict
746
760
  from .platformfees import PlatformFees, PlatformFeesTypedDict
747
761
  from .primaryregulator import PrimaryRegulator
762
+ from .product import Product, ProductTypedDict
763
+ from .productimagemetadata import (
764
+ ProductImageMetadata,
765
+ ProductImageMetadataTypedDict,
766
+ )
767
+ from .productoption import ProductOption, ProductOptionTypedDict
768
+ from .productoptiongroup import ProductOptionGroup, ProductOptionGroupTypedDict
769
+ from .productoptiongroupvalidationerror import (
770
+ ProductOptionGroupValidationError,
771
+ ProductOptionGroupValidationErrorTypedDict,
772
+ )
773
+ from .productoptionvalidationerror import (
774
+ ProductOptionValidationError,
775
+ ProductOptionValidationErrorTypedDict,
776
+ )
777
+ from .productrequest import ProductRequest, ProductRequestTypedDict
748
778
  from .profile import Profile, ProfileTypedDict
749
779
  from .pullfromcardpaymentmethod import (
750
780
  PullFromCardPaymentMethod,
@@ -1197,6 +1227,8 @@ __all__ = [
1197
1227
  "Amount",
1198
1228
  "AmountDecimal",
1199
1229
  "AmountDecimalTypedDict",
1230
+ "AmountDecimalValidationError",
1231
+ "AmountDecimalValidationErrorTypedDict",
1200
1232
  "AmountTypedDict",
1201
1233
  "AmountUpdate",
1202
1234
  "AmountUpdateTypedDict",
@@ -1214,6 +1246,10 @@ __all__ = [
1214
1246
  "ApplePayResponse",
1215
1247
  "ApplePayResponseTypedDict",
1216
1248
  "ApplicationScope",
1249
+ "AssignProductImage",
1250
+ "AssignProductImageTypedDict",
1251
+ "AssignProductImageValidationError",
1252
+ "AssignProductImageValidationErrorTypedDict",
1217
1253
  "AsyncCreatedRefund",
1218
1254
  "AsyncCreatedRefundTypedDict",
1219
1255
  "AsyncTransfer",
@@ -1409,6 +1445,10 @@ __all__ = [
1409
1445
  "CreateIndividualProfileTypedDict",
1410
1446
  "CreatePaymentLink",
1411
1447
  "CreatePaymentLinkTypedDict",
1448
+ "CreateProductOption",
1449
+ "CreateProductOptionGroup",
1450
+ "CreateProductOptionGroupTypedDict",
1451
+ "CreateProductOptionTypedDict",
1412
1452
  "CreateProfile",
1413
1453
  "CreateProfileError",
1414
1454
  "CreateProfileErrorTypedDict",
@@ -1762,6 +1802,20 @@ __all__ = [
1762
1802
  "PlatformFees",
1763
1803
  "PlatformFeesTypedDict",
1764
1804
  "PrimaryRegulator",
1805
+ "Product",
1806
+ "ProductImageMetadata",
1807
+ "ProductImageMetadataTypedDict",
1808
+ "ProductOption",
1809
+ "ProductOptionGroup",
1810
+ "ProductOptionGroupTypedDict",
1811
+ "ProductOptionGroupValidationError",
1812
+ "ProductOptionGroupValidationErrorTypedDict",
1813
+ "ProductOptionTypedDict",
1814
+ "ProductOptionValidationError",
1815
+ "ProductOptionValidationErrorTypedDict",
1816
+ "ProductRequest",
1817
+ "ProductRequestTypedDict",
1818
+ "ProductTypedDict",
1765
1819
  "Profile",
1766
1820
  "ProfileTypedDict",
1767
1821
  "PullFromCardPaymentMethod",
@@ -2153,6 +2207,8 @@ _dynamic_imports: dict[str, str] = {
2153
2207
  "AmountTypedDict": ".amount",
2154
2208
  "AmountDecimal": ".amountdecimal",
2155
2209
  "AmountDecimalTypedDict": ".amountdecimal",
2210
+ "AmountDecimalValidationError": ".amountdecimalvalidationerror",
2211
+ "AmountDecimalValidationErrorTypedDict": ".amountdecimalvalidationerror",
2156
2212
  "AmountUpdate": ".amountupdate",
2157
2213
  "AmountUpdateTypedDict": ".amountupdate",
2158
2214
  "AmountValidationError": ".amountvalidationerror",
@@ -2169,6 +2225,10 @@ _dynamic_imports: dict[str, str] = {
2169
2225
  "ApplePayResponse": ".applepayresponse",
2170
2226
  "ApplePayResponseTypedDict": ".applepayresponse",
2171
2227
  "ApplicationScope": ".applicationscope",
2228
+ "AssignProductImage": ".assignproductimage",
2229
+ "AssignProductImageTypedDict": ".assignproductimage",
2230
+ "AssignProductImageValidationError": ".assignproductimagevalidationerror",
2231
+ "AssignProductImageValidationErrorTypedDict": ".assignproductimagevalidationerror",
2172
2232
  "AsyncCreatedRefund": ".asynccreatedrefund",
2173
2233
  "AsyncCreatedRefundTypedDict": ".asynccreatedrefund",
2174
2234
  "AsyncTransfer": ".asynctransfer",
@@ -2368,6 +2428,10 @@ _dynamic_imports: dict[str, str] = {
2368
2428
  "CreateIndividualProfileTypedDict": ".createindividualprofile",
2369
2429
  "CreatePaymentLink": ".createpaymentlink",
2370
2430
  "CreatePaymentLinkTypedDict": ".createpaymentlink",
2431
+ "CreateProductOption": ".createproductoption",
2432
+ "CreateProductOptionTypedDict": ".createproductoption",
2433
+ "CreateProductOptionGroup": ".createproductoptiongroup",
2434
+ "CreateProductOptionGroupTypedDict": ".createproductoptiongroup",
2371
2435
  "CreateProfile": ".createprofile",
2372
2436
  "CreateProfileTypedDict": ".createprofile",
2373
2437
  "CreateProfileError": ".createprofileerror",
@@ -2722,6 +2786,20 @@ _dynamic_imports: dict[str, str] = {
2722
2786
  "PlatformFees": ".platformfees",
2723
2787
  "PlatformFeesTypedDict": ".platformfees",
2724
2788
  "PrimaryRegulator": ".primaryregulator",
2789
+ "Product": ".product",
2790
+ "ProductTypedDict": ".product",
2791
+ "ProductImageMetadata": ".productimagemetadata",
2792
+ "ProductImageMetadataTypedDict": ".productimagemetadata",
2793
+ "ProductOption": ".productoption",
2794
+ "ProductOptionTypedDict": ".productoption",
2795
+ "ProductOptionGroup": ".productoptiongroup",
2796
+ "ProductOptionGroupTypedDict": ".productoptiongroup",
2797
+ "ProductOptionGroupValidationError": ".productoptiongroupvalidationerror",
2798
+ "ProductOptionGroupValidationErrorTypedDict": ".productoptiongroupvalidationerror",
2799
+ "ProductOptionValidationError": ".productoptionvalidationerror",
2800
+ "ProductOptionValidationErrorTypedDict": ".productoptionvalidationerror",
2801
+ "ProductRequest": ".productrequest",
2802
+ "ProductRequestTypedDict": ".productrequest",
2725
2803
  "Profile": ".profile",
2726
2804
  "ProfileTypedDict": ".profile",
2727
2805
  "PullFromCardPaymentMethod": ".pullfromcardpaymentmethod",
@@ -0,0 +1,18 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from moovio_sdk.types import BaseModel
5
+ import pydantic
6
+ from typing import Optional
7
+ from typing_extensions import Annotated, NotRequired, TypedDict
8
+
9
+
10
+ class AmountDecimalValidationErrorTypedDict(TypedDict):
11
+ currency: NotRequired[str]
12
+ value_decimal: NotRequired[str]
13
+
14
+
15
+ class AmountDecimalValidationError(BaseModel):
16
+ currency: Optional[str] = None
17
+
18
+ value_decimal: Annotated[Optional[str], pydantic.Field(alias="valueDecimal")] = None
@@ -0,0 +1,16 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from moovio_sdk.types import BaseModel
5
+ import pydantic
6
+ from typing_extensions import Annotated, TypedDict
7
+
8
+
9
+ class AssignProductImageTypedDict(TypedDict):
10
+ image_id: str
11
+ r"""Unique identifier for a product or product option image resource."""
12
+
13
+
14
+ class AssignProductImage(BaseModel):
15
+ image_id: Annotated[str, pydantic.Field(alias="imageID")]
16
+ r"""Unique identifier for a product or product option image resource."""
@@ -0,0 +1,15 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from moovio_sdk.types import BaseModel
5
+ import pydantic
6
+ from typing import Optional
7
+ from typing_extensions import Annotated, NotRequired, TypedDict
8
+
9
+
10
+ class AssignProductImageValidationErrorTypedDict(TypedDict):
11
+ image_id: NotRequired[str]
12
+
13
+
14
+ class AssignProductImageValidationError(BaseModel):
15
+ image_id: Annotated[Optional[str], pydantic.Field(alias="imageID")] = None
@@ -0,0 +1,46 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .amountdecimal import AmountDecimal, AmountDecimalTypedDict
5
+ from .assignproductimage import AssignProductImage, AssignProductImageTypedDict
6
+ from moovio_sdk.types import BaseModel
7
+ import pydantic
8
+ from typing import List, Optional
9
+ from typing_extensions import Annotated, NotRequired, TypedDict
10
+
11
+
12
+ class CreateProductOptionTypedDict(TypedDict):
13
+ name: str
14
+ r"""The display name of a product option."""
15
+ description: NotRequired[str]
16
+ r"""A detailed description of the option.
17
+
18
+ - Must be valid UTF-8 text
19
+ - Supports Markdown for formatting
20
+ - HTML is not permitted and will be rejected
21
+ """
22
+ price_modifier: NotRequired[AmountDecimalTypedDict]
23
+ r"""The adjustment applied to a product's base price by this option. Can be negative, positive, or zero."""
24
+ images: NotRequired[List[AssignProductImageTypedDict]]
25
+ r"""Assign previously uploaded images to a product or option."""
26
+
27
+
28
+ class CreateProductOption(BaseModel):
29
+ name: str
30
+ r"""The display name of a product option."""
31
+
32
+ description: Optional[str] = None
33
+ r"""A detailed description of the option.
34
+
35
+ - Must be valid UTF-8 text
36
+ - Supports Markdown for formatting
37
+ - HTML is not permitted and will be rejected
38
+ """
39
+
40
+ price_modifier: Annotated[
41
+ Optional[AmountDecimal], pydantic.Field(alias="priceModifier")
42
+ ] = None
43
+ r"""The adjustment applied to a product's base price by this option. Can be negative, positive, or zero."""
44
+
45
+ images: Optional[List[AssignProductImage]] = None
46
+ r"""Assign previously uploaded images to a product or option."""
@@ -0,0 +1,52 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .createproductoption import CreateProductOption, CreateProductOptionTypedDict
5
+ from moovio_sdk.types import BaseModel
6
+ import pydantic
7
+ from typing import List, Optional
8
+ from typing_extensions import Annotated, NotRequired, TypedDict
9
+
10
+
11
+ class CreateProductOptionGroupTypedDict(TypedDict):
12
+ name: str
13
+ min_select: int
14
+ r"""The minimum number of options that must be selected from this group.
15
+
16
+ A value of 0 indicates that no selection from this group is required.
17
+ """
18
+ max_select: int
19
+ r"""The maximum number of options that can be selected from this group."""
20
+ options: List[CreateProductOptionTypedDict]
21
+ r"""The options available within this group."""
22
+ description: NotRequired[str]
23
+ r"""A detailed description of the option group.
24
+
25
+ - Must be valid UTF-8 text
26
+ - Supports Markdown for formatting
27
+ - HTML is not permitted and will be rejected
28
+ """
29
+
30
+
31
+ class CreateProductOptionGroup(BaseModel):
32
+ name: str
33
+
34
+ min_select: Annotated[int, pydantic.Field(alias="minSelect")]
35
+ r"""The minimum number of options that must be selected from this group.
36
+
37
+ A value of 0 indicates that no selection from this group is required.
38
+ """
39
+
40
+ max_select: Annotated[int, pydantic.Field(alias="maxSelect")]
41
+ r"""The maximum number of options that can be selected from this group."""
42
+
43
+ options: List[CreateProductOption]
44
+ r"""The options available within this group."""
45
+
46
+ description: Optional[str] = None
47
+ r"""A detailed description of the option group.
48
+
49
+ - Must be valid UTF-8 text
50
+ - Supports Markdown for formatting
51
+ - HTML is not permitted and will be rejected
52
+ """
@@ -0,0 +1,77 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .amountdecimal import AmountDecimal, AmountDecimalTypedDict
5
+ from .productimagemetadata import ProductImageMetadata, ProductImageMetadataTypedDict
6
+ from .productoptiongroup import ProductOptionGroup, ProductOptionGroupTypedDict
7
+ from datetime import datetime
8
+ from moovio_sdk.types import BaseModel
9
+ import pydantic
10
+ from typing import List, Optional
11
+ from typing_extensions import Annotated, NotRequired, TypedDict
12
+
13
+
14
+ class ProductTypedDict(TypedDict):
15
+ r"""A product available for purchase, which may have optional configuration options."""
16
+
17
+ product_id: str
18
+ r"""Unique identifier for a product."""
19
+ title: str
20
+ base_price: AmountDecimalTypedDict
21
+ r"""A product's starting price, before applying modifiers."""
22
+ created_on: datetime
23
+ r"""The date and time when the product was added."""
24
+ updated_on: datetime
25
+ r"""The date and time when the product was last updated."""
26
+ description: NotRequired[str]
27
+ r"""A detailed description of the product.
28
+
29
+ - Must be valid UTF-8 text
30
+ - Supports Markdown for formatting
31
+ - HTML is not permitted and will be rejected
32
+ """
33
+ option_groups: NotRequired[List[ProductOptionGroupTypedDict]]
34
+ r"""Optional configuration options for a product, such as size or color."""
35
+ images: NotRequired[List[ProductImageMetadataTypedDict]]
36
+ r"""Optional images associated with the product."""
37
+ disabled_on: NotRequired[datetime]
38
+ r"""The date and time when the product was disabled."""
39
+
40
+
41
+ class Product(BaseModel):
42
+ r"""A product available for purchase, which may have optional configuration options."""
43
+
44
+ product_id: Annotated[str, pydantic.Field(alias="productID")]
45
+ r"""Unique identifier for a product."""
46
+
47
+ title: str
48
+
49
+ base_price: Annotated[AmountDecimal, pydantic.Field(alias="basePrice")]
50
+ r"""A product's starting price, before applying modifiers."""
51
+
52
+ created_on: Annotated[datetime, pydantic.Field(alias="createdOn")]
53
+ r"""The date and time when the product was added."""
54
+
55
+ updated_on: Annotated[datetime, pydantic.Field(alias="updatedOn")]
56
+ r"""The date and time when the product was last updated."""
57
+
58
+ description: Optional[str] = None
59
+ r"""A detailed description of the product.
60
+
61
+ - Must be valid UTF-8 text
62
+ - Supports Markdown for formatting
63
+ - HTML is not permitted and will be rejected
64
+ """
65
+
66
+ option_groups: Annotated[
67
+ Optional[List[ProductOptionGroup]], pydantic.Field(alias="optionGroups")
68
+ ] = None
69
+ r"""Optional configuration options for a product, such as size or color."""
70
+
71
+ images: Optional[List[ProductImageMetadata]] = None
72
+ r"""Optional images associated with the product."""
73
+
74
+ disabled_on: Annotated[Optional[datetime], pydantic.Field(alias="disabledOn")] = (
75
+ None
76
+ )
77
+ r"""The date and time when the product was disabled."""
@@ -0,0 +1,27 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from moovio_sdk.types import BaseModel
5
+ import pydantic
6
+ from typing import Optional
7
+ from typing_extensions import Annotated, NotRequired, TypedDict
8
+
9
+
10
+ class ProductImageMetadataTypedDict(TypedDict):
11
+ image_id: str
12
+ r"""Unique identifier for a product or product option image resource."""
13
+ link: str
14
+ r"""The image's public URL."""
15
+ alt_text: NotRequired[str]
16
+ r"""Alternative text for the image."""
17
+
18
+
19
+ class ProductImageMetadata(BaseModel):
20
+ image_id: Annotated[str, pydantic.Field(alias="imageID")]
21
+ r"""Unique identifier for a product or product option image resource."""
22
+
23
+ link: str
24
+ r"""The image's public URL."""
25
+
26
+ alt_text: Annotated[Optional[str], pydantic.Field(alias="altText")] = None
27
+ r"""Alternative text for the image."""
@@ -0,0 +1,50 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .amountdecimal import AmountDecimal, AmountDecimalTypedDict
5
+ from .productimagemetadata import ProductImageMetadata, ProductImageMetadataTypedDict
6
+ from moovio_sdk.types import BaseModel
7
+ import pydantic
8
+ from typing import List, Optional
9
+ from typing_extensions import Annotated, NotRequired, TypedDict
10
+
11
+
12
+ class ProductOptionTypedDict(TypedDict):
13
+ r"""Represents a single product option within a group."""
14
+
15
+ name: str
16
+ r"""The display name of a product option."""
17
+ description: NotRequired[str]
18
+ r"""A detailed description of the option.
19
+
20
+ - Must be valid UTF-8 text
21
+ - Supports Markdown for formatting
22
+ - HTML is not permitted and will be rejected
23
+ """
24
+ price_modifier: NotRequired[AmountDecimalTypedDict]
25
+ r"""The adjustment applied to a product's base price by this option. Can be negative, positive, or zero."""
26
+ images: NotRequired[List[ProductImageMetadataTypedDict]]
27
+ r"""The images associated with this option."""
28
+
29
+
30
+ class ProductOption(BaseModel):
31
+ r"""Represents a single product option within a group."""
32
+
33
+ name: str
34
+ r"""The display name of a product option."""
35
+
36
+ description: Optional[str] = None
37
+ r"""A detailed description of the option.
38
+
39
+ - Must be valid UTF-8 text
40
+ - Supports Markdown for formatting
41
+ - HTML is not permitted and will be rejected
42
+ """
43
+
44
+ price_modifier: Annotated[
45
+ Optional[AmountDecimal], pydantic.Field(alias="priceModifier")
46
+ ] = None
47
+ r"""The adjustment applied to a product's base price by this option. Can be negative, positive, or zero."""
48
+
49
+ images: Optional[List[ProductImageMetadata]] = None
50
+ r"""The images associated with this option."""
@@ -0,0 +1,56 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .productoption import ProductOption, ProductOptionTypedDict
5
+ from moovio_sdk.types import BaseModel
6
+ import pydantic
7
+ from typing import List, Optional
8
+ from typing_extensions import Annotated, NotRequired, TypedDict
9
+
10
+
11
+ class ProductOptionGroupTypedDict(TypedDict):
12
+ r"""Represents a group of product configuration options, such as size or color."""
13
+
14
+ name: str
15
+ min_select: int
16
+ r"""The minimum number of options that must be selected from this group.
17
+
18
+ A value of 0 indicates that no selection from this group is required.
19
+ """
20
+ max_select: int
21
+ r"""The maximum number of options that can be selected from this group."""
22
+ options: List[ProductOptionTypedDict]
23
+ r"""The options available within this group."""
24
+ description: NotRequired[str]
25
+ r"""A detailed description of the option group.
26
+
27
+ - Must be valid UTF-8 text
28
+ - Supports Markdown for formatting
29
+ - HTML is not permitted and will be rejected
30
+ """
31
+
32
+
33
+ class ProductOptionGroup(BaseModel):
34
+ r"""Represents a group of product configuration options, such as size or color."""
35
+
36
+ name: str
37
+
38
+ min_select: Annotated[int, pydantic.Field(alias="minSelect")]
39
+ r"""The minimum number of options that must be selected from this group.
40
+
41
+ A value of 0 indicates that no selection from this group is required.
42
+ """
43
+
44
+ max_select: Annotated[int, pydantic.Field(alias="maxSelect")]
45
+ r"""The maximum number of options that can be selected from this group."""
46
+
47
+ options: List[ProductOption]
48
+ r"""The options available within this group."""
49
+
50
+ description: Optional[str] = None
51
+ r"""A detailed description of the option group.
52
+
53
+ - Must be valid UTF-8 text
54
+ - Supports Markdown for formatting
55
+ - HTML is not permitted and will be rejected
56
+ """
@@ -0,0 +1,31 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .productoptionvalidationerror import (
5
+ ProductOptionValidationError,
6
+ ProductOptionValidationErrorTypedDict,
7
+ )
8
+ from moovio_sdk.types import BaseModel
9
+ import pydantic
10
+ from typing import Dict, Optional
11
+ from typing_extensions import Annotated, NotRequired, TypedDict
12
+
13
+
14
+ class ProductOptionGroupValidationErrorTypedDict(TypedDict):
15
+ name: NotRequired[str]
16
+ description: NotRequired[str]
17
+ min_select: NotRequired[str]
18
+ max_select: NotRequired[str]
19
+ options: NotRequired[Dict[str, ProductOptionValidationErrorTypedDict]]
20
+
21
+
22
+ class ProductOptionGroupValidationError(BaseModel):
23
+ name: Optional[str] = None
24
+
25
+ description: Optional[str] = None
26
+
27
+ min_select: Annotated[Optional[str], pydantic.Field(alias="minSelect")] = None
28
+
29
+ max_select: Annotated[Optional[str], pydantic.Field(alias="maxSelect")] = None
30
+
31
+ options: Optional[Dict[str, ProductOptionValidationError]] = None
@@ -0,0 +1,34 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .amountdecimalvalidationerror import (
5
+ AmountDecimalValidationError,
6
+ AmountDecimalValidationErrorTypedDict,
7
+ )
8
+ from .assignproductimagevalidationerror import (
9
+ AssignProductImageValidationError,
10
+ AssignProductImageValidationErrorTypedDict,
11
+ )
12
+ from moovio_sdk.types import BaseModel
13
+ import pydantic
14
+ from typing import Dict, Optional
15
+ from typing_extensions import Annotated, NotRequired, TypedDict
16
+
17
+
18
+ class ProductOptionValidationErrorTypedDict(TypedDict):
19
+ name: NotRequired[str]
20
+ description: NotRequired[str]
21
+ price_modifier: NotRequired[AmountDecimalValidationErrorTypedDict]
22
+ images: NotRequired[Dict[str, AssignProductImageValidationErrorTypedDict]]
23
+
24
+
25
+ class ProductOptionValidationError(BaseModel):
26
+ name: Optional[str] = None
27
+
28
+ description: Optional[str] = None
29
+
30
+ price_modifier: Annotated[
31
+ Optional[AmountDecimalValidationError], pydantic.Field(alias="priceModifier")
32
+ ] = None
33
+
34
+ images: Optional[Dict[str, AssignProductImageValidationError]] = None
@@ -0,0 +1,57 @@
1
+ """Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT."""
2
+
3
+ from __future__ import annotations
4
+ from .amountdecimal import AmountDecimal, AmountDecimalTypedDict
5
+ from .assignproductimage import AssignProductImage, AssignProductImageTypedDict
6
+ from .createproductoptiongroup import (
7
+ CreateProductOptionGroup,
8
+ CreateProductOptionGroupTypedDict,
9
+ )
10
+ from moovio_sdk.types import BaseModel
11
+ import pydantic
12
+ from typing import List, Optional
13
+ from typing_extensions import Annotated, NotRequired, TypedDict
14
+
15
+
16
+ class ProductRequestTypedDict(TypedDict):
17
+ r"""Request to create or update a product."""
18
+
19
+ title: str
20
+ base_price: AmountDecimalTypedDict
21
+ r"""A product's starting price, before applying modifiers."""
22
+ description: NotRequired[str]
23
+ r"""A detailed description of the product.
24
+
25
+ - Must be valid UTF-8 text
26
+ - Supports Markdown for formatting
27
+ - HTML is not permitted and will be rejected
28
+ """
29
+ images: NotRequired[List[AssignProductImageTypedDict]]
30
+ r"""Assign previously uploaded images to a product or option."""
31
+ option_groups: NotRequired[List[CreateProductOptionGroupTypedDict]]
32
+ r"""Optional configuration options for a product, such as size or color."""
33
+
34
+
35
+ class ProductRequest(BaseModel):
36
+ r"""Request to create or update a product."""
37
+
38
+ title: str
39
+
40
+ base_price: Annotated[AmountDecimal, pydantic.Field(alias="basePrice")]
41
+ r"""A product's starting price, before applying modifiers."""
42
+
43
+ description: Optional[str] = None
44
+ r"""A detailed description of the product.
45
+
46
+ - Must be valid UTF-8 text
47
+ - Supports Markdown for formatting
48
+ - HTML is not permitted and will be rejected
49
+ """
50
+
51
+ images: Optional[List[AssignProductImage]] = None
52
+ r"""Assign previously uploaded images to a product or option."""
53
+
54
+ option_groups: Annotated[
55
+ Optional[List[CreateProductOptionGroup]], pydantic.Field(alias="optionGroups")
56
+ ] = None
57
+ r"""Optional configuration options for a product, such as size or color."""