paid-python 1.1.0__tar.gz → 1.2.0__tar.gz

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.
Files changed (125) hide show
  1. {paid_python-1.1.0 → paid_python-1.2.0}/PKG-INFO +2 -2
  2. {paid_python-1.1.0 → paid_python-1.2.0}/pyproject.toml +2 -2
  3. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/__init__.py +15 -0
  4. paid_python-1.2.0/src/paid/contacts/__init__.py +34 -0
  5. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/contacts/client.py +38 -16
  6. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/contacts/raw_client.py +36 -10
  7. paid_python-1.2.0/src/paid/contacts/types/__init__.py +34 -0
  8. paid_python-1.2.0/src/paid/contacts/types/create_contact_request_roles_item.py +5 -0
  9. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/client_wrapper.py +2 -2
  10. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/customers/client.py +8 -0
  11. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/customers/raw_client.py +8 -0
  12. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/orders/client.py +21 -8
  13. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/orders/raw_client.py +26 -8
  14. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/__init__.py +12 -0
  15. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/contact.py +2 -0
  16. paid_python-1.2.0/src/paid/types/contact_roles_item.py +5 -0
  17. paid_python-1.2.0/src/paid/types/create_order_line_attribute_request.py +21 -0
  18. paid_python-1.2.0/src/paid/types/create_order_line_request.py +32 -0
  19. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/customer.py +3 -0
  20. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/signal.py +6 -0
  21. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/update_contact_request.py +2 -0
  22. paid_python-1.2.0/src/paid/types/update_contact_request_roles_item.py +5 -0
  23. paid_python-1.2.0/src/paid/version.py +3 -0
  24. paid_python-1.1.0/src/paid/signals/__init__.py +0 -4
  25. paid_python-1.1.0/src/paid/version.py +0 -6
  26. {paid_python-1.1.0 → paid_python-1.2.0}/LICENSE +0 -0
  27. {paid_python-1.1.0 → paid_python-1.2.0}/README.md +0 -0
  28. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/client.py +0 -0
  29. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/__init__.py +0 -0
  30. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/api_error.py +0 -0
  31. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/datetime_utils.py +0 -0
  32. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/file.py +0 -0
  33. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/force_multipart.py +0 -0
  34. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/http_client.py +0 -0
  35. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/http_response.py +0 -0
  36. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/http_sse/__init__.py +0 -0
  37. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/http_sse/_api.py +0 -0
  38. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/http_sse/_decoders.py +0 -0
  39. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/http_sse/_exceptions.py +0 -0
  40. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/http_sse/_models.py +0 -0
  41. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/jsonable_encoder.py +0 -0
  42. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/pydantic_utilities.py +0 -0
  43. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/query_encoder.py +0 -0
  44. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/remove_none_from_dict.py +0 -0
  45. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/request_options.py +0 -0
  46. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/core/serialization.py +0 -0
  47. {paid_python-1.1.0/src/paid/contacts → paid_python-1.2.0/src/paid/customers}/__init__.py +0 -0
  48. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/environment.py +0 -0
  49. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/errors/__init__.py +0 -0
  50. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/errors/bad_request_error.py +0 -0
  51. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/errors/forbidden_error.py +0 -0
  52. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/errors/internal_server_error.py +0 -0
  53. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/errors/not_found_error.py +0 -0
  54. {paid_python-1.1.0/src/paid/customers → paid_python-1.2.0/src/paid/invoices}/__init__.py +0 -0
  55. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/invoices/client.py +0 -0
  56. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/invoices/raw_client.py +0 -0
  57. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/logger.py +0 -0
  58. {paid_python-1.1.0/src/paid/invoices → paid_python-1.2.0/src/paid/orders}/__init__.py +0 -0
  59. {paid_python-1.1.0/src/paid/orders → paid_python-1.2.0/src/paid/products}/__init__.py +0 -0
  60. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/products/client.py +0 -0
  61. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/products/raw_client.py +0 -0
  62. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/py.typed +0 -0
  63. {paid_python-1.1.0/src/paid/products → paid_python-1.2.0/src/paid/signals}/__init__.py +0 -0
  64. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/signals/client.py +0 -0
  65. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/signals/raw_client.py +0 -0
  66. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/__init__.py +0 -0
  67. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/anthropic_patches/__init__.py +0 -0
  68. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/anthropic_patches/patches.py +0 -0
  69. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/autoinstrumentation.py +0 -0
  70. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/context_data.py +0 -0
  71. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/context_manager.py +0 -0
  72. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/distributed_tracing.py +0 -0
  73. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/gemini_patches/__init__.py +0 -0
  74. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/gemini_patches/patches.py +0 -0
  75. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/signal.py +0 -0
  76. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/tracing.py +0 -0
  77. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/__init__.py +0 -0
  78. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/anthropic/__init__.py +0 -0
  79. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/anthropic/anthropicWrapper.py +0 -0
  80. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/bedrock/__init__.py +0 -0
  81. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/bedrock/bedrockWrapper.py +0 -0
  82. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/gemini/__init__.py +0 -0
  83. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/gemini/geminiWrapper.py +0 -0
  84. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/langchain/__init__.py +0 -0
  85. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/langchain/paidLangChainCallback.py +0 -0
  86. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/mistral/__init__.py +0 -0
  87. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/mistral/mistralWrapper.py +0 -0
  88. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/openai/__init__.py +0 -0
  89. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/openai/openAiWrapper.py +0 -0
  90. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/openai_agents/__init__.py +0 -0
  91. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/openai_agents/openaiAgentsHook.py +0 -0
  92. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/tracing/wrappers/utils.py +0 -0
  93. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/attribution.py +0 -0
  94. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/bulk_signals_response.py +0 -0
  95. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/contact_billing_address.py +0 -0
  96. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/contact_list_response.py +0 -0
  97. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/customer_attribution.py +0 -0
  98. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/customer_billing_address.py +0 -0
  99. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/customer_by_external_id.py +0 -0
  100. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/customer_by_id.py +0 -0
  101. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/customer_creation_state.py +0 -0
  102. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/customer_list_response.py +0 -0
  103. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/empty_response.py +0 -0
  104. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/error_response.py +0 -0
  105. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/invoice.py +0 -0
  106. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/invoice_line.py +0 -0
  107. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/invoice_line_payment_status.py +0 -0
  108. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/invoice_lines_response.py +0 -0
  109. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/invoice_list_response.py +0 -0
  110. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/invoice_payment_status.py +0 -0
  111. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/invoice_source.py +0 -0
  112. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/invoice_status.py +0 -0
  113. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/invoice_tax_status.py +0 -0
  114. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/order.py +0 -0
  115. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/order_creation_state.py +0 -0
  116. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/order_line.py +0 -0
  117. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/order_lines_response.py +0 -0
  118. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/order_list_response.py +0 -0
  119. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/pagination.py +0 -0
  120. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/product.py +0 -0
  121. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/product_by_external_id.py +0 -0
  122. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/product_by_id.py +0 -0
  123. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/product_list_response.py +0 -0
  124. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/update_customer_request.py +0 -0
  125. {paid_python-1.1.0 → paid_python-1.2.0}/src/paid/types/update_product_request.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: paid-python
3
- Version: 1.1.0
3
+ Version: 1.2.0
4
4
  Summary:
5
5
  Requires-Python: >=3.10,<3.14
6
6
  Classifier: Intended Audience :: Developers
@@ -19,7 +19,7 @@ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
19
  Classifier: Typing :: Typed
20
20
  Requires-Dist: httpx (>=0.21.2)
21
21
  Requires-Dist: mutagen (>=1.47.0)
22
- Requires-Dist: openinference-instrumentation-anthropic (>=0.1.20)
22
+ Requires-Dist: openinference-instrumentation-anthropic (>=0.1.20,<1.0.0)
23
23
  Requires-Dist: openinference-instrumentation-bedrock (>=0.1.0)
24
24
  Requires-Dist: openinference-instrumentation-google-genai (>=0.1.8)
25
25
  Requires-Dist: openinference-instrumentation-instructor (>=0.1.0)
@@ -4,7 +4,7 @@ dynamic = ["version"]
4
4
 
5
5
  [tool.poetry]
6
6
  name = "paid-python"
7
- version = "1.1.0"
7
+ version = "1.2.0"
8
8
  description = ""
9
9
  readme = "README.md"
10
10
  authors = []
@@ -37,7 +37,7 @@ Repository = 'https://github.com/paid-ai/paid-python'
37
37
  python = ">=3.10,<3.14"
38
38
  httpx = ">=0.21.2"
39
39
  mutagen = ">=1.47.0"
40
- openinference-instrumentation-anthropic = ">=0.1.20"
40
+ openinference-instrumentation-anthropic = ">=0.1.20,<1.0.0"
41
41
  openinference-instrumentation-bedrock = ">=0.1.0"
42
42
  openinference-instrumentation-google-genai = ">=0.1.8"
43
43
  openinference-instrumentation-instructor = ">=0.1.0"
@@ -12,6 +12,9 @@ if typing.TYPE_CHECKING:
12
12
  Contact,
13
13
  ContactBillingAddress,
14
14
  ContactListResponse,
15
+ ContactRolesItem,
16
+ CreateOrderLineAttributeRequest,
17
+ CreateOrderLineRequest,
15
18
  Customer,
16
19
  CustomerAttribution,
17
20
  CustomerBillingAddress,
@@ -42,12 +45,14 @@ if typing.TYPE_CHECKING:
42
45
  ProductListResponse,
43
46
  Signal,
44
47
  UpdateContactRequest,
48
+ UpdateContactRequestRolesItem,
45
49
  UpdateCustomerRequest,
46
50
  UpdateProductRequest,
47
51
  )
48
52
  from .errors import BadRequestError, ForbiddenError, InternalServerError, NotFoundError
49
53
  from . import contacts, customers, invoices, orders, products, signals
50
54
  from .client import AsyncPaid, Paid
55
+ from .contacts import CreateContactRequestRolesItem
51
56
  from .environment import PaidEnvironment
52
57
  from .version import __version__
53
58
  _dynamic_imports: typing.Dict[str, str] = {
@@ -58,6 +63,10 @@ _dynamic_imports: typing.Dict[str, str] = {
58
63
  "Contact": ".types",
59
64
  "ContactBillingAddress": ".types",
60
65
  "ContactListResponse": ".types",
66
+ "ContactRolesItem": ".types",
67
+ "CreateContactRequestRolesItem": ".contacts",
68
+ "CreateOrderLineAttributeRequest": ".types",
69
+ "CreateOrderLineRequest": ".types",
61
70
  "Customer": ".types",
62
71
  "CustomerAttribution": ".types",
63
72
  "CustomerBillingAddress": ".types",
@@ -93,6 +102,7 @@ _dynamic_imports: typing.Dict[str, str] = {
93
102
  "ProductListResponse": ".types",
94
103
  "Signal": ".types",
95
104
  "UpdateContactRequest": ".types",
105
+ "UpdateContactRequestRolesItem": ".types",
96
106
  "UpdateCustomerRequest": ".types",
97
107
  "UpdateProductRequest": ".types",
98
108
  "__version__": ".version",
@@ -134,6 +144,10 @@ __all__ = [
134
144
  "Contact",
135
145
  "ContactBillingAddress",
136
146
  "ContactListResponse",
147
+ "ContactRolesItem",
148
+ "CreateContactRequestRolesItem",
149
+ "CreateOrderLineAttributeRequest",
150
+ "CreateOrderLineRequest",
137
151
  "Customer",
138
152
  "CustomerAttribution",
139
153
  "CustomerBillingAddress",
@@ -169,6 +183,7 @@ __all__ = [
169
183
  "ProductListResponse",
170
184
  "Signal",
171
185
  "UpdateContactRequest",
186
+ "UpdateContactRequestRolesItem",
172
187
  "UpdateCustomerRequest",
173
188
  "UpdateProductRequest",
174
189
  "__version__",
@@ -0,0 +1,34 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ import typing
6
+ from importlib import import_module
7
+
8
+ if typing.TYPE_CHECKING:
9
+ from .types import CreateContactRequestRolesItem
10
+ _dynamic_imports: typing.Dict[str, str] = {"CreateContactRequestRolesItem": ".types"}
11
+
12
+
13
+ def __getattr__(attr_name: str) -> typing.Any:
14
+ module_name = _dynamic_imports.get(attr_name)
15
+ if module_name is None:
16
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
17
+ try:
18
+ module = import_module(module_name, __package__)
19
+ if module_name == f".{attr_name}":
20
+ return module
21
+ else:
22
+ return getattr(module, attr_name)
23
+ except ImportError as e:
24
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
25
+ except AttributeError as e:
26
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
27
+
28
+
29
+ def __dir__():
30
+ lazy_attrs = list(_dynamic_imports.keys())
31
+ return sorted(lazy_attrs)
32
+
33
+
34
+ __all__ = ["CreateContactRequestRolesItem"]
@@ -8,7 +8,9 @@ from ..types.contact import Contact
8
8
  from ..types.contact_billing_address import ContactBillingAddress
9
9
  from ..types.contact_list_response import ContactListResponse
10
10
  from ..types.empty_response import EmptyResponse
11
+ from ..types.update_contact_request_roles_item import UpdateContactRequestRolesItem
11
12
  from .raw_client import AsyncRawContactsClient, RawContactsClient
13
+ from .types.create_contact_request_roles_item import CreateContactRequestRolesItem
12
14
 
13
15
  # this is used as the default value for optional parameters
14
16
  OMIT = typing.cast(typing.Any, ...)
@@ -69,12 +71,13 @@ class ContactsClient:
69
71
  self,
70
72
  *,
71
73
  customer_id: str,
72
- first_name: str,
73
- last_name: str,
74
74
  email: str,
75
+ first_name: typing.Optional[str] = OMIT,
76
+ last_name: typing.Optional[str] = OMIT,
75
77
  phone: typing.Optional[str] = OMIT,
76
78
  billing_address: typing.Optional[ContactBillingAddress] = OMIT,
77
79
  external_id: typing.Optional[str] = OMIT,
80
+ roles: typing.Optional[typing.Sequence[CreateContactRequestRolesItem]] = OMIT,
78
81
  request_options: typing.Optional[RequestOptions] = None,
79
82
  ) -> Contact:
80
83
  """
@@ -84,11 +87,11 @@ class ContactsClient:
84
87
  ----------
85
88
  customer_id : str
86
89
 
87
- first_name : str
90
+ email : str
88
91
 
89
- last_name : str
92
+ first_name : typing.Optional[str]
90
93
 
91
- email : str
94
+ last_name : typing.Optional[str]
92
95
 
93
96
  phone : typing.Optional[str]
94
97
 
@@ -96,6 +99,8 @@ class ContactsClient:
96
99
 
97
100
  external_id : typing.Optional[str]
98
101
 
102
+ roles : typing.Optional[typing.Sequence[CreateContactRequestRolesItem]]
103
+
99
104
  request_options : typing.Optional[RequestOptions]
100
105
  Request-specific configuration.
101
106
 
@@ -113,19 +118,18 @@ class ContactsClient:
113
118
  )
114
119
  client.contacts.create_contact(
115
120
  customer_id="customerId",
116
- first_name="firstName",
117
- last_name="lastName",
118
121
  email="email",
119
122
  )
120
123
  """
121
124
  _response = self._raw_client.create_contact(
122
125
  customer_id=customer_id,
126
+ email=email,
123
127
  first_name=first_name,
124
128
  last_name=last_name,
125
- email=email,
126
129
  phone=phone,
127
130
  billing_address=billing_address,
128
131
  external_id=external_id,
132
+ roles=roles,
129
133
  request_options=request_options,
130
134
  )
131
135
  return _response.data
@@ -171,6 +175,7 @@ class ContactsClient:
171
175
  phone: typing.Optional[str] = OMIT,
172
176
  billing_address: typing.Optional[ContactBillingAddress] = OMIT,
173
177
  external_id: typing.Optional[str] = OMIT,
178
+ roles: typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]] = OMIT,
174
179
  request_options: typing.Optional[RequestOptions] = None,
175
180
  ) -> Contact:
176
181
  """
@@ -194,6 +199,8 @@ class ContactsClient:
194
199
 
195
200
  external_id : typing.Optional[str]
196
201
 
202
+ roles : typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]]
203
+
197
204
  request_options : typing.Optional[RequestOptions]
198
205
  Request-specific configuration.
199
206
 
@@ -222,6 +229,7 @@ class ContactsClient:
222
229
  phone=phone,
223
230
  billing_address=billing_address,
224
231
  external_id=external_id,
232
+ roles=roles,
225
233
  request_options=request_options,
226
234
  )
227
235
  return _response.data
@@ -301,6 +309,7 @@ class ContactsClient:
301
309
  phone: typing.Optional[str] = OMIT,
302
310
  billing_address: typing.Optional[ContactBillingAddress] = OMIT,
303
311
  external_id: typing.Optional[str] = OMIT,
312
+ roles: typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]] = OMIT,
304
313
  request_options: typing.Optional[RequestOptions] = None,
305
314
  ) -> Contact:
306
315
  """
@@ -324,6 +333,8 @@ class ContactsClient:
324
333
 
325
334
  external_id : typing.Optional[str]
326
335
 
336
+ roles : typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]]
337
+
327
338
  request_options : typing.Optional[RequestOptions]
328
339
  Request-specific configuration.
329
340
 
@@ -352,6 +363,7 @@ class ContactsClient:
352
363
  phone=phone,
353
364
  billing_address=billing_address,
354
365
  external_id=external_id,
366
+ roles=roles,
355
367
  request_options=request_options,
356
368
  )
357
369
  return _response.data
@@ -452,12 +464,13 @@ class AsyncContactsClient:
452
464
  self,
453
465
  *,
454
466
  customer_id: str,
455
- first_name: str,
456
- last_name: str,
457
467
  email: str,
468
+ first_name: typing.Optional[str] = OMIT,
469
+ last_name: typing.Optional[str] = OMIT,
458
470
  phone: typing.Optional[str] = OMIT,
459
471
  billing_address: typing.Optional[ContactBillingAddress] = OMIT,
460
472
  external_id: typing.Optional[str] = OMIT,
473
+ roles: typing.Optional[typing.Sequence[CreateContactRequestRolesItem]] = OMIT,
461
474
  request_options: typing.Optional[RequestOptions] = None,
462
475
  ) -> Contact:
463
476
  """
@@ -467,11 +480,11 @@ class AsyncContactsClient:
467
480
  ----------
468
481
  customer_id : str
469
482
 
470
- first_name : str
483
+ email : str
471
484
 
472
- last_name : str
485
+ first_name : typing.Optional[str]
473
486
 
474
- email : str
487
+ last_name : typing.Optional[str]
475
488
 
476
489
  phone : typing.Optional[str]
477
490
 
@@ -479,6 +492,8 @@ class AsyncContactsClient:
479
492
 
480
493
  external_id : typing.Optional[str]
481
494
 
495
+ roles : typing.Optional[typing.Sequence[CreateContactRequestRolesItem]]
496
+
482
497
  request_options : typing.Optional[RequestOptions]
483
498
  Request-specific configuration.
484
499
 
@@ -501,8 +516,6 @@ class AsyncContactsClient:
501
516
  async def main() -> None:
502
517
  await client.contacts.create_contact(
503
518
  customer_id="customerId",
504
- first_name="firstName",
505
- last_name="lastName",
506
519
  email="email",
507
520
  )
508
521
 
@@ -511,12 +524,13 @@ class AsyncContactsClient:
511
524
  """
512
525
  _response = await self._raw_client.create_contact(
513
526
  customer_id=customer_id,
527
+ email=email,
514
528
  first_name=first_name,
515
529
  last_name=last_name,
516
- email=email,
517
530
  phone=phone,
518
531
  billing_address=billing_address,
519
532
  external_id=external_id,
533
+ roles=roles,
520
534
  request_options=request_options,
521
535
  )
522
536
  return _response.data
@@ -570,6 +584,7 @@ class AsyncContactsClient:
570
584
  phone: typing.Optional[str] = OMIT,
571
585
  billing_address: typing.Optional[ContactBillingAddress] = OMIT,
572
586
  external_id: typing.Optional[str] = OMIT,
587
+ roles: typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]] = OMIT,
573
588
  request_options: typing.Optional[RequestOptions] = None,
574
589
  ) -> Contact:
575
590
  """
@@ -593,6 +608,8 @@ class AsyncContactsClient:
593
608
 
594
609
  external_id : typing.Optional[str]
595
610
 
611
+ roles : typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]]
612
+
596
613
  request_options : typing.Optional[RequestOptions]
597
614
  Request-specific configuration.
598
615
 
@@ -629,6 +646,7 @@ class AsyncContactsClient:
629
646
  phone=phone,
630
647
  billing_address=billing_address,
631
648
  external_id=external_id,
649
+ roles=roles,
632
650
  request_options=request_options,
633
651
  )
634
652
  return _response.data
@@ -724,6 +742,7 @@ class AsyncContactsClient:
724
742
  phone: typing.Optional[str] = OMIT,
725
743
  billing_address: typing.Optional[ContactBillingAddress] = OMIT,
726
744
  external_id: typing.Optional[str] = OMIT,
745
+ roles: typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]] = OMIT,
727
746
  request_options: typing.Optional[RequestOptions] = None,
728
747
  ) -> Contact:
729
748
  """
@@ -747,6 +766,8 @@ class AsyncContactsClient:
747
766
 
748
767
  external_id : typing.Optional[str]
749
768
 
769
+ roles : typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]]
770
+
750
771
  request_options : typing.Optional[RequestOptions]
751
772
  Request-specific configuration.
752
773
 
@@ -783,6 +804,7 @@ class AsyncContactsClient:
783
804
  phone=phone,
784
805
  billing_address=billing_address,
785
806
  external_id=external_id,
807
+ roles=roles,
786
808
  request_options=request_options,
787
809
  )
788
810
  return _response.data
@@ -19,6 +19,8 @@ from ..types.contact_billing_address import ContactBillingAddress
19
19
  from ..types.contact_list_response import ContactListResponse
20
20
  from ..types.empty_response import EmptyResponse
21
21
  from ..types.error_response import ErrorResponse
22
+ from ..types.update_contact_request_roles_item import UpdateContactRequestRolesItem
23
+ from .types.create_contact_request_roles_item import CreateContactRequestRolesItem
22
24
 
23
25
  # this is used as the default value for optional parameters
24
26
  OMIT = typing.cast(typing.Any, ...)
@@ -113,12 +115,13 @@ class RawContactsClient:
113
115
  self,
114
116
  *,
115
117
  customer_id: str,
116
- first_name: str,
117
- last_name: str,
118
118
  email: str,
119
+ first_name: typing.Optional[str] = OMIT,
120
+ last_name: typing.Optional[str] = OMIT,
119
121
  phone: typing.Optional[str] = OMIT,
120
122
  billing_address: typing.Optional[ContactBillingAddress] = OMIT,
121
123
  external_id: typing.Optional[str] = OMIT,
124
+ roles: typing.Optional[typing.Sequence[CreateContactRequestRolesItem]] = OMIT,
122
125
  request_options: typing.Optional[RequestOptions] = None,
123
126
  ) -> HttpResponse[Contact]:
124
127
  """
@@ -128,11 +131,11 @@ class RawContactsClient:
128
131
  ----------
129
132
  customer_id : str
130
133
 
131
- first_name : str
134
+ email : str
132
135
 
133
- last_name : str
136
+ first_name : typing.Optional[str]
134
137
 
135
- email : str
138
+ last_name : typing.Optional[str]
136
139
 
137
140
  phone : typing.Optional[str]
138
141
 
@@ -140,6 +143,8 @@ class RawContactsClient:
140
143
 
141
144
  external_id : typing.Optional[str]
142
145
 
146
+ roles : typing.Optional[typing.Sequence[CreateContactRequestRolesItem]]
147
+
143
148
  request_options : typing.Optional[RequestOptions]
144
149
  Request-specific configuration.
145
150
 
@@ -161,6 +166,7 @@ class RawContactsClient:
161
166
  object_=billing_address, annotation=typing.Optional[ContactBillingAddress], direction="write"
162
167
  ),
163
168
  "externalId": external_id,
169
+ "roles": roles,
164
170
  },
165
171
  headers={
166
172
  "content-type": "application/json",
@@ -298,6 +304,7 @@ class RawContactsClient:
298
304
  phone: typing.Optional[str] = OMIT,
299
305
  billing_address: typing.Optional[ContactBillingAddress] = OMIT,
300
306
  external_id: typing.Optional[str] = OMIT,
307
+ roles: typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]] = OMIT,
301
308
  request_options: typing.Optional[RequestOptions] = None,
302
309
  ) -> HttpResponse[Contact]:
303
310
  """
@@ -321,6 +328,8 @@ class RawContactsClient:
321
328
 
322
329
  external_id : typing.Optional[str]
323
330
 
331
+ roles : typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]]
332
+
324
333
  request_options : typing.Optional[RequestOptions]
325
334
  Request-specific configuration.
326
335
 
@@ -342,6 +351,7 @@ class RawContactsClient:
342
351
  object_=billing_address, annotation=typing.Optional[ContactBillingAddress], direction="write"
343
352
  ),
344
353
  "externalId": external_id,
354
+ "roles": roles,
345
355
  },
346
356
  headers={
347
357
  "content-type": "application/json",
@@ -561,6 +571,7 @@ class RawContactsClient:
561
571
  phone: typing.Optional[str] = OMIT,
562
572
  billing_address: typing.Optional[ContactBillingAddress] = OMIT,
563
573
  external_id: typing.Optional[str] = OMIT,
574
+ roles: typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]] = OMIT,
564
575
  request_options: typing.Optional[RequestOptions] = None,
565
576
  ) -> HttpResponse[Contact]:
566
577
  """
@@ -584,6 +595,8 @@ class RawContactsClient:
584
595
 
585
596
  external_id : typing.Optional[str]
586
597
 
598
+ roles : typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]]
599
+
587
600
  request_options : typing.Optional[RequestOptions]
588
601
  Request-specific configuration.
589
602
 
@@ -605,6 +618,7 @@ class RawContactsClient:
605
618
  object_=billing_address, annotation=typing.Optional[ContactBillingAddress], direction="write"
606
619
  ),
607
620
  "externalId": external_id,
621
+ "roles": roles,
608
622
  },
609
623
  headers={
610
624
  "content-type": "application/json",
@@ -832,12 +846,13 @@ class AsyncRawContactsClient:
832
846
  self,
833
847
  *,
834
848
  customer_id: str,
835
- first_name: str,
836
- last_name: str,
837
849
  email: str,
850
+ first_name: typing.Optional[str] = OMIT,
851
+ last_name: typing.Optional[str] = OMIT,
838
852
  phone: typing.Optional[str] = OMIT,
839
853
  billing_address: typing.Optional[ContactBillingAddress] = OMIT,
840
854
  external_id: typing.Optional[str] = OMIT,
855
+ roles: typing.Optional[typing.Sequence[CreateContactRequestRolesItem]] = OMIT,
841
856
  request_options: typing.Optional[RequestOptions] = None,
842
857
  ) -> AsyncHttpResponse[Contact]:
843
858
  """
@@ -847,11 +862,11 @@ class AsyncRawContactsClient:
847
862
  ----------
848
863
  customer_id : str
849
864
 
850
- first_name : str
865
+ email : str
851
866
 
852
- last_name : str
867
+ first_name : typing.Optional[str]
853
868
 
854
- email : str
869
+ last_name : typing.Optional[str]
855
870
 
856
871
  phone : typing.Optional[str]
857
872
 
@@ -859,6 +874,8 @@ class AsyncRawContactsClient:
859
874
 
860
875
  external_id : typing.Optional[str]
861
876
 
877
+ roles : typing.Optional[typing.Sequence[CreateContactRequestRolesItem]]
878
+
862
879
  request_options : typing.Optional[RequestOptions]
863
880
  Request-specific configuration.
864
881
 
@@ -880,6 +897,7 @@ class AsyncRawContactsClient:
880
897
  object_=billing_address, annotation=typing.Optional[ContactBillingAddress], direction="write"
881
898
  ),
882
899
  "externalId": external_id,
900
+ "roles": roles,
883
901
  },
884
902
  headers={
885
903
  "content-type": "application/json",
@@ -1017,6 +1035,7 @@ class AsyncRawContactsClient:
1017
1035
  phone: typing.Optional[str] = OMIT,
1018
1036
  billing_address: typing.Optional[ContactBillingAddress] = OMIT,
1019
1037
  external_id: typing.Optional[str] = OMIT,
1038
+ roles: typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]] = OMIT,
1020
1039
  request_options: typing.Optional[RequestOptions] = None,
1021
1040
  ) -> AsyncHttpResponse[Contact]:
1022
1041
  """
@@ -1040,6 +1059,8 @@ class AsyncRawContactsClient:
1040
1059
 
1041
1060
  external_id : typing.Optional[str]
1042
1061
 
1062
+ roles : typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]]
1063
+
1043
1064
  request_options : typing.Optional[RequestOptions]
1044
1065
  Request-specific configuration.
1045
1066
 
@@ -1061,6 +1082,7 @@ class AsyncRawContactsClient:
1061
1082
  object_=billing_address, annotation=typing.Optional[ContactBillingAddress], direction="write"
1062
1083
  ),
1063
1084
  "externalId": external_id,
1085
+ "roles": roles,
1064
1086
  },
1065
1087
  headers={
1066
1088
  "content-type": "application/json",
@@ -1280,6 +1302,7 @@ class AsyncRawContactsClient:
1280
1302
  phone: typing.Optional[str] = OMIT,
1281
1303
  billing_address: typing.Optional[ContactBillingAddress] = OMIT,
1282
1304
  external_id: typing.Optional[str] = OMIT,
1305
+ roles: typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]] = OMIT,
1283
1306
  request_options: typing.Optional[RequestOptions] = None,
1284
1307
  ) -> AsyncHttpResponse[Contact]:
1285
1308
  """
@@ -1303,6 +1326,8 @@ class AsyncRawContactsClient:
1303
1326
 
1304
1327
  external_id : typing.Optional[str]
1305
1328
 
1329
+ roles : typing.Optional[typing.Sequence[UpdateContactRequestRolesItem]]
1330
+
1306
1331
  request_options : typing.Optional[RequestOptions]
1307
1332
  Request-specific configuration.
1308
1333
 
@@ -1324,6 +1349,7 @@ class AsyncRawContactsClient:
1324
1349
  object_=billing_address, annotation=typing.Optional[ContactBillingAddress], direction="write"
1325
1350
  ),
1326
1351
  "externalId": external_id,
1352
+ "roles": roles,
1327
1353
  },
1328
1354
  headers={
1329
1355
  "content-type": "application/json",
@@ -0,0 +1,34 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ # isort: skip_file
4
+
5
+ import typing
6
+ from importlib import import_module
7
+
8
+ if typing.TYPE_CHECKING:
9
+ from .create_contact_request_roles_item import CreateContactRequestRolesItem
10
+ _dynamic_imports: typing.Dict[str, str] = {"CreateContactRequestRolesItem": ".create_contact_request_roles_item"}
11
+
12
+
13
+ def __getattr__(attr_name: str) -> typing.Any:
14
+ module_name = _dynamic_imports.get(attr_name)
15
+ if module_name is None:
16
+ raise AttributeError(f"No {attr_name} found in _dynamic_imports for module name -> {__name__}")
17
+ try:
18
+ module = import_module(module_name, __package__)
19
+ if module_name == f".{attr_name}":
20
+ return module
21
+ else:
22
+ return getattr(module, attr_name)
23
+ except ImportError as e:
24
+ raise ImportError(f"Failed to import {attr_name} from {module_name}: {e}") from e
25
+ except AttributeError as e:
26
+ raise AttributeError(f"Failed to get {attr_name} from {module_name}: {e}") from e
27
+
28
+
29
+ def __dir__():
30
+ lazy_attrs = list(_dynamic_imports.keys())
31
+ return sorted(lazy_attrs)
32
+
33
+
34
+ __all__ = ["CreateContactRequestRolesItem"]
@@ -0,0 +1,5 @@
1
+ # This file was auto-generated by Fern from our API Definition.
2
+
3
+ import typing
4
+
5
+ CreateContactRequestRolesItem = typing.Union[typing.Literal["BILLING", "ACCOUNTS_PAYABLE"], typing.Any]
@@ -24,12 +24,12 @@ class BaseClientWrapper:
24
24
  import platform
25
25
 
26
26
  headers: typing.Dict[str, str] = {
27
- "User-Agent": "paid-python/1.1.0",
27
+ "User-Agent": "paid-python/1.2.0",
28
28
  "X-Fern-Language": "Python",
29
29
  "X-Fern-Runtime": f"python/{platform.python_version()}",
30
30
  "X-Fern-Platform": f"{platform.system().lower()}/{platform.release()}",
31
31
  "X-Fern-SDK-Name": "paid-python",
32
- "X-Fern-SDK-Version": "1.1.0",
32
+ "X-Fern-SDK-Version": "1.2.0",
33
33
  **(self.get_custom_headers() or {}),
34
34
  }
35
35
  headers["Authorization"] = f"Bearer {self._get_token()}"
@@ -80,6 +80,7 @@ class CustomersClient:
80
80
  creation_state: typing.Optional[CustomerCreationState] = OMIT,
81
81
  vat_number: typing.Optional[str] = OMIT,
82
82
  metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
83
+ default_currency: typing.Optional[str] = OMIT,
83
84
  request_options: typing.Optional[RequestOptions] = None,
84
85
  ) -> Customer:
85
86
  """
@@ -107,6 +108,8 @@ class CustomersClient:
107
108
 
108
109
  metadata : typing.Optional[typing.Dict[str, typing.Any]]
109
110
 
111
+ default_currency : typing.Optional[str]
112
+
110
113
  request_options : typing.Optional[RequestOptions]
111
114
  Request-specific configuration.
112
115
 
@@ -137,6 +140,7 @@ class CustomersClient:
137
140
  creation_state=creation_state,
138
141
  vat_number=vat_number,
139
142
  metadata=metadata,
143
+ default_currency=default_currency,
140
144
  request_options=request_options,
141
145
  )
142
146
  return _response.data
@@ -504,6 +508,7 @@ class AsyncCustomersClient:
504
508
  creation_state: typing.Optional[CustomerCreationState] = OMIT,
505
509
  vat_number: typing.Optional[str] = OMIT,
506
510
  metadata: typing.Optional[typing.Dict[str, typing.Any]] = OMIT,
511
+ default_currency: typing.Optional[str] = OMIT,
507
512
  request_options: typing.Optional[RequestOptions] = None,
508
513
  ) -> Customer:
509
514
  """
@@ -531,6 +536,8 @@ class AsyncCustomersClient:
531
536
 
532
537
  metadata : typing.Optional[typing.Dict[str, typing.Any]]
533
538
 
539
+ default_currency : typing.Optional[str]
540
+
534
541
  request_options : typing.Optional[RequestOptions]
535
542
  Request-specific configuration.
536
543
 
@@ -569,6 +576,7 @@ class AsyncCustomersClient:
569
576
  creation_state=creation_state,
570
577
  vat_number=vat_number,
571
578
  metadata=metadata,
579
+ default_currency=default_currency,
572
580
  request_options=request_options,
573
581
  )
574
582
  return _response.data