UncountablePythonSDK 0.0.169__tar.gz → 0.0.171__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 (415) hide show
  1. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/.github/workflows/documentation.yml +2 -2
  2. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/PKG-INFO +1 -1
  3. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/UncountablePythonSDK.egg-info/PKG-INFO +1 -1
  4. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/UncountablePythonSDK.egg-info/SOURCES.txt +2 -0
  5. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/integration-server/jobs/materials_auto/example_instrument.py +1 -1
  6. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/argument_parser/argument_parser.py +24 -4
  7. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization_util/serialization_helpers.py +1 -1
  8. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/builder.py +24 -8
  9. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/emit_open_api.py +5 -0
  10. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/emit_python.py +7 -10
  11. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/emit_typescript_util.py +5 -1
  12. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/parts/base.py.prepart +0 -4
  13. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/type_info/emit_type_info.py +16 -5
  14. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/value_spec/__main__.py +2 -6
  15. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/value_spec/emit_python.py +1 -1
  16. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/command_server/command_client.py +3 -3
  17. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/__init__.py +4 -0
  18. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/batch/execute_batch.py +4 -4
  19. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/batch/execute_batch_load_async.py +2 -2
  20. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/chemical/convert_chemical_formats.py +3 -3
  21. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/condition_parameters/upsert_condition_match.py +3 -4
  22. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/condition_parameters/upsert_condition_matches.py +8 -9
  23. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/create_entities.py +3 -3
  24. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/create_entity.py +3 -3
  25. uncountablepythonsdk-0.0.171/uncountable/types/api/entity/create_or_update_entities.py +57 -0
  26. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/create_or_update_entity.py +2 -3
  27. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/export_entities.py +3 -3
  28. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/get_entities_data.py +3 -3
  29. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/grant_entity_permissions.py +2 -3
  30. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/list_aggregate.py +5 -5
  31. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/list_entities.py +6 -6
  32. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/lock_entity.py +2 -3
  33. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/lookup_entity.py +6 -6
  34. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/resolve_entity_ids.py +3 -3
  35. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/set_barcode.py +2 -3
  36. uncountablepythonsdk-0.0.171/uncountable/types/api/entity/set_entities_field_values.py +55 -0
  37. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/set_entity_field_values.py +2 -3
  38. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/set_values.py +2 -3
  39. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/transition_entity_phase.py +4 -5
  40. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/unlock_entity.py +2 -3
  41. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/equipment/associate_equipment_input.py +2 -2
  42. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/field_options/upsert_field_options.py +3 -4
  43. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/file_folders/add_file_to_folder.py +2 -2
  44. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/file_folders/modify_file_system.py +3 -4
  45. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/files/download_file.py +4 -4
  46. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/id_source/list_id_source.py +3 -3
  47. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/id_source/match_id_source.py +3 -3
  48. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/input_groups/get_input_group_names.py +3 -3
  49. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/inputs/create_inputs.py +4 -4
  50. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/inputs/get_input_data.py +6 -6
  51. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/inputs/get_input_names.py +3 -3
  52. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/inputs/get_inputs_data.py +6 -6
  53. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/inputs/set_input_attribute_values.py +3 -3
  54. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/inputs/set_input_category.py +2 -3
  55. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/inputs/set_input_subcategories.py +2 -3
  56. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/inputs/set_intermediate_type.py +2 -3
  57. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/integrations/publish_realtime_data.py +3 -4
  58. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/integrations/push_notification.py +2 -3
  59. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/integrations/register_sockets_token.py +2 -3
  60. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/listing/export_listing.py +2 -3
  61. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/listing/fetch_listing.py +3 -3
  62. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/material_families/update_entity_material_families.py +2 -2
  63. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/notebooks/add_notebook_content.py +20 -20
  64. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/notebooks/get_notebook_content.py +14 -15
  65. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/output_parameters/swap_output_condition_parameters.py +7 -8
  66. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/outputs/get_output_data.py +6 -6
  67. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/outputs/get_output_names.py +3 -3
  68. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/outputs/get_output_organization.py +9 -9
  69. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/outputs/resolve_output_conditions.py +5 -5
  70. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/outputs/update_output_condition_parameter.py +2 -3
  71. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/permissions/set_core_permissions.py +6 -7
  72. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/permissions/set_entity_permission.py +4 -5
  73. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/project/get_projects.py +3 -3
  74. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/project/get_projects_data.py +3 -3
  75. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipe_links/create_recipe_link.py +2 -3
  76. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipe_links/remove_recipe_link.py +2 -3
  77. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -3
  78. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/add_recipe_to_project.py +2 -3
  79. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/add_time_series_data.py +3 -4
  80. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/archive_recipes.py +2 -3
  81. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/associate_recipe_as_input.py +2 -3
  82. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/associate_recipe_as_lot.py +2 -3
  83. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/clear_recipe_outputs.py +2 -3
  84. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/create_mix_order.py +2 -3
  85. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/create_recipe.py +2 -2
  86. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/create_recipes.py +4 -4
  87. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +2 -3
  88. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/edit_recipe_inputs.py +20 -21
  89. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/get_column_calculation_values.py +3 -3
  90. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/get_curve.py +2 -2
  91. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/get_recipe_calculations.py +3 -3
  92. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/get_recipe_links.py +2 -2
  93. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/get_recipe_names.py +3 -3
  94. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/get_recipe_output_metadata.py +3 -3
  95. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/get_recipes_data.py +13 -13
  96. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/lock_recipes.py +3 -4
  97. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/remove_recipe_from_project.py +2 -3
  98. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/set_recipe_inputs.py +3 -3
  99. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/set_recipe_metadata.py +2 -3
  100. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/set_recipe_output_annotations.py +6 -6
  101. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/set_recipe_output_file.py +3 -3
  102. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/set_recipe_outputs.py +4 -4
  103. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/set_recipe_tags.py +6 -6
  104. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/set_recipe_total.py +3 -4
  105. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/unarchive_recipes.py +2 -3
  106. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/unlock_recipes.py +2 -3
  107. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +2 -3
  108. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/upsert_step_relationships.py +4 -5
  109. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/runsheet/complete_async_upload.py +2 -2
  110. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/runsheet/export_default_runsheet.py +2 -2
  111. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/triggers/run_trigger.py +2 -3
  112. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/uploader/complete_async_parse.py +2 -2
  113. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/uploader/invoke_uploader.py +2 -2
  114. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/user/get_current_user_info.py +2 -2
  115. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/async_batch_t.py +5 -5
  116. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/async_jobs_t.py +4 -0
  117. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/auth_retrieval_t.py +3 -4
  118. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/base_t.py +0 -4
  119. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/calculations_t.py +1 -1
  120. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/chemical_structure_t.py +1 -2
  121. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/client_base.py +48 -0
  122. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/client_config_t.py +4 -4
  123. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/curves_t.py +2 -2
  124. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/data_t.py +4 -5
  125. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/entity_t.py +2 -2
  126. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/experiment_groups_t.py +1 -1
  127. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/exports_t.py +1 -2
  128. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/field_values_t.py +20 -20
  129. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/fields_t.py +1 -1
  130. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/generic_upload_t.py +6 -7
  131. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/id_source_t.py +4 -5
  132. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/identifier_t.py +3 -3
  133. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/input_attributes_t.py +1 -1
  134. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/inputs_t.py +1 -1
  135. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/integration_server_t.py +1 -2
  136. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/integration_session_t.py +2 -3
  137. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/integrations_t.py +2 -3
  138. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/job_definition_t.py +15 -16
  139. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/listing_t.py +29 -29
  140. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/notices_t.py +1 -2
  141. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/notifications_t.py +3 -4
  142. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/outputs_t.py +1 -1
  143. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/overrides_t.py +2 -3
  144. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/phases_t.py +1 -1
  145. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/queued_job_t.py +8 -8
  146. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_identifiers_t.py +3 -3
  147. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_links_t.py +1 -1
  148. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_metadata_t.py +3 -3
  149. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_output_metadata_t.py +1 -1
  150. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_tags_t.py +1 -1
  151. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_workflow_step_types_t.py +5 -6
  152. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_workflow_steps_t.py +4 -5
  153. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipes_t.py +1 -2
  154. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/response_t.py +1 -2
  155. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/runsheet_format_t.py +3 -4
  156. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/runsheet_t.py +10 -11
  157. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/secret_retrieval_t.py +3 -4
  158. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/sockets_t.py +8 -8
  159. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/step_relationships_t.py +7 -8
  160. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/units_t.py +1 -1
  161. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/uploader_t.py +12 -13
  162. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/users_t.py +1 -1
  163. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/webhook_job_t.py +3 -3
  164. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/workflows_t.py +2 -2
  165. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/.github/workflows/publish.yml +0 -0
  166. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/.gitignore +0 -0
  167. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/.python-version +0 -0
  168. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/README.md +0 -0
  169. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  170. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/UncountablePythonSDK.egg-info/requires.txt +0 -0
  171. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  172. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/.gitignore +0 -0
  173. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/conf.py +0 -0
  174. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/index.md +0 -0
  175. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/integration_examples/add_file_to_folder.md +0 -0
  176. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/integration_examples/create_ingredient.md +0 -0
  177. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/integration_examples/create_output.md +0 -0
  178. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/integration_examples/index.md +0 -0
  179. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/integration_examples/upload_file.md +0 -0
  180. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/justfile +0 -0
  181. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/requirements.txt +0 -0
  182. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/static/favicons/android-chrome-192x192.png +0 -0
  183. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/static/favicons/android-chrome-512x512.png +0 -0
  184. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/static/favicons/apple-touch-icon.png +0 -0
  185. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/static/favicons/browserconfig.xml +0 -0
  186. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/static/favicons/favicon-16x16.png +0 -0
  187. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/static/favicons/favicon-32x32.png +0 -0
  188. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/static/favicons/manifest.json +0 -0
  189. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/static/favicons/mstile-150x150.png +0 -0
  190. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  191. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/docs/static/logo_blue.png +0 -0
  192. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/async_batch.py +0 -0
  193. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/async_batch_large_parse.py +0 -0
  194. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/basic_auth.py +0 -0
  195. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/create_entity.py +0 -0
  196. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/create_ingredient_sdk.py +0 -0
  197. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/download_files.py +0 -0
  198. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/edit_recipe_inputs.py +0 -0
  199. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  200. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  201. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
  202. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
  203. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
  204. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  205. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  206. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  207. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/integration-server/pyproject.toml +0 -0
  208. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/invoke_uploader.py +0 -0
  209. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/oauth.py +0 -0
  210. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/set_input_pdf_attribute.py +0 -0
  211. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/set_recipe_metadata_file.py +0 -0
  212. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/set_recipe_output_file_sdk.py +0 -0
  213. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/examples/upload_files.py +0 -0
  214. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/__init__.py +0 -0
  215. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/argument_parser/__init__.py +0 -0
  216. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/argument_parser/_is_enum.py +0 -0
  217. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  218. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/argument_parser/case_convert.py +0 -0
  219. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/argument_parser/parser_error.py +0 -0
  220. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/filesystem_utils/__init__.py +0 -0
  221. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/filesystem_utils/_blob_session.py +0 -0
  222. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/filesystem_utils/_file_share_session.py +0 -0
  223. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  224. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/filesystem_utils/_local_session.py +0 -0
  225. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/filesystem_utils/_s3_session.py +0 -0
  226. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  227. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  228. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  229. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/py.typed +0 -0
  230. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization/__init__.py +0 -0
  231. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization/annotation.py +0 -0
  232. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization/missing_sentry.py +0 -0
  233. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization/opaque_key.py +0 -0
  234. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization/serial_alias.py +0 -0
  235. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization/serial_class.py +0 -0
  236. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization/serial_generic.py +0 -0
  237. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization/serial_union.py +0 -0
  238. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization/unknown.py +0 -0
  239. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization/yaml.py +0 -0
  240. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization_util/__init__.py +0 -0
  241. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  242. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  243. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/serialization_util/dataclasses.py +0 -0
  244. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/strenum_compat/__init__.py +0 -0
  245. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/strenum_compat/strenum_compat.py +0 -0
  246. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/__init__.py +0 -0
  247. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/__main__.py +0 -0
  248. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  249. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  250. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  251. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/builder_types.py +0 -0
  252. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/config.py +0 -0
  253. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/cross_output_links.py +0 -0
  254. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/emit_io_ts.py +0 -0
  255. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/emit_open_api_util.py +0 -0
  256. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/emit_typescript.py +0 -0
  257. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/load_types.py +0 -0
  258. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/non_discriminated_union_exceptions.py +0 -0
  259. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/open_api_util.py +0 -0
  260. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  261. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/test.py +0 -0
  262. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/type_info/__main__.py +0 -0
  263. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  264. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
  265. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/util.py +0 -0
  266. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/value_spec/__init__.py +0 -0
  267. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  268. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pkgs/type_spec/value_spec/types.py +0 -0
  269. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/pyproject.toml +0 -0
  270. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/setup.cfg +0 -0
  271. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/__init__.py +0 -0
  272. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/core/__init__.py +0 -0
  273. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/core/async_batch.py +0 -0
  274. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/core/client.py +0 -0
  275. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/core/environment.py +0 -0
  276. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/core/file_upload.py +0 -0
  277. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/core/query/__init__.py +0 -0
  278. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/core/query/builder.py +0 -0
  279. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/core/query/column.py +0 -0
  280. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/core/query/row.py +0 -0
  281. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/core/query/types.py +0 -0
  282. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/core/types.py +0 -0
  283. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/__init__.py +0 -0
  284. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/cli.py +0 -0
  285. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/construct_client.py +0 -0
  286. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/cron.py +0 -0
  287. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/db/__init__.py +0 -0
  288. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/db/connect.py +0 -0
  289. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/db/session.py +0 -0
  290. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/entrypoint.py +0 -0
  291. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/executors/__init__.py +0 -0
  292. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/executors/executors.py +0 -0
  293. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  294. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/executors/script_executor.py +0 -0
  295. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/http_server/__init__.py +0 -0
  296. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/http_server/types.py +0 -0
  297. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/job.py +0 -0
  298. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/__init__.py +0 -0
  299. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  300. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  301. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
  302. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  303. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  304. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  305. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  306. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  307. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  308. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  309. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  310. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  311. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  312. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  313. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  314. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/types.py +0 -0
  315. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/queue_runner/worker.py +0 -0
  316. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/request_context.py +0 -0
  317. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/scan_profiles.py +0 -0
  318. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/scheduler.py +0 -0
  319. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  320. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  321. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/server.py +0 -0
  322. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/telemetry.py +0 -0
  323. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  324. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/py.typed +0 -0
  325. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/__init__.py +0 -0
  326. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/batch/__init__.py +0 -0
  327. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/chemical/__init__.py +0 -0
  328. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  329. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/entity/__init__.py +0 -0
  330. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/equipment/__init__.py +0 -0
  331. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/field_options/__init__.py +0 -0
  332. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/file_folders/__init__.py +0 -0
  333. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/files/__init__.py +0 -0
  334. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/id_source/__init__.py +0 -0
  335. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/input_groups/__init__.py +0 -0
  336. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/inputs/__init__.py +0 -0
  337. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/integrations/__init__.py +0 -0
  338. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/listing/__init__.py +0 -0
  339. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/material_families/__init__.py +0 -0
  340. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/notebooks/__init__.py +0 -0
  341. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/output_parameters/__init__.py +0 -0
  342. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/outputs/__init__.py +0 -0
  343. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/permissions/__init__.py +0 -0
  344. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/project/__init__.py +0 -0
  345. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipe_links/__init__.py +0 -0
  346. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  347. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/recipes/__init__.py +0 -0
  348. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/runsheet/__init__.py +0 -0
  349. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/triggers/__init__.py +0 -0
  350. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/uploader/__init__.py +0 -0
  351. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/api/user/__init__.py +0 -0
  352. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/async_batch.py +0 -0
  353. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/async_batch_processor.py +0 -0
  354. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/async_jobs.py +0 -0
  355. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/auth_retrieval.py +0 -0
  356. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/base.py +0 -0
  357. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/calculations.py +0 -0
  358. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/chemical_structure.py +0 -0
  359. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/client_config.py +0 -0
  360. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/condition_match.py +0 -0
  361. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/condition_match_t.py +0 -0
  362. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/curves.py +0 -0
  363. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/data.py +0 -0
  364. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/entity.py +0 -0
  365. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/experiment_groups.py +0 -0
  366. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/exports.py +0 -0
  367. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/field_values.py +0 -0
  368. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/fields.py +0 -0
  369. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/generic_upload.py +0 -0
  370. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/id_source.py +0 -0
  371. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/identifier.py +0 -0
  372. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/input_attributes.py +0 -0
  373. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/inputs.py +0 -0
  374. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/integration_server.py +0 -0
  375. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/integration_session.py +0 -0
  376. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/integrations.py +0 -0
  377. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/job_definition.py +0 -0
  378. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/listing.py +0 -0
  379. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/notices.py +0 -0
  380. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/notifications.py +0 -0
  381. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/outputs.py +0 -0
  382. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/overrides.py +0 -0
  383. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/permissions.py +0 -0
  384. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/permissions_t.py +0 -0
  385. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/phases.py +0 -0
  386. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/post_base.py +0 -0
  387. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/post_base_t.py +0 -0
  388. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/queued_job.py +0 -0
  389. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_identifiers.py +0 -0
  390. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_inputs.py +0 -0
  391. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_inputs_t.py +0 -0
  392. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_links.py +0 -0
  393. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_metadata.py +0 -0
  394. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_output_metadata.py +0 -0
  395. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_step_relationships.py +0 -0
  396. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_step_relationships_t.py +0 -0
  397. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_tags.py +0 -0
  398. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_workflow_step_types.py +0 -0
  399. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipe_workflow_steps.py +0 -0
  400. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/recipes.py +0 -0
  401. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/request_headers.py +0 -0
  402. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/request_headers_t.py +0 -0
  403. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/response.py +0 -0
  404. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/runsheet.py +0 -0
  405. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/runsheet_format.py +0 -0
  406. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/secret_retrieval.py +0 -0
  407. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/sockets.py +0 -0
  408. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/specs.py +0 -0
  409. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/specs_t.py +0 -0
  410. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/step_relationships.py +0 -0
  411. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/units.py +0 -0
  412. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/uploader.py +0 -0
  413. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/users.py +0 -0
  414. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/webhook_job.py +0 -0
  415. {uncountablepythonsdk-0.0.169 → uncountablepythonsdk-0.0.171}/uncountable/types/workflows.py +0 -0
@@ -11,9 +11,9 @@ jobs:
11
11
  steps:
12
12
  - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
13
13
  - uses: actions/setup-python@e797f83bcb11b83ae66e0230d6156d7c80228e7c # v6
14
- - uses: extractions/setup-crate@4993624604c307fbca528d28a3c8b60fa5ecc859 # v1
14
+ - uses: extractions/setup-crate@0551596312d4008a6dfbc4d3c38fa20eaef46d2d # v2
15
15
  with:
16
- repo: casey/just@0.10
16
+ repo: casey/just@1.50.0
17
17
  - name: Set up UV
18
18
  uses: astral-sh/setup-uv@f0ec1fc3b38f5e7cd731bb6ce540c5af426746bb
19
19
  with:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.169
3
+ Version: 0.0.171
4
4
  Summary: Uncountable SDK
5
5
  Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
6
6
  Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.169
3
+ Version: 0.0.171
4
4
  Summary: Uncountable SDK
5
5
  Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
6
6
  Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
@@ -299,6 +299,7 @@ uncountable/types/api/condition_parameters/upsert_condition_matches.py
299
299
  uncountable/types/api/entity/__init__.py
300
300
  uncountable/types/api/entity/create_entities.py
301
301
  uncountable/types/api/entity/create_entity.py
302
+ uncountable/types/api/entity/create_or_update_entities.py
302
303
  uncountable/types/api/entity/create_or_update_entity.py
303
304
  uncountable/types/api/entity/export_entities.py
304
305
  uncountable/types/api/entity/get_entities_data.py
@@ -309,6 +310,7 @@ uncountable/types/api/entity/lock_entity.py
309
310
  uncountable/types/api/entity/lookup_entity.py
310
311
  uncountable/types/api/entity/resolve_entity_ids.py
311
312
  uncountable/types/api/entity/set_barcode.py
313
+ uncountable/types/api/entity/set_entities_field_values.py
312
314
  uncountable/types/api/entity/set_entity_field_values.py
313
315
  uncountable/types/api/entity/set_values.py
314
316
  uncountable/types/api/entity/transition_entity_phase.py
@@ -29,7 +29,7 @@ class InstrumentExample(WebhookJob[InstrumentPayload]):
29
29
  self, args: JobArguments, payload: InstrumentPayload
30
30
  ) -> job_definition_t.JobResult:
31
31
  parser: CachedParser[sockets_t.SocketResponse] = CachedParser(
32
- sockets_t.SocketResponse # type:ignore[arg-type]
32
+ sockets_t.SocketResponse
33
33
  )
34
34
 
35
35
  def parse_message(message: Data) -> sockets_t.SocketEventData | None:
@@ -35,7 +35,7 @@ from .parser_error import (
35
35
 
36
36
  T = typing.TypeVar("T")
37
37
  ParserFunction = typing.Callable[[typing.Any], T]
38
- ParserCache = dict[type[typing.Any], ParserFunction[typing.Any]]
38
+ ParserCache = dict[type[typing.Any] | typing.TypeAliasType, ParserFunction[typing.Any]]
39
39
 
40
40
 
41
41
  class SourceEncoding(Enum):
@@ -267,7 +267,7 @@ def _resolve_base_type_vars(
267
267
 
268
268
 
269
269
  def _build_parser_inner(
270
- parsed_type: type[T] | typing.TypeVar,
270
+ parsed_type: type[T] | typing.TypeVar | typing.TypeAliasType,
271
271
  context: ParserContext,
272
272
  type_var_map: dict[typing.TypeVar, type],
273
273
  ) -> ParserFunction[T]:
@@ -278,6 +278,26 @@ def _build_parser_inner(
278
278
  if isinstance(parsed_type, typing.TypeVar):
279
279
  return _build_parser_inner(type_var_map[parsed_type], context, type_var_map)
280
280
 
281
+ # Resolve PEP 695 type aliases (e.g. ``type Foo[T] = Annotated[..., ...]``)
282
+ # to their underlying value, threading any subscripted type arguments into
283
+ # ``type_var_map`` so generic substitutions reach the inner parser.
284
+ if isinstance(parsed_type, typing.TypeAliasType):
285
+ return _build_parser_inner(parsed_type.__value__, context, type_var_map)
286
+ alias_origin = typing.get_origin(parsed_type)
287
+ if isinstance(alias_origin, typing.TypeAliasType):
288
+ alias_args = typing.get_args(parsed_type)
289
+ merged_alias_map: dict[typing.TypeVar, type] = {**type_var_map}
290
+ for alias_param, alias_arg in zip(
291
+ alias_origin.__type_params__, alias_args, strict=True
292
+ ):
293
+ assert isinstance(alias_param, typing.TypeVar), (
294
+ "Parametric type alias only supports TypeVar parameters"
295
+ )
296
+ merged_alias_map[alias_param] = _resolve_type_var(
297
+ type_arg=alias_arg, type_var_map=type_var_map
298
+ )
299
+ return _build_parser_inner(alias_origin.__value__, context, merged_alias_map)
300
+
281
301
  serial_union = get_serial_union_data(parsed_type)
282
302
  if serial_union is not None:
283
303
  discriminator = serial_union.discriminator
@@ -689,7 +709,7 @@ _CACHE_MAP: dict[ParserOptions, ParserCache] = defaultdict(ParserCache)
689
709
 
690
710
 
691
711
  def build_parser(
692
- parsed_type: type[T],
712
+ parsed_type: type[T] | typing.TypeAliasType,
693
713
  options: ParserOptions,
694
714
  ) -> ParserFunction[T]:
695
715
  """
@@ -744,7 +764,7 @@ class ParserBase(ABC, typing.Generic[T]):
744
764
  class CachedParser(ParserBase[T], typing.Generic[T]):
745
765
  def __init__(
746
766
  self,
747
- args: type[T],
767
+ args: type[T] | typing.TypeAliasType,
748
768
  strict_property_parsing: bool = False,
749
769
  ):
750
770
  self.arguments = args
@@ -63,7 +63,7 @@ def convert_decimals_to_strings(obj: JsonValue) -> JsonValue:
63
63
 
64
64
 
65
65
  class Dataclass(Protocol):
66
- __dataclass_fields__: ClassVar[dict] # type: ignore[type-arg,unused-ignore]
66
+ __dataclass_fields__: ClassVar[dict] # type: ignore[type-arg]
67
67
 
68
68
 
69
69
  def identity(x: T) -> T:
@@ -467,7 +467,7 @@ class SpecTypeDefn(SpecType):
467
467
  class SpecTypeGenericParameter(SpecType):
468
468
  def __init__(
469
469
  self,
470
- spec_type_definition: SpecTypeDefnObject,
470
+ spec_type_definition: SpecTypeDefnObject | SpecTypeDefnUnion,
471
471
  name: str,
472
472
  ) -> None:
473
473
  self.spec_type_definition = spec_type_definition
@@ -623,8 +623,17 @@ class SpecTypeDefnAlias(SpecTypeDefn):
623
623
 
624
624
 
625
625
  class SpecTypeDefnUnion(SpecTypeDefn):
626
- def __init__(self, namespace: SpecNamespace, name: str) -> None:
626
+ parameters: list[str]
627
+
628
+ def __init__(
629
+ self,
630
+ namespace: SpecNamespace,
631
+ name: str,
632
+ *,
633
+ parameters: list[str] | None = None,
634
+ ) -> None:
627
635
  super().__init__(namespace, name)
636
+ self.parameters = parameters if parameters is not None else []
628
637
  self.discriminator: str | None = None
629
638
  self.types: list[SpecType] = []
630
639
  self._alias_type: SpecType | None = None
@@ -638,7 +647,7 @@ class SpecTypeDefnUnion(SpecTypeDefn):
638
647
  self.discriminator = data.get("discriminator", None)
639
648
 
640
649
  for sub_type_str in data["types"]:
641
- sub_type = builder.parse_type(self.namespace, sub_type_str)
650
+ sub_type = builder.parse_type(self.namespace, sub_type_str, scope=self)
642
651
  self.types.append(sub_type)
643
652
 
644
653
  base_type = builder.namespaces[base_namespace_name].types[BaseTypeName.s_union]
@@ -1302,9 +1311,16 @@ class SpecNamespace:
1302
1311
  if defn_type == DefnTypeName.s_alias:
1303
1312
  spec_type = SpecTypeDefnAlias(self, name)
1304
1313
  elif defn_type == DefnTypeName.s_union:
1305
- spec_type = SpecTypeDefnUnion(self, name)
1306
- if parsed_name.parameters is not None:
1307
- raise ValueError("Union types with parameters are not supported")
1314
+ union_parameters = (
1315
+ [
1316
+ parameter.name
1317
+ for name_parameters in parsed_name.parameters
1318
+ for parameter in name_parameters
1319
+ ]
1320
+ if parsed_name.parameters is not None
1321
+ else None
1322
+ )
1323
+ spec_type = SpecTypeDefnUnion(self, name, parameters=union_parameters)
1308
1324
  elif defn_type == DefnTypeName.s_external:
1309
1325
  spec_type = SpecTypeDefnExternal(self, name)
1310
1326
  elif defn_type == DefnTypeName.s_string_enum:
@@ -1550,9 +1566,9 @@ class SpecBuilder:
1550
1566
  if (
1551
1567
  defn_type is None
1552
1568
  and scope is not None
1553
- and isinstance(scope, SpecTypeDefnObject)
1569
+ and isinstance(scope, (SpecTypeDefnObject, SpecTypeDefnUnion))
1554
1570
  ):
1555
- if path[0].name in (scope.parameters or []):
1571
+ if path[0].name in scope.parameters:
1556
1572
  return SpecTypeGenericParameter(
1557
1573
  spec_type_definition=scope,
1558
1574
  name=path[0].name,
@@ -535,6 +535,11 @@ def _emit_type(
535
535
  return
536
536
 
537
537
  if isinstance(stype, builder.SpecTypeDefnUnion):
538
+ if len(stype.parameters) > 0:
539
+ raise NotImplementedError(
540
+ f"OpenAPI emission for parametric union {stype.namespace.name}.{stype.name} "
541
+ f"is not supported. Use a concrete instantiation in the API surface instead."
542
+ )
538
543
  converted_discriminator_map: dict[str, OpenAPIRefType] = dict()
539
544
  if stype.discriminator_map is not None:
540
545
  for discriminator_value, base_type in stype.discriminator_map.items():
@@ -9,7 +9,6 @@ from .builder import (
9
9
  EndpointEmitType,
10
10
  EndpointSpecificPath,
11
11
  PropertyExtant,
12
- base_namespace_name,
13
12
  )
14
13
  from .config import PythonConfig
15
14
  from .cross_output_links import get_path_links
@@ -941,7 +940,11 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
941
940
 
942
941
  if isinstance(stype, builder.SpecTypeDefnUnion):
943
942
  ctx.use_serial_union = True
944
- ctx.out.write(f"{stype.name} = typing.Annotated[\n")
943
+ if len(stype.parameters) > 0:
944
+ type_params = f"[{', '.join(stype.parameters)}]"
945
+ ctx.out.write(f"type {stype.name}{type_params} = typing.Annotated[\n")
946
+ else:
947
+ ctx.out.write(f"{stype.name} = typing.Annotated[\n")
945
948
  ctx.out.write(f"{INDENT}{refer_to(ctx, stype.get_backing_type())},\n")
946
949
  ctx.out.write(f"{INDENT}serial_union_annotation(\n")
947
950
  ctx.out.write(
@@ -1016,19 +1019,13 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
1016
1019
 
1017
1020
  # Emit dataclass decorator
1018
1021
  dataclass = "@dataclasses.dataclass"
1019
- refer_to(
1020
- ctx,
1021
- builder.SpecTypeDefnAlias(
1022
- namespace=ctx.builder.namespaces[base_namespace_name], name="ENABLE_SLOTS"
1023
- ),
1024
- )
1025
- dc_args = ["slots=base_t.ENABLE_SLOTS"]
1022
+ dc_args = ["slots=True"]
1026
1023
  if stype.is_kw_only():
1027
1024
  dc_args.append("kw_only=True")
1028
1025
  if stype.is_hashable:
1029
1026
  dc_args.extend(["frozen=True", "eq=True"])
1030
1027
  if len(dc_args) > 0:
1031
- dataclass += f"({', '.join(dc_args)}) # type: ignore[literal-required]"
1028
+ dataclass += f"({', '.join(dc_args)})"
1032
1029
 
1033
1030
  ctx.out.write(f"{dataclass}\n")
1034
1031
  ctx.out.write(class_out.getvalue())
@@ -176,8 +176,12 @@ def emit_type_ts(ctx: EmitTypescriptContext, stype: builder.SpecType) -> None:
176
176
  return
177
177
 
178
178
  if isinstance(stype, builder.SpecTypeDefnUnion):
179
+ if len(stype.parameters) > 0:
180
+ full_type_name = f"{stype.name}<{', '.join(stype.parameters)}>"
181
+ else:
182
+ full_type_name = stype.name
179
183
  ctx.out.write(
180
- f"export type {stype.name} = {refer_to(ctx, stype.get_backing_type())}\n"
184
+ f"export type {full_type_name} = {refer_to(ctx, stype.get_backing_type())}\n"
181
185
  )
182
186
  return
183
187
 
@@ -30,10 +30,6 @@ REF_NAME_STRICT_REGEX = rf"{REF_NAME_STRICT_REGEX_STRING}"
30
30
  ID_REGEX = r"-?[1-9][0-9]{0,20}"
31
31
 
32
32
 
33
- # ENABLE_SLOTS should be removed after slots have been tested locally
34
- import os
35
- ENABLE_SLOTS = os.environ.get("UNC_ENABLE_DATACLASS_SLOTS") == "true"
36
-
37
33
  if TYPE_CHECKING:
38
34
  JsonValue = Union[JsonScalar, Mapping[str, "JsonValue"], Sequence["JsonValue"]]
39
35
  ExtJsonValue = JsonValue
@@ -30,6 +30,7 @@ def type_path_of(stype: builder.SpecType) -> object: # NamePath
30
30
  - Scoped Type: [ (namespace-string)..., type-string ]
31
31
  - Instance Type: [ "$instance", Scoped-Type-Base, [TypePath-Parameters...] ]
32
32
  - Literal Type: [ "$literal", [ "$value", value, value-type-string ]... ]
33
+ - Parameter Type: [ "$param", parameter-name-string ]
33
34
 
34
35
  @return (string-specific, multiple-types)
35
36
  """
@@ -71,6 +72,9 @@ def type_path_of(stype: builder.SpecType) -> object: # NamePath
71
72
  [type_path_of(parameter) for parameter in stype.parameters],
72
73
  ]
73
74
 
75
+ if isinstance(stype, builder.SpecTypeGenericParameter):
76
+ return ["$param", stype.name]
77
+
74
78
  raise Exception("unhandled-SpecType")
75
79
 
76
80
 
@@ -177,12 +181,14 @@ class MapTypeBase:
177
181
  class MapTypeObject(MapTypeBase):
178
182
  base_type_path: object
179
183
  properties: dict[OpaqueKey, MapProperty]
184
+ parameters: list[str] | None = None
180
185
 
181
186
 
182
187
  @dataclasses.dataclass
183
188
  class MapTypeAlias(MapTypeBase):
184
189
  alias_type_path: object
185
190
  discriminator: str | None
191
+ parameters: list[str] | None = None
186
192
 
187
193
 
188
194
  @dataclasses.dataclass
@@ -387,23 +393,28 @@ def _validate_type_ext_info(
387
393
  def _build_map_type(
388
394
  build: builder.SpecBuilder, stype: builder.SpecTypeDefn, python: bool = False
389
395
  ) -> MapType | None:
390
- # limited support for now
391
396
  if (
392
397
  isinstance(stype, builder.SpecTypeDefnObject)
393
- and len(stype.parameters) == 0
394
398
  and not stype.is_base
395
399
  and stype.base is not None
396
400
  ):
397
401
  _, ext_info = _validate_type_ext_info(stype)
398
402
 
399
403
  properties: dict[OpaqueKey, MapProperty] = {}
404
+ params = stype.parameters if len(stype.parameters) > 0 else None
405
+ base_for_path = (
406
+ stype.base_type_instance
407
+ if stype.base_type_instance is not None
408
+ else stype.base
409
+ )
400
410
  map_type = MapTypeObject(
401
411
  type_name=stype.name,
402
412
  label=stype.label,
403
413
  properties=properties,
404
414
  desc=stype.desc,
405
- base_type_path=type_path_of(stype.base),
415
+ base_type_path=type_path_of(base_for_path),
406
416
  ext_info=ext_info,
417
+ parameters=params,
407
418
  )
408
419
 
409
420
  if stype.properties is not None:
@@ -441,10 +452,9 @@ def _build_map_type(
441
452
  )
442
453
 
443
454
  if isinstance(stype, builder.SpecTypeDefnUnion):
444
- # Emit as a basic alias for now, as the front-end supports only those for now
445
- # IMPROVE: We should emit a proper union type and support that
446
455
  backing = stype.get_backing_type()
447
456
  ext_info = _parse_ext_info(stype.ext_info)
457
+ union_params = stype.parameters if len(stype.parameters) > 0 else None
448
458
  return MapTypeAlias(
449
459
  type_name=stype.name,
450
460
  label=stype.label,
@@ -452,6 +462,7 @@ def _build_map_type(
452
462
  alias_type_path=type_path_of(backing),
453
463
  ext_info=_parse_ext_info(stype.ext_info),
454
464
  discriminator=stype.discriminator,
465
+ parameters=union_params,
455
466
  )
456
467
 
457
468
  if isinstance(stype, builder.SpecTypeDefnStringEnum):
@@ -14,8 +14,6 @@ After that you can also specify a `!` indicating the argument may not be null.
14
14
  If this is not specified, then a null input on this argument should produce a null output.
15
15
  We prefer not to use `!` as we want to encourage null pass-through where possible.
16
16
 
17
- If null is allowed as a legitimate value, such as in conditionals like `is_null`,
18
- then `!usenull` must be specified, this distinguishes it from the pass-through case.
19
17
  The accepted argument type must accept "None", it is not implied.
20
18
  """
21
19
 
@@ -87,7 +85,7 @@ class Source:
87
85
  return self._text[start : self._at]
88
86
 
89
87
 
90
- _re_argument_name = re.compile(r"([a-z_]+)(\?|\+)?(!|!usenull)?:")
88
+ _re_argument_name = re.compile(r"([a-z_]+)(\?|\+)?(!)?:")
91
89
 
92
90
 
93
91
  def parse_function_signature(text: str) -> ParsedFunctionSignature:
@@ -111,10 +109,8 @@ def parse_function_signature(text: str) -> ParsedFunctionSignature:
111
109
  match arg_group.group(3):
112
110
  case "!":
113
111
  on_null = value_spec_t.OnNull.DISALLOW
114
- case "!usenull":
115
- on_null = value_spec_t.OnNull.USE
116
112
  case _:
117
- on_null = value_spec_t.OnNull.PASS
113
+ on_null = value_spec_t.OnNull.USE
118
114
 
119
115
  extant = value_spec_t.ArgumentExtant.REQUIRED
120
116
  extant_marker = arg_group.group(2)
@@ -70,7 +70,7 @@ def _emit_function_wrapper(function: value_spec_t.Function) -> str:
70
70
  else:
71
71
  python_type = _emit_python_type(argument.type)
72
72
  if (
73
- argument.on_null == value_spec_t.OnNull.PASS
73
+ argument.on_null == value_spec_t.OnNull.USE
74
74
  or argument.extant == value_spec_t.ArgumentExtant.MISSING
75
75
  ):
76
76
  python_type += " | None"
@@ -105,7 +105,7 @@ def send_retry_job_message(
105
105
 
106
106
  return response.queued_job_uuid
107
107
  except grpc.RpcError as e:
108
- raise ValueError(e.details()) # type: ignore
108
+ raise ValueError(e.details())
109
109
 
110
110
 
111
111
  def check_health(*, host: str = _LOCAL_RPC_HOST, port: int) -> bool:
@@ -152,7 +152,7 @@ def send_list_queued_jobs_message(
152
152
  request, timeout=_DEFAULT_MESSAGE_TIMEOUT_SECS
153
153
  )
154
154
  except grpc.RpcError as e:
155
- raise ValueError(e.details()) # type: ignore
155
+ raise ValueError(e.details())
156
156
 
157
157
  assert isinstance(response, ListQueuedJobsResult)
158
158
  return list(response.queued_jobs)
@@ -167,7 +167,7 @@ def send_vaccuum_queued_jobs_message(*, host: str = "localhost", port: int) -> N
167
167
  request, timeout=_DEFAULT_MESSAGE_TIMEOUT_SECS
168
168
  )
169
169
  except grpc.RpcError as e:
170
- raise ValueError(e.details()) # type: ignore
170
+ raise ValueError(e.details())
171
171
 
172
172
  assert isinstance(response, VaccuumQueuedJobsResult)
173
173
  return None
@@ -26,6 +26,7 @@ from .api.entity import create_entities as create_entities_t
26
26
  from .api.entity import create_entity as create_entity_t
27
27
  from .api.inputs import create_inputs as create_inputs_t
28
28
  from .api.recipes import create_mix_order as create_mix_order_t
29
+ from .api.entity import create_or_update_entities as create_or_update_entities_t
29
30
  from .api.entity import create_or_update_entity as create_or_update_entity_t
30
31
  from .api.recipes import create_recipe as create_recipe_t
31
32
  from .api.recipe_links import create_recipe_link as create_recipe_link_t
@@ -119,6 +120,7 @@ from . import runsheet_t as runsheet_t
119
120
  from . import secret_retrieval_t as secret_retrieval_t
120
121
  from .api.entity import set_barcode as set_barcode_t
121
122
  from .api.permissions import set_core_permissions as set_core_permissions_t
123
+ from .api.entity import set_entities_field_values as set_entities_field_values_t
122
124
  from .api.entity import set_entity_field_values as set_entity_field_values_t
123
125
  from .api.permissions import set_entity_permission as set_entity_permission_t
124
126
  from .api.inputs import set_input_attribute_values as set_input_attribute_values_t
@@ -180,6 +182,7 @@ __all__: list[str] = [
180
182
  "create_entity_t",
181
183
  "create_inputs_t",
182
184
  "create_mix_order_t",
185
+ "create_or_update_entities_t",
183
186
  "create_or_update_entity_t",
184
187
  "create_recipe_t",
185
188
  "create_recipe_link_t",
@@ -273,6 +276,7 @@ __all__: list[str] = [
273
276
  "secret_retrieval_t",
274
277
  "set_barcode_t",
275
278
  "set_core_permissions_t",
279
+ "set_entities_field_values_t",
276
280
  "set_entity_field_values_t",
277
281
  "set_entity_permission_t",
278
282
  "set_input_attribute_values_t",
@@ -43,7 +43,7 @@ class RequestMethod(StrEnum):
43
43
  named_type_path="sdk.api.batch.execute_batch.BatchRequest",
44
44
  unconverted_values={"data"},
45
45
  )
46
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
46
+ @dataclasses.dataclass(slots=True, kw_only=True)
47
47
  class BatchRequest:
48
48
  path: str
49
49
  method: RequestMethod
@@ -54,7 +54,7 @@ class BatchRequest:
54
54
  @serial_class(
55
55
  named_type_path="sdk.api.batch.execute_batch.Arguments",
56
56
  )
57
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
57
+ @dataclasses.dataclass(slots=True, kw_only=True)
58
58
  class Arguments:
59
59
  requests: list[BatchRequest]
60
60
 
@@ -64,7 +64,7 @@ class Arguments:
64
64
  named_type_path="sdk.api.batch.execute_batch.BatchResponse",
65
65
  unconverted_values={"response"},
66
66
  )
67
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
67
+ @dataclasses.dataclass(slots=True, kw_only=True)
68
68
  class BatchResponse:
69
69
  path: str
70
70
  method: RequestMethod
@@ -76,7 +76,7 @@ class BatchResponse:
76
76
  @serial_class(
77
77
  named_type_path="sdk.api.batch.execute_batch.Data",
78
78
  )
79
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
79
+ @dataclasses.dataclass(slots=True, kw_only=True)
80
80
  class Data:
81
81
  responses: list[BatchResponse]
82
82
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -26,7 +26,7 @@ ENDPOINT_PATH = "api/external/batch/execute_batch_load_async"
26
26
  @serial_class(
27
27
  named_type_path="sdk.api.batch.execute_batch_load_async.Arguments",
28
28
  )
29
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
29
+ @dataclasses.dataclass(slots=True, kw_only=True)
30
30
  class Arguments:
31
31
  requests: list[async_batch_t.AsyncBatchRequest]
32
32
 
@@ -35,7 +35,7 @@ class Arguments:
35
35
  @serial_class(
36
36
  named_type_path="sdk.api.batch.execute_batch_load_async.Data",
37
37
  )
38
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
38
+ @dataclasses.dataclass(slots=True, kw_only=True)
39
39
  class Data:
40
40
  job_id: base_t.ObjectId
41
41
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -28,7 +28,7 @@ ENDPOINT_PATH = "api/external/chemical/convert_chemical_formats"
28
28
  @serial_class(
29
29
  named_type_path="sdk.api.chemical.convert_chemical_formats.ChemicalStructureFile",
30
30
  )
31
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
31
+ @dataclasses.dataclass(slots=True, kw_only=True)
32
32
  class ChemicalStructureFile:
33
33
  struct_file: str
34
34
 
@@ -37,7 +37,7 @@ class ChemicalStructureFile:
37
37
  @serial_class(
38
38
  named_type_path="sdk.api.chemical.convert_chemical_formats.Arguments",
39
39
  )
40
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
40
+ @dataclasses.dataclass(slots=True, kw_only=True)
41
41
  class Arguments:
42
42
  source_chemical_structures: list[ChemicalStructureFile]
43
43
 
@@ -56,7 +56,7 @@ UncountableChemicalStructure = typing.Annotated[
56
56
  named_type_path="sdk.api.chemical.convert_chemical_formats.Data",
57
57
  unconverted_values={"chemical_structures"},
58
58
  )
59
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
59
+ @dataclasses.dataclass(slots=True, kw_only=True)
60
60
  class Data:
61
61
  chemical_structures: list[UncountableChemicalStructure]
62
62
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -10,7 +10,6 @@ import dataclasses
10
10
  from pkgs.serialization import serial_class
11
11
  from pkgs.serialization import serial_alias_annotation
12
12
  from ... import async_batch_t
13
- from ... import base_t
14
13
  from ... import condition_match_t
15
14
  from ... import identifier_t
16
15
 
@@ -32,7 +31,7 @@ ENDPOINT_PATH = "api/external/condition_parameters/upsert_condition_match"
32
31
  named_type_path="sdk.api.condition_parameters.upsert_condition_match.ConditionParameter",
33
32
  to_string_values={"max_value", "min_value"},
34
33
  )
35
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
34
+ @dataclasses.dataclass(slots=True, kw_only=True)
36
35
  class ConditionParameter:
37
36
  condition_parameter_key: identifier_t.IdentifierKey
38
37
  allow_null: bool
@@ -55,7 +54,7 @@ MatchType = typing.Annotated[
55
54
  @serial_class(
56
55
  named_type_path="sdk.api.condition_parameters.upsert_condition_match.Arguments",
57
56
  )
58
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
57
+ @dataclasses.dataclass(slots=True, kw_only=True)
59
58
  class Arguments:
60
59
  explicit_name: bool = False
61
60
  name: str | None = None
@@ -68,7 +67,7 @@ class Arguments:
68
67
  @serial_class(
69
68
  named_type_path="sdk.api.condition_parameters.upsert_condition_match.Data",
70
69
  )
71
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
70
+ @dataclasses.dataclass(slots=True, kw_only=True)
72
71
  class Data(async_batch_t.AsyncBatchActionReturn):
73
72
  pass
74
73
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -10,7 +10,6 @@ import dataclasses
10
10
  from pkgs.serialization import serial_class
11
11
  from pkgs.serialization import serial_union_annotation
12
12
  from ... import async_batch_t
13
- from ... import base_t
14
13
  from ... import condition_match_t
15
14
  from ... import identifier_t
16
15
 
@@ -38,7 +37,7 @@ ENDPOINT_PATH = "api/external/condition_parameters/upsert_condition_matches"
38
37
  named_type_path="sdk.api.condition_parameters.upsert_condition_matches.ConditionParameterAll",
39
38
  parse_require={"match_type"},
40
39
  )
41
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
40
+ @dataclasses.dataclass(slots=True, kw_only=True)
42
41
  class ConditionParameterAll:
43
42
  condition_parameter_key: identifier_t.IdentifierKey
44
43
  allow_null: bool
@@ -50,7 +49,7 @@ class ConditionParameterAll:
50
49
  named_type_path="sdk.api.condition_parameters.upsert_condition_matches.ConditionParameterEqNumeric",
51
50
  parse_require={"match_type"},
52
51
  )
53
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
52
+ @dataclasses.dataclass(slots=True, kw_only=True)
54
53
  class ConditionParameterEqNumeric:
55
54
  condition_parameter_key: identifier_t.IdentifierKey
56
55
  allow_null: bool
@@ -63,7 +62,7 @@ class ConditionParameterEqNumeric:
63
62
  named_type_path="sdk.api.condition_parameters.upsert_condition_matches.ConditionParameterEqCategorical",
64
63
  parse_require={"match_type"},
65
64
  )
66
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
65
+ @dataclasses.dataclass(slots=True, kw_only=True)
67
66
  class ConditionParameterEqCategorical:
68
67
  condition_parameter_key: identifier_t.IdentifierKey
69
68
  allow_null: bool
@@ -77,7 +76,7 @@ class ConditionParameterEqCategorical:
77
76
  to_string_values={"max_value", "min_value"},
78
77
  parse_require={"match_type"},
79
78
  )
80
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
79
+ @dataclasses.dataclass(slots=True, kw_only=True)
81
80
  class ConditionParameterRange:
82
81
  condition_parameter_key: identifier_t.IdentifierKey
83
82
  allow_null: bool
@@ -107,7 +106,7 @@ ConditionParameter = typing.Annotated[
107
106
  named_type_path="sdk.api.condition_parameters.upsert_condition_matches.UpsertArgsParameters",
108
107
  parse_require={"kind"},
109
108
  )
110
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
109
+ @dataclasses.dataclass(slots=True, kw_only=True)
111
110
  class UpsertArgsParameters:
112
111
  condition_parameters: list[ConditionParameter]
113
112
  kind: typing.Literal["condition_parameters"] = "condition_parameters"
@@ -120,7 +119,7 @@ class UpsertArgsParameters:
120
119
  named_type_path="sdk.api.condition_parameters.upsert_condition_matches.UpsertArgsOutputConditions",
121
120
  parse_require={"kind"},
122
121
  )
123
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
122
+ @dataclasses.dataclass(slots=True, kw_only=True)
124
123
  class UpsertArgsOutputConditions:
125
124
  output_condition_keys: list[identifier_t.IdentifierKey]
126
125
  kind: typing.Literal["output_conditions"] = "output_conditions"
@@ -146,7 +145,7 @@ UpsertArgs = typing.Annotated[
146
145
  @serial_class(
147
146
  named_type_path="sdk.api.condition_parameters.upsert_condition_matches.Arguments",
148
147
  )
149
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
148
+ @dataclasses.dataclass(slots=True, kw_only=True)
150
149
  class Arguments:
151
150
  upserts: list[UpsertArgs]
152
151
 
@@ -155,7 +154,7 @@ class Arguments:
155
154
  @serial_class(
156
155
  named_type_path="sdk.api.condition_parameters.upsert_condition_matches.Data",
157
156
  )
158
- @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
157
+ @dataclasses.dataclass(slots=True, kw_only=True)
159
158
  class Data:
160
159
  results: list[async_batch_t.AsyncBatchActionReturn]
161
160
  # DO NOT MODIFY -- This file is generated by type_spec