UncountablePythonSDK 0.0.110__tar.gz → 0.0.112__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.

Potentially problematic release.


This version of UncountablePythonSDK might be problematic. Click here for more details.

Files changed (323) hide show
  1. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/.github/workflows/documentation.yml +1 -1
  2. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/.github/workflows/publish.yml +1 -1
  3. {uncountablepythonsdk-0.0.110/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.112}/PKG-INFO +2 -1
  4. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112/UncountablePythonSDK.egg-info}/PKG-INFO +2 -1
  5. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/UncountablePythonSDK.egg-info/SOURCES.txt +8 -0
  6. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/UncountablePythonSDK.egg-info/requires.txt +1 -0
  7. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/conf.py +2 -2
  8. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/justfile +1 -1
  9. uncountablepythonsdk-0.0.112/examples/create_ingredient_sdk.py +34 -0
  10. uncountablepythonsdk-0.0.112/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +35 -0
  11. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/examples/integration-server/jobs/materials_auto/profile.yaml +9 -0
  12. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/examples/integration-server/pyproject.toml +2 -2
  13. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/argument_parser/argument_parser.py +9 -6
  14. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/builder.py +19 -2
  15. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/emit_python.py +9 -3
  16. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/emit_typescript_util.py +16 -1
  17. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/parts/base.py.prepart +4 -0
  18. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/type_info/emit_type_info.py +12 -3
  19. uncountablepythonsdk-0.0.112/pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  20. uncountablepythonsdk-0.0.112/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +294 -0
  21. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/value_spec/convert_type.py +13 -0
  22. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pyproject.toml +2 -1
  23. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/core/client.py +7 -4
  24. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/executors/generic_upload_executor.py +3 -2
  25. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/job.py +24 -1
  26. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +3 -2
  27. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/scheduler.py +4 -3
  28. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/__init__.py +4 -0
  29. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/batch/execute_batch.py +4 -4
  30. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/batch/execute_batch_load_async.py +2 -2
  31. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/chemical/convert_chemical_formats.py +3 -3
  32. uncountablepythonsdk-0.0.112/uncountable/types/api/condition_parameters/upsert_condition_match.py +72 -0
  33. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/entity/create_entities.py +3 -3
  34. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/entity/create_entity.py +3 -3
  35. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/entity/create_or_update_entity.py +3 -2
  36. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/entity/get_entities_data.py +3 -3
  37. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/entity/grant_entity_permissions.py +3 -2
  38. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/entity/list_entities.py +4 -4
  39. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/entity/lock_entity.py +3 -2
  40. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/entity/lookup_entity.py +5 -5
  41. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/entity/resolve_entity_ids.py +3 -3
  42. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/entity/set_entity_field_values.py +3 -2
  43. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/entity/set_values.py +3 -2
  44. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/entity/transition_entity_phase.py +5 -4
  45. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/entity/unlock_entity.py +3 -2
  46. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/equipment/associate_equipment_input.py +2 -2
  47. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/field_options/upsert_field_options.py +4 -3
  48. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/files/download_file.py +4 -3
  49. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/id_source/list_id_source.py +3 -3
  50. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/id_source/match_id_source.py +3 -3
  51. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/input_groups/get_input_group_names.py +3 -3
  52. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/inputs/create_inputs.py +6 -4
  53. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/inputs/get_input_data.py +6 -6
  54. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/inputs/get_input_names.py +3 -3
  55. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/inputs/get_inputs_data.py +6 -6
  56. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/inputs/set_input_attribute_values.py +3 -3
  57. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/inputs/set_input_category.py +3 -2
  58. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/inputs/set_input_subcategories.py +3 -2
  59. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/inputs/set_intermediate_type.py +3 -2
  60. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/material_families/update_entity_material_families.py +2 -2
  61. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/outputs/get_output_data.py +6 -6
  62. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/outputs/get_output_names.py +3 -3
  63. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/outputs/resolve_output_conditions.py +5 -5
  64. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/permissions/set_core_permissions.py +7 -6
  65. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/project/get_projects.py +3 -3
  66. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/project/get_projects_data.py +3 -3
  67. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipe_links/create_recipe_link.py +3 -2
  68. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipe_links/remove_recipe_link.py +3 -2
  69. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -3
  70. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/add_recipe_to_project.py +3 -2
  71. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/add_time_series_data.py +4 -3
  72. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/archive_recipes.py +3 -2
  73. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/associate_recipe_as_input.py +3 -2
  74. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -2
  75. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/clear_recipe_outputs.py +3 -2
  76. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/create_recipe.py +2 -2
  77. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/create_recipes.py +4 -4
  78. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -2
  79. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/edit_recipe_inputs.py +18 -16
  80. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/get_column_calculation_values.py +3 -3
  81. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/get_curve.py +2 -2
  82. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/get_recipe_calculations.py +3 -3
  83. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/get_recipe_links.py +2 -2
  84. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/get_recipe_names.py +3 -3
  85. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/get_recipe_output_metadata.py +3 -3
  86. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/get_recipes_data.py +11 -11
  87. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/lock_recipes.py +4 -3
  88. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/remove_recipe_from_project.py +3 -2
  89. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/set_recipe_inputs.py +3 -3
  90. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/set_recipe_metadata.py +3 -2
  91. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/set_recipe_output_annotations.py +6 -6
  92. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/set_recipe_output_file.py +3 -3
  93. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/set_recipe_outputs.py +4 -4
  94. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/set_recipe_tags.py +6 -6
  95. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/unarchive_recipes.py +3 -2
  96. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/recipes/unlock_recipes.py +3 -2
  97. uncountablepythonsdk-0.0.112/uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  98. uncountablepythonsdk-0.0.112/uncountable/types/api/triggers/__init__.py +1 -0
  99. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/triggers/run_trigger.py +3 -2
  100. uncountablepythonsdk-0.0.112/uncountable/types/api/uploader/__init__.py +1 -0
  101. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/uploader/invoke_uploader.py +2 -2
  102. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/async_batch_processor.py +74 -0
  103. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/async_batch_t.py +7 -5
  104. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/auth_retrieval_t.py +4 -3
  105. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/base_t.py +4 -0
  106. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/calculations_t.py +1 -1
  107. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/chemical_structure_t.py +2 -1
  108. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/client_base.py +48 -0
  109. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/client_config_t.py +2 -1
  110. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/curves_t.py +2 -2
  111. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/data_t.py +22 -21
  112. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/entity_t.py +9 -3
  113. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/experiment_groups_t.py +1 -1
  114. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/field_values_t.py +20 -20
  115. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/fields_t.py +1 -1
  116. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/generic_upload_t.py +7 -6
  117. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/id_source_t.py +5 -4
  118. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/identifier_t.py +3 -3
  119. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/input_attributes_t.py +1 -1
  120. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/inputs_t.py +1 -1
  121. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/integration_server_t.py +2 -1
  122. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/job_definition_t.py +14 -13
  123. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/outputs_t.py +1 -1
  124. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/overrides_t.py +3 -2
  125. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/phases_t.py +1 -1
  126. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/queued_job_t.py +7 -7
  127. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_identifiers_t.py +3 -3
  128. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_links_t.py +1 -1
  129. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_metadata_t.py +3 -3
  130. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_output_metadata_t.py +1 -1
  131. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_tags_t.py +1 -1
  132. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_workflow_steps_t.py +5 -4
  133. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipes_t.py +2 -1
  134. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/response_t.py +2 -1
  135. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/secret_retrieval_t.py +4 -3
  136. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/units_t.py +1 -1
  137. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/users_t.py +1 -1
  138. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/webhook_job_t.py +4 -3
  139. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/workflows_t.py +2 -2
  140. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/.gitignore +0 -0
  141. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/README.md +0 -0
  142. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  143. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  144. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/.gitignore +0 -0
  145. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/index.md +0 -0
  146. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/quickstart.md +0 -0
  147. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/requirements.txt +0 -0
  148. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/static/favicons/android-chrome-192x192.png +0 -0
  149. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/static/favicons/android-chrome-512x512.png +0 -0
  150. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/static/favicons/apple-touch-icon.png +0 -0
  151. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/static/favicons/browserconfig.xml +0 -0
  152. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/static/favicons/favicon-16x16.png +0 -0
  153. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/static/favicons/favicon-32x32.png +0 -0
  154. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/static/favicons/manifest.json +0 -0
  155. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/static/favicons/mstile-150x150.png +0 -0
  156. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  157. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/docs/static/logo_blue.png +0 -0
  158. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/examples/async_batch.py +0 -0
  159. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/examples/create_entity.py +0 -0
  160. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/examples/download_files.py +0 -0
  161. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/examples/edit_recipe_inputs.py +0 -0
  162. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  163. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  164. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/examples/invoke_uploader.py +0 -0
  165. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/examples/set_recipe_metadata_file.py +0 -0
  166. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/examples/set_recipe_output_file_sdk.py +0 -0
  167. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/examples/upload_files.py +0 -0
  168. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/__init__.py +0 -0
  169. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/argument_parser/__init__.py +0 -0
  170. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/argument_parser/_is_enum.py +0 -0
  171. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  172. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/argument_parser/case_convert.py +0 -0
  173. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/filesystem_utils/__init__.py +0 -0
  174. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/filesystem_utils/_blob_session.py +0 -0
  175. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  176. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/filesystem_utils/_local_session.py +0 -0
  177. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/filesystem_utils/_s3_session.py +0 -0
  178. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  179. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  180. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  181. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/py.typed +0 -0
  182. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization/__init__.py +0 -0
  183. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization/annotation.py +0 -0
  184. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization/missing_sentry.py +0 -0
  185. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization/opaque_key.py +0 -0
  186. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization/serial_alias.py +0 -0
  187. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization/serial_class.py +0 -0
  188. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization/serial_generic.py +0 -0
  189. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization/serial_union.py +0 -0
  190. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization/yaml.py +0 -0
  191. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization_util/__init__.py +0 -0
  192. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  193. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  194. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization_util/dataclasses.py +0 -0
  195. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/serialization_util/serialization_helpers.py +0 -0
  196. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/strenum_compat/__init__.py +0 -0
  197. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/strenum_compat/strenum_compat.py +0 -0
  198. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/__init__.py +0 -0
  199. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/__main__.py +0 -0
  200. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  201. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  202. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  203. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/config.py +0 -0
  204. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/cross_output_links.py +0 -0
  205. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/emit_io_ts.py +0 -0
  206. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/emit_open_api.py +0 -0
  207. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/emit_open_api_util.py +0 -0
  208. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/emit_typescript.py +0 -0
  209. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/load_types.py +0 -0
  210. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/open_api_util.py +0 -0
  211. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  212. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/test.py +0 -0
  213. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/type_info/__main__.py +0 -0
  214. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/util.py +0 -0
  215. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/value_spec/__init__.py +0 -0
  216. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/value_spec/__main__.py +0 -0
  217. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  218. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/pkgs/type_spec/value_spec/types.py +0 -0
  219. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/setup.cfg +0 -0
  220. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/__init__.py +0 -0
  221. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/core/__init__.py +0 -0
  222. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/core/async_batch.py +0 -0
  223. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/core/environment.py +0 -0
  224. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/core/file_upload.py +0 -0
  225. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/core/types.py +0 -0
  226. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/__init__.py +0 -0
  227. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/cli.py +0 -0
  228. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/construct_client.py +0 -0
  229. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/cron.py +0 -0
  230. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/db/__init__.py +0 -0
  231. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/db/connect.py +0 -0
  232. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/db/session.py +0 -0
  233. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/entrypoint.py +0 -0
  234. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/executors/__init__.py +0 -0
  235. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/executors/executors.py +0 -0
  236. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/executors/script_executor.py +0 -0
  237. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/__init__.py +0 -0
  238. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  239. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  240. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  241. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  242. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  243. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  244. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  245. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  246. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  247. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  248. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  249. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  250. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  251. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  252. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/types.py +0 -0
  253. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/queue_runner/worker.py +0 -0
  254. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/scan_profiles.py +0 -0
  255. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  256. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  257. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/server.py +0 -0
  258. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/telemetry.py +0 -0
  259. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  260. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/py.typed +0 -0
  261. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/__init__.py +0 -0
  262. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/batch/__init__.py +0 -0
  263. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/api/chemical/__init__.py +0 -0
  264. {uncountablepythonsdk-0.0.110/uncountable/types/api/entity → uncountablepythonsdk-0.0.112/uncountable/types/api/condition_parameters}/__init__.py +0 -0
  265. {uncountablepythonsdk-0.0.110/uncountable/types/api/equipment → uncountablepythonsdk-0.0.112/uncountable/types/api/entity}/__init__.py +0 -0
  266. {uncountablepythonsdk-0.0.110/uncountable/types/api/field_options → uncountablepythonsdk-0.0.112/uncountable/types/api/equipment}/__init__.py +0 -0
  267. {uncountablepythonsdk-0.0.110/uncountable/types/api/files → uncountablepythonsdk-0.0.112/uncountable/types/api/field_options}/__init__.py +0 -0
  268. {uncountablepythonsdk-0.0.110/uncountable/types/api/id_source → uncountablepythonsdk-0.0.112/uncountable/types/api/files}/__init__.py +0 -0
  269. {uncountablepythonsdk-0.0.110/uncountable/types/api/input_groups → uncountablepythonsdk-0.0.112/uncountable/types/api/id_source}/__init__.py +0 -0
  270. {uncountablepythonsdk-0.0.110/uncountable/types/api/inputs → uncountablepythonsdk-0.0.112/uncountable/types/api/input_groups}/__init__.py +0 -0
  271. {uncountablepythonsdk-0.0.110/uncountable/types/api/material_families → uncountablepythonsdk-0.0.112/uncountable/types/api/inputs}/__init__.py +0 -0
  272. {uncountablepythonsdk-0.0.110/uncountable/types/api/outputs → uncountablepythonsdk-0.0.112/uncountable/types/api/material_families}/__init__.py +0 -0
  273. {uncountablepythonsdk-0.0.110/uncountable/types/api/permissions → uncountablepythonsdk-0.0.112/uncountable/types/api/outputs}/__init__.py +0 -0
  274. {uncountablepythonsdk-0.0.110/uncountable/types/api/project → uncountablepythonsdk-0.0.112/uncountable/types/api/permissions}/__init__.py +0 -0
  275. {uncountablepythonsdk-0.0.110/uncountable/types/api/recipe_links → uncountablepythonsdk-0.0.112/uncountable/types/api/project}/__init__.py +0 -0
  276. {uncountablepythonsdk-0.0.110/uncountable/types/api/recipe_metadata → uncountablepythonsdk-0.0.112/uncountable/types/api/recipe_links}/__init__.py +0 -0
  277. {uncountablepythonsdk-0.0.110/uncountable/types/api/recipes → uncountablepythonsdk-0.0.112/uncountable/types/api/recipe_metadata}/__init__.py +0 -0
  278. {uncountablepythonsdk-0.0.110/uncountable/types/api/triggers → uncountablepythonsdk-0.0.112/uncountable/types/api/recipes}/__init__.py +0 -0
  279. {uncountablepythonsdk-0.0.110/uncountable/types/api/uploader → uncountablepythonsdk-0.0.112/uncountable/types/api/runsheet}/__init__.py +0 -0
  280. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/async_batch.py +0 -0
  281. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/async_jobs.py +0 -0
  282. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/async_jobs_t.py +0 -0
  283. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/auth_retrieval.py +0 -0
  284. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/base.py +0 -0
  285. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/calculations.py +0 -0
  286. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/chemical_structure.py +0 -0
  287. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/client_config.py +0 -0
  288. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/curves.py +0 -0
  289. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/data.py +0 -0
  290. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/entity.py +0 -0
  291. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/experiment_groups.py +0 -0
  292. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/field_values.py +0 -0
  293. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/fields.py +0 -0
  294. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/generic_upload.py +0 -0
  295. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/id_source.py +0 -0
  296. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/identifier.py +0 -0
  297. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/input_attributes.py +0 -0
  298. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/inputs.py +0 -0
  299. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/integration_server.py +0 -0
  300. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/job_definition.py +0 -0
  301. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/outputs.py +0 -0
  302. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/overrides.py +0 -0
  303. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/permissions.py +0 -0
  304. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/permissions_t.py +0 -0
  305. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/phases.py +0 -0
  306. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/post_base.py +0 -0
  307. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/post_base_t.py +0 -0
  308. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/queued_job.py +0 -0
  309. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_identifiers.py +0 -0
  310. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_inputs.py +0 -0
  311. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_inputs_t.py +0 -0
  312. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_links.py +0 -0
  313. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_metadata.py +0 -0
  314. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_output_metadata.py +0 -0
  315. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_tags.py +0 -0
  316. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipe_workflow_steps.py +0 -0
  317. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/recipes.py +0 -0
  318. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/response.py +0 -0
  319. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/secret_retrieval.py +0 -0
  320. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/units.py +0 -0
  321. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/users.py +0 -0
  322. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/webhook_job.py +0 -0
  323. {uncountablepythonsdk-0.0.110 → uncountablepythonsdk-0.0.112}/uncountable/types/workflows.py +0 -0
@@ -19,7 +19,7 @@ jobs:
19
19
  - name: Set up UV
20
20
  uses: astral-sh/setup-uv@4db96194c378173c656ce18a155ffc14a9fc4355 # v5
21
21
  with:
22
- version: "0.6.1"
22
+ version: "0.7.1"
23
23
  python-version: "3.12"
24
24
  enable-cache: true
25
25
  - name: Install dependencies
@@ -28,7 +28,7 @@ jobs:
28
28
  - name: Set up UV
29
29
  uses: astral-sh/setup-uv@4db96194c378173c656ce18a155ffc14a9fc4355 # v5
30
30
  with:
31
- version: "0.6.1"
31
+ version: "0.7.1"
32
32
  python-version: "3.12"
33
33
  enable-cache: true
34
34
  - name: Install build dependencies
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.110
3
+ Version: 0.0.112
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
@@ -39,6 +39,7 @@ Requires-Dist: grpcio==1.67.1
39
39
  Requires-Dist: protobuf>=4.21.1
40
40
  Requires-Dist: azure-storage-blob==12.*
41
41
  Requires-Dist: boto3-stubs[essential,ses]==1.*
42
+ Requires-Dist: msgspec==0.19.*
42
43
  Provides-Extra: test
43
44
  Requires-Dist: mypy==1.*; extra == "test"
44
45
  Requires-Dist: ruff==0.*; extra == "test"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.110
3
+ Version: 0.0.112
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
@@ -39,6 +39,7 @@ Requires-Dist: grpcio==1.67.1
39
39
  Requires-Dist: protobuf>=4.21.1
40
40
  Requires-Dist: azure-storage-blob==12.*
41
41
  Requires-Dist: boto3-stubs[essential,ses]==1.*
42
+ Requires-Dist: msgspec==0.19.*
42
43
  Provides-Extra: test
43
44
  Requires-Dist: mypy==1.*; extra == "test"
44
45
  Requires-Dist: ruff==0.*; extra == "test"
@@ -26,6 +26,7 @@ docs/static/favicons/mstile-150x150.png
26
26
  docs/static/favicons/safari-pinned-tab.svg
27
27
  examples/async_batch.py
28
28
  examples/create_entity.py
29
+ examples/create_ingredient_sdk.py
29
30
  examples/download_files.py
30
31
  examples/edit_recipe_inputs.py
31
32
  examples/invoke_uploader.py
@@ -34,6 +35,7 @@ examples/set_recipe_output_file_sdk.py
34
35
  examples/upload_files.py
35
36
  examples/integration-server/pyproject.toml
36
37
  examples/integration-server/jobs/materials_auto/example_cron.py
38
+ examples/integration-server/jobs/materials_auto/example_runsheet_wh.py
37
39
  examples/integration-server/jobs/materials_auto/example_wh.py
38
40
  examples/integration-server/jobs/materials_auto/profile.yaml
39
41
  pkgs/__init__.py
@@ -89,6 +91,8 @@ pkgs/type_spec/parts/base.py.prepart
89
91
  pkgs/type_spec/parts/base.ts.prepart
90
92
  pkgs/type_spec/type_info/__main__.py
91
93
  pkgs/type_spec/type_info/emit_type_info.py
94
+ pkgs/type_spec/ui_entry_actions/__init__.py
95
+ pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py
92
96
  pkgs/type_spec/value_spec/__init__.py
93
97
  pkgs/type_spec/value_spec/__main__.py
94
98
  pkgs/type_spec/value_spec/convert_type.py
@@ -229,6 +233,8 @@ uncountable/types/api/batch/execute_batch.py
229
233
  uncountable/types/api/batch/execute_batch_load_async.py
230
234
  uncountable/types/api/chemical/__init__.py
231
235
  uncountable/types/api/chemical/convert_chemical_formats.py
236
+ uncountable/types/api/condition_parameters/__init__.py
237
+ uncountable/types/api/condition_parameters/upsert_condition_match.py
232
238
  uncountable/types/api/entity/__init__.py
233
239
  uncountable/types/api/entity/create_entities.py
234
240
  uncountable/types/api/entity/create_entity.py
@@ -307,6 +313,8 @@ uncountable/types/api/recipes/set_recipe_outputs.py
307
313
  uncountable/types/api/recipes/set_recipe_tags.py
308
314
  uncountable/types/api/recipes/unarchive_recipes.py
309
315
  uncountable/types/api/recipes/unlock_recipes.py
316
+ uncountable/types/api/runsheet/__init__.py
317
+ uncountable/types/api/runsheet/complete_async_upload.py
310
318
  uncountable/types/api/triggers/__init__.py
311
319
  uncountable/types/api/triggers/run_trigger.py
312
320
  uncountable/types/api/uploader/__init__.py
@@ -21,6 +21,7 @@ grpcio==1.67.1
21
21
  protobuf>=4.21.1
22
22
  azure-storage-blob==12.*
23
23
  boto3-stubs[essential,ses]==1.*
24
+ msgspec==0.19.*
24
25
 
25
26
  [test]
26
27
  mypy==1.*
@@ -6,10 +6,10 @@
6
6
  # -- Project information -----------------------------------------------------
7
7
  # https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
8
8
 
9
- from datetime import date
9
+ import datetime
10
10
 
11
11
  project = "Uncountable SDK"
12
- copyright = f"{date.today().year}, Uncountable Inc"
12
+ copyright = f"{datetime.datetime.now(tz=datetime.UTC).date().year}, Uncountable Inc"
13
13
  author = "Uncountable Inc"
14
14
 
15
15
  # -- General configuration ---------------------------------------------------
@@ -1,5 +1,5 @@
1
1
  docs-setup-python:
2
- curl -LsSf https://astral.sh/uv/0.6.1/install.sh | sh
2
+ curl -LsSf https://astral.sh/uv/0.7.1/install.sh | sh
3
3
  uv pip install -r requirements.txt
4
4
 
5
5
  docs-clean:
@@ -0,0 +1,34 @@
1
+ import os
2
+
3
+ import uncountable.types.api.inputs.create_inputs as create_inputs
4
+ from uncountable.core import AuthDetailsApiKey, Client
5
+ from uncountable.types import field_values_t, inputs_t
6
+
7
+ client = Client(
8
+ base_url="http://localhost:5000",
9
+ auth_details=AuthDetailsApiKey(
10
+ api_id=os.environ["UNC_API_ID"],
11
+ api_secret_key=os.environ["UNC_API_SECRET_KEY"],
12
+ ),
13
+ )
14
+
15
+ client.external_create_inputs(
16
+ inputs_to_create=[
17
+ create_inputs.InputToCreate(
18
+ name="sdk test ing",
19
+ material_family_ids=[1],
20
+ quantity_type=inputs_t.IngredientQuantityType.NUMERIC,
21
+ type=inputs_t.IngredientType.INGREDIENT,
22
+ field_values=[
23
+ field_values_t.FieldRefNameValue(
24
+ field_ref_name="carrieTestNumericField",
25
+ value="10",
26
+ ),
27
+ field_values_t.FieldRefNameValue(
28
+ field_ref_name="carrieTestCheckboxField",
29
+ value=True,
30
+ ),
31
+ ],
32
+ )
33
+ ]
34
+ )
@@ -0,0 +1,35 @@
1
+ from io import BytesIO
2
+
3
+ from uncountable.core.file_upload import DataFileUpload, FileUpload
4
+ from uncountable.integration.job import JobArguments, RunsheetWebhookJob, register_job
5
+ from uncountable.types import entity_t
6
+
7
+
8
+ @register_job
9
+ class StandardRunsheetGenerator(RunsheetWebhookJob):
10
+ def build_runsheet(
11
+ self,
12
+ *,
13
+ args: JobArguments,
14
+ entities: list[entity_t.Entity],
15
+ ) -> FileUpload:
16
+ args.logger.log_info(f"Generating runsheet for {len(entities)} entities")
17
+
18
+ content = []
19
+ content.append("STANDARD LAB RUNSHEET\n")
20
+ content.append("=" * 30 + "\n\n")
21
+
22
+ for entity in entities:
23
+ content.append(f"Type: {entity.type}\n")
24
+ content.append(f"ID: {entity.id}\n")
25
+
26
+ if hasattr(entity, "field_values") and entity.field_values:
27
+ content.append("Field Values:\n")
28
+ for field in entity.field_values:
29
+ content.append(f" - {field.name}: {field.value}\n")
30
+
31
+ content.append("\n")
32
+
33
+ runsheet_data = "".join(content).encode("utf-8")
34
+
35
+ return DataFileUpload(name="lab_runsheet.txt", data=BytesIO(runsheet_data))
@@ -41,3 +41,12 @@ jobs:
41
41
  executor:
42
42
  type: script
43
43
  import_path: example_wh
44
+ - id: example_runsheet_wh
45
+ type: webhook
46
+ name: Runsheet Webhook
47
+ signature_key_secret:
48
+ type: env
49
+ env_key: WH_RUNSHEET_SIGNATURE_KEY
50
+ executor:
51
+ type: script
52
+ import_path: example_runsheet_wh
@@ -16,7 +16,8 @@ dependencies = [
16
16
  "types-requests == 2.*",
17
17
  "types-simplejson == 3.*",
18
18
  "pandas-stubs",
19
- "xlrd == 2.*"
19
+ "xlrd == 2.*",
20
+ "msgspec == 0.19.*"
20
21
  ]
21
22
 
22
23
  [tool.mypy]
@@ -221,4 +222,3 @@ max-locals=50
221
222
 
222
223
  [tool.setuptools]
223
224
  py-modules = []
224
-
@@ -1,24 +1,25 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import dataclasses
4
+ import datetime
4
5
  import math
5
6
  import types
6
7
  import typing
7
8
  from abc import ABC, abstractmethod
8
9
  from collections import defaultdict
9
- from datetime import date, datetime
10
+ from datetime import date
10
11
  from decimal import Decimal
11
12
  from enum import Enum, auto
12
13
  from importlib import resources
13
14
 
14
15
  import dateutil.parser
16
+ import msgspec.yaml
15
17
 
16
18
  from pkgs.serialization import (
17
19
  MissingSentryType,
18
20
  OpaqueKey,
19
21
  get_serial_class_data,
20
22
  get_serial_union_data,
21
- yaml,
22
23
  )
23
24
 
24
25
  from ._is_enum import is_string_enum_class
@@ -335,10 +336,12 @@ def _build_parser_inner(
335
336
 
336
337
  return parse_int
337
338
 
338
- if parsed_type is datetime:
339
+ if parsed_type is datetime.datetime:
339
340
 
340
341
  def parse_datetime(value: typing.Any) -> T:
341
- if context.options.allow_direct_type and isinstance(value, datetime):
342
+ if context.options.allow_direct_type and isinstance(
343
+ value, datetime.datetime
344
+ ):
342
345
  return value # type: ignore
343
346
  return dateutil.parser.isoparse(value) # type:ignore
344
347
 
@@ -561,11 +564,11 @@ class ParserBase(ABC, typing.Generic[T]):
561
564
 
562
565
  def parse_yaml_file(self, path: str) -> T:
563
566
  with open(path, encoding="utf-8") as data_in:
564
- return self.parse_storage(yaml.safe_load(data_in))
567
+ return self.parse_storage(msgspec.yaml.decode(data_in.read()))
565
568
 
566
569
  def parse_yaml_resource(self, package: resources.Package, resource: str) -> T:
567
570
  with resources.open_text(package, resource) as fp:
568
- return self.parse_storage(yaml.safe_load(fp))
571
+ return self.parse_storage(msgspec.yaml.decode(fp.read()))
569
572
 
570
573
 
571
574
  class CachedParser(ParserBase[T], typing.Generic[T]):
@@ -624,7 +624,12 @@ class SpecTypeDefnUnion(SpecTypeDefn):
624
624
  prop_type = unwrap_literal_type(discriminator_type.spec_type)
625
625
  assert prop_type is not None
626
626
  assert prop_type.is_value_to_string()
627
- discriminant = str(prop_type.value)
627
+ value_type = prop_type.value_type
628
+ if isinstance(value_type, SpecTypeDefnStringEnum):
629
+ assert isinstance(prop_type.value, str)
630
+ discriminant = value_type.values[prop_type.value].value
631
+ else:
632
+ discriminant = str(prop_type.value)
628
633
  assert discriminant not in self.discriminator_map, (
629
634
  f"duplicated-discriminant, {discriminant} in {sub_type}"
630
635
  )
@@ -793,6 +798,7 @@ class SpecTypeDefnStringEnum(SpecTypeDefn):
793
798
  TOKEN_ENDPOINT = "$endpoint"
794
799
  TOKEN_EMIT_IO_TS = "$emit_io_ts"
795
800
  TOKEN_EMIT_TYPE_INFO = "$emit_type_info"
801
+ TOKEN_EMIT_TYPE_INFO_PYTHON = "$emit_type_info_python"
796
802
  # The import token is only for explicit ordering of the files, to process constants
797
803
  # and enums correctly. It does not impact the final generation of files, or the
798
804
  # language imports. Those are still auto-resolved.
@@ -1161,6 +1167,7 @@ class SpecNamespace:
1161
1167
  self.endpoint: SpecEndpoint | None = None
1162
1168
  self.emit_io_ts = False
1163
1169
  self.emit_type_info = False
1170
+ self.emit_type_info_python = False
1164
1171
  self.derive_types_from_io_ts = False
1165
1172
  self._imports: list[str] | None = None
1166
1173
  self.path = name.split(".")
@@ -1215,6 +1222,11 @@ class SpecNamespace:
1215
1222
  self.emit_type_info = defn
1216
1223
  continue
1217
1224
 
1225
+ if name == TOKEN_EMIT_TYPE_INFO_PYTHON:
1226
+ assert defn in (True, False)
1227
+ self.emit_type_info_python = defn
1228
+ continue
1229
+
1218
1230
  if name == TOKEN_IMPORT:
1219
1231
  assert self._imports is None
1220
1232
  imports = [defn] if isinstance(defn, str) else defn
@@ -1276,7 +1288,12 @@ class SpecNamespace:
1276
1288
  parsed_name = parse_type_str(full_name)[0]
1277
1289
  name = parsed_name.name
1278
1290
 
1279
- if name in [TOKEN_EMIT_IO_TS, TOKEN_EMIT_TYPE_INFO, TOKEN_IMPORT]:
1291
+ if name in [
1292
+ TOKEN_EMIT_IO_TS,
1293
+ TOKEN_EMIT_TYPE_INFO,
1294
+ TOKEN_IMPORT,
1295
+ TOKEN_EMIT_TYPE_INFO_PYTHON,
1296
+ ]:
1280
1297
  continue
1281
1298
 
1282
1299
  builder.push_where(name)
@@ -5,7 +5,7 @@ from decimal import Decimal
5
5
  from typing import Any
6
6
 
7
7
  from . import builder, util
8
- from .builder import EndpointEmitType, EndpointSpecificPath
8
+ from .builder import EndpointEmitType, EndpointSpecificPath, base_namespace_name
9
9
  from .config import PythonConfig
10
10
  from .cross_output_links import get_path_links
11
11
  from .emit_open_api_util import EmitOpenAPIStabilityLevel
@@ -907,13 +907,19 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
907
907
 
908
908
  # Emit dataclass decorator
909
909
  dataclass = "@dataclasses.dataclass"
910
- dc_args = []
910
+ refer_to(
911
+ ctx,
912
+ builder.SpecTypeDefnAlias(
913
+ namespace=ctx.builder.namespaces[base_namespace_name], name="ENABLE_SLOTS"
914
+ ),
915
+ )
916
+ dc_args = ["slots=base_t.ENABLE_SLOTS"]
911
917
  if stype.is_kw_only():
912
918
  dc_args.append("kw_only=True")
913
919
  if stype.is_hashable:
914
920
  dc_args.extend(["frozen=True", "eq=True"])
915
921
  if len(dc_args) > 0:
916
- dataclass += f"({', '.join(dc_args)})"
922
+ dataclass += f"({', '.join(dc_args)}) # type: ignore[literal-required]"
917
923
 
918
924
  ctx.out.write(f"{dataclass}\n")
919
925
  ctx.out.write(class_out.getvalue())
@@ -103,7 +103,7 @@ def emit_value_ts(
103
103
  elif isinstance(stype, builder.SpecTypeDefnStringEnum):
104
104
  return f"{refer_to(ctx, stype)}.{ts_enum_name(value, stype.name_case)}"
105
105
 
106
- raise Exception("invalid constant type", value, stype)
106
+ raise Exception("invalid constant type", value, stype, type(stype))
107
107
 
108
108
 
109
109
  def emit_type_ts(ctx: EmitTypescriptContext, stype: builder.SpecType) -> None:
@@ -266,3 +266,18 @@ def emit_namespace_imports_ts(
266
266
  )
267
267
  import_from = f"{import_path}{resolve_namespace_name(ns)}"
268
268
  out.write(f'import * as {import_as} from "{import_from}"\n') # noqa: E501
269
+
270
+
271
+ def emit_namespace_imports_from_root_ts(
272
+ namespaces: set[builder.SpecNamespace],
273
+ out: io.StringIO,
274
+ root: str,
275
+ ) -> None:
276
+ for ns in sorted(
277
+ namespaces,
278
+ key=lambda name: resolve_namespace_name(name),
279
+ ):
280
+ import_as = resolve_namespace_ref(ns)
281
+ out.write(
282
+ f'import * as {import_as} from "{root}/{resolve_namespace_name(ns)}"\n'
283
+ ) # noqa: E501
@@ -28,6 +28,10 @@ REF_NAME_STRICT_REGEX = rf"{REF_NAME_STRICT_REGEX_STRING}"
28
28
  ID_REGEX = r"-?[1-9][0-9]{0,20}"
29
29
 
30
30
 
31
+ # ENABLE_SLOTS should be removed after slots have been tested locally
32
+ import os
33
+ ENABLE_SLOTS = os.environ.get("UNC_ENABLE_DATACLASS_SLOTS") == "true"
34
+
31
35
  if TYPE_CHECKING:
32
36
  JsonValue = Union[JsonScalar, Mapping[str, "JsonValue"], Sequence["JsonValue"]]
33
37
  ExtJsonValue = JsonValue
@@ -116,7 +116,7 @@ def asdict_for_yaml_dump(dataclass_instance: Any) -> Any:
116
116
 
117
117
 
118
118
  def emit_type_info_python(build: builder.SpecBuilder, output: str) -> None:
119
- type_map = _build_map_all(build)
119
+ type_map = _build_map_all(build, python=True)
120
120
 
121
121
  stripped = _dict_null_strip(asdict_for_yaml_dump(type_map))
122
122
 
@@ -176,11 +176,14 @@ class MapAll:
176
176
  namespaces: dict[str, MapNamespace]
177
177
 
178
178
 
179
- def _build_map_all(build: builder.SpecBuilder) -> MapAll:
179
+ def _build_map_all(build: builder.SpecBuilder, *, python: bool = False) -> MapAll:
180
180
  map_all = MapAll(namespaces={})
181
181
 
182
182
  for namespace in build.namespaces.values():
183
- if not namespace.emit_type_info:
183
+ if not python and not namespace.emit_type_info:
184
+ continue
185
+
186
+ if python and not namespace.emit_type_info_python:
184
187
  continue
185
188
 
186
189
  map_namespace = MapNamespace(types={})
@@ -324,6 +327,12 @@ def _validate_type_ext_info(
324
327
  prop = _pull_property_from_type_recursively(stype, name)
325
328
  assert prop is not None, f"missing-label-field:{name}"
326
329
 
330
+ if ext_info.actions is not None:
331
+ assert stype.properties is not None
332
+ for action in ext_info.actions:
333
+ prop = _pull_property_from_type_recursively(stype, action.property)
334
+ assert prop is not None, f"missing-action-field:{action.property}"
335
+
327
336
  if not stype.is_base and isinstance(stype.base, builder.SpecTypeDefnObject):
328
337
  base_layout, _ = _validate_type_ext_info(stype.base)
329
338
  else:
@@ -0,0 +1,4 @@
1
+ # CLOSED MODULE
2
+ from .generate_ui_entry_actions import (
3
+ generate_entry_actions_typescript as generate_entry_actions_typescript,
4
+ )