api-sdk-py 1.11.66__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.
Files changed (294) hide show
  1. api_sdk_py/__init__.py +312 -0
  2. api_sdk_py/api/__init__.py +18 -0
  3. api_sdk_py/api/canvases_api.py +1605 -0
  4. api_sdk_py/api/compositions_api.py +11616 -0
  5. api_sdk_py/api/credits_api.py +628 -0
  6. api_sdk_py/api/entitlements_api.py +676 -0
  7. api_sdk_py/api/invoices_api.py +357 -0
  8. api_sdk_py/api/managed_users_api.py +5087 -0
  9. api_sdk_py/api/operations_api.py +305 -0
  10. api_sdk_py/api/partner_api.py +41365 -0
  11. api_sdk_py/api/partners_api.py +11156 -0
  12. api_sdk_py/api/public_embed_api.py +1938 -0
  13. api_sdk_py/api/tokens_api.py +283 -0
  14. api_sdk_py/api/uploads_api.py +1507 -0
  15. api_sdk_py/api/users_api.py +3649 -0
  16. api_sdk_py/api/widgets_api.py +1300 -0
  17. api_sdk_py/api_client.py +797 -0
  18. api_sdk_py/api_response.py +21 -0
  19. api_sdk_py/configuration.py +526 -0
  20. api_sdk_py/exceptions.py +199 -0
  21. api_sdk_py/models/__init__.py +282 -0
  22. api_sdk_py/models/account_credit_balance.py +96 -0
  23. api_sdk_py/models/account_credit_balance_response.py +99 -0
  24. api_sdk_py/models/account_credit_transaction.py +120 -0
  25. api_sdk_py/models/adapter_connection.py +112 -0
  26. api_sdk_py/models/adapter_connection_removal.py +87 -0
  27. api_sdk_py/models/add_ai_answers_knowledge_document201_response.py +99 -0
  28. api_sdk_py/models/add_ai_answers_knowledge_document_request.py +90 -0
  29. api_sdk_py/models/add_domain_request.py +87 -0
  30. api_sdk_py/models/ai_answers_knowledge.py +101 -0
  31. api_sdk_py/models/ai_answers_knowledge_document.py +113 -0
  32. api_sdk_py/models/ai_answers_knowledge_removal.py +87 -0
  33. api_sdk_py/models/ai_answers_knowledge_totals.py +93 -0
  34. api_sdk_py/models/api_key_scope.py +44 -0
  35. api_sdk_py/models/canvas.py +112 -0
  36. api_sdk_py/models/canvas_response.py +99 -0
  37. api_sdk_py/models/check_composition_access_response.py +99 -0
  38. api_sdk_py/models/check_composition_access_response_data.py +89 -0
  39. api_sdk_py/models/composition.py +133 -0
  40. api_sdk_py/models/composition_data_source.py +90 -0
  41. api_sdk_py/models/composition_data_source_response.py +99 -0
  42. api_sdk_py/models/composition_entries_description.py +99 -0
  43. api_sdk_py/models/composition_entries_description_response.py +99 -0
  44. api_sdk_py/models/composition_entries_reading.py +126 -0
  45. api_sdk_py/models/composition_entries_reading_response.py +99 -0
  46. api_sdk_py/models/composition_entry_aggregate_tally.py +122 -0
  47. api_sdk_py/models/composition_entry_aggregates_block.py +99 -0
  48. api_sdk_py/models/composition_entry_column.py +89 -0
  49. api_sdk_py/models/composition_entry_delete_success.py +93 -0
  50. api_sdk_py/models/composition_entry_delete_success_data.py +87 -0
  51. api_sdk_py/models/composition_entry_item.py +111 -0
  52. api_sdk_py/models/composition_entry_items_meta.py +106 -0
  53. api_sdk_py/models/composition_entry_items_page_success.py +103 -0
  54. api_sdk_py/models/composition_entry_table.py +105 -0
  55. api_sdk_py/models/composition_entry_tally.py +95 -0
  56. api_sdk_py/models/composition_response.py +99 -0
  57. api_sdk_py/models/composition_version.py +96 -0
  58. api_sdk_py/models/content_check_finding.py +93 -0
  59. api_sdk_py/models/content_item_write_result.py +101 -0
  60. api_sdk_py/models/content_item_write_result_validation_result.py +91 -0
  61. api_sdk_py/models/copy_partner_preset_request.py +88 -0
  62. api_sdk_py/models/create_canvas_request.py +118 -0
  63. api_sdk_py/models/create_composition_content_item201_response.py +99 -0
  64. api_sdk_py/models/create_composition_content_item_request.py +101 -0
  65. api_sdk_py/models/create_composition_database_record201_response.py +95 -0
  66. api_sdk_py/models/create_composition_from_preset_request.py +100 -0
  67. api_sdk_py/models/create_composition_from_widget201_response.py +99 -0
  68. api_sdk_py/models/create_composition_from_widget_request.py +102 -0
  69. api_sdk_py/models/create_user_api_key_request.py +106 -0
  70. api_sdk_py/models/create_widget201_response.py +99 -0
  71. api_sdk_py/models/create_widget201_response_data.py +207 -0
  72. api_sdk_py/models/created_user_api_key.py +117 -0
  73. api_sdk_py/models/created_user_api_key_response.py +99 -0
  74. api_sdk_py/models/delete_composition_content_item_response.py +99 -0
  75. api_sdk_py/models/delete_composition_content_item_response_data.py +89 -0
  76. api_sdk_py/models/delete_composition_data_source_response.py +99 -0
  77. api_sdk_py/models/delete_composition_data_source_response_data.py +87 -0
  78. api_sdk_py/models/delete_managed_user200_response.py +99 -0
  79. api_sdk_py/models/delete_personal_workspace_domain_response.py +99 -0
  80. api_sdk_py/models/delete_personal_workspace_domain_response_data.py +87 -0
  81. api_sdk_py/models/delete_user_api_key_response.py +99 -0
  82. api_sdk_py/models/delete_user_api_key_response_data.py +87 -0
  83. api_sdk_py/models/design_defaults.py +92 -0
  84. api_sdk_py/models/duplicate_composition202_response.py +99 -0
  85. api_sdk_py/models/duplicate_composition202_response_data.py +87 -0
  86. api_sdk_py/models/duplicate_composition_request.py +89 -0
  87. api_sdk_py/models/editor_session.py +122 -0
  88. api_sdk_py/models/editor_session_response.py +99 -0
  89. api_sdk_py/models/entitlement.py +118 -0
  90. api_sdk_py/models/error_detail.py +104 -0
  91. api_sdk_py/models/error_response.py +108 -0
  92. api_sdk_py/models/export_composition_entry_items200_response.py +103 -0
  93. api_sdk_py/models/export_composition_entry_items200_response_meta.py +89 -0
  94. api_sdk_py/models/get_ai_answers_knowledge200_response.py +99 -0
  95. api_sdk_py/models/get_all_canvases_response.py +99 -0
  96. api_sdk_py/models/get_all_canvases_response_data.py +101 -0
  97. api_sdk_py/models/get_all_compositions200_response.py +103 -0
  98. api_sdk_py/models/get_all_managed_users200_response.py +103 -0
  99. api_sdk_py/models/get_composition_content_response.py +95 -0
  100. api_sdk_py/models/get_composition_content_schema_response.py +99 -0
  101. api_sdk_py/models/get_composition_content_schema_response_data.py +97 -0
  102. api_sdk_py/models/get_composition_data_source_response.py +104 -0
  103. api_sdk_py/models/get_composition_database_records200_response.py +95 -0
  104. api_sdk_py/models/get_composition_design_response.py +95 -0
  105. api_sdk_py/models/get_composition_design_schema_response.py +99 -0
  106. api_sdk_py/models/get_composition_design_schema_response_data.py +97 -0
  107. api_sdk_py/models/get_composition_embed_schema_response.py +99 -0
  108. api_sdk_py/models/get_composition_embed_schema_response_data.py +107 -0
  109. api_sdk_py/models/get_composition_embed_settings_response.py +95 -0
  110. api_sdk_py/models/get_composition_preview_response.py +99 -0
  111. api_sdk_py/models/get_composition_preview_response_data.py +93 -0
  112. api_sdk_py/models/get_composition_versions200_response.py +103 -0
  113. api_sdk_py/models/get_compositions_batch_request.py +88 -0
  114. api_sdk_py/models/get_compositions_batch_response.py +99 -0
  115. api_sdk_py/models/get_compositions_batch_response_data.py +105 -0
  116. api_sdk_py/models/get_invoices_by_partner_id200_response.py +103 -0
  117. api_sdk_py/models/get_managed_user_entitlements_response.py +99 -0
  118. api_sdk_py/models/get_managed_user_entitlements_response_data.py +97 -0
  119. api_sdk_py/models/get_managed_user_limits200_response.py +99 -0
  120. api_sdk_py/models/get_managed_user_storage_usage200_response.py +99 -0
  121. api_sdk_py/models/get_managed_user_storage_usage200_response_data.py +95 -0
  122. api_sdk_py/models/get_managed_user_storage_usage200_response_data_by_purpose.py +106 -0
  123. api_sdk_py/models/get_managed_users_by_manager_id_response.py +99 -0
  124. api_sdk_py/models/get_managed_users_by_manager_id_response_data.py +101 -0
  125. api_sdk_py/models/get_partner_billing_overview200_response.py +99 -0
  126. api_sdk_py/models/get_partner_credit_transactions200_response.py +103 -0
  127. api_sdk_py/models/get_partner_design_defaults200_response.py +99 -0
  128. api_sdk_py/models/get_partner_entitlements_response.py +99 -0
  129. api_sdk_py/models/get_partner_entitlements_response_data.py +97 -0
  130. api_sdk_py/models/get_personal_workspace_domains200_response.py +103 -0
  131. api_sdk_py/models/get_public_composition_embed200_response.py +133 -0
  132. api_sdk_py/models/get_public_composition_embed200_response_data_source.py +89 -0
  133. api_sdk_py/models/get_public_composition_embed200_response_direct.py +96 -0
  134. api_sdk_py/models/get_user_adapter_connections200_response.py +103 -0
  135. api_sdk_py/models/get_user_api_key_usage_logs_response.py +99 -0
  136. api_sdk_py/models/get_user_api_key_usage_logs_response_data.py +95 -0
  137. api_sdk_py/models/get_user_api_keys200_response.py +103 -0
  138. api_sdk_py/models/get_widgets200_response.py +103 -0
  139. api_sdk_py/models/get_widgets_batch_request.py +87 -0
  140. api_sdk_py/models/get_widgets_batch_response.py +99 -0
  141. api_sdk_py/models/get_widgets_batch_response_data.py +105 -0
  142. api_sdk_py/models/get_widgets_batch_response_data_errors_inner.py +89 -0
  143. api_sdk_py/models/list_partner_presets200_response.py +103 -0
  144. api_sdk_py/models/managed_user.py +105 -0
  145. api_sdk_py/models/managed_user_entries_meta.py +100 -0
  146. api_sdk_py/models/managed_user_entries_page_success.py +103 -0
  147. api_sdk_py/models/managed_user_entry_item.py +115 -0
  148. api_sdk_py/models/managed_user_limits.py +104 -0
  149. api_sdk_py/models/managed_user_operation_usage.py +95 -0
  150. api_sdk_py/models/managed_user_removal.py +89 -0
  151. api_sdk_py/models/managed_user_response.py +99 -0
  152. api_sdk_py/models/managed_user_usage.py +110 -0
  153. api_sdk_py/models/managed_user_usage_response.py +99 -0
  154. api_sdk_py/models/managed_user_usage_totals.py +93 -0
  155. api_sdk_py/models/my_partner.py +136 -0
  156. api_sdk_py/models/my_partners.py +112 -0
  157. api_sdk_py/models/my_partners_response.py +99 -0
  158. api_sdk_py/models/new_composition.py +108 -0
  159. api_sdk_py/models/new_editor_session.py +107 -0
  160. api_sdk_py/models/new_managed_user.py +91 -0
  161. api_sdk_py/models/new_widget.py +118 -0
  162. api_sdk_py/models/operations_id_get_response.py +99 -0
  163. api_sdk_py/models/operations_id_get_response_data.py +113 -0
  164. api_sdk_py/models/partner_analytics_by_managed_user.py +109 -0
  165. api_sdk_py/models/partner_analytics_by_managed_user_response.py +99 -0
  166. api_sdk_py/models/partner_analytics_of_day.py +94 -0
  167. api_sdk_py/models/partner_analytics_of_managed_user.py +126 -0
  168. api_sdk_py/models/partner_analytics_of_widget.py +102 -0
  169. api_sdk_py/models/partner_analytics_summary.py +110 -0
  170. api_sdk_py/models/partner_analytics_summary_response.py +99 -0
  171. api_sdk_py/models/partner_analytics_timeline.py +110 -0
  172. api_sdk_py/models/partner_analytics_timeline_response.py +99 -0
  173. api_sdk_py/models/partner_analytics_top_widgets.py +110 -0
  174. api_sdk_py/models/partner_analytics_top_widgets_response.py +99 -0
  175. api_sdk_py/models/partner_billing_overview.py +114 -0
  176. api_sdk_py/models/partner_billing_overview_billing_integration.py +100 -0
  177. api_sdk_py/models/partner_billing_overview_operational_credits.py +101 -0
  178. api_sdk_py/models/partner_billing_overview_partner.py +100 -0
  179. api_sdk_py/models/partner_contract.py +158 -0
  180. api_sdk_py/models/partner_contract_response.py +99 -0
  181. api_sdk_py/models/partner_customization.py +140 -0
  182. api_sdk_py/models/partner_data_database.py +112 -0
  183. api_sdk_py/models/partner_data_database_removal.py +87 -0
  184. api_sdk_py/models/partner_data_database_removal_response.py +99 -0
  185. api_sdk_py/models/partner_data_database_response.py +99 -0
  186. api_sdk_py/models/partner_entry_context_secret.py +93 -0
  187. api_sdk_py/models/partner_entry_context_secret_response.py +99 -0
  188. api_sdk_py/models/partner_entry_context_signing.py +108 -0
  189. api_sdk_py/models/partner_entry_context_signing_response.py +99 -0
  190. api_sdk_py/models/partner_extra_credits_invoice.py +130 -0
  191. api_sdk_py/models/partner_extra_credits_invoice_response.py +99 -0
  192. api_sdk_py/models/partner_invoice.py +234 -0
  193. api_sdk_py/models/partner_notification.py +108 -0
  194. api_sdk_py/models/partner_notification_default_recipients.py +89 -0
  195. api_sdk_py/models/partner_notification_delivery.py +170 -0
  196. api_sdk_py/models/partner_notification_delivery_log.py +95 -0
  197. api_sdk_py/models/partner_notification_delivery_log_response.py +99 -0
  198. api_sdk_py/models/partner_notification_delivery_response.py +99 -0
  199. api_sdk_py/models/partner_notification_event.py +112 -0
  200. api_sdk_py/models/partner_notification_event_type.py +51 -0
  201. api_sdk_py/models/partner_notification_page.py +103 -0
  202. api_sdk_py/models/partner_notification_page_response.py +99 -0
  203. api_sdk_py/models/partner_notification_settings.py +139 -0
  204. api_sdk_py/models/partner_notification_settings_change.py +98 -0
  205. api_sdk_py/models/partner_notification_settings_change_response.py +99 -0
  206. api_sdk_py/models/partner_notification_settings_response.py +99 -0
  207. api_sdk_py/models/partner_notification_test_event_request.py +88 -0
  208. api_sdk_py/models/partner_notification_test_event_result.py +98 -0
  209. api_sdk_py/models/partner_notification_test_event_result_response.py +99 -0
  210. api_sdk_py/models/partner_preset.py +119 -0
  211. api_sdk_py/models/partner_preset_copy.py +97 -0
  212. api_sdk_py/models/partner_preset_copy_response.py +99 -0
  213. api_sdk_py/models/partner_preset_removal.py +87 -0
  214. api_sdk_py/models/partner_preset_removal_response.py +99 -0
  215. api_sdk_py/models/partner_preset_response.py +99 -0
  216. api_sdk_py/models/partner_report_page.py +91 -0
  217. api_sdk_py/models/partner_report_period.py +90 -0
  218. api_sdk_py/models/partner_storage_destination.py +120 -0
  219. api_sdk_py/models/partner_storage_destination_response.py +99 -0
  220. api_sdk_py/models/partner_storage_removal.py +87 -0
  221. api_sdk_py/models/partner_storage_removal_response.py +99 -0
  222. api_sdk_py/models/partner_storage_usage.py +109 -0
  223. api_sdk_py/models/partner_storage_usage_of_managed_user.py +129 -0
  224. api_sdk_py/models/partner_storage_usage_response.py +99 -0
  225. api_sdk_py/models/partner_storage_usage_totals.py +93 -0
  226. api_sdk_py/models/personal_workspace_domain.py +96 -0
  227. api_sdk_py/models/personal_workspace_domain_result.py +93 -0
  228. api_sdk_py/models/personal_workspace_domain_result_response.py +99 -0
  229. api_sdk_py/models/post_public_composition_embed_status200_response.py +99 -0
  230. api_sdk_py/models/post_public_composition_embed_status200_response_data.py +97 -0
  231. api_sdk_py/models/post_public_composition_embed_status_request.py +88 -0
  232. api_sdk_py/models/public_adapter_call_error.py +93 -0
  233. api_sdk_py/models/public_adapter_call_request.py +113 -0
  234. api_sdk_py/models/public_adapter_call_result.py +93 -0
  235. api_sdk_py/models/public_adapter_call_result_data.py +87 -0
  236. api_sdk_py/models/public_adapter_file_result.py +93 -0
  237. api_sdk_py/models/public_adapter_file_result_data.py +91 -0
  238. api_sdk_py/models/public_adapter_file_result_data_file.py +108 -0
  239. api_sdk_py/models/public_composition_entry_created.py +93 -0
  240. api_sdk_py/models/public_composition_entry_created_data.py +92 -0
  241. api_sdk_py/models/public_composition_entry_request.py +101 -0
  242. api_sdk_py/models/public_embed_failure.py +105 -0
  243. api_sdk_py/models/public_embed_failure_details.py +112 -0
  244. api_sdk_py/models/public_embed_failure_error.py +98 -0
  245. api_sdk_py/models/purpose_storage_bucket.py +89 -0
  246. api_sdk_py/models/remove_ai_answers_knowledge_document200_response.py +99 -0
  247. api_sdk_py/models/remove_user_adapter_connection200_response.py +99 -0
  248. api_sdk_py/models/request_extra_credits.py +88 -0
  249. api_sdk_py/models/response_meta.py +121 -0
  250. api_sdk_py/models/revoke_managed_user_editor_sessions_response.py +99 -0
  251. api_sdk_py/models/revoke_managed_user_editor_sessions_response_data.py +87 -0
  252. api_sdk_py/models/set_adapter_connection_request.py +88 -0
  253. api_sdk_py/models/set_composition_data_source_request.py +90 -0
  254. api_sdk_py/models/set_dynamic_content_request.py +95 -0
  255. api_sdk_py/models/set_dynamic_content_response.py +99 -0
  256. api_sdk_py/models/set_dynamic_content_response_data.py +99 -0
  257. api_sdk_py/models/set_dynamic_content_response_data_validation_result.py +91 -0
  258. api_sdk_py/models/set_managed_user_limits_request.py +93 -0
  259. api_sdk_py/models/set_partner_data_database_request.py +87 -0
  260. api_sdk_py/models/set_partner_design_defaults_request.py +92 -0
  261. api_sdk_py/models/set_partner_preset_request.py +104 -0
  262. api_sdk_py/models/set_partner_storage_destination_request.py +101 -0
  263. api_sdk_py/models/set_user_adapter_connection200_response.py +99 -0
  264. api_sdk_py/models/success_response.py +95 -0
  265. api_sdk_py/models/update_canvas_request.py +96 -0
  266. api_sdk_py/models/update_composition.py +101 -0
  267. api_sdk_py/models/update_composition_status_request.py +94 -0
  268. api_sdk_py/models/update_domain_request.py +87 -0
  269. api_sdk_py/models/update_managed_user.py +91 -0
  270. api_sdk_py/models/update_partner_entry_context_signing_request.py +87 -0
  271. api_sdk_py/models/update_partner_notification_settings_request.py +110 -0
  272. api_sdk_py/models/update_user_api_key_request.py +90 -0
  273. api_sdk_py/models/upload.py +167 -0
  274. api_sdk_py/models/upload_limits.py +97 -0
  275. api_sdk_py/models/upload_limits_response.py +99 -0
  276. api_sdk_py/models/upload_response.py +99 -0
  277. api_sdk_py/models/uploads_get200_response.py +103 -0
  278. api_sdk_py/models/uploads_id_delete200_response.py +99 -0
  279. api_sdk_py/models/uploads_id_delete200_response_data.py +87 -0
  280. api_sdk_py/models/user_api_key.py +122 -0
  281. api_sdk_py/models/user_api_key_response.py +99 -0
  282. api_sdk_py/models/user_api_key_usage_log.py +107 -0
  283. api_sdk_py/models/validate_composition_content_response.py +99 -0
  284. api_sdk_py/models/validate_composition_content_response_data.py +108 -0
  285. api_sdk_py/models/validate_token200_response.py +99 -0
  286. api_sdk_py/models/validate_token200_response_data.py +106 -0
  287. api_sdk_py/models/widget.py +205 -0
  288. api_sdk_py/py.typed +0 -0
  289. api_sdk_py/rest.py +257 -0
  290. api_sdk_py-1.11.66.dist-info/METADATA +28 -0
  291. api_sdk_py-1.11.66.dist-info/RECORD +294 -0
  292. api_sdk_py-1.11.66.dist-info/WHEEL +5 -0
  293. api_sdk_py-1.11.66.dist-info/licenses/LICENSE +122 -0
  294. api_sdk_py-1.11.66.dist-info/top_level.txt +1 -0
@@ -0,0 +1,99 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Widgetic API Gateway
5
+
6
+ API documentation for the Widgetic API Gateway
7
+
8
+ The version of the OpenAPI document: 1.0.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
21
+ from typing import Any, ClassVar, Dict, List
22
+ from api_sdk_py.models.composition_entry_table import CompositionEntryTable
23
+ from typing import Optional, Set
24
+ from typing_extensions import Self
25
+
26
+ class CompositionEntriesDescription(BaseModel):
27
+ """
28
+ CompositionEntriesDescription
29
+ """ # noqa: E501
30
+ composition_id: StrictStr = Field(description="The composition whose entries these are", alias="compositionId")
31
+ has_data: StrictBool = Field(description="False when the composition keeps no entries of its own: its widget only shows content (it has no database), or nothing was set up in the database yet. That is not an error. ", alias="hasData")
32
+ tables: List[CompositionEntryTable] = Field(description="The tables entries are kept in (up to 20)")
33
+ __properties: ClassVar[List[str]] = ["compositionId", "hasData", "tables"]
34
+
35
+ model_config = ConfigDict(
36
+ populate_by_name=True,
37
+ validate_assignment=True,
38
+ protected_namespaces=(),
39
+ )
40
+
41
+
42
+ def to_str(self) -> str:
43
+ """Returns the string representation of the model using alias"""
44
+ return pprint.pformat(self.model_dump(by_alias=True))
45
+
46
+ def to_json(self) -> str:
47
+ """Returns the JSON representation of the model using alias"""
48
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
49
+ return json.dumps(self.to_dict())
50
+
51
+ @classmethod
52
+ def from_json(cls, json_str: str) -> Optional[Self]:
53
+ """Create an instance of CompositionEntriesDescription from a JSON string"""
54
+ return cls.from_dict(json.loads(json_str))
55
+
56
+ def to_dict(self) -> Dict[str, Any]:
57
+ """Return the dictionary representation of the model using alias.
58
+
59
+ This has the following differences from calling pydantic's
60
+ `self.model_dump(by_alias=True)`:
61
+
62
+ * `None` is only added to the output dict for nullable fields that
63
+ were set at model initialization. Other fields with value `None`
64
+ are ignored.
65
+ """
66
+ excluded_fields: Set[str] = set([
67
+ ])
68
+
69
+ _dict = self.model_dump(
70
+ by_alias=True,
71
+ exclude=excluded_fields,
72
+ exclude_none=True,
73
+ )
74
+ # override the default output from pydantic by calling `to_dict()` of each item in tables (list)
75
+ _items = []
76
+ if self.tables:
77
+ for _item_tables in self.tables:
78
+ if _item_tables:
79
+ _items.append(_item_tables.to_dict())
80
+ _dict['tables'] = _items
81
+ return _dict
82
+
83
+ @classmethod
84
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
85
+ """Create an instance of CompositionEntriesDescription from a dict"""
86
+ if obj is None:
87
+ return None
88
+
89
+ if not isinstance(obj, dict):
90
+ return cls.model_validate(obj)
91
+
92
+ _obj = cls.model_validate({
93
+ "compositionId": obj.get("compositionId"),
94
+ "hasData": obj.get("hasData"),
95
+ "tables": [CompositionEntryTable.from_dict(_item) for _item in obj["tables"]] if obj.get("tables") is not None else None
96
+ })
97
+ return _obj
98
+
99
+
@@ -0,0 +1,99 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Widgetic API Gateway
5
+
6
+ API documentation for the Widgetic API Gateway
7
+
8
+ The version of the OpenAPI document: 1.0.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictBool
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from api_sdk_py.models.composition_entries_description import CompositionEntriesDescription
23
+ from api_sdk_py.models.response_meta import ResponseMeta
24
+ from typing import Optional, Set
25
+ from typing_extensions import Self
26
+
27
+ class CompositionEntriesDescriptionResponse(BaseModel):
28
+ """
29
+ CompositionEntriesDescriptionResponse
30
+ """ # noqa: E501
31
+ success: StrictBool = Field(description="Always `true` on a success.")
32
+ data: CompositionEntriesDescription
33
+ meta: Optional[ResponseMeta] = None
34
+ __properties: ClassVar[List[str]] = ["success", "data", "meta"]
35
+
36
+ model_config = ConfigDict(
37
+ populate_by_name=True,
38
+ validate_assignment=True,
39
+ protected_namespaces=(),
40
+ )
41
+
42
+
43
+ def to_str(self) -> str:
44
+ """Returns the string representation of the model using alias"""
45
+ return pprint.pformat(self.model_dump(by_alias=True))
46
+
47
+ def to_json(self) -> str:
48
+ """Returns the JSON representation of the model using alias"""
49
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
50
+ return json.dumps(self.to_dict())
51
+
52
+ @classmethod
53
+ def from_json(cls, json_str: str) -> Optional[Self]:
54
+ """Create an instance of CompositionEntriesDescriptionResponse from a JSON string"""
55
+ return cls.from_dict(json.loads(json_str))
56
+
57
+ def to_dict(self) -> Dict[str, Any]:
58
+ """Return the dictionary representation of the model using alias.
59
+
60
+ This has the following differences from calling pydantic's
61
+ `self.model_dump(by_alias=True)`:
62
+
63
+ * `None` is only added to the output dict for nullable fields that
64
+ were set at model initialization. Other fields with value `None`
65
+ are ignored.
66
+ """
67
+ excluded_fields: Set[str] = set([
68
+ ])
69
+
70
+ _dict = self.model_dump(
71
+ by_alias=True,
72
+ exclude=excluded_fields,
73
+ exclude_none=True,
74
+ )
75
+ # override the default output from pydantic by calling `to_dict()` of data
76
+ if self.data:
77
+ _dict['data'] = self.data.to_dict()
78
+ # override the default output from pydantic by calling `to_dict()` of meta
79
+ if self.meta:
80
+ _dict['meta'] = self.meta.to_dict()
81
+ return _dict
82
+
83
+ @classmethod
84
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
85
+ """Create an instance of CompositionEntriesDescriptionResponse from a dict"""
86
+ if obj is None:
87
+ return None
88
+
89
+ if not isinstance(obj, dict):
90
+ return cls.model_validate(obj)
91
+
92
+ _obj = cls.model_validate({
93
+ "success": obj.get("success"),
94
+ "data": CompositionEntriesDescription.from_dict(obj["data"]) if obj.get("data") is not None else None,
95
+ "meta": ResponseMeta.from_dict(obj["meta"]) if obj.get("meta") is not None else None
96
+ })
97
+ return _obj
98
+
99
+
@@ -0,0 +1,126 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Widgetic API Gateway
5
+
6
+ API documentation for the Widgetic API Gateway
7
+
8
+ The version of the OpenAPI document: 1.0.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from typing_extensions import Annotated
23
+ from api_sdk_py.models.composition_entry_aggregates_block import CompositionEntryAggregatesBlock
24
+ from api_sdk_py.models.composition_entry_tally import CompositionEntryTally
25
+ from typing import Optional, Set
26
+ from typing_extensions import Self
27
+
28
+ class CompositionEntriesReading(BaseModel):
29
+ """
30
+ CompositionEntriesReading
31
+ """ # noqa: E501
32
+ composition_id: StrictStr = Field(description="The composition whose entries these are", alias="compositionId")
33
+ table: StrictStr = Field(description="The table that was read")
34
+ total_rows: Annotated[int, Field(strict=True, ge=0)] = Field(description="How many entries the table holds in all. Not narrowed by `since`, `until` or a filter: only `aggregates` is. ", alias="totalRows")
35
+ tallies: Optional[List[CompositionEntryTally]] = Field(description="How many entries have each value of the `groupBy` column, largest group first (up to 20 groups), over the whole table. `null` when no `groupBy` was asked for. For the groups of a selection (a time window, a `context` filter) or for more than 20 groups, ask for `aggregate`: `aggregates.tallies` holds up to 200 groups. ")
36
+ more_groups: StrictBool = Field(description="True when the `groupBy` column has more than the 20 groups `tallies` lists. It speaks of `tallies` only: `aggregates.truncated` is the same signal for `aggregates` (200 groups). ", alias="moreGroups")
37
+ columns: List[StrictStr] = Field(description="The name of each value of an entry in `rows`, in order, exactly as the database spells it (and as `describeCompositionEntries` lists it: `created_at` stays `created_at`). Empty when no entries were asked for, or the table has none. ")
38
+ rows: Optional[List[List[Any]]] = Field(description="The newest entries, newest first (up to 25). `null` when no entries were asked for. Each entry is a list of values in the order of `columns`. A value is text (cut to 200 characters), a number, a boolean or `null`. ")
39
+ more_rows: StrictBool = Field(description="True when the table holds more entries than `rows` lists", alias="moreRows")
40
+ aggregates: Optional[CompositionEntryAggregatesBlock] = Field(default=None, description="Only present when the read asked for `aggregate`. Unlike `totalRows`, `tallies` and `rows`, it is narrowed by `since`, `until` and the `context` and column filters of the same call: it answers \"the average rating this week\" where `tallies` answer \"how many of each rating, ever\". ")
41
+ __properties: ClassVar[List[str]] = ["compositionId", "table", "totalRows", "tallies", "moreGroups", "columns", "rows", "moreRows", "aggregates"]
42
+
43
+ model_config = ConfigDict(
44
+ populate_by_name=True,
45
+ validate_assignment=True,
46
+ protected_namespaces=(),
47
+ )
48
+
49
+
50
+ def to_str(self) -> str:
51
+ """Returns the string representation of the model using alias"""
52
+ return pprint.pformat(self.model_dump(by_alias=True))
53
+
54
+ def to_json(self) -> str:
55
+ """Returns the JSON representation of the model using alias"""
56
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
57
+ return json.dumps(self.to_dict())
58
+
59
+ @classmethod
60
+ def from_json(cls, json_str: str) -> Optional[Self]:
61
+ """Create an instance of CompositionEntriesReading from a JSON string"""
62
+ return cls.from_dict(json.loads(json_str))
63
+
64
+ def to_dict(self) -> Dict[str, Any]:
65
+ """Return the dictionary representation of the model using alias.
66
+
67
+ This has the following differences from calling pydantic's
68
+ `self.model_dump(by_alias=True)`:
69
+
70
+ * `None` is only added to the output dict for nullable fields that
71
+ were set at model initialization. Other fields with value `None`
72
+ are ignored.
73
+ """
74
+ excluded_fields: Set[str] = set([
75
+ ])
76
+
77
+ _dict = self.model_dump(
78
+ by_alias=True,
79
+ exclude=excluded_fields,
80
+ exclude_none=True,
81
+ )
82
+ # override the default output from pydantic by calling `to_dict()` of each item in tallies (list)
83
+ _items = []
84
+ if self.tallies:
85
+ for _item_tallies in self.tallies:
86
+ if _item_tallies:
87
+ _items.append(_item_tallies.to_dict())
88
+ _dict['tallies'] = _items
89
+ # override the default output from pydantic by calling `to_dict()` of aggregates
90
+ if self.aggregates:
91
+ _dict['aggregates'] = self.aggregates.to_dict()
92
+ # set to None if tallies (nullable) is None
93
+ # and model_fields_set contains the field
94
+ if self.tallies is None and "tallies" in self.model_fields_set:
95
+ _dict['tallies'] = None
96
+
97
+ # set to None if rows (nullable) is None
98
+ # and model_fields_set contains the field
99
+ if self.rows is None and "rows" in self.model_fields_set:
100
+ _dict['rows'] = None
101
+
102
+ return _dict
103
+
104
+ @classmethod
105
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
106
+ """Create an instance of CompositionEntriesReading from a dict"""
107
+ if obj is None:
108
+ return None
109
+
110
+ if not isinstance(obj, dict):
111
+ return cls.model_validate(obj)
112
+
113
+ _obj = cls.model_validate({
114
+ "compositionId": obj.get("compositionId"),
115
+ "table": obj.get("table"),
116
+ "totalRows": obj.get("totalRows"),
117
+ "tallies": [CompositionEntryTally.from_dict(_item) for _item in obj["tallies"]] if obj.get("tallies") is not None else None,
118
+ "moreGroups": obj.get("moreGroups"),
119
+ "columns": obj.get("columns"),
120
+ "rows": obj.get("rows"),
121
+ "moreRows": obj.get("moreRows"),
122
+ "aggregates": CompositionEntryAggregatesBlock.from_dict(obj["aggregates"]) if obj.get("aggregates") is not None else None
123
+ })
124
+ return _obj
125
+
126
+
@@ -0,0 +1,99 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Widgetic API Gateway
5
+
6
+ API documentation for the Widgetic API Gateway
7
+
8
+ The version of the OpenAPI document: 1.0.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictBool
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from api_sdk_py.models.composition_entries_reading import CompositionEntriesReading
23
+ from api_sdk_py.models.response_meta import ResponseMeta
24
+ from typing import Optional, Set
25
+ from typing_extensions import Self
26
+
27
+ class CompositionEntriesReadingResponse(BaseModel):
28
+ """
29
+ CompositionEntriesReadingResponse
30
+ """ # noqa: E501
31
+ success: StrictBool = Field(description="Always `true` on a success.")
32
+ data: CompositionEntriesReading
33
+ meta: Optional[ResponseMeta] = None
34
+ __properties: ClassVar[List[str]] = ["success", "data", "meta"]
35
+
36
+ model_config = ConfigDict(
37
+ populate_by_name=True,
38
+ validate_assignment=True,
39
+ protected_namespaces=(),
40
+ )
41
+
42
+
43
+ def to_str(self) -> str:
44
+ """Returns the string representation of the model using alias"""
45
+ return pprint.pformat(self.model_dump(by_alias=True))
46
+
47
+ def to_json(self) -> str:
48
+ """Returns the JSON representation of the model using alias"""
49
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
50
+ return json.dumps(self.to_dict())
51
+
52
+ @classmethod
53
+ def from_json(cls, json_str: str) -> Optional[Self]:
54
+ """Create an instance of CompositionEntriesReadingResponse from a JSON string"""
55
+ return cls.from_dict(json.loads(json_str))
56
+
57
+ def to_dict(self) -> Dict[str, Any]:
58
+ """Return the dictionary representation of the model using alias.
59
+
60
+ This has the following differences from calling pydantic's
61
+ `self.model_dump(by_alias=True)`:
62
+
63
+ * `None` is only added to the output dict for nullable fields that
64
+ were set at model initialization. Other fields with value `None`
65
+ are ignored.
66
+ """
67
+ excluded_fields: Set[str] = set([
68
+ ])
69
+
70
+ _dict = self.model_dump(
71
+ by_alias=True,
72
+ exclude=excluded_fields,
73
+ exclude_none=True,
74
+ )
75
+ # override the default output from pydantic by calling `to_dict()` of data
76
+ if self.data:
77
+ _dict['data'] = self.data.to_dict()
78
+ # override the default output from pydantic by calling `to_dict()` of meta
79
+ if self.meta:
80
+ _dict['meta'] = self.meta.to_dict()
81
+ return _dict
82
+
83
+ @classmethod
84
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
85
+ """Create an instance of CompositionEntriesReadingResponse from a dict"""
86
+ if obj is None:
87
+ return None
88
+
89
+ if not isinstance(obj, dict):
90
+ return cls.model_validate(obj)
91
+
92
+ _obj = cls.model_validate({
93
+ "success": obj.get("success"),
94
+ "data": CompositionEntriesReading.from_dict(obj["data"]) if obj.get("data") is not None else None,
95
+ "meta": ResponseMeta.from_dict(obj["meta"]) if obj.get("meta") is not None else None
96
+ })
97
+ return _obj
98
+
99
+
@@ -0,0 +1,122 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Widgetic API Gateway
5
+
6
+ API documentation for the Widgetic API Gateway
7
+
8
+ The version of the OpenAPI document: 1.0.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictFloat, StrictInt, StrictStr
21
+ from typing import Any, ClassVar, Dict, List, Optional, Union
22
+ from typing import Optional, Set
23
+ from typing_extensions import Self
24
+
25
+ class CompositionEntryAggregateTally(BaseModel):
26
+ """
27
+ The aggregates of one group (the entries that share a value of the `groupBy` column), or of the whole selection when no `groupBy` was asked for. Only the functions that were asked for with `aggregate` are present.
28
+ """ # noqa: E501
29
+ group: Optional[StrictStr] = Field(default=None, description="The value of the `groupBy` column, as text (a number is `\"5\"`); `null` groups the entries that left it empty. Absent when no `groupBy` was asked for. ")
30
+ count: Optional[StrictInt] = Field(default=None, description="How many entries are in the group (or in the selection)")
31
+ avg: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The average of the numeric `column`, rounded to 4 decimals. `null` when no entry matched: there is no average of nothing, and it is not 0. ")
32
+ min: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The smallest value of the numeric `column`. `null` when no entry matched.")
33
+ max: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The largest value of the numeric `column`. `null` when no entry matched.")
34
+ sum: Optional[Union[StrictFloat, StrictInt]] = Field(default=None, description="The sum of the numeric `column`. `null` when no entry matched.")
35
+ __properties: ClassVar[List[str]] = ["group", "count", "avg", "min", "max", "sum"]
36
+
37
+ model_config = ConfigDict(
38
+ populate_by_name=True,
39
+ validate_assignment=True,
40
+ protected_namespaces=(),
41
+ )
42
+
43
+
44
+ def to_str(self) -> str:
45
+ """Returns the string representation of the model using alias"""
46
+ return pprint.pformat(self.model_dump(by_alias=True))
47
+
48
+ def to_json(self) -> str:
49
+ """Returns the JSON representation of the model using alias"""
50
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
51
+ return json.dumps(self.to_dict())
52
+
53
+ @classmethod
54
+ def from_json(cls, json_str: str) -> Optional[Self]:
55
+ """Create an instance of CompositionEntryAggregateTally from a JSON string"""
56
+ return cls.from_dict(json.loads(json_str))
57
+
58
+ def to_dict(self) -> Dict[str, Any]:
59
+ """Return the dictionary representation of the model using alias.
60
+
61
+ This has the following differences from calling pydantic's
62
+ `self.model_dump(by_alias=True)`:
63
+
64
+ * `None` is only added to the output dict for nullable fields that
65
+ were set at model initialization. Other fields with value `None`
66
+ are ignored.
67
+ """
68
+ excluded_fields: Set[str] = set([
69
+ ])
70
+
71
+ _dict = self.model_dump(
72
+ by_alias=True,
73
+ exclude=excluded_fields,
74
+ exclude_none=True,
75
+ )
76
+ # set to None if group (nullable) is None
77
+ # and model_fields_set contains the field
78
+ if self.group is None and "group" in self.model_fields_set:
79
+ _dict['group'] = None
80
+
81
+ # set to None if avg (nullable) is None
82
+ # and model_fields_set contains the field
83
+ if self.avg is None and "avg" in self.model_fields_set:
84
+ _dict['avg'] = None
85
+
86
+ # set to None if min (nullable) is None
87
+ # and model_fields_set contains the field
88
+ if self.min is None and "min" in self.model_fields_set:
89
+ _dict['min'] = None
90
+
91
+ # set to None if max (nullable) is None
92
+ # and model_fields_set contains the field
93
+ if self.max is None and "max" in self.model_fields_set:
94
+ _dict['max'] = None
95
+
96
+ # set to None if sum (nullable) is None
97
+ # and model_fields_set contains the field
98
+ if self.sum is None and "sum" in self.model_fields_set:
99
+ _dict['sum'] = None
100
+
101
+ return _dict
102
+
103
+ @classmethod
104
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
105
+ """Create an instance of CompositionEntryAggregateTally from a dict"""
106
+ if obj is None:
107
+ return None
108
+
109
+ if not isinstance(obj, dict):
110
+ return cls.model_validate(obj)
111
+
112
+ _obj = cls.model_validate({
113
+ "group": obj.get("group"),
114
+ "count": obj.get("count"),
115
+ "avg": obj.get("avg"),
116
+ "min": obj.get("min"),
117
+ "max": obj.get("max"),
118
+ "sum": obj.get("sum")
119
+ })
120
+ return _obj
121
+
122
+
@@ -0,0 +1,99 @@
1
+ # coding: utf-8
2
+
3
+ """
4
+ Widgetic API Gateway
5
+
6
+ API documentation for the Widgetic API Gateway
7
+
8
+ The version of the OpenAPI document: 1.0.0
9
+ Generated by OpenAPI Generator (https://openapi-generator.tech)
10
+
11
+ Do not edit the class manually.
12
+ """ # noqa: E501
13
+
14
+
15
+ from __future__ import annotations
16
+ import pprint
17
+ import re # noqa: F401
18
+ import json
19
+
20
+ from pydantic import BaseModel, ConfigDict, Field, StrictBool, StrictStr
21
+ from typing import Any, ClassVar, Dict, List, Optional
22
+ from api_sdk_py.models.composition_entry_aggregate_tally import CompositionEntryAggregateTally
23
+ from typing import Optional, Set
24
+ from typing_extensions import Self
25
+
26
+ class CompositionEntryAggregatesBlock(BaseModel):
27
+ """
28
+ What `aggregate` asked for, computed over the entries that match `since`, `until` and the `context` and column filters of the same call.
29
+ """ # noqa: E501
30
+ column: StrictStr = Field(description="The numeric column `avg`, `min`, `max` and `sum` were computed over. An empty text when only `count` was asked for. ")
31
+ tallies: List[CompositionEntryAggregateTally] = Field(description="One tally per value of `groupBy`, in the order of that column (a number as a number, `null` last), up to 200 groups; or ONE tally for the whole selection when no `groupBy` was asked for. Empty when `groupBy` was asked for and no entry matched. ")
32
+ truncated: Optional[StrictBool] = Field(default=None, description="True when more than 200 groups matched, so `tallies` lists the first 200 in that order. Absent otherwise. (Not to be mixed up with `moreGroups` on the reading, which is about the plain `tallies` of the whole table: those are 20 groups, largest first.) ")
33
+ __properties: ClassVar[List[str]] = ["column", "tallies", "truncated"]
34
+
35
+ model_config = ConfigDict(
36
+ populate_by_name=True,
37
+ validate_assignment=True,
38
+ protected_namespaces=(),
39
+ )
40
+
41
+
42
+ def to_str(self) -> str:
43
+ """Returns the string representation of the model using alias"""
44
+ return pprint.pformat(self.model_dump(by_alias=True))
45
+
46
+ def to_json(self) -> str:
47
+ """Returns the JSON representation of the model using alias"""
48
+ # TODO: pydantic v2: use .model_dump_json(by_alias=True, exclude_unset=True) instead
49
+ return json.dumps(self.to_dict())
50
+
51
+ @classmethod
52
+ def from_json(cls, json_str: str) -> Optional[Self]:
53
+ """Create an instance of CompositionEntryAggregatesBlock from a JSON string"""
54
+ return cls.from_dict(json.loads(json_str))
55
+
56
+ def to_dict(self) -> Dict[str, Any]:
57
+ """Return the dictionary representation of the model using alias.
58
+
59
+ This has the following differences from calling pydantic's
60
+ `self.model_dump(by_alias=True)`:
61
+
62
+ * `None` is only added to the output dict for nullable fields that
63
+ were set at model initialization. Other fields with value `None`
64
+ are ignored.
65
+ """
66
+ excluded_fields: Set[str] = set([
67
+ ])
68
+
69
+ _dict = self.model_dump(
70
+ by_alias=True,
71
+ exclude=excluded_fields,
72
+ exclude_none=True,
73
+ )
74
+ # override the default output from pydantic by calling `to_dict()` of each item in tallies (list)
75
+ _items = []
76
+ if self.tallies:
77
+ for _item_tallies in self.tallies:
78
+ if _item_tallies:
79
+ _items.append(_item_tallies.to_dict())
80
+ _dict['tallies'] = _items
81
+ return _dict
82
+
83
+ @classmethod
84
+ def from_dict(cls, obj: Optional[Dict[str, Any]]) -> Optional[Self]:
85
+ """Create an instance of CompositionEntryAggregatesBlock from a dict"""
86
+ if obj is None:
87
+ return None
88
+
89
+ if not isinstance(obj, dict):
90
+ return cls.model_validate(obj)
91
+
92
+ _obj = cls.model_validate({
93
+ "column": obj.get("column"),
94
+ "tallies": [CompositionEntryAggregateTally.from_dict(_item) for _item in obj["tallies"]] if obj.get("tallies") is not None else None,
95
+ "truncated": obj.get("truncated")
96
+ })
97
+ return _obj
98
+
99
+