structifyai 1.158.0__py3-none-any.whl → 1.176.1__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 (364) hide show
  1. structify/_base_client.py +140 -11
  2. structify/_client.py +1116 -253
  3. structify/_models.py +16 -1
  4. structify/_streaming.py +12 -10
  5. structify/_types.py +12 -2
  6. structify/_version.py +1 -1
  7. structify/lib/__init__.py +5 -0
  8. structify/lib/cost_confirmation.py +63 -0
  9. structify/pagination.py +63 -1
  10. structify/resources/__init__.py +57 -27
  11. structify/resources/admin/__init__.py +26 -40
  12. structify/resources/admin/admin.py +39 -71
  13. structify/resources/admin/chat_templates.py +382 -0
  14. structify/resources/admin/jobs.py +76 -3
  15. structify/resources/admin/sandbox.py +184 -0
  16. structify/resources/admin/teams.py +88 -0
  17. structify/resources/admin/users.py +28 -238
  18. structify/resources/chat.py +232 -0
  19. structify/resources/connector_catalog/__init__.py +33 -0
  20. structify/resources/connector_catalog/admin.py +1510 -0
  21. structify/resources/connector_catalog/connector_catalog.py +394 -0
  22. structify/resources/connectors/__init__.py +33 -0
  23. structify/resources/{connectors.py → connectors/connectors.py} +1155 -325
  24. structify/resources/connectors/type_snippets.py +169 -0
  25. structify/resources/datasets/datasets.py +0 -4
  26. structify/resources/documents.py +1 -123
  27. structify/resources/external.py +35 -2
  28. structify/resources/jobs.py +19 -336
  29. structify/resources/nango.py +234 -0
  30. structify/resources/polars.py +225 -103
  31. structify/resources/sandbox.py +13 -110
  32. structify/resources/scrape.py +0 -16
  33. structify/resources/sessions.py +241 -153
  34. structify/resources/slack.py +1 -151
  35. structify/resources/structure.py +120 -48
  36. structify/resources/teams.py +96 -0
  37. structify/resources/user/__init__.py +14 -0
  38. structify/resources/user/api_keys.py +380 -0
  39. structify/resources/user/user.py +209 -2
  40. structify/resources/whitelabel.py +294 -187
  41. structify/resources/whitelabel_service.py +222 -0
  42. structify/resources/{report.py → wiki.py} +237 -210
  43. structify/resources/workflow_schedule.py +4 -5
  44. structify/types/__init__.py +67 -36
  45. structify/types/add_member_response.py +35 -4
  46. structify/types/admin/__init__.py +13 -88
  47. structify/types/admin/admin_dataset_return.py +6 -0
  48. structify/types/admin/{user_get_credits_response.py → admin_delete_jobs_response.py} +3 -3
  49. structify/types/admin/admin_list_jobs_response.py +35 -1
  50. structify/types/admin/admin_sandbox.py +38 -0
  51. structify/types/admin/chat_template_create_params.py +21 -0
  52. structify/types/admin/{human_llm_start_next_job_params.py → chat_template_list_params.py} +3 -3
  53. structify/types/admin/{human_llm_get_jobs_response.py → chat_template_list_response.py} +3 -3
  54. structify/types/admin/chat_template_update_params.py +22 -0
  55. structify/types/admin/{user_add_credits_response.py → expire_grants_response.py} +5 -3
  56. structify/types/admin/impersonate_response.py +17 -0
  57. structify/types/admin/{next_action_get_batched_training_data_params.py → job_delete_params.py} +2 -2
  58. structify/types/admin/{user_get_credits_params.py → sandbox_list_params.py} +4 -4
  59. structify/types/admin/sandbox_type.py +7 -0
  60. structify/types/admin/{user_set_credits_params.py → team_expire_grants_params.py} +4 -4
  61. structify/types/admin/user.py +16 -0
  62. structify/types/admin/user_create_params.py +1 -0
  63. structify/types/admin/{training_dataset_delete_params.py → user_impersonate_params.py} +3 -3
  64. structify/types/admin/user_list_response.py +14 -4
  65. structify/types/admin_grant_access_response.py +2 -0
  66. structify/types/{slack_user_mapping_response.py → admin_issue_found_response.py} +3 -5
  67. structify/types/chat_add_git_commit_response.py +2 -0
  68. structify/types/{admin/human_llm_get_next_step_params.py → chat_admin_issue_found_params.py} +4 -4
  69. structify/types/chat_create_session_params.py +7 -0
  70. structify/types/chat_dependency.py +17 -0
  71. structify/types/chat_event.py +51 -239
  72. structify/types/chat_get_git_commit_response.py +2 -0
  73. structify/types/chat_get_session_timeline_response.py +31 -1
  74. structify/types/{job_get_steps_response.py → chat_list_templates_response.py} +3 -3
  75. structify/types/chat_prompt.py +2 -0
  76. structify/types/chat_revert_to_commit_response.py +2 -0
  77. structify/types/chat_session.py +14 -0
  78. structify/types/chat_session_with_messages.py +33 -1
  79. structify/types/chat_template.py +31 -0
  80. structify/types/chat_update_session_params.py +2 -0
  81. structify/types/code_generate_code_params.py +7 -0
  82. structify/types/connector.py +16 -25
  83. structify/types/connector_auth_method.py +29 -0
  84. structify/types/connector_auth_method_with_fields.py +15 -0
  85. structify/types/connector_catalog/__init__.py +32 -0
  86. structify/types/connector_catalog/admin_batch_create_credential_fields_params.py +14 -0
  87. structify/types/connector_catalog/admin_batch_create_credential_fields_response.py +10 -0
  88. structify/types/connector_catalog/admin_batch_create_scopes_params.py +14 -0
  89. structify/types/connector_catalog/admin_create_auth_method_params.py +22 -0
  90. structify/types/connector_catalog/admin_create_catalog_params.py +22 -0
  91. structify/types/connector_catalog/admin_create_credential_field_params.py +28 -0
  92. structify/types/connector_catalog/admin_create_scope_params.py +19 -0
  93. structify/types/connector_catalog/admin_list_nango_pending_response.py +10 -0
  94. structify/types/{admin/training_dataset_get_datum_info_params.py → connector_catalog/admin_list_scopes_params.py} +3 -3
  95. structify/types/connector_catalog/admin_update_auth_method_params.py +16 -0
  96. structify/types/connector_catalog/admin_update_catalog_params.py +20 -0
  97. structify/types/connector_catalog/admin_update_credential_field_params.py +26 -0
  98. structify/types/connector_catalog/admin_update_scope_params.py +18 -0
  99. structify/types/connector_catalog/admin_upload_logo_params.py +13 -0
  100. structify/types/connector_catalog/batch_create_scopes_response.py +12 -0
  101. structify/types/connector_catalog/connector_auth_method_scope.py +25 -0
  102. structify/types/connector_catalog/connector_catalog.py +26 -0
  103. structify/types/connector_catalog/create_credential_field_request_param.py +28 -0
  104. structify/types/connector_catalog/create_scope_request_param.py +19 -0
  105. structify/types/connector_catalog/list_scopes_response.py +12 -0
  106. structify/types/connector_catalog/pending_nango_integration.py +17 -0
  107. structify/types/{admin/user_set_credits_response.py → connector_catalog/upload_logo_response.py} +3 -3
  108. structify/types/connector_catalog_list_params.py +20 -0
  109. structify/types/connector_catalog_list_response.py +22 -0
  110. structify/types/connector_catalog_with_methods.py +15 -0
  111. structify/types/connector_category.py +7 -0
  112. structify/types/connector_create_params.py +11 -25
  113. structify/types/connector_credential_field.py +34 -0
  114. structify/types/connector_delete_schema_object_params.py +35 -0
  115. structify/types/connector_explore_params.py +19 -0
  116. structify/types/connector_explorer_chat.py +9 -84
  117. structify/types/connector_get_clarification_requests_response.py +36 -0
  118. structify/types/connector_get_response.py +2 -0
  119. structify/types/connector_list_with_snippets_params.py +12 -0
  120. structify/types/connector_list_with_snippets_response.py +10 -0
  121. structify/types/connector_search_tables_params.py +15 -0
  122. structify/types/connector_search_tables_response.py +160 -0
  123. structify/types/connector_store_response.py +21 -0
  124. structify/types/connector_summaries_params.py +15 -0
  125. structify/types/connector_summaries_response.py +10 -0
  126. structify/types/connector_summary.py +16 -0
  127. structify/types/connector_table_info.py +15 -0
  128. structify/types/connector_update_column_params.py +12 -0
  129. structify/types/connector_update_params.py +4 -25
  130. structify/types/connector_update_table_params.py +14 -0
  131. structify/types/connector_with_secrets.py +2 -0
  132. structify/types/connector_with_snippets.py +11 -0
  133. structify/types/connectors/__init__.py +6 -0
  134. structify/types/connectors/snippet.py +20 -0
  135. structify/types/connectors/type_snippet_upsert_params.py +12 -0
  136. structify/types/create_chat_session_response.py +2 -0
  137. structify/types/dataset_create_params.py +0 -2
  138. structify/types/dataset_descriptor.py +6 -0
  139. structify/types/dataset_descriptor_param.py +6 -0
  140. structify/types/dataset_get_response.py +6 -0
  141. structify/types/dataset_list_response.py +6 -0
  142. structify/types/dataset_view_table_response.py +3 -1
  143. structify/types/delete_chat_session_response.py +2 -0
  144. structify/types/delete_schema_object_request_param.py +35 -0
  145. structify/types/delete_schema_object_response.py +13 -0
  146. structify/types/edge_spec_param.py +13 -0
  147. structify/types/entity_get_source_entities_response.py +0 -2
  148. structify/types/entity_list_jobs_response.py +3 -3
  149. structify/types/entity_view_response.py +0 -2
  150. structify/types/estimate_cost_response.py +9 -0
  151. structify/types/exploration_phase_id.py +79 -0
  152. structify/types/finalize_dag_response.py +11 -0
  153. structify/types/get_chat_session_response.py +14 -6
  154. structify/types/get_dependencies_response.py +15 -0
  155. structify/types/get_job_events_response.py +20 -0
  156. structify/types/get_node_response.py +10 -0
  157. structify/types/job_cancel_response.py +3 -3
  158. structify/types/job_event_body.py +108 -1
  159. structify/types/job_get_source_entities_response.py +0 -2
  160. structify/types/job_list_params.py +1 -1
  161. structify/types/job_list_response.py +35 -1
  162. structify/types/knowledge_graph.py +6 -0
  163. structify/types/knowledge_graph_param.py +6 -0
  164. structify/types/list_chat_sessions_response.py +2 -0
  165. structify/types/list_collaborators_response.py +4 -0
  166. structify/types/list_tables_response.py +12 -0
  167. structify/types/llm_information_store.py +62 -28
  168. structify/types/merge_config.py +2 -0
  169. structify/types/merge_config_param.py +2 -0
  170. structify/types/message.py +2 -0
  171. structify/types/nango_create_session_params.py +21 -0
  172. structify/types/nango_create_session_response.py +15 -0
  173. structify/types/nango_list_integrations_response.py +28 -0
  174. structify/types/{session_create_node_params.py → node_spec_param.py} +4 -4
  175. structify/types/refresh_session_response.py +15 -0
  176. structify/types/sandbox.py +8 -2
  177. structify/types/sandbox_get_params.py +2 -1
  178. structify/types/scrape_list_params.py +1 -22
  179. structify/types/scrape_list_response.py +2 -0
  180. structify/types/scrape_scrape_params.py +1 -14
  181. structify/types/scrape_scrape_response.py +2 -0
  182. structify/types/select_team_response.py +3 -1
  183. structify/types/{connector_approve_version_params.py → session_confirm_node_params.py} +3 -3
  184. structify/types/session_finalize_dag_params.py +20 -0
  185. structify/types/session_get_events_response.py +2 -0
  186. structify/types/session_request_confirmation_params.py +13 -0
  187. structify/types/session_upload_node_output_data_params.py +3 -0
  188. structify/types/slack_event_payload_param.py +18 -2
  189. structify/types/slack_events_params.py +18 -2
  190. structify/types/source_list_response.py +0 -2
  191. structify/types/structure_enhance_property_params.py +2 -17
  192. structify/types/structure_enhance_relationship_params.py +2 -17
  193. structify/types/structure_find_relationship_params.py +2 -18
  194. structify/types/structure_pdf_params.py +22 -0
  195. structify/types/structure_pdf_response.py +11 -0
  196. structify/types/structure_run_async_params.py +10 -17
  197. structify/types/table.py +2 -0
  198. structify/types/table_param.py +2 -0
  199. structify/types/team.py +14 -0
  200. structify/types/{admin/training_dataset_remove_datum_params.py → team_create_link_code_params.py} +3 -3
  201. structify/types/team_update_params.py +10 -0
  202. structify/types/team_wiki_page.py +28 -0
  203. structify/types/teams_link_code_response.py +13 -0
  204. structify/types/token_response.py +6 -2
  205. structify/types/tool_invocation.py +468 -0
  206. structify/types/tool_result.py +99 -0
  207. structify/types/update_table_response.py +46 -0
  208. structify/types/usage_group_key.py +14 -1
  209. structify/types/user/__init__.py +4 -0
  210. structify/types/{admin/training_dataset_size_params.py → user/api_key_create_params.py} +5 -5
  211. structify/types/user/api_key_info.py +24 -0
  212. structify/types/user/create_api_key_response.py +12 -0
  213. structify/types/user/list_api_keys_response.py +12 -0
  214. structify/types/user_enrich_params.py +11 -0
  215. structify/types/user_info.py +22 -0
  216. structify/types/user_refresh_params.py +13 -0
  217. structify/types/user_transactions_response.py +5 -5
  218. structify/types/user_update_params.py +32 -12
  219. structify/types/user_usage_response.py +0 -2
  220. structify/types/wiki_connector_reference.py +63 -0
  221. structify/types/wiki_create_params.py +16 -0
  222. structify/types/{admin/training_dataset_list_response.py → wiki_list_response.py} +4 -2
  223. structify/types/wiki_page_with_references.py +12 -0
  224. structify/types/wiki_update_params.py +16 -0
  225. structify/types/workflow_dag.py +2 -0
  226. structify/types/workflow_node_execution_status.py +3 -1
  227. structify/types/workflow_schedule_info.py +2 -2
  228. structify/types/workflow_session_node.py +10 -0
  229. {structifyai-1.158.0.dist-info → structifyai-1.176.1.dist-info}/METADATA +67 -4
  230. structifyai-1.176.1.dist-info/RECORD +496 -0
  231. {structifyai-1.158.0.dist-info → structifyai-1.176.1.dist-info}/licenses/LICENSE +1 -1
  232. structify/resources/admin/human_llm.py +0 -819
  233. structify/resources/admin/next_action.py +0 -656
  234. structify/resources/admin/training_datasets.py +0 -2028
  235. structify/resources/external/__init__.py +0 -61
  236. structify/resources/external/external.py +0 -166
  237. structify/resources/external/news.py +0 -519
  238. structify/resources/external/people.py +0 -998
  239. structify/resources/external/search_api.py +0 -1525
  240. structify/types/active_version_data.py +0 -21
  241. structify/types/active_version_response.py +0 -13
  242. structify/types/admin/action_training_data_entry.py +0 -219
  243. structify/types/admin/action_training_data_response.py +0 -12
  244. structify/types/admin/datum_status.py +0 -19
  245. structify/types/admin/delete_action_training_data_response.py +0 -9
  246. structify/types/admin/human_llm_add_search_for_job_params.py +0 -13
  247. structify/types/admin/human_llm_add_to_dataset_params.py +0 -186
  248. structify/types/admin/human_llm_finish_job_params.py +0 -13
  249. structify/types/admin/human_llm_get_jobs_params.py +0 -12
  250. structify/types/admin/human_llm_get_next_step_response.py +0 -196
  251. structify/types/admin/human_llm_job.py +0 -73
  252. structify/types/admin/human_llm_prelabel_step_response.py +0 -184
  253. structify/types/admin/human_llm_update_step_params.py +0 -186
  254. structify/types/admin/labeling_stats.py +0 -24
  255. structify/types/admin/next_action_add_training_datum_params.py +0 -203
  256. structify/types/admin/next_action_delete_training_data_params.py +0 -12
  257. structify/types/admin/next_action_get_training_data_params.py +0 -25
  258. structify/types/admin/next_action_get_training_datum_params.py +0 -12
  259. structify/types/admin/next_action_label_training_datum_params.py +0 -90
  260. structify/types/admin/step_choices.py +0 -32
  261. structify/types/admin/training_dataset_add_datum_params.py +0 -13
  262. structify/types/admin/training_dataset_add_params.py +0 -12
  263. structify/types/admin/training_dataset_download_datum_params.py +0 -13
  264. structify/types/admin/training_dataset_get_labeller_stats_params.py +0 -23
  265. structify/types/admin/training_dataset_get_labeller_stats_response.py +0 -10
  266. structify/types/admin/training_dataset_get_next_for_labeling_params.py +0 -15
  267. structify/types/admin/training_dataset_get_next_for_qa_params.py +0 -18
  268. structify/types/admin/training_dataset_get_next_suspicious_params.py +0 -23
  269. structify/types/admin/training_dataset_label_datum_params.py +0 -188
  270. structify/types/admin/training_dataset_list_datums_params.py +0 -17
  271. structify/types/admin/training_dataset_list_datums_response.py +0 -33
  272. structify/types/admin/training_dataset_mark_datum_suspicious_params.py +0 -19
  273. structify/types/admin/training_dataset_size_response.py +0 -37
  274. structify/types/admin/training_dataset_suspicious_count_params.py +0 -23
  275. structify/types/admin/training_dataset_suspicious_count_response.py +0 -9
  276. structify/types/admin/training_dataset_switch_dataset_params.py +0 -13
  277. structify/types/admin/training_dataset_update_datum_status_params.py +0 -18
  278. structify/types/admin/training_dataset_upload_labeled_step_params.py +0 -15
  279. structify/types/admin/training_dataset_verify_datum_params.py +0 -17
  280. structify/types/admin/training_datum_response.py +0 -405
  281. structify/types/admin/user_add_credits_params.py +0 -18
  282. structify/types/chat_prompt_param.py +0 -255
  283. structify/types/connector_column_descriptor.py +0 -21
  284. structify/types/connector_relational_database_descriptor.py +0 -13
  285. structify/types/connector_table_descriptor.py +0 -22
  286. structify/types/document_structure_params.py +0 -21
  287. structify/types/document_structure_response.py +0 -8
  288. structify/types/execution_step.py +0 -198
  289. structify/types/external/__init__.py +0 -96
  290. structify/types/external/companies_search_response.py +0 -28
  291. structify/types/external/company_search_result.py +0 -69
  292. structify/types/external/enriched_organization.py +0 -69
  293. structify/types/external/everything_response.py +0 -19
  294. structify/types/external/google_maps_result.py +0 -38
  295. structify/types/external/google_search_response.py +0 -19
  296. structify/types/external/google_search_result.py +0 -21
  297. structify/types/external/job_posting.py +0 -54
  298. structify/types/external/job_postings_response.py +0 -19
  299. structify/types/external/location_coordinates.py +0 -13
  300. structify/types/external/location_response.py +0 -16
  301. structify/types/external/location_result.py +0 -24
  302. structify/types/external/news_article.py +0 -33
  303. structify/types/external/news_everything_params.py +0 -45
  304. structify/types/external/news_source.py +0 -15
  305. structify/types/external/news_source_detail.py +0 -28
  306. structify/types/external/news_sources_params.py +0 -19
  307. structify/types/external/news_top_headlines_params.py +0 -28
  308. structify/types/external/organization_detail.py +0 -87
  309. structify/types/external/people_match_response.py +0 -18
  310. structify/types/external/people_search_response.py +0 -28
  311. structify/types/external/person_companies_search_params.py +0 -63
  312. structify/types/external/person_match.py +0 -60
  313. structify/types/external/person_organization_job_postings_params.py +0 -16
  314. structify/types/external/person_organizations_enrich_params.py +0 -16
  315. structify/types/external/person_people_match_params.py +0 -49
  316. structify/types/external/person_people_search_params.py +0 -57
  317. structify/types/external/person_search_result.py +0 -48
  318. structify/types/external/search_api_google_flights_calendar_params.py +0 -28
  319. structify/types/external/search_api_google_flights_calendar_response.py +0 -8
  320. structify/types/external/search_api_google_flights_location_search_params.py +0 -16
  321. structify/types/external/search_api_google_flights_location_search_response.py +0 -8
  322. structify/types/external/search_api_google_flights_search_params.py +0 -43
  323. structify/types/external/search_api_google_flights_search_response.py +0 -8
  324. structify/types/external/search_api_google_maps_place_details_params.py +0 -16
  325. structify/types/external/search_api_google_maps_place_details_response.py +0 -8
  326. structify/types/external/search_api_google_maps_place_photos_params.py +0 -16
  327. structify/types/external/search_api_google_maps_place_photos_response.py +0 -8
  328. structify/types/external/search_api_google_maps_place_reviews_params.py +0 -19
  329. structify/types/external/search_api_google_maps_place_reviews_response.py +0 -8
  330. structify/types/external/search_api_google_maps_search_params.py +0 -22
  331. structify/types/external/search_api_google_maps_search_response.py +0 -10
  332. structify/types/external/search_api_google_scholar_author_search_params.py +0 -22
  333. structify/types/external/search_api_google_scholar_author_search_response.py +0 -8
  334. structify/types/external/search_api_google_scholar_citations_params.py +0 -22
  335. structify/types/external/search_api_google_scholar_citations_response.py +0 -8
  336. structify/types/external/search_api_google_scholar_search_params.py +0 -28
  337. structify/types/external/search_api_google_scholar_search_response.py +0 -8
  338. structify/types/external/search_api_google_search_params.py +0 -25
  339. structify/types/external/search_api_location_search_params.py +0 -22
  340. structify/types/external/sources_response.py +0 -16
  341. structify/types/external/top_headlines_response.py +0 -19
  342. structify/types/job_delete_response.py +0 -7
  343. structify/types/job_get_response.py +0 -62
  344. structify/types/job_get_step_graph_response.py +0 -233
  345. structify/types/job_get_step_response.py +0 -196
  346. structify/types/message_param.py +0 -35
  347. structify/types/pending_version_response.py +0 -21
  348. structify/types/report_missing_params.py +0 -18
  349. structify/types/report_missing_response.py +0 -7
  350. structify/types/report_relationship_params.py +0 -18
  351. structify/types/report_relationship_response.py +0 -7
  352. structify/types/report_step_params.py +0 -15
  353. structify/types/report_step_response.py +0 -7
  354. structify/types/report_wrong_params.py +0 -18
  355. structify/types/report_wrong_response.py +0 -7
  356. structify/types/sandbox_create_params.py +0 -20
  357. structify/types/session_create_edge_params.py +0 -13
  358. structify/types/slack_connection_status.py +0 -15
  359. structify/types/slack_user_mapping_params.py +0 -18
  360. structify/types/tool_metadata_param.py +0 -17
  361. structify/types/user_team.py +0 -35
  362. structify/types/workflow_schedule_get_response.py +0 -10
  363. structifyai-1.158.0.dist-info/RECORD +0 -530
  364. {structifyai-1.158.0.dist-info → structifyai-1.176.1.dist-info}/WHEEL +0 -0
structify/_models.py CHANGED
@@ -3,7 +3,20 @@ from __future__ import annotations
3
3
  import os
4
4
  import inspect
5
5
  import weakref
6
- from typing import TYPE_CHECKING, Any, Type, Union, Generic, TypeVar, Callable, Optional, cast
6
+ from typing import (
7
+ IO,
8
+ TYPE_CHECKING,
9
+ Any,
10
+ Type,
11
+ Union,
12
+ Generic,
13
+ TypeVar,
14
+ Callable,
15
+ Iterable,
16
+ Optional,
17
+ AsyncIterable,
18
+ cast,
19
+ )
7
20
  from datetime import date, datetime
8
21
  from typing_extensions import (
9
22
  List,
@@ -787,6 +800,7 @@ class FinalRequestOptionsInput(TypedDict, total=False):
787
800
  timeout: float | Timeout | None
788
801
  files: HttpxRequestFiles | None
789
802
  idempotency_key: str
803
+ content: Union[bytes, bytearray, IO[bytes], Iterable[bytes], AsyncIterable[bytes], None]
790
804
  json_data: Body
791
805
  extra_json: AnyMapping
792
806
  follow_redirects: bool
@@ -805,6 +819,7 @@ class FinalRequestOptions(pydantic.BaseModel):
805
819
  post_parser: Union[Callable[[Any], Any], NotGiven] = NotGiven()
806
820
  follow_redirects: Union[bool, None] = None
807
821
 
822
+ content: Union[bytes, bytearray, IO[bytes], Iterable[bytes], AsyncIterable[bytes], None] = None
808
823
  # It should be noted that we cannot use `json` here as that would override
809
824
  # a BaseModel method in an incompatible fashion.
810
825
  json_data: Union[Body, None] = None
structify/_streaming.py CHANGED
@@ -54,11 +54,12 @@ class Stream(Generic[_T]):
54
54
  process_data = self._client._process_response_data
55
55
  iterator = self._iter_events()
56
56
 
57
- for sse in iterator:
58
- yield process_data(data=sse.json(), cast_to=cast_to, response=response)
59
-
60
- # As we might not fully consume the response stream, we need to close it explicitly
61
- response.close()
57
+ try:
58
+ for sse in iterator:
59
+ yield process_data(data=sse.json(), cast_to=cast_to, response=response)
60
+ finally:
61
+ # Ensure the response is closed even if the consumer doesn't read all data
62
+ response.close()
62
63
 
63
64
  def __enter__(self) -> Self:
64
65
  return self
@@ -117,11 +118,12 @@ class AsyncStream(Generic[_T]):
117
118
  process_data = self._client._process_response_data
118
119
  iterator = self._iter_events()
119
120
 
120
- async for sse in iterator:
121
- yield process_data(data=sse.json(), cast_to=cast_to, response=response)
122
-
123
- # As we might not fully consume the response stream, we need to close it explicitly
124
- await response.aclose()
121
+ try:
122
+ async for sse in iterator:
123
+ yield process_data(data=sse.json(), cast_to=cast_to, response=response)
124
+ finally:
125
+ # Ensure the response is closed even if the consumer doesn't read all data
126
+ await response.aclose()
125
127
 
126
128
  async def __aenter__(self) -> Self:
127
129
  return self
structify/_types.py CHANGED
@@ -13,9 +13,11 @@ from typing import (
13
13
  Mapping,
14
14
  TypeVar,
15
15
  Callable,
16
+ Iterable,
16
17
  Iterator,
17
18
  Optional,
18
19
  Sequence,
20
+ AsyncIterable,
19
21
  )
20
22
  from typing_extensions import (
21
23
  Set,
@@ -56,6 +58,13 @@ if TYPE_CHECKING:
56
58
  else:
57
59
  Base64FileInput = Union[IO[bytes], PathLike]
58
60
  FileContent = Union[IO[bytes], bytes, PathLike] # PathLike is not subscriptable in Python 3.8.
61
+
62
+
63
+ # Used for sending raw binary data / streaming data in request bodies
64
+ # e.g. for file uploads without multipart encoding
65
+ BinaryTypes = Union[bytes, bytearray, IO[bytes], Iterable[bytes]]
66
+ AsyncBinaryTypes = Union[bytes, bytearray, IO[bytes], AsyncIterable[bytes]]
67
+
59
68
  FileTypes = Union[
60
69
  # file (or bytes)
61
70
  FileContent,
@@ -243,6 +252,9 @@ _T_co = TypeVar("_T_co", covariant=True)
243
252
  if TYPE_CHECKING:
244
253
  # This works because str.__contains__ does not accept object (either in typeshed or at runtime)
245
254
  # https://github.com/hauntsaninja/useful_types/blob/5e9710f3875107d068e7679fd7fec9cfab0eff3b/useful_types/__init__.py#L285
255
+ #
256
+ # Note: index() and count() methods are intentionally omitted to allow pyright to properly
257
+ # infer TypedDict types when dict literals are used in lists assigned to SequenceNotStr.
246
258
  class SequenceNotStr(Protocol[_T_co]):
247
259
  @overload
248
260
  def __getitem__(self, index: SupportsIndex, /) -> _T_co: ...
@@ -251,8 +263,6 @@ if TYPE_CHECKING:
251
263
  def __contains__(self, value: object, /) -> bool: ...
252
264
  def __len__(self) -> int: ...
253
265
  def __iter__(self) -> Iterator[_T_co]: ...
254
- def index(self, value: Any, start: int = 0, stop: int = ..., /) -> int: ...
255
- def count(self, value: Any, /) -> int: ...
256
266
  def __reversed__(self) -> Iterator[_T_co]: ...
257
267
  else:
258
268
  # just point this to a normal `Sequence` at runtime to avoid having to special case
structify/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "structify"
4
- __version__ = "1.158.0" # x-release-please-version
4
+ __version__ = "1.176.1" # x-release-please-version
@@ -0,0 +1,5 @@
1
+ """Custom library extensions for the Structify SDK."""
2
+
3
+ from structify.lib.cost_confirmation import request_cost_confirmation_if_needed
4
+
5
+ __all__ = ["request_cost_confirmation_if_needed"]
@@ -0,0 +1,63 @@
1
+ """Cost confirmation utilities for workflow execution.
2
+
3
+ This module provides helpers to request user confirmation before executing
4
+ costly operations (web scraping, PDF extraction, etc.) when running within
5
+ a workflow context.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import os
11
+ import time
12
+ from typing import TYPE_CHECKING, Literal
13
+
14
+ if TYPE_CHECKING:
15
+ from structify import Structify
16
+
17
+ CONFIRMATION_TIMEOUT_SECONDS = 3600
18
+ CONFIRMATION_POLL_INTERVAL_SECONDS = 0.5
19
+
20
+
21
+ def request_cost_confirmation_if_needed(
22
+ client: Structify, row_count: int, operation: Literal["tag", "pdf", "web", "match"]
23
+ ) -> bool:
24
+ """Request cost confirmation if running in workflow context with confirmation enabled.
25
+
26
+ When STRUCTIFY_REQUIRES_CONFIRMATION=true and STRUCTIFY_NODE_ID is set,
27
+ this function requests user confirmation before proceeding with costly
28
+ operations like web scraping or PDF extraction.
29
+
30
+ Args:
31
+ client: The Structify client instance
32
+ row_count: Number of rows to be processed (used for cost estimation)
33
+
34
+ Returns:
35
+ True if confirmed, confirmation not required, or not in workflow context.
36
+ False if user rejected the operation.
37
+
38
+ Raises:
39
+ TimeoutError: If confirmation times out after CONFIRMATION_TIMEOUT_SECONDS
40
+ """
41
+ if os.environ.get("STRUCTIFY_REQUIRES_CONFIRMATION", "").lower() != "true":
42
+ return True
43
+
44
+ node_id = os.environ.get("STRUCTIFY_NODE_ID")
45
+ if not node_id:
46
+ return True
47
+
48
+ if row_count <= 0:
49
+ return True
50
+
51
+ client.sessions.request_confirmation(node_id=node_id, row_count=row_count, operation=operation)
52
+
53
+ start_time = time.time()
54
+ while time.time() - start_time < CONFIRMATION_TIMEOUT_SECONDS:
55
+ time.sleep(CONFIRMATION_POLL_INTERVAL_SECONDS)
56
+ node = client.sessions.get_node(node_id=node_id).node
57
+
58
+ if node.confirmation_status == "confirmed":
59
+ return True
60
+ if node.confirmation_status == "rejected":
61
+ return False
62
+
63
+ raise TimeoutError(f"Timeout waiting for cost confirmation for node {node_id}")
structify/pagination.py CHANGED
@@ -9,7 +9,7 @@ from ._utils import is_mapping
9
9
  from ._models import BaseModel
10
10
  from ._base_client import BasePage, PageInfo, BaseSyncPage, BaseAsyncPage
11
11
 
12
- __all__ = ["SyncJobsList", "AsyncJobsList"]
12
+ __all__ = ["SyncJobsList", "AsyncJobsList", "SyncListConnectorCatalog", "AsyncListConnectorCatalog"]
13
13
 
14
14
  _BaseModelT = TypeVar("_BaseModelT", bound=BaseModel)
15
15
 
@@ -76,3 +76,65 @@ class AsyncJobsList(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
76
76
  **(cast(Mapping[str, Any], data) if is_mapping(data) else {"items": data}),
77
77
  },
78
78
  )
79
+
80
+
81
+ class SyncListConnectorCatalog(BaseSyncPage[_T], BasePage[_T], Generic[_T]):
82
+ items: List[_T]
83
+
84
+ @override
85
+ def _get_page_items(self) -> List[_T]:
86
+ items = self.items
87
+ if not items:
88
+ return []
89
+ return items
90
+
91
+ @override
92
+ def next_page_info(self) -> Optional[PageInfo]:
93
+ offset = self._options.params.get("offset") or 0
94
+ if not isinstance(offset, int):
95
+ raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
96
+
97
+ length = len(self._get_page_items())
98
+ current_count = offset + length
99
+
100
+ return PageInfo(params={"offset": current_count})
101
+
102
+ @classmethod
103
+ def build(cls: Type[_BaseModelT], *, response: Response, data: object) -> _BaseModelT: # noqa: ARG003
104
+ return cls.construct(
105
+ None,
106
+ **{
107
+ **(cast(Mapping[str, Any], data) if is_mapping(data) else {"items": data}),
108
+ },
109
+ )
110
+
111
+
112
+ class AsyncListConnectorCatalog(BaseAsyncPage[_T], BasePage[_T], Generic[_T]):
113
+ items: List[_T]
114
+
115
+ @override
116
+ def _get_page_items(self) -> List[_T]:
117
+ items = self.items
118
+ if not items:
119
+ return []
120
+ return items
121
+
122
+ @override
123
+ def next_page_info(self) -> Optional[PageInfo]:
124
+ offset = self._options.params.get("offset") or 0
125
+ if not isinstance(offset, int):
126
+ raise ValueError(f'Expected "offset" param to be an integer but got {offset}')
127
+
128
+ length = len(self._get_page_items())
129
+ current_count = offset + length
130
+
131
+ return PageInfo(params={"offset": current_count})
132
+
133
+ @classmethod
134
+ def build(cls: Type[_BaseModelT], *, response: Response, data: object) -> _BaseModelT: # noqa: ARG003
135
+ return cls.construct(
136
+ None,
137
+ **{
138
+ **(cast(Mapping[str, Any], data) if is_mapping(data) else {"items": data}),
139
+ },
140
+ )
@@ -32,6 +32,14 @@ from .user import (
32
32
  UserResourceWithStreamingResponse,
33
33
  AsyncUserResourceWithStreamingResponse,
34
34
  )
35
+ from .wiki import (
36
+ WikiResource,
37
+ AsyncWikiResource,
38
+ WikiResourceWithRawResponse,
39
+ AsyncWikiResourceWithRawResponse,
40
+ WikiResourceWithStreamingResponse,
41
+ AsyncWikiResourceWithStreamingResponse,
42
+ )
35
43
  from .admin import (
36
44
  AdminResource,
37
45
  AsyncAdminResource,
@@ -48,6 +56,14 @@ from .match import (
48
56
  MatchResourceWithStreamingResponse,
49
57
  AsyncMatchResourceWithStreamingResponse,
50
58
  )
59
+ from .nango import (
60
+ NangoResource,
61
+ AsyncNangoResource,
62
+ NangoResourceWithRawResponse,
63
+ AsyncNangoResourceWithRawResponse,
64
+ NangoResourceWithStreamingResponse,
65
+ AsyncNangoResourceWithStreamingResponse,
66
+ )
51
67
  from .slack import (
52
68
  SlackResource,
53
69
  AsyncSlackResource,
@@ -69,14 +85,6 @@ from .polars import (
69
85
  PolarsResourceWithRawResponse,
70
86
  PolarsResourceWithStreamingResponse,
71
87
  )
72
- from .report import (
73
- ReportResource,
74
- AsyncReportResource,
75
- ReportResourceWithRawResponse,
76
- AsyncReportResourceWithRawResponse,
77
- ReportResourceWithStreamingResponse,
78
- AsyncReportResourceWithStreamingResponse,
79
- )
80
88
  from .scrape import (
81
89
  ScrapeResource,
82
90
  AsyncScrapeResource,
@@ -125,14 +133,7 @@ from .entities import (
125
133
  EntitiesResourceWithStreamingResponse,
126
134
  AsyncEntitiesResourceWithStreamingResponse,
127
135
  )
128
- from .external import (
129
- ExternalResource,
130
- AsyncExternalResource,
131
- ExternalResourceWithRawResponse,
132
- AsyncExternalResourceWithRawResponse,
133
- ExternalResourceWithStreamingResponse,
134
- AsyncExternalResourceWithStreamingResponse,
135
- )
136
+ from .external import ExternalResource
136
137
  from .projects import (
137
138
  ProjectsResource,
138
139
  AsyncProjectsResource,
@@ -181,6 +182,14 @@ from .connectors import (
181
182
  ConnectorsResourceWithStreamingResponse,
182
183
  AsyncConnectorsResourceWithStreamingResponse,
183
184
  )
185
+ from .whitelabel import (
186
+ WhitelabelResource,
187
+ AsyncWhitelabelResource,
188
+ WhitelabelResourceWithRawResponse,
189
+ AsyncWhitelabelResourceWithRawResponse,
190
+ WhitelabelResourceWithStreamingResponse,
191
+ AsyncWhitelabelResourceWithStreamingResponse,
192
+ )
184
193
  from .public_sessions import (
185
194
  PublicSessionsResource,
186
195
  AsyncPublicSessionsResource,
@@ -189,6 +198,14 @@ from .public_sessions import (
189
198
  PublicSessionsResourceWithStreamingResponse,
190
199
  AsyncPublicSessionsResourceWithStreamingResponse,
191
200
  )
201
+ from .connector_catalog import (
202
+ ConnectorCatalogResource,
203
+ AsyncConnectorCatalogResource,
204
+ ConnectorCatalogResourceWithRawResponse,
205
+ AsyncConnectorCatalogResourceWithRawResponse,
206
+ ConnectorCatalogResourceWithStreamingResponse,
207
+ AsyncConnectorCatalogResourceWithStreamingResponse,
208
+ )
192
209
  from .workflow_schedule import (
193
210
  WorkflowScheduleResource,
194
211
  AsyncWorkflowScheduleResource,
@@ -199,6 +216,12 @@ from .workflow_schedule import (
199
216
  )
200
217
 
201
218
  __all__ = [
219
+ "WhitelabelResource",
220
+ "AsyncWhitelabelResource",
221
+ "WhitelabelResourceWithRawResponse",
222
+ "AsyncWhitelabelResourceWithRawResponse",
223
+ "WhitelabelResourceWithStreamingResponse",
224
+ "AsyncWhitelabelResourceWithStreamingResponse",
202
225
  "UserResource",
203
226
  "AsyncUserResource",
204
227
  "UserResourceWithRawResponse",
@@ -217,6 +240,12 @@ __all__ = [
217
240
  "AsyncTeamsResourceWithRawResponse",
218
241
  "TeamsResourceWithStreamingResponse",
219
242
  "AsyncTeamsResourceWithStreamingResponse",
243
+ "WikiResource",
244
+ "AsyncWikiResource",
245
+ "WikiResourceWithRawResponse",
246
+ "AsyncWikiResourceWithRawResponse",
247
+ "WikiResourceWithStreamingResponse",
248
+ "AsyncWikiResourceWithStreamingResponse",
220
249
  "ProjectsResource",
221
250
  "AsyncProjectsResource",
222
251
  "ProjectsResourceWithRawResponse",
@@ -277,6 +306,12 @@ __all__ = [
277
306
  "AsyncConnectorsResourceWithRawResponse",
278
307
  "ConnectorsResourceWithStreamingResponse",
279
308
  "AsyncConnectorsResourceWithStreamingResponse",
309
+ "ConnectorCatalogResource",
310
+ "AsyncConnectorCatalogResource",
311
+ "ConnectorCatalogResourceWithRawResponse",
312
+ "AsyncConnectorCatalogResourceWithRawResponse",
313
+ "ConnectorCatalogResourceWithStreamingResponse",
314
+ "AsyncConnectorCatalogResourceWithStreamingResponse",
280
315
  "ServerResource",
281
316
  "AsyncServerResource",
282
317
  "ServerResourceWithRawResponse",
@@ -295,12 +330,6 @@ __all__ = [
295
330
  "AsyncEntitiesResourceWithRawResponse",
296
331
  "EntitiesResourceWithStreamingResponse",
297
332
  "AsyncEntitiesResourceWithStreamingResponse",
298
- "ReportResource",
299
- "AsyncReportResource",
300
- "ReportResourceWithRawResponse",
301
- "AsyncReportResourceWithRawResponse",
302
- "ReportResourceWithStreamingResponse",
303
- "AsyncReportResourceWithStreamingResponse",
304
333
  "SandboxResource",
305
334
  "AsyncSandboxResource",
306
335
  "SandboxResourceWithRawResponse",
@@ -329,11 +358,6 @@ __all__ = [
329
358
  "PolarsResourceWithRawResponse",
330
359
  "PolarsResourceWithStreamingResponse",
331
360
  "ExternalResource",
332
- "AsyncExternalResource",
333
- "ExternalResourceWithRawResponse",
334
- "AsyncExternalResourceWithRawResponse",
335
- "ExternalResourceWithStreamingResponse",
336
- "AsyncExternalResourceWithStreamingResponse",
337
361
  "PublicSessionsResource",
338
362
  "AsyncPublicSessionsResource",
339
363
  "PublicSessionsResourceWithRawResponse",
@@ -346,4 +370,10 @@ __all__ = [
346
370
  "AsyncSlackResourceWithRawResponse",
347
371
  "SlackResourceWithStreamingResponse",
348
372
  "AsyncSlackResourceWithStreamingResponse",
373
+ "NangoResource",
374
+ "AsyncNangoResource",
375
+ "NangoResourceWithRawResponse",
376
+ "AsyncNangoResourceWithRawResponse",
377
+ "NangoResourceWithStreamingResponse",
378
+ "AsyncNangoResourceWithStreamingResponse",
349
379
  ]
@@ -40,21 +40,21 @@ from .dataset import (
40
40
  DatasetResourceWithStreamingResponse,
41
41
  AsyncDatasetResourceWithStreamingResponse,
42
42
  )
43
- from .human_llm import (
44
- HumanLlmResource,
45
- AsyncHumanLlmResource,
46
- HumanLlmResourceWithRawResponse,
47
- AsyncHumanLlmResourceWithRawResponse,
48
- HumanLlmResourceWithStreamingResponse,
49
- AsyncHumanLlmResourceWithStreamingResponse,
43
+ from .sandbox import (
44
+ SandboxResource,
45
+ AsyncSandboxResource,
46
+ SandboxResourceWithRawResponse,
47
+ AsyncSandboxResourceWithRawResponse,
48
+ SandboxResourceWithStreamingResponse,
49
+ AsyncSandboxResourceWithStreamingResponse,
50
50
  )
51
- from .next_action import (
52
- NextActionResource,
53
- AsyncNextActionResource,
54
- NextActionResourceWithRawResponse,
55
- AsyncNextActionResourceWithRawResponse,
56
- NextActionResourceWithStreamingResponse,
57
- AsyncNextActionResourceWithStreamingResponse,
51
+ from .chat_templates import (
52
+ ChatTemplatesResource,
53
+ AsyncChatTemplatesResource,
54
+ ChatTemplatesResourceWithRawResponse,
55
+ AsyncChatTemplatesResourceWithRawResponse,
56
+ ChatTemplatesResourceWithStreamingResponse,
57
+ AsyncChatTemplatesResourceWithStreamingResponse,
58
58
  )
59
59
  from .functional_tests import (
60
60
  FunctionalTestsResource,
@@ -64,14 +64,6 @@ from .functional_tests import (
64
64
  FunctionalTestsResourceWithStreamingResponse,
65
65
  AsyncFunctionalTestsResourceWithStreamingResponse,
66
66
  )
67
- from .training_datasets import (
68
- TrainingDatasetsResource,
69
- AsyncTrainingDatasetsResource,
70
- TrainingDatasetsResourceWithRawResponse,
71
- AsyncTrainingDatasetsResourceWithRawResponse,
72
- TrainingDatasetsResourceWithStreamingResponse,
73
- AsyncTrainingDatasetsResourceWithStreamingResponse,
74
- )
75
67
 
76
68
  __all__ = [
77
69
  "TeamsResource",
@@ -92,36 +84,30 @@ __all__ = [
92
84
  "AsyncJobsResourceWithRawResponse",
93
85
  "JobsResourceWithStreamingResponse",
94
86
  "AsyncJobsResourceWithStreamingResponse",
95
- "HumanLlmResource",
96
- "AsyncHumanLlmResource",
97
- "HumanLlmResourceWithRawResponse",
98
- "AsyncHumanLlmResourceWithRawResponse",
99
- "HumanLlmResourceWithStreamingResponse",
100
- "AsyncHumanLlmResourceWithStreamingResponse",
87
+ "SandboxResource",
88
+ "AsyncSandboxResource",
89
+ "SandboxResourceWithRawResponse",
90
+ "AsyncSandboxResourceWithRawResponse",
91
+ "SandboxResourceWithStreamingResponse",
92
+ "AsyncSandboxResourceWithStreamingResponse",
101
93
  "FunctionalTestsResource",
102
94
  "AsyncFunctionalTestsResource",
103
95
  "FunctionalTestsResourceWithRawResponse",
104
96
  "AsyncFunctionalTestsResourceWithRawResponse",
105
97
  "FunctionalTestsResourceWithStreamingResponse",
106
98
  "AsyncFunctionalTestsResourceWithStreamingResponse",
107
- "NextActionResource",
108
- "AsyncNextActionResource",
109
- "NextActionResourceWithRawResponse",
110
- "AsyncNextActionResourceWithRawResponse",
111
- "NextActionResourceWithStreamingResponse",
112
- "AsyncNextActionResourceWithStreamingResponse",
113
99
  "UsersResource",
114
100
  "AsyncUsersResource",
115
101
  "UsersResourceWithRawResponse",
116
102
  "AsyncUsersResourceWithRawResponse",
117
103
  "UsersResourceWithStreamingResponse",
118
104
  "AsyncUsersResourceWithStreamingResponse",
119
- "TrainingDatasetsResource",
120
- "AsyncTrainingDatasetsResource",
121
- "TrainingDatasetsResourceWithRawResponse",
122
- "AsyncTrainingDatasetsResourceWithRawResponse",
123
- "TrainingDatasetsResourceWithStreamingResponse",
124
- "AsyncTrainingDatasetsResourceWithStreamingResponse",
105
+ "ChatTemplatesResource",
106
+ "AsyncChatTemplatesResource",
107
+ "ChatTemplatesResourceWithRawResponse",
108
+ "AsyncChatTemplatesResourceWithRawResponse",
109
+ "ChatTemplatesResourceWithStreamingResponse",
110
+ "AsyncChatTemplatesResourceWithStreamingResponse",
125
111
  "AdminResource",
126
112
  "AsyncAdminResource",
127
113
  "AdminResourceWithRawResponse",