UncountablePythonSDK 0.0.111__tar.gz → 0.0.113__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 (324) hide show
  1. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/.github/workflows/documentation.yml +1 -1
  2. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/.github/workflows/publish.yml +1 -1
  3. {uncountablepythonsdk-0.0.111/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.113}/PKG-INFO +2 -1
  4. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113/UncountablePythonSDK.egg-info}/PKG-INFO +2 -1
  5. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/UncountablePythonSDK.egg-info/SOURCES.txt +5 -0
  6. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/UncountablePythonSDK.egg-info/requires.txt +1 -0
  7. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/conf.py +2 -2
  8. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/justfile +1 -1
  9. uncountablepythonsdk-0.0.113/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +35 -0
  10. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/examples/integration-server/jobs/materials_auto/profile.yaml +9 -0
  11. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/examples/integration-server/pyproject.toml +2 -2
  12. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/argument_parser/argument_parser.py +6 -3
  13. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/filesystem_utils/_blob_session.py +8 -1
  14. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/emit_python.py +9 -3
  15. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/emit_typescript_util.py +16 -1
  16. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/parts/base.py.prepart +4 -0
  17. uncountablepythonsdk-0.0.113/pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  18. uncountablepythonsdk-0.0.113/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +294 -0
  19. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/value_spec/convert_type.py +13 -0
  20. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pyproject.toml +2 -1
  21. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/core/client.py +7 -4
  22. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/executors/generic_upload_executor.py +3 -2
  23. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/job.py +24 -1
  24. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +3 -2
  25. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/scan_profiles.py +1 -1
  26. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/scheduler.py +4 -3
  27. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/secret_retrieval/retrieve_secret.py +1 -1
  28. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/__init__.py +2 -0
  29. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/batch/execute_batch.py +4 -4
  30. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/batch/execute_batch_load_async.py +2 -2
  31. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/chemical/convert_chemical_formats.py +3 -3
  32. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/condition_parameters/upsert_condition_match.py +4 -3
  33. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/create_entities.py +3 -3
  34. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/create_entity.py +3 -3
  35. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/create_or_update_entity.py +3 -2
  36. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/get_entities_data.py +3 -3
  37. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/grant_entity_permissions.py +3 -2
  38. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/list_entities.py +4 -4
  39. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/lock_entity.py +3 -2
  40. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/lookup_entity.py +5 -5
  41. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/resolve_entity_ids.py +3 -3
  42. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/set_entity_field_values.py +3 -2
  43. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/set_values.py +3 -2
  44. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/transition_entity_phase.py +5 -4
  45. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/unlock_entity.py +3 -2
  46. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/equipment/associate_equipment_input.py +2 -2
  47. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/field_options/upsert_field_options.py +4 -3
  48. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/files/download_file.py +4 -3
  49. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/id_source/list_id_source.py +3 -3
  50. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/id_source/match_id_source.py +3 -3
  51. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/input_groups/get_input_group_names.py +3 -3
  52. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/inputs/create_inputs.py +4 -4
  53. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/inputs/get_input_data.py +6 -6
  54. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/inputs/get_input_names.py +3 -3
  55. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/inputs/get_inputs_data.py +6 -6
  56. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/inputs/set_input_attribute_values.py +3 -3
  57. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/inputs/set_input_category.py +3 -2
  58. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/inputs/set_input_subcategories.py +3 -2
  59. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/inputs/set_intermediate_type.py +3 -2
  60. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/material_families/update_entity_material_families.py +2 -2
  61. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/outputs/get_output_data.py +6 -6
  62. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/outputs/get_output_names.py +3 -3
  63. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/outputs/resolve_output_conditions.py +5 -5
  64. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/permissions/set_core_permissions.py +7 -6
  65. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/project/get_projects.py +3 -3
  66. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/project/get_projects_data.py +3 -3
  67. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipe_links/create_recipe_link.py +3 -2
  68. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipe_links/remove_recipe_link.py +3 -2
  69. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -3
  70. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/add_recipe_to_project.py +3 -2
  71. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/add_time_series_data.py +4 -3
  72. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/archive_recipes.py +3 -2
  73. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/associate_recipe_as_input.py +3 -2
  74. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -2
  75. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/clear_recipe_outputs.py +3 -2
  76. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/create_recipe.py +2 -2
  77. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/create_recipes.py +4 -4
  78. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -2
  79. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/edit_recipe_inputs.py +17 -16
  80. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/get_column_calculation_values.py +3 -3
  81. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/get_curve.py +2 -2
  82. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/get_recipe_calculations.py +3 -3
  83. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/get_recipe_links.py +2 -2
  84. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/get_recipe_names.py +3 -3
  85. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/get_recipe_output_metadata.py +3 -3
  86. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/get_recipes_data.py +11 -11
  87. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/lock_recipes.py +4 -3
  88. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/remove_recipe_from_project.py +3 -2
  89. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/set_recipe_inputs.py +3 -3
  90. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/set_recipe_metadata.py +3 -2
  91. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/set_recipe_output_annotations.py +6 -6
  92. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/set_recipe_output_file.py +3 -3
  93. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/set_recipe_outputs.py +5 -5
  94. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/set_recipe_tags.py +6 -6
  95. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/unarchive_recipes.py +3 -2
  96. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/unlock_recipes.py +3 -2
  97. uncountablepythonsdk-0.0.113/uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  98. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/triggers/run_trigger.py +3 -2
  99. uncountablepythonsdk-0.0.113/uncountable/types/api/uploader/__init__.py +1 -0
  100. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/uploader/invoke_uploader.py +2 -2
  101. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/async_batch_processor.py +34 -0
  102. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/async_batch_t.py +6 -5
  103. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/auth_retrieval_t.py +4 -3
  104. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/base_t.py +4 -0
  105. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/calculations_t.py +1 -1
  106. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/chemical_structure_t.py +2 -1
  107. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/client_base.py +21 -0
  108. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/client_config_t.py +2 -1
  109. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/curves_t.py +2 -2
  110. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/data.py +2 -2
  111. uncountablepythonsdk-0.0.113/uncountable/types/data_t.py +103 -0
  112. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/entity_t.py +3 -3
  113. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/experiment_groups_t.py +1 -1
  114. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/field_values_t.py +20 -20
  115. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/fields_t.py +1 -1
  116. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/generic_upload_t.py +7 -6
  117. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/id_source_t.py +5 -4
  118. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/identifier_t.py +3 -3
  119. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/input_attributes_t.py +1 -1
  120. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/inputs_t.py +1 -1
  121. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/integration_server_t.py +2 -1
  122. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/job_definition_t.py +14 -13
  123. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/outputs_t.py +1 -1
  124. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/overrides_t.py +3 -2
  125. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/phases_t.py +1 -1
  126. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/queued_job_t.py +7 -7
  127. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_identifiers_t.py +3 -3
  128. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_links_t.py +1 -1
  129. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_metadata_t.py +3 -3
  130. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_output_metadata_t.py +1 -1
  131. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_tags_t.py +1 -1
  132. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_workflow_steps_t.py +5 -4
  133. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipes_t.py +2 -1
  134. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/response_t.py +2 -1
  135. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/secret_retrieval_t.py +4 -3
  136. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/units_t.py +1 -1
  137. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/users_t.py +1 -1
  138. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/webhook_job_t.py +4 -3
  139. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/workflows_t.py +2 -2
  140. uncountablepythonsdk-0.0.111/uncountable/types/data_t.py +0 -93
  141. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/.gitignore +0 -0
  142. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/README.md +0 -0
  143. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  144. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  145. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/.gitignore +0 -0
  146. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/index.md +0 -0
  147. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/quickstart.md +0 -0
  148. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/requirements.txt +0 -0
  149. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/static/favicons/android-chrome-192x192.png +0 -0
  150. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/static/favicons/android-chrome-512x512.png +0 -0
  151. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/static/favicons/apple-touch-icon.png +0 -0
  152. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/static/favicons/browserconfig.xml +0 -0
  153. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/static/favicons/favicon-16x16.png +0 -0
  154. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/static/favicons/favicon-32x32.png +0 -0
  155. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/static/favicons/manifest.json +0 -0
  156. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/static/favicons/mstile-150x150.png +0 -0
  157. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  158. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/docs/static/logo_blue.png +0 -0
  159. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/examples/async_batch.py +0 -0
  160. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/examples/create_entity.py +0 -0
  161. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/examples/create_ingredient_sdk.py +0 -0
  162. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/examples/download_files.py +0 -0
  163. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/examples/edit_recipe_inputs.py +0 -0
  164. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  165. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  166. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/examples/invoke_uploader.py +0 -0
  167. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/examples/set_recipe_metadata_file.py +0 -0
  168. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/examples/set_recipe_output_file_sdk.py +0 -0
  169. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/examples/upload_files.py +0 -0
  170. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/__init__.py +0 -0
  171. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/argument_parser/__init__.py +0 -0
  172. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/argument_parser/_is_enum.py +0 -0
  173. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/argument_parser/_is_namedtuple.py +0 -0
  174. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/argument_parser/case_convert.py +0 -0
  175. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/filesystem_utils/__init__.py +0 -0
  176. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  177. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/filesystem_utils/_local_session.py +0 -0
  178. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/filesystem_utils/_s3_session.py +0 -0
  179. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/filesystem_utils/_sftp_session.py +0 -0
  180. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  181. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  182. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/py.typed +0 -0
  183. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization/__init__.py +0 -0
  184. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization/annotation.py +0 -0
  185. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization/missing_sentry.py +0 -0
  186. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization/opaque_key.py +0 -0
  187. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization/serial_alias.py +0 -0
  188. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization/serial_class.py +0 -0
  189. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization/serial_generic.py +0 -0
  190. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization/serial_union.py +0 -0
  191. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization/yaml.py +0 -0
  192. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization_util/__init__.py +0 -0
  193. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  194. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  195. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization_util/dataclasses.py +0 -0
  196. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/serialization_util/serialization_helpers.py +0 -0
  197. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/strenum_compat/__init__.py +0 -0
  198. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/strenum_compat/strenum_compat.py +0 -0
  199. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/__init__.py +0 -0
  200. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/__main__.py +0 -0
  201. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  202. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/actions_registry/__main__.py +0 -0
  203. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  204. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/builder.py +0 -0
  205. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/config.py +0 -0
  206. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/cross_output_links.py +0 -0
  207. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/emit_io_ts.py +0 -0
  208. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/emit_open_api.py +0 -0
  209. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/emit_open_api_util.py +0 -0
  210. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/emit_typescript.py +0 -0
  211. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/load_types.py +0 -0
  212. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/open_api_util.py +0 -0
  213. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  214. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/test.py +0 -0
  215. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/type_info/__main__.py +0 -0
  216. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
  217. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/util.py +0 -0
  218. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/value_spec/__init__.py +0 -0
  219. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/value_spec/__main__.py +0 -0
  220. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/value_spec/emit_python.py +0 -0
  221. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/pkgs/type_spec/value_spec/types.py +0 -0
  222. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/setup.cfg +0 -0
  223. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/__init__.py +0 -0
  224. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/core/__init__.py +0 -0
  225. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/core/async_batch.py +0 -0
  226. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/core/environment.py +0 -0
  227. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/core/file_upload.py +0 -0
  228. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/core/types.py +0 -0
  229. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/__init__.py +0 -0
  230. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/cli.py +0 -0
  231. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/construct_client.py +0 -0
  232. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/cron.py +0 -0
  233. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/db/__init__.py +0 -0
  234. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/db/connect.py +0 -0
  235. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/db/session.py +0 -0
  236. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/entrypoint.py +0 -0
  237. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/executors/__init__.py +0 -0
  238. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/executors/executors.py +0 -0
  239. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/executors/script_executor.py +0 -0
  240. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/__init__.py +0 -0
  241. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  242. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  243. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  244. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  245. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  246. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  247. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  248. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  249. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  250. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  251. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  252. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  253. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
  254. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  255. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/types.py +0 -0
  256. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/queue_runner/worker.py +0 -0
  257. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  258. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/server.py +0 -0
  259. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/telemetry.py +0 -0
  260. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  261. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/py.typed +0 -0
  262. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/__init__.py +0 -0
  263. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/batch/__init__.py +0 -0
  264. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/chemical/__init__.py +0 -0
  265. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  266. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/entity/__init__.py +0 -0
  267. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/equipment/__init__.py +0 -0
  268. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/field_options/__init__.py +0 -0
  269. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/files/__init__.py +0 -0
  270. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/id_source/__init__.py +0 -0
  271. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/input_groups/__init__.py +0 -0
  272. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/inputs/__init__.py +0 -0
  273. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/material_families/__init__.py +0 -0
  274. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/outputs/__init__.py +0 -0
  275. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/permissions/__init__.py +0 -0
  276. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/project/__init__.py +0 -0
  277. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipe_links/__init__.py +0 -0
  278. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  279. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/api/recipes/__init__.py +0 -0
  280. {uncountablepythonsdk-0.0.111/uncountable/types/api/triggers → uncountablepythonsdk-0.0.113/uncountable/types/api/runsheet}/__init__.py +0 -0
  281. {uncountablepythonsdk-0.0.111/uncountable/types/api/uploader → uncountablepythonsdk-0.0.113/uncountable/types/api/triggers}/__init__.py +0 -0
  282. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/async_batch.py +0 -0
  283. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/async_jobs.py +0 -0
  284. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/async_jobs_t.py +0 -0
  285. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/auth_retrieval.py +0 -0
  286. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/base.py +0 -0
  287. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/calculations.py +0 -0
  288. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/chemical_structure.py +0 -0
  289. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/client_config.py +0 -0
  290. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/curves.py +0 -0
  291. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/entity.py +0 -0
  292. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/experiment_groups.py +0 -0
  293. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/field_values.py +0 -0
  294. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/fields.py +0 -0
  295. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/generic_upload.py +0 -0
  296. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/id_source.py +0 -0
  297. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/identifier.py +0 -0
  298. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/input_attributes.py +0 -0
  299. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/inputs.py +0 -0
  300. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/integration_server.py +0 -0
  301. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/job_definition.py +0 -0
  302. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/outputs.py +0 -0
  303. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/overrides.py +0 -0
  304. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/permissions.py +0 -0
  305. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/permissions_t.py +0 -0
  306. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/phases.py +0 -0
  307. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/post_base.py +0 -0
  308. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/post_base_t.py +0 -0
  309. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/queued_job.py +0 -0
  310. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_identifiers.py +0 -0
  311. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_inputs.py +0 -0
  312. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_inputs_t.py +0 -0
  313. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_links.py +0 -0
  314. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_metadata.py +0 -0
  315. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_output_metadata.py +0 -0
  316. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_tags.py +0 -0
  317. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipe_workflow_steps.py +0 -0
  318. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/recipes.py +0 -0
  319. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/response.py +0 -0
  320. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/secret_retrieval.py +0 -0
  321. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/units.py +0 -0
  322. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/users.py +0 -0
  323. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/uncountable/types/webhook_job.py +0 -0
  324. {uncountablepythonsdk-0.0.111 → uncountablepythonsdk-0.0.113}/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.111
3
+ Version: 0.0.113
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.111
3
+ Version: 0.0.113
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"
@@ -35,6 +35,7 @@ examples/set_recipe_output_file_sdk.py
35
35
  examples/upload_files.py
36
36
  examples/integration-server/pyproject.toml
37
37
  examples/integration-server/jobs/materials_auto/example_cron.py
38
+ examples/integration-server/jobs/materials_auto/example_runsheet_wh.py
38
39
  examples/integration-server/jobs/materials_auto/example_wh.py
39
40
  examples/integration-server/jobs/materials_auto/profile.yaml
40
41
  pkgs/__init__.py
@@ -90,6 +91,8 @@ pkgs/type_spec/parts/base.py.prepart
90
91
  pkgs/type_spec/parts/base.ts.prepart
91
92
  pkgs/type_spec/type_info/__main__.py
92
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
93
96
  pkgs/type_spec/value_spec/__init__.py
94
97
  pkgs/type_spec/value_spec/__main__.py
95
98
  pkgs/type_spec/value_spec/convert_type.py
@@ -310,6 +313,8 @@ uncountable/types/api/recipes/set_recipe_outputs.py
310
313
  uncountable/types/api/recipes/set_recipe_tags.py
311
314
  uncountable/types/api/recipes/unarchive_recipes.py
312
315
  uncountable/types/api/recipes/unlock_recipes.py
316
+ uncountable/types/api/runsheet/__init__.py
317
+ uncountable/types/api/runsheet/complete_async_upload.py
313
318
  uncountable/types/api/triggers/__init__.py
314
319
  uncountable/types/api/triggers/run_trigger.py
315
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,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,12 +1,13 @@
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
@@ -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
 
@@ -1,5 +1,6 @@
1
1
  from io import BytesIO
2
2
 
3
+ from azure.core.credentials import AzureSasCredential
3
4
  from azure.storage.blob import BlobServiceClient, ContainerClient
4
5
 
5
6
  from pkgs.filesystem_utils.file_type_utils import (
@@ -122,7 +123,13 @@ class BlobSession(FileSystemSession):
122
123
  )
123
124
  dest_blob_client = self.container_client.get_blob_client(dest_file.filepath)
124
125
 
125
- dest_blob_client.start_copy_from_url(source_blob_client.url)
126
+ source_url = (
127
+ f"{source_blob_client.url}?{self.config.credential.signature}"
128
+ if isinstance(self.config.credential, AzureSasCredential)
129
+ else source_blob_client.url
130
+ )
131
+
132
+ dest_blob_client.start_copy_from_url(source_url)
126
133
  source_blob_client.delete_blob()
127
134
 
128
135
  def delete_files(self, filepaths: list[FileSystemObject]) -> None:
@@ -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
@@ -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
+ )
@@ -0,0 +1,294 @@
1
+ import json
2
+ from dataclasses import dataclass
3
+ from io import StringIO
4
+ from pathlib import Path
5
+ from typing import assert_never
6
+
7
+ from main.base.types import (
8
+ ui_entry_actions_t,
9
+ )
10
+ from pkgs.argument_parser import snake_to_camel_case
11
+ from pkgs.serialization_util import serialize_for_api
12
+ from pkgs.type_spec import emit_typescript_util
13
+ from pkgs.type_spec.builder import (
14
+ BaseTypeName,
15
+ NameCase,
16
+ RawDict,
17
+ SpecBuilder,
18
+ SpecNamespace,
19
+ SpecTypeDefnObject,
20
+ )
21
+ from pkgs.type_spec.config import Config
22
+ from pkgs.type_spec.load_types import load_types
23
+ from pkgs.type_spec.util import rewrite_file
24
+ from pkgs.type_spec.value_spec.convert_type import convert_from_value_spec_type
25
+
26
+ _INIT_ACTION_INDEX_TYPE_DATA = {
27
+ "EntryActionInfo<InputT, OutputT>": {
28
+ "type": BaseTypeName.s_object,
29
+ "properties": {"inputs": {"type": "InputT"}, "outputs": {"type": "OutputT"}},
30
+ }
31
+ }
32
+ _TYPES_ROOT = "unc_types"
33
+
34
+
35
+ @dataclass(kw_only=True)
36
+ class EntryActionTypeInfo:
37
+ inputs_type: SpecTypeDefnObject
38
+ outputs_type: SpecTypeDefnObject
39
+ name: str
40
+
41
+
42
+ def ui_entry_variable_to_type_spec_type(
43
+ variable: ui_entry_actions_t.UiEntryActionVariable,
44
+ ) -> str:
45
+ match variable:
46
+ case ui_entry_actions_t.UiEntryActionVariableString():
47
+ return BaseTypeName.s_string
48
+ case ui_entry_actions_t.UiEntryActionVariableEntityFields():
49
+ return "entity.Entity"
50
+ case _:
51
+ assert_never(variable)
52
+
53
+
54
+ def construct_inputs_type_data(
55
+ vars: dict[str, ui_entry_actions_t.UiEntryActionVariable],
56
+ ) -> RawDict:
57
+ if len(vars) == 0:
58
+ return {"type": BaseTypeName.s_object}
59
+ properties: dict[str, dict[str, str]] = {}
60
+ for input_name, input_defn in (vars).items():
61
+ properties[f"{input_name}"] = {
62
+ "type": ui_entry_variable_to_type_spec_type(input_defn)
63
+ }
64
+ return {"type": BaseTypeName.s_object, "properties": properties}
65
+
66
+
67
+ def construct_outputs_type_data(
68
+ vars: dict[str, ui_entry_actions_t.UiEntryActionOutput],
69
+ ) -> RawDict:
70
+ if len(vars) == 0:
71
+ return {"type": BaseTypeName.s_object}
72
+ properties: dict[str, dict[str, str]] = {}
73
+ for output_name, output_defn in (vars).items():
74
+ # All outputs are optional
75
+ properties[f"{output_name}"] = {
76
+ "type": f"Optional<{convert_from_value_spec_type(output_defn.vs_type)}>"
77
+ }
78
+ return {"type": BaseTypeName.s_object, "properties": properties}
79
+
80
+
81
+ def construct_outputs_type(
82
+ *,
83
+ action_scope: ui_entry_actions_t.ActionScope,
84
+ vars: dict[str, ui_entry_actions_t.UiEntryActionOutput],
85
+ builder: SpecBuilder,
86
+ namespace: SpecNamespace,
87
+ ) -> SpecTypeDefnObject:
88
+ stype = SpecTypeDefnObject(
89
+ namespace=namespace,
90
+ name=emit_typescript_util.ts_type_name(f"{action_scope}_outputs"),
91
+ )
92
+ namespace.types[stype.name] = stype
93
+ stype.process(
94
+ builder=builder,
95
+ data=construct_outputs_type_data(vars=vars),
96
+ )
97
+ return stype
98
+
99
+
100
+ def construct_inputs_type(
101
+ *,
102
+ action_scope: ui_entry_actions_t.ActionScope,
103
+ vars: dict[str, ui_entry_actions_t.UiEntryActionVariable],
104
+ builder: SpecBuilder,
105
+ namespace: SpecNamespace,
106
+ ) -> SpecTypeDefnObject:
107
+ stype = SpecTypeDefnObject(
108
+ namespace=namespace,
109
+ name=emit_typescript_util.ts_type_name(f"{action_scope}_inputs"),
110
+ )
111
+ stype.process(builder=builder, data=construct_inputs_type_data(vars))
112
+ namespace.types[stype.name] = stype
113
+ return stype
114
+
115
+
116
+ def _get_types_root(destination_root: Path) -> Path:
117
+ return destination_root / "types"
118
+
119
+
120
+ def emit_imports_ts(
121
+ namespaces: set[SpecNamespace],
122
+ out: StringIO,
123
+ ) -> None:
124
+ for ns in sorted(
125
+ namespaces,
126
+ key=lambda ns: ns.name,
127
+ ):
128
+ import_as = emit_typescript_util.resolve_namespace_ref(ns)
129
+ import_from = f"{_TYPES_ROOT}/{ns.name}"
130
+ out.write(f'import * as {import_as} from "{import_from}"\n')
131
+
132
+
133
+ def emit_entry_action_definition(
134
+ *,
135
+ ctx: emit_typescript_util.EmitTypescriptContext,
136
+ defn: ui_entry_actions_t.UiEntryActionDefinition,
137
+ builder: SpecBuilder,
138
+ action_scope: ui_entry_actions_t.ActionScope,
139
+ ) -> EntryActionTypeInfo:
140
+ inputs_type = construct_inputs_type(
141
+ action_scope=action_scope,
142
+ vars=defn.inputs,
143
+ builder=builder,
144
+ namespace=ctx.namespace,
145
+ )
146
+ outputs_type = construct_outputs_type(
147
+ action_scope=action_scope,
148
+ vars=defn.outputs,
149
+ builder=builder,
150
+ namespace=ctx.namespace,
151
+ )
152
+
153
+ return EntryActionTypeInfo(
154
+ inputs_type=inputs_type,
155
+ outputs_type=outputs_type,
156
+ name=action_scope,
157
+ )
158
+
159
+
160
+ def emit_query_index(
161
+ ctx: emit_typescript_util.EmitTypescriptContext,
162
+ defn_infos: list[EntryActionTypeInfo],
163
+ index_path: Path,
164
+ builder: SpecBuilder,
165
+ definitions: dict[
166
+ ui_entry_actions_t.ActionScope, ui_entry_actions_t.UiEntryActionDefinition
167
+ ],
168
+ ) -> bool:
169
+ query_index_type_data = {
170
+ **_INIT_ACTION_INDEX_TYPE_DATA,
171
+ "EntityActionTypeLookup": {
172
+ "type": BaseTypeName.s_object,
173
+ "properties": {
174
+ defn_info.name: {
175
+ "type": f"EntryActionInfo<{defn_info.inputs_type.name},{defn_info.outputs_type.name}>",
176
+ "name_case": NameCase.preserve,
177
+ }
178
+ for defn_info in defn_infos
179
+ },
180
+ },
181
+ "InputInfo": {
182
+ "type": BaseTypeName.s_object,
183
+ "properties": {
184
+ "value_spec_var": {"type": "String"},
185
+ "variable": {"type": "ui_entry_actions.UiEntryActionVariable"},
186
+ },
187
+ },
188
+ "OutputInfo": {
189
+ "type": BaseTypeName.s_object,
190
+ "properties": {
191
+ "name": {"type": "String"},
192
+ "desc": {"type": "String"},
193
+ "type": {"type": "value_spec.BaseType"},
194
+ },
195
+ },
196
+ "DefinitionInfo": {
197
+ "type": BaseTypeName.s_object,
198
+ "properties": {
199
+ "inputs": {
200
+ "type": "ReadonlyArray<InputInfo>",
201
+ },
202
+ "outputs": {
203
+ "type": "ReadonlyArray<OutputInfo>",
204
+ },
205
+ },
206
+ },
207
+ }
208
+ ctx.namespace.prescan(query_index_type_data)
209
+ ctx.namespace.process(
210
+ builder=builder,
211
+ data=query_index_type_data,
212
+ )
213
+
214
+ defn_lookup_info = {}
215
+ for scope, defn in definitions.items():
216
+ inputs = []
217
+ outputs = []
218
+ for name, input in defn.inputs.items():
219
+ inputs.append(
220
+ serialize_for_api({
221
+ "value_spec_var": snake_to_camel_case(name),
222
+ "variable": input,
223
+ })
224
+ )
225
+ for name, output in defn.outputs.items():
226
+ outputs.append(
227
+ serialize_for_api({
228
+ "name": name,
229
+ "desc": output.description,
230
+ "type": output.vs_type,
231
+ })
232
+ )
233
+ defn_lookup_info[scope] = {"inputs": inputs, "outputs": outputs}
234
+
235
+ defn_lookup_out = f"export const DEFINITION_LOOKUP = {json.dumps(defn_lookup_info, sort_keys=True, indent=2)} as const\n\nexport const DEFINITION_LOOKUP_TYPED = DEFINITION_LOOKUP as Record<UiEntryActionsT.ActionScope, DefinitionInfo>\n"
236
+
237
+ for stype in ctx.namespace.types.values():
238
+ emit_typescript_util.emit_type_ts(
239
+ ctx=ctx,
240
+ stype=stype,
241
+ )
242
+
243
+ import_buffer = StringIO()
244
+ emit_typescript_util.emit_namespace_imports_from_root_ts(
245
+ namespaces=ctx.namespaces,
246
+ out=import_buffer,
247
+ root=_TYPES_ROOT,
248
+ )
249
+
250
+ return rewrite_file(
251
+ content=import_buffer.getvalue() + ctx.out.getvalue() + defn_lookup_out,
252
+ filename=str(index_path),
253
+ )
254
+
255
+
256
+ def generate_entry_actions_typescript(
257
+ *,
258
+ definitions: dict[
259
+ ui_entry_actions_t.ActionScope, ui_entry_actions_t.UiEntryActionDefinition
260
+ ],
261
+ destination_root: Path,
262
+ materials_type_spec_config: Config,
263
+ ) -> None:
264
+ builder = load_types(materials_type_spec_config)
265
+ assert builder is not None
266
+
267
+ definition_buffer = StringIO()
268
+ index_namespace = SpecNamespace(name="index")
269
+ ctx = emit_typescript_util.EmitTypescriptContext(
270
+ out=definition_buffer,
271
+ namespace=index_namespace,
272
+ )
273
+ builder.namespaces[index_namespace.name] = index_namespace
274
+
275
+ defn_infos: list[EntryActionTypeInfo] = []
276
+
277
+ for action_scope, defn in definitions.items():
278
+ defn_infos.append(
279
+ emit_entry_action_definition(
280
+ action_scope=action_scope,
281
+ ctx=ctx,
282
+ defn=defn,
283
+ builder=builder,
284
+ )
285
+ )
286
+
287
+ index_path = _get_types_root(destination_root) / "index.ts"
288
+ emit_query_index(
289
+ ctx=ctx,
290
+ builder=builder,
291
+ defn_infos=defn_infos,
292
+ definitions=definitions,
293
+ index_path=index_path,
294
+ )
@@ -61,3 +61,16 @@ def convert_to_value_spec_type(parsed: ParsedTypePath) -> value_spec_t.ValueType
61
61
  return value_spec_t.ValueType(base_type=mapped.base_type, parameters=parameters)
62
62
 
63
63
  # Our formatter was duplicating the previous line for an unknown reason, this comment blocks that
64
+
65
+
66
+ def convert_from_value_spec_type(
67
+ base_type: value_spec_t.BaseType,
68
+ ) -> str:
69
+ for type_spec_type, mapped_type in TYPE_MAP.items():
70
+ if (
71
+ mapped_type.base_type == base_type
72
+ and mapped_type.param_count == 0
73
+ and mapped_type.variable_param_count is False
74
+ ):
75
+ return type_spec_type
76
+ raise ValueError(f"invalid value spec type {base_type}")
@@ -71,7 +71,8 @@ dependencies = [
71
71
  "grpcio == 1.67.1",
72
72
  "protobuf >= 4.21.1",
73
73
  "azure-storage-blob == 12.*",
74
- "boto3-stubs[essential,ses]==1.*"
74
+ "boto3-stubs[essential,ses]==1.*",
75
+ "msgspec == 0.19.*"
75
76
  ]
76
77
  dynamic = ["version"]
77
78
 
@@ -1,8 +1,9 @@
1
1
  import base64
2
+ import datetime
2
3
  import re
3
4
  import typing
4
5
  from dataclasses import dataclass
5
- from datetime import datetime, timedelta
6
+ from datetime import UTC, timedelta
6
7
  from enum import StrEnum
7
8
  from io import BytesIO
8
9
  from urllib.parse import unquote, urljoin
@@ -145,7 +146,7 @@ class SDKError(Exception):
145
146
  @dataclass(kw_only=True)
146
147
  class OAuthBearerTokenCache:
147
148
  token: str
148
- expires_at: datetime
149
+ expires_at: datetime.datetime
149
150
 
150
151
 
151
152
  @dataclass(kw_only=True)
@@ -274,7 +275,8 @@ class Client(ClientMethods):
274
275
  if (
275
276
  self._oauth_bearer_token_cache is None
276
277
  or (
277
- self._oauth_bearer_token_cache.expires_at - datetime.now()
278
+ self._oauth_bearer_token_cache.expires_at
279
+ - datetime.datetime.now(tz=UTC)
278
280
  ).total_seconds()
279
281
  < OAUTH_REFRESH_WINDOW_SECONDS
280
282
  ):
@@ -290,7 +292,8 @@ class Client(ClientMethods):
290
292
  token_data = oauth_bearer_token_data_parser.parse_storage(data)
291
293
  self._oauth_bearer_token_cache = OAuthBearerTokenCache(
292
294
  token=token_data.access_token,
293
- expires_at=datetime.now() + timedelta(seconds=token_data.expires_in),
295
+ expires_at=datetime.datetime.now(tz=UTC)
296
+ + timedelta(seconds=token_data.expires_in),
294
297
  )
295
298
 
296
299
  return self._oauth_bearer_token_cache.token