aiinbx 0.5.1__tar.gz → 0.23.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 (103) hide show
  1. aiinbx-0.23.0/.release-please-manifest.json +3 -0
  2. aiinbx-0.23.0/CHANGELOG.md +267 -0
  3. {aiinbx-0.5.1 → aiinbx-0.23.0}/PKG-INFO +4 -5
  4. {aiinbx-0.5.1 → aiinbx-0.23.0}/README.md +2 -2
  5. {aiinbx-0.5.1 → aiinbx-0.23.0}/pyproject.toml +3 -4
  6. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_models.py +37 -15
  7. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_utils/_sync.py +3 -31
  8. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_utils/_utils.py +1 -1
  9. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_version.py +1 -1
  10. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/resources/emails.py +9 -1
  11. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/resources/threads.py +5 -1
  12. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/domain_list_response.py +2 -0
  13. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/domain_retrieve_response.py +2 -0
  14. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/domain_verify_response.py +2 -0
  15. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/email_reply_params.py +17 -3
  16. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/email_send_params.py +17 -3
  17. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/thread_forward_params.py +17 -3
  18. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/api_resources/test_emails.py +36 -0
  19. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/api_resources/test_threads.py +18 -0
  20. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/test_client.py +198 -164
  21. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/test_models.py +4 -4
  22. aiinbx-0.5.1/.release-please-manifest.json +0 -3
  23. aiinbx-0.5.1/CHANGELOG.md +0 -92
  24. {aiinbx-0.5.1 → aiinbx-0.23.0}/.gitignore +0 -0
  25. {aiinbx-0.5.1 → aiinbx-0.23.0}/CONTRIBUTING.md +0 -0
  26. {aiinbx-0.5.1 → aiinbx-0.23.0}/LICENSE +0 -0
  27. {aiinbx-0.5.1 → aiinbx-0.23.0}/SECURITY.md +0 -0
  28. {aiinbx-0.5.1 → aiinbx-0.23.0}/api.md +0 -0
  29. {aiinbx-0.5.1 → aiinbx-0.23.0}/bin/check-release-environment +0 -0
  30. {aiinbx-0.5.1 → aiinbx-0.23.0}/bin/publish-pypi +0 -0
  31. {aiinbx-0.5.1 → aiinbx-0.23.0}/examples/.keep +0 -0
  32. {aiinbx-0.5.1 → aiinbx-0.23.0}/noxfile.py +0 -0
  33. {aiinbx-0.5.1 → aiinbx-0.23.0}/release-please-config.json +0 -0
  34. {aiinbx-0.5.1 → aiinbx-0.23.0}/requirements-dev.lock +0 -0
  35. {aiinbx-0.5.1 → aiinbx-0.23.0}/requirements.lock +0 -0
  36. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/ai_inbx/lib/.keep +0 -0
  37. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/__init__.py +0 -0
  38. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_base_client.py +0 -0
  39. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_client.py +0 -0
  40. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_compat.py +0 -0
  41. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_constants.py +0 -0
  42. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_exceptions.py +0 -0
  43. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_files.py +0 -0
  44. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_qs.py +0 -0
  45. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_resource.py +0 -0
  46. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_response.py +0 -0
  47. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_streaming.py +0 -0
  48. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_types.py +0 -0
  49. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_utils/__init__.py +0 -0
  50. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_utils/_compat.py +0 -0
  51. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_utils/_datetime_parse.py +0 -0
  52. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_utils/_logs.py +0 -0
  53. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_utils/_proxy.py +0 -0
  54. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_utils/_reflection.py +0 -0
  55. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_utils/_resources_proxy.py +0 -0
  56. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_utils/_streams.py +0 -0
  57. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_utils/_transform.py +0 -0
  58. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/_utils/_typing.py +0 -0
  59. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/lib/.keep +0 -0
  60. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/py.typed +0 -0
  61. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/resources/__init__.py +0 -0
  62. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/resources/domains.py +0 -0
  63. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/resources/meta.py +0 -0
  64. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/resources/webhooks.py +0 -0
  65. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/__init__.py +0 -0
  66. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/domain_create_params.py +0 -0
  67. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/domain_create_response.py +0 -0
  68. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/domain_delete_response.py +0 -0
  69. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/email_reply_response.py +0 -0
  70. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/email_retrieve_response.py +0 -0
  71. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/email_send_response.py +0 -0
  72. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/inbound_email_received_webhook_event.py +0 -0
  73. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/meta_webhooks_schema_response.py +0 -0
  74. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/outbound_email_bounced_webhook_event.py +0 -0
  75. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/outbound_email_clicked_webhook_event.py +0 -0
  76. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/outbound_email_complained_webhook_event.py +0 -0
  77. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/outbound_email_delivered_webhook_event.py +0 -0
  78. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/outbound_email_opened_webhook_event.py +0 -0
  79. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/outbound_email_rejected_webhook_event.py +0 -0
  80. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/thread_forward_response.py +0 -0
  81. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/thread_retrieve_response.py +0 -0
  82. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/thread_search_params.py +0 -0
  83. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/thread_search_response.py +0 -0
  84. {aiinbx-0.5.1 → aiinbx-0.23.0}/src/aiinbx/types/unwrap_webhook_event.py +0 -0
  85. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/__init__.py +0 -0
  86. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/api_resources/__init__.py +0 -0
  87. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/api_resources/test_domains.py +0 -0
  88. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/api_resources/test_meta.py +0 -0
  89. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/api_resources/test_webhooks.py +0 -0
  90. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/conftest.py +0 -0
  91. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/sample_file.txt +0 -0
  92. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/test_deepcopy.py +0 -0
  93. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/test_extract_files.py +0 -0
  94. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/test_files.py +0 -0
  95. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/test_qs.py +0 -0
  96. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/test_required_args.py +0 -0
  97. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/test_response.py +0 -0
  98. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/test_streaming.py +0 -0
  99. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/test_transform.py +0 -0
  100. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/test_utils/test_datetime_parse.py +0 -0
  101. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/test_utils/test_proxy.py +0 -0
  102. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/test_utils/test_typing.py +0 -0
  103. {aiinbx-0.5.1 → aiinbx-0.23.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "0.23.0"
3
+ }
@@ -0,0 +1,267 @@
1
+ # Changelog
2
+
3
+ ## 0.23.0 (2025-11-17)
4
+
5
+ Full Changelog: [v0.22.0...v0.23.0](https://github.com/aiinbx/aiinbx-py/compare/v0.22.0...v0.23.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** api update ([4bd1404](https://github.com/aiinbx/aiinbx-py/commit/4bd14043d5d312aea548de04165cd4a94b838321))
10
+
11
+ ## 0.22.0 (2025-11-17)
12
+
13
+ Full Changelog: [v0.21.0...v0.22.0](https://github.com/aiinbx/aiinbx-py/compare/v0.21.0...v0.22.0)
14
+
15
+ ### Features
16
+
17
+ * **api:** api update ([77853f3](https://github.com/aiinbx/aiinbx-py/commit/77853f3028819561553f4d00a200d9eacc5ef089))
18
+
19
+ ## 0.21.0 (2025-11-17)
20
+
21
+ Full Changelog: [v0.20.0...v0.21.0](https://github.com/aiinbx/aiinbx-py/compare/v0.20.0...v0.21.0)
22
+
23
+ ### Features
24
+
25
+ * **api:** api update ([6bbbe93](https://github.com/aiinbx/aiinbx-py/commit/6bbbe93fa42c2facf5c6b1d84ba32bf47658c300))
26
+
27
+ ## 0.20.0 (2025-11-16)
28
+
29
+ Full Changelog: [v0.19.0...v0.20.0](https://github.com/aiinbx/aiinbx-py/compare/v0.19.0...v0.20.0)
30
+
31
+ ### Features
32
+
33
+ * **api:** api update ([87c105a](https://github.com/aiinbx/aiinbx-py/commit/87c105a99df202f9a3dc388b0cfe078251998d5f))
34
+
35
+ ## 0.19.0 (2025-11-16)
36
+
37
+ Full Changelog: [v0.18.0...v0.19.0](https://github.com/aiinbx/aiinbx-py/compare/v0.18.0...v0.19.0)
38
+
39
+ ### Features
40
+
41
+ * **api:** api update ([07beb52](https://github.com/aiinbx/aiinbx-py/commit/07beb52d40745cbcf5193c85a7efbdc90ad1ef31))
42
+
43
+ ## 0.18.0 (2025-11-16)
44
+
45
+ Full Changelog: [v0.17.0...v0.18.0](https://github.com/aiinbx/aiinbx-py/compare/v0.17.0...v0.18.0)
46
+
47
+ ### Features
48
+
49
+ * **api:** api update ([24490c8](https://github.com/aiinbx/aiinbx-py/commit/24490c8805342f13b6ff919d27feaf0d7dfb71ed))
50
+
51
+ ## 0.17.0 (2025-11-16)
52
+
53
+ Full Changelog: [v0.16.0...v0.17.0](https://github.com/aiinbx/aiinbx-py/compare/v0.16.0...v0.17.0)
54
+
55
+ ### Features
56
+
57
+ * **api:** api update ([4db8f52](https://github.com/aiinbx/aiinbx-py/commit/4db8f52e507e287f71e36f2ce1816e7147d97d39))
58
+
59
+ ## 0.16.0 (2025-11-16)
60
+
61
+ Full Changelog: [v0.15.0...v0.16.0](https://github.com/aiinbx/aiinbx-py/compare/v0.15.0...v0.16.0)
62
+
63
+ ### Features
64
+
65
+ * **api:** api update ([b423628](https://github.com/aiinbx/aiinbx-py/commit/b423628767b266a14d0e9b385d6ed057dfae1f78))
66
+
67
+ ## 0.15.0 (2025-11-16)
68
+
69
+ Full Changelog: [v0.14.0...v0.15.0](https://github.com/aiinbx/aiinbx-py/compare/v0.14.0...v0.15.0)
70
+
71
+ ### Features
72
+
73
+ * **api:** api update ([e85c831](https://github.com/aiinbx/aiinbx-py/commit/e85c831870cdc8e101cd4c08ab665babda9fe089))
74
+
75
+ ## 0.14.0 (2025-11-16)
76
+
77
+ Full Changelog: [v0.13.0...v0.14.0](https://github.com/aiinbx/aiinbx-py/compare/v0.13.0...v0.14.0)
78
+
79
+ ### Features
80
+
81
+ * **api:** api update ([4f72d75](https://github.com/aiinbx/aiinbx-py/commit/4f72d758e209039a5293d53750b224c18ca8025a))
82
+
83
+ ## 0.13.0 (2025-11-16)
84
+
85
+ Full Changelog: [v0.12.0...v0.13.0](https://github.com/aiinbx/aiinbx-py/compare/v0.12.0...v0.13.0)
86
+
87
+ ### Features
88
+
89
+ * **api:** api update ([13b6d23](https://github.com/aiinbx/aiinbx-py/commit/13b6d23df33c278b1f17ab41a0df7495500bf553))
90
+
91
+ ## 0.12.0 (2025-11-16)
92
+
93
+ Full Changelog: [v0.11.0...v0.12.0](https://github.com/aiinbx/aiinbx-py/compare/v0.11.0...v0.12.0)
94
+
95
+ ### Features
96
+
97
+ * **api:** api update ([f2d9176](https://github.com/aiinbx/aiinbx-py/commit/f2d91769b6ab82a2a234f76b59f9b273d7850c8d))
98
+
99
+ ## 0.11.0 (2025-11-15)
100
+
101
+ Full Changelog: [v0.10.0...v0.11.0](https://github.com/aiinbx/aiinbx-py/compare/v0.10.0...v0.11.0)
102
+
103
+ ### Features
104
+
105
+ * **api:** api update ([1bf1047](https://github.com/aiinbx/aiinbx-py/commit/1bf1047914ccbdb79141933797ee2153f57928a2))
106
+
107
+ ## 0.10.0 (2025-11-15)
108
+
109
+ Full Changelog: [v0.9.0...v0.10.0](https://github.com/aiinbx/aiinbx-py/compare/v0.9.0...v0.10.0)
110
+
111
+ ### Features
112
+
113
+ * **api:** api update ([ef0d36f](https://github.com/aiinbx/aiinbx-py/commit/ef0d36f67a8254350e4d6d08e2ea340666df5286))
114
+
115
+ ## 0.9.0 (2025-11-15)
116
+
117
+ Full Changelog: [v0.8.0...v0.9.0](https://github.com/aiinbx/aiinbx-py/compare/v0.8.0...v0.9.0)
118
+
119
+ ### Features
120
+
121
+ * **api:** api update ([43ed250](https://github.com/aiinbx/aiinbx-py/commit/43ed250785d0b96f48c3a46b6db9b017f080aebc))
122
+
123
+ ## 0.8.0 (2025-11-15)
124
+
125
+ Full Changelog: [v0.7.2...v0.8.0](https://github.com/aiinbx/aiinbx-py/compare/v0.7.2...v0.8.0)
126
+
127
+ ### Features
128
+
129
+ * **api:** api update ([73ba8b5](https://github.com/aiinbx/aiinbx-py/commit/73ba8b5c88cf196e502f10cf975dd5c58620fd90))
130
+
131
+ ## 0.7.2 (2025-11-12)
132
+
133
+ Full Changelog: [v0.7.1...v0.7.2](https://github.com/aiinbx/aiinbx-py/compare/v0.7.1...v0.7.2)
134
+
135
+ ### Bug Fixes
136
+
137
+ * **compat:** update signatures of `model_dump` and `model_dump_json` for Pydantic v1 ([63fdaba](https://github.com/aiinbx/aiinbx-py/commit/63fdaba20d9bfe35d1d1358ef229d28c222b5ecf))
138
+
139
+ ## 0.7.1 (2025-11-11)
140
+
141
+ Full Changelog: [v0.7.0...v0.7.1](https://github.com/aiinbx/aiinbx-py/compare/v0.7.0...v0.7.1)
142
+
143
+ ### Bug Fixes
144
+
145
+ * compat with Python 3.14 ([17da3dd](https://github.com/aiinbx/aiinbx-py/commit/17da3dd00711f92f515ab05562b79eb784d0ce24))
146
+
147
+
148
+ ### Chores
149
+
150
+ * **internal:** codegen related update ([2976852](https://github.com/aiinbx/aiinbx-py/commit/2976852cdedba8ffdaed6879fd51d87708419503))
151
+
152
+ ## 0.7.0 (2025-11-04)
153
+
154
+ Full Changelog: [v0.6.0...v0.7.0](https://github.com/aiinbx/aiinbx-py/compare/v0.6.0...v0.7.0)
155
+
156
+ ### Features
157
+
158
+ * **api:** api update ([0f82ed1](https://github.com/aiinbx/aiinbx-py/commit/0f82ed1bf1a6d34c2e63ecbc9cf0a5b43f53e89a))
159
+
160
+
161
+ ### Chores
162
+
163
+ * **internal:** grammar fix (it's -> its) ([4398c76](https://github.com/aiinbx/aiinbx-py/commit/4398c76c2f4f5cd115df6f40f9948dc9d439a9b6))
164
+
165
+ ## 0.6.0 (2025-10-31)
166
+
167
+ Full Changelog: [v0.5.1...v0.6.0](https://github.com/aiinbx/aiinbx-py/compare/v0.5.1...v0.6.0)
168
+
169
+ ### Features
170
+
171
+ * **api:** api update ([e0ee97a](https://github.com/aiinbx/aiinbx-py/commit/e0ee97a7568dc6839f1c011b5312ec34ce3d9f7d))
172
+
173
+
174
+ ### Chores
175
+
176
+ * **internal/tests:** avoid race condition with implicit client cleanup ([4cf6938](https://github.com/aiinbx/aiinbx-py/commit/4cf6938564097419455a6219e0b217e7921a9ea2))
177
+
178
+ ## 0.5.1 (2025-10-30)
179
+
180
+ Full Changelog: [v0.5.0...v0.5.1](https://github.com/aiinbx/aiinbx-py/compare/v0.5.0...v0.5.1)
181
+
182
+ ### Bug Fixes
183
+
184
+ * **client:** close streams without requiring full consumption ([d824bbb](https://github.com/aiinbx/aiinbx-py/commit/d824bbbd517355748039bf7f5edfbee0e802a606))
185
+
186
+
187
+ ### Chores
188
+
189
+ * bump `httpx-aiohttp` version to 0.1.9 ([8c932fb](https://github.com/aiinbx/aiinbx-py/commit/8c932fb49aa74fe9174deb5c7b4e71cccd41f119))
190
+
191
+ ## 0.5.0 (2025-10-15)
192
+
193
+ Full Changelog: [v0.4.0...v0.5.0](https://github.com/aiinbx/aiinbx-py/compare/v0.4.0...v0.5.0)
194
+
195
+ ### Features
196
+
197
+ * **api:** manual updates ([ddacc81](https://github.com/aiinbx/aiinbx-py/commit/ddacc8158fd4079c1ee4b8ae04f89f22e2fcd46a))
198
+
199
+
200
+ ### Chores
201
+
202
+ * **internal:** detect missing future annotations with ruff ([6f6a3da](https://github.com/aiinbx/aiinbx-py/commit/6f6a3da5978b34e1a2959b38715d4311474f1c5e))
203
+
204
+ ## 0.4.0 (2025-10-05)
205
+
206
+ Full Changelog: [v0.3.0...v0.4.0](https://github.com/aiinbx/aiinbx-py/compare/v0.3.0...v0.4.0)
207
+
208
+ ### Features
209
+
210
+ * **api:** manual updates ([601d5ea](https://github.com/aiinbx/aiinbx-py/commit/601d5eade9216549a200c26584a2cc18176835fd))
211
+ * improve future compat with pydantic v3 ([dcc1c80](https://github.com/aiinbx/aiinbx-py/commit/dcc1c804ec998e7948395f7c1ea3aac371a539fb))
212
+ * **types:** replace List[str] with SequenceNotStr in params ([a31a999](https://github.com/aiinbx/aiinbx-py/commit/a31a999a8dd553a067fdd4368d147f773418dc02))
213
+
214
+
215
+ ### Chores
216
+
217
+ * do not install brew dependencies in ./scripts/bootstrap by default ([b4c08e3](https://github.com/aiinbx/aiinbx-py/commit/b4c08e37dfa25b784a2cd7d5e9778f3318c365b9))
218
+ * **internal:** add Sequence related utils ([879c21a](https://github.com/aiinbx/aiinbx-py/commit/879c21ac262c2c10c0e1bfa03d5d1c40470f889b))
219
+ * **internal:** move mypy configurations to `pyproject.toml` file ([3108a79](https://github.com/aiinbx/aiinbx-py/commit/3108a794e35f868d1e21a210abbda837eecc64d1))
220
+ * **internal:** update pydantic dependency ([6dcd694](https://github.com/aiinbx/aiinbx-py/commit/6dcd694e2ab6b8246892ebef85e95bff9b0338a9))
221
+ * **tests:** simplify `get_platform` test ([0f14d8c](https://github.com/aiinbx/aiinbx-py/commit/0f14d8cd43342f3fda7ccda30717c01d20679593))
222
+ * **types:** change optional parameter type from NotGiven to Omit ([1b12faa](https://github.com/aiinbx/aiinbx-py/commit/1b12faa48dbcc8fedf5dc8e4a410c58fcfac7853))
223
+
224
+ ## 0.3.0 (2025-08-28)
225
+
226
+ Full Changelog: [v0.2.0...v0.3.0](https://github.com/aiinbx/aiinbx-py/compare/v0.2.0...v0.3.0)
227
+
228
+ ### Features
229
+
230
+ * **api:** api update ([2de3cb7](https://github.com/aiinbx/aiinbx-py/commit/2de3cb73d4178e81925fd6d04b3683b81e7da30d))
231
+
232
+ ## 0.2.0 (2025-08-28)
233
+
234
+ Full Changelog: [v0.1.1...v0.2.0](https://github.com/aiinbx/aiinbx-py/compare/v0.1.1...v0.2.0)
235
+
236
+ ### Features
237
+
238
+ * **api:** manual updates ([f4e60fe](https://github.com/aiinbx/aiinbx-py/commit/f4e60fed47de83248dbcef3cd28590643c0b9bff))
239
+
240
+ ## 0.1.1 (2025-08-27)
241
+
242
+ Full Changelog: [v0.1.0...v0.1.1](https://github.com/aiinbx/aiinbx-py/compare/v0.1.0...v0.1.1)
243
+
244
+ ### Bug Fixes
245
+
246
+ * avoid newer type syntax ([85f2191](https://github.com/aiinbx/aiinbx-py/commit/85f21914439dbd7e3ef751a1010eaf023b33ef70))
247
+
248
+
249
+ ### Chores
250
+
251
+ * **internal:** change ci workflow machines ([7e210c5](https://github.com/aiinbx/aiinbx-py/commit/7e210c590a8a7659cbbf3f087b869ca580bd9b1b))
252
+ * **internal:** update pyright exclude list ([a4d4c96](https://github.com/aiinbx/aiinbx-py/commit/a4d4c9626f42577c535516072216bc82c6b2d551))
253
+ * update github action ([d06abee](https://github.com/aiinbx/aiinbx-py/commit/d06abee5f995ce020da7ab44160eaab348c8c18a))
254
+
255
+ ## 0.1.0 (2025-08-13)
256
+
257
+ Full Changelog: [v0.0.1...v0.1.0](https://github.com/aiinbx/aiinbx-py/compare/v0.0.1...v0.1.0)
258
+
259
+ ### Features
260
+
261
+ * **api:** manual updates ([9f338c0](https://github.com/aiinbx/aiinbx-py/commit/9f338c08cf76e9482a9529c761654cdd250483ea))
262
+
263
+
264
+ ### Chores
265
+
266
+ * configure new SDK language ([3cc34fc](https://github.com/aiinbx/aiinbx-py/commit/3cc34fcf8b0325986076726a774c419992b5aafa))
267
+ * update SDK settings ([9251ee7](https://github.com/aiinbx/aiinbx-py/commit/9251ee7b47185255692e59f672e6158f4af32541))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: aiinbx
3
- Version: 0.5.1
3
+ Version: 0.23.0
4
4
  Summary: The official Python library for the AIInbx API
5
5
  Project-URL: Homepage, https://github.com/aiinbx/aiinbx-py
6
6
  Project-URL: Repository, https://github.com/aiinbx/aiinbx-py
@@ -13,7 +13,6 @@ Classifier: Operating System :: Microsoft :: Windows
13
13
  Classifier: Operating System :: OS Independent
14
14
  Classifier: Operating System :: POSIX
15
15
  Classifier: Operating System :: POSIX :: Linux
16
- Classifier: Programming Language :: Python :: 3.8
17
16
  Classifier: Programming Language :: Python :: 3.9
18
17
  Classifier: Programming Language :: Python :: 3.10
19
18
  Classifier: Programming Language :: Python :: 3.11
@@ -21,7 +20,7 @@ Classifier: Programming Language :: Python :: 3.12
21
20
  Classifier: Programming Language :: Python :: 3.13
22
21
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
23
22
  Classifier: Typing :: Typed
24
- Requires-Python: >=3.8
23
+ Requires-Python: >=3.9
25
24
  Requires-Dist: anyio<5,>=3.5.0
26
25
  Requires-Dist: distro<2,>=1.7.0
27
26
  Requires-Dist: httpx<1,>=0.23.0
@@ -38,7 +37,7 @@ Description-Content-Type: text/markdown
38
37
  <!-- prettier-ignore -->
39
38
  [![PyPI version](https://img.shields.io/pypi/v/aiinbx.svg?label=pypi%20(stable))](https://pypi.org/project/aiinbx/)
40
39
 
41
- The AI Inbx Python library provides convenient access to the AI Inbx REST API from any Python 3.8+
40
+ The AI Inbx Python library provides convenient access to the AI Inbx REST API from any Python 3.9+
42
41
  application. The library includes type definitions for all request params and response fields,
43
42
  and offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx).
44
43
 
@@ -391,7 +390,7 @@ print(aiinbx.__version__)
391
390
 
392
391
  ## Requirements
393
392
 
394
- Python 3.8 or higher.
393
+ Python 3.9 or higher.
395
394
 
396
395
  ## Contributing
397
396
 
@@ -3,7 +3,7 @@
3
3
  <!-- prettier-ignore -->
4
4
  [![PyPI version](https://img.shields.io/pypi/v/aiinbx.svg?label=pypi%20(stable))](https://pypi.org/project/aiinbx/)
5
5
 
6
- The AI Inbx Python library provides convenient access to the AI Inbx REST API from any Python 3.8+
6
+ The AI Inbx Python library provides convenient access to the AI Inbx REST API from any Python 3.9+
7
7
  application. The library includes type definitions for all request params and response fields,
8
8
  and offers both synchronous and asynchronous clients powered by [httpx](https://github.com/encode/httpx).
9
9
 
@@ -356,7 +356,7 @@ print(aiinbx.__version__)
356
356
 
357
357
  ## Requirements
358
358
 
359
- Python 3.8 or higher.
359
+ Python 3.9 or higher.
360
360
 
361
361
  ## Contributing
362
362
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "aiinbx"
3
- version = "0.5.1"
3
+ version = "0.23.0"
4
4
  description = "The official Python library for the AIInbx API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -15,11 +15,10 @@ dependencies = [
15
15
  "distro>=1.7.0, <2",
16
16
  "sniffio",
17
17
  ]
18
- requires-python = ">= 3.8"
18
+ requires-python = ">= 3.9"
19
19
  classifiers = [
20
20
  "Typing :: Typed",
21
21
  "Intended Audience :: Developers",
22
- "Programming Language :: Python :: 3.8",
23
22
  "Programming Language :: Python :: 3.9",
24
23
  "Programming Language :: Python :: 3.10",
25
24
  "Programming Language :: Python :: 3.11",
@@ -141,7 +140,7 @@ filterwarnings = [
141
140
  # there are a couple of flags that are still disabled by
142
141
  # default in strict mode as they are experimental and niche.
143
142
  typeCheckingMode = "strict"
144
- pythonVersion = "3.8"
143
+ pythonVersion = "3.9"
145
144
 
146
145
  exclude = [
147
146
  "_dev",
@@ -2,6 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  import os
4
4
  import inspect
5
+ import weakref
5
6
  from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, Optional, cast
6
7
  from datetime import date, datetime
7
8
  from typing_extensions import (
@@ -256,15 +257,16 @@ class BaseModel(pydantic.BaseModel):
256
257
  mode: Literal["json", "python"] | str = "python",
257
258
  include: IncEx | None = None,
258
259
  exclude: IncEx | None = None,
260
+ context: Any | None = None,
259
261
  by_alias: bool | None = None,
260
262
  exclude_unset: bool = False,
261
263
  exclude_defaults: bool = False,
262
264
  exclude_none: bool = False,
265
+ exclude_computed_fields: bool = False,
263
266
  round_trip: bool = False,
264
267
  warnings: bool | Literal["none", "warn", "error"] = True,
265
- context: dict[str, Any] | None = None,
266
- serialize_as_any: bool = False,
267
268
  fallback: Callable[[Any], Any] | None = None,
269
+ serialize_as_any: bool = False,
268
270
  ) -> dict[str, Any]:
269
271
  """Usage docs: https://docs.pydantic.dev/2.4/concepts/serialization/#modelmodel_dump
270
272
 
@@ -272,16 +274,24 @@ class BaseModel(pydantic.BaseModel):
272
274
 
273
275
  Args:
274
276
  mode: The mode in which `to_python` should run.
275
- If mode is 'json', the dictionary will only contain JSON serializable types.
276
- If mode is 'python', the dictionary may contain any Python objects.
277
- include: A list of fields to include in the output.
278
- exclude: A list of fields to exclude from the output.
277
+ If mode is 'json', the output will only contain JSON serializable types.
278
+ If mode is 'python', the output may contain non-JSON-serializable Python objects.
279
+ include: A set of fields to include in the output.
280
+ exclude: A set of fields to exclude from the output.
281
+ context: Additional context to pass to the serializer.
279
282
  by_alias: Whether to use the field's alias in the dictionary key if defined.
280
- exclude_unset: Whether to exclude fields that are unset or None from the output.
281
- exclude_defaults: Whether to exclude fields that are set to their default value from the output.
282
- exclude_none: Whether to exclude fields that have a value of `None` from the output.
283
- round_trip: Whether to enable serialization and deserialization round-trip support.
284
- warnings: Whether to log warnings when invalid fields are encountered.
283
+ exclude_unset: Whether to exclude fields that have not been explicitly set.
284
+ exclude_defaults: Whether to exclude fields that are set to their default value.
285
+ exclude_none: Whether to exclude fields that have a value of `None`.
286
+ exclude_computed_fields: Whether to exclude computed fields.
287
+ While this can be useful for round-tripping, it is usually recommended to use the dedicated
288
+ `round_trip` parameter instead.
289
+ round_trip: If True, dumped values should be valid as input for non-idempotent types such as Json[T].
290
+ warnings: How to handle serialization errors. False/"none" ignores them, True/"warn" logs errors,
291
+ "error" raises a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError].
292
+ fallback: A function to call when an unknown value is encountered. If not provided,
293
+ a [`PydanticSerializationError`][pydantic_core.PydanticSerializationError] error is raised.
294
+ serialize_as_any: Whether to serialize fields with duck-typing serialization behavior.
285
295
 
286
296
  Returns:
287
297
  A dictionary representation of the model.
@@ -298,6 +308,8 @@ class BaseModel(pydantic.BaseModel):
298
308
  raise ValueError("serialize_as_any is only supported in Pydantic v2")
299
309
  if fallback is not None:
300
310
  raise ValueError("fallback is only supported in Pydantic v2")
311
+ if exclude_computed_fields != False:
312
+ raise ValueError("exclude_computed_fields is only supported in Pydantic v2")
301
313
  dumped = super().dict( # pyright: ignore[reportDeprecated]
302
314
  include=include,
303
315
  exclude=exclude,
@@ -314,15 +326,17 @@ class BaseModel(pydantic.BaseModel):
314
326
  self,
315
327
  *,
316
328
  indent: int | None = None,
329
+ ensure_ascii: bool = False,
317
330
  include: IncEx | None = None,
318
331
  exclude: IncEx | None = None,
332
+ context: Any | None = None,
319
333
  by_alias: bool | None = None,
320
334
  exclude_unset: bool = False,
321
335
  exclude_defaults: bool = False,
322
336
  exclude_none: bool = False,
337
+ exclude_computed_fields: bool = False,
323
338
  round_trip: bool = False,
324
339
  warnings: bool | Literal["none", "warn", "error"] = True,
325
- context: dict[str, Any] | None = None,
326
340
  fallback: Callable[[Any], Any] | None = None,
327
341
  serialize_as_any: bool = False,
328
342
  ) -> str:
@@ -354,6 +368,10 @@ class BaseModel(pydantic.BaseModel):
354
368
  raise ValueError("serialize_as_any is only supported in Pydantic v2")
355
369
  if fallback is not None:
356
370
  raise ValueError("fallback is only supported in Pydantic v2")
371
+ if ensure_ascii != False:
372
+ raise ValueError("ensure_ascii is only supported in Pydantic v2")
373
+ if exclude_computed_fields != False:
374
+ raise ValueError("exclude_computed_fields is only supported in Pydantic v2")
357
375
  return super().json( # type: ignore[reportDeprecated]
358
376
  indent=indent,
359
377
  include=include,
@@ -573,6 +591,9 @@ class CachedDiscriminatorType(Protocol):
573
591
  __discriminator__: DiscriminatorDetails
574
592
 
575
593
 
594
+ DISCRIMINATOR_CACHE: weakref.WeakKeyDictionary[type, DiscriminatorDetails] = weakref.WeakKeyDictionary()
595
+
596
+
576
597
  class DiscriminatorDetails:
577
598
  field_name: str
578
599
  """The name of the discriminator field in the variant class, e.g.
@@ -615,8 +636,9 @@ class DiscriminatorDetails:
615
636
 
616
637
 
617
638
  def _build_discriminated_union_meta(*, union: type, meta_annotations: tuple[Any, ...]) -> DiscriminatorDetails | None:
618
- if isinstance(union, CachedDiscriminatorType):
619
- return union.__discriminator__
639
+ cached = DISCRIMINATOR_CACHE.get(union)
640
+ if cached is not None:
641
+ return cached
620
642
 
621
643
  discriminator_field_name: str | None = None
622
644
 
@@ -669,7 +691,7 @@ def _build_discriminated_union_meta(*, union: type, meta_annotations: tuple[Any,
669
691
  discriminator_field=discriminator_field_name,
670
692
  discriminator_alias=discriminator_alias,
671
693
  )
672
- cast(CachedDiscriminatorType, union).__discriminator__ = details
694
+ DISCRIMINATOR_CACHE.setdefault(union, details)
673
695
  return details
674
696
 
675
697
 
@@ -1,10 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
- import sys
4
3
  import asyncio
5
4
  import functools
6
- import contextvars
7
- from typing import Any, TypeVar, Callable, Awaitable
5
+ from typing import TypeVar, Callable, Awaitable
8
6
  from typing_extensions import ParamSpec
9
7
 
10
8
  import anyio
@@ -15,34 +13,11 @@ T_Retval = TypeVar("T_Retval")
15
13
  T_ParamSpec = ParamSpec("T_ParamSpec")
16
14
 
17
15
 
18
- if sys.version_info >= (3, 9):
19
- _asyncio_to_thread = asyncio.to_thread
20
- else:
21
- # backport of https://docs.python.org/3/library/asyncio-task.html#asyncio.to_thread
22
- # for Python 3.8 support
23
- async def _asyncio_to_thread(
24
- func: Callable[T_ParamSpec, T_Retval], /, *args: T_ParamSpec.args, **kwargs: T_ParamSpec.kwargs
25
- ) -> Any:
26
- """Asynchronously run function *func* in a separate thread.
27
-
28
- Any *args and **kwargs supplied for this function are directly passed
29
- to *func*. Also, the current :class:`contextvars.Context` is propagated,
30
- allowing context variables from the main thread to be accessed in the
31
- separate thread.
32
-
33
- Returns a coroutine that can be awaited to get the eventual result of *func*.
34
- """
35
- loop = asyncio.events.get_running_loop()
36
- ctx = contextvars.copy_context()
37
- func_call = functools.partial(ctx.run, func, *args, **kwargs)
38
- return await loop.run_in_executor(None, func_call)
39
-
40
-
41
16
  async def to_thread(
42
17
  func: Callable[T_ParamSpec, T_Retval], /, *args: T_ParamSpec.args, **kwargs: T_ParamSpec.kwargs
43
18
  ) -> T_Retval:
44
19
  if sniffio.current_async_library() == "asyncio":
45
- return await _asyncio_to_thread(func, *args, **kwargs)
20
+ return await asyncio.to_thread(func, *args, **kwargs)
46
21
 
47
22
  return await anyio.to_thread.run_sync(
48
23
  functools.partial(func, *args, **kwargs),
@@ -53,10 +28,7 @@ async def to_thread(
53
28
  def asyncify(function: Callable[T_ParamSpec, T_Retval]) -> Callable[T_ParamSpec, Awaitable[T_Retval]]:
54
29
  """
55
30
  Take a blocking function and create an async one that receives the same
56
- positional and keyword arguments. For python version 3.9 and above, it uses
57
- asyncio.to_thread to run the function in a separate thread. For python version
58
- 3.8, it uses locally defined copy of the asyncio.to_thread function which was
59
- introduced in python 3.9.
31
+ positional and keyword arguments.
60
32
 
61
33
  Usage:
62
34
 
@@ -133,7 +133,7 @@ def is_given(obj: _T | NotGiven | Omit) -> TypeGuard[_T]:
133
133
  # Type safe methods for narrowing types with TypeVars.
134
134
  # The default narrowing for isinstance(obj, dict) is dict[unknown, unknown],
135
135
  # however this cause Pyright to rightfully report errors. As we know we don't
136
- # care about the contained types we can safely use `object` in it's place.
136
+ # care about the contained types we can safely use `object` in its place.
137
137
  #
138
138
  # There are two separate functions defined, `is_*` and `is_*_t` for different use cases.
139
139
  # `is_*` is for when you're dealing with an unknown input
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "aiinbx"
4
- __version__ = "0.5.1" # x-release-please-version
4
+ __version__ = "0.23.0" # x-release-please-version
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Union
5
+ from typing import Union, Iterable
6
6
 
7
7
  import httpx
8
8
 
@@ -84,6 +84,7 @@ class EmailsResource(SyncAPIResource):
84
84
  *,
85
85
  from_: str,
86
86
  html: str,
87
+ attachments: Iterable[email_reply_params.Attachment] | Omit = omit,
87
88
  bcc: Union[str, SequenceNotStr[str]] | Omit = omit,
88
89
  cc: Union[str, SequenceNotStr[str]] | Omit = omit,
89
90
  from_name: str | Omit = omit,
@@ -122,6 +123,7 @@ class EmailsResource(SyncAPIResource):
122
123
  {
123
124
  "from_": from_,
124
125
  "html": html,
126
+ "attachments": attachments,
125
127
  "bcc": bcc,
126
128
  "cc": cc,
127
129
  "from_name": from_name,
@@ -146,6 +148,7 @@ class EmailsResource(SyncAPIResource):
146
148
  html: str,
147
149
  subject: str,
148
150
  to: Union[str, SequenceNotStr[str]],
151
+ attachments: Iterable[email_send_params.Attachment] | Omit = omit,
149
152
  bcc: Union[str, SequenceNotStr[str]] | Omit = omit,
150
153
  cc: Union[str, SequenceNotStr[str]] | Omit = omit,
151
154
  from_name: str | Omit = omit,
@@ -185,6 +188,7 @@ class EmailsResource(SyncAPIResource):
185
188
  "html": html,
186
189
  "subject": subject,
187
190
  "to": to,
191
+ "attachments": attachments,
188
192
  "bcc": bcc,
189
193
  "cc": cc,
190
194
  "from_name": from_name,
@@ -263,6 +267,7 @@ class AsyncEmailsResource(AsyncAPIResource):
263
267
  *,
264
268
  from_: str,
265
269
  html: str,
270
+ attachments: Iterable[email_reply_params.Attachment] | Omit = omit,
266
271
  bcc: Union[str, SequenceNotStr[str]] | Omit = omit,
267
272
  cc: Union[str, SequenceNotStr[str]] | Omit = omit,
268
273
  from_name: str | Omit = omit,
@@ -301,6 +306,7 @@ class AsyncEmailsResource(AsyncAPIResource):
301
306
  {
302
307
  "from_": from_,
303
308
  "html": html,
309
+ "attachments": attachments,
304
310
  "bcc": bcc,
305
311
  "cc": cc,
306
312
  "from_name": from_name,
@@ -325,6 +331,7 @@ class AsyncEmailsResource(AsyncAPIResource):
325
331
  html: str,
326
332
  subject: str,
327
333
  to: Union[str, SequenceNotStr[str]],
334
+ attachments: Iterable[email_send_params.Attachment] | Omit = omit,
328
335
  bcc: Union[str, SequenceNotStr[str]] | Omit = omit,
329
336
  cc: Union[str, SequenceNotStr[str]] | Omit = omit,
330
337
  from_name: str | Omit = omit,
@@ -364,6 +371,7 @@ class AsyncEmailsResource(AsyncAPIResource):
364
371
  "html": html,
365
372
  "subject": subject,
366
373
  "to": to,
374
+ "attachments": attachments,
367
375
  "bcc": bcc,
368
376
  "cc": cc,
369
377
  "from_name": from_name,