UncountablePythonSDK 0.0.171__tar.gz → 0.0.172__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (430) hide show
  1. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/PKG-INFO +6 -8
  2. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/UncountablePythonSDK.egg-info/PKG-INFO +6 -8
  3. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/UncountablePythonSDK.egg-info/SOURCES.txt +11 -4
  4. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/UncountablePythonSDK.egg-info/requires.txt +4 -6
  5. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/integration-server/jobs/materials_auto/example_instrument.py +1 -1
  6. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/integration-server/pyproject.toml +3 -4
  7. uncountablepythonsdk-0.0.172/pkgs/argument_parser/__init__.py +47 -0
  8. uncountablepythonsdk-0.0.172/pkgs/argument_parser/cached_parser.py +56 -0
  9. uncountablepythonsdk-0.0.172/pkgs/argument_parser/parser_base.py +42 -0
  10. uncountablepythonsdk-0.0.172/pkgs/argument_parser/parser_builder.py +52 -0
  11. uncountablepythonsdk-0.0.172/pkgs/argument_parser/parser_cache.py +30 -0
  12. uncountablepythonsdk-0.0.172/pkgs/argument_parser/parser_function_type.py +6 -0
  13. uncountablepythonsdk-0.0.171/pkgs/argument_parser/argument_parser.py → uncountablepythonsdk-0.0.172/pkgs/argument_parser/parser_inner.py +65 -199
  14. uncountablepythonsdk-0.0.172/pkgs/argument_parser/parser_options.py +49 -0
  15. uncountablepythonsdk-0.0.172/pkgs/argument_parser/type_predicates.py +45 -0
  16. uncountablepythonsdk-0.0.172/pkgs/filesystem_utils/__init__.py +34 -0
  17. uncountablepythonsdk-0.0.172/pkgs/filesystem_utils/_sftp_connection.py +168 -0
  18. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/filesystem_utils/_sftp_session.py +9 -10
  19. uncountablepythonsdk-0.0.172/pkgs/serialization/__init__.py +26 -0
  20. uncountablepythonsdk-0.0.172/pkgs/serialization/annotation.py +95 -0
  21. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/serialization/serial_class.py +6 -2
  22. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/serialization/serial_generic.py +2 -2
  23. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/serialization/serial_union.py +18 -5
  24. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/serialization/yaml.py +1 -6
  25. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/serialization_util/__init__.py +1 -2
  26. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/serialization_util/serialization_helpers.py +2 -2
  27. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/actions_registry/__main__.py +10 -1
  28. uncountablepythonsdk-0.0.172/pkgs/type_spec/actions_registry/emit_python.py +92 -0
  29. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/emit_python.py +6 -0
  30. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/load_types.py +35 -25
  31. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/non_discriminated_union_exceptions.py +2 -1
  32. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/open_api_util.py +5 -5
  33. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/type_info/emit_type_info.py +2 -2
  34. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/value_spec/__main__.py +53 -21
  35. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/value_spec/emit_python.py +6 -1
  36. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pyproject.toml +5 -7
  37. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/core/client.py +34 -1
  38. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/cli.py +1 -2
  39. uncountablepythonsdk-0.0.172/uncountable/integration/http_server/__init__.py +7 -0
  40. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/job_scheduler.py +4 -1
  41. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/telemetry.py +29 -11
  42. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/__init__.py +2 -0
  43. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/batch/execute_batch.py +2 -0
  44. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/batch/execute_batch_load_async.py +2 -0
  45. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/chemical/convert_chemical_formats.py +2 -0
  46. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/condition_parameters/upsert_condition_match.py +2 -0
  47. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/condition_parameters/upsert_condition_matches.py +2 -0
  48. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/create_entities.py +2 -0
  49. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/create_entity.py +2 -0
  50. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/create_or_update_entities.py +2 -0
  51. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/create_or_update_entity.py +2 -0
  52. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/export_entities.py +2 -0
  53. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/get_entities_data.py +2 -0
  54. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/grant_entity_permissions.py +2 -0
  55. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/list_aggregate.py +2 -0
  56. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/list_entities.py +2 -0
  57. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/lock_entity.py +2 -0
  58. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/lookup_entity.py +2 -0
  59. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/resolve_entity_ids.py +2 -0
  60. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/set_barcode.py +2 -0
  61. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/set_entities_field_values.py +2 -0
  62. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/set_entity_field_values.py +2 -0
  63. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/set_values.py +2 -0
  64. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/transition_entity_phase.py +2 -0
  65. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/unlock_entity.py +2 -0
  66. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/equipment/associate_equipment_input.py +2 -0
  67. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/field_options/upsert_field_options.py +2 -0
  68. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/file_folders/add_file_to_folder.py +2 -0
  69. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/file_folders/modify_file_system.py +2 -0
  70. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/files/download_file.py +2 -0
  71. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/id_source/list_id_source.py +2 -0
  72. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/id_source/match_id_source.py +2 -0
  73. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/input_groups/get_input_group_names.py +2 -0
  74. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/inputs/create_inputs.py +2 -0
  75. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/inputs/get_input_data.py +2 -0
  76. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/inputs/get_input_names.py +2 -0
  77. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/inputs/get_inputs_data.py +2 -0
  78. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/inputs/set_input_attribute_values.py +2 -0
  79. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/inputs/set_input_category.py +2 -0
  80. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/inputs/set_input_subcategories.py +2 -0
  81. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/inputs/set_intermediate_type.py +2 -0
  82. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/integrations/publish_realtime_data.py +2 -0
  83. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/integrations/push_notification.py +2 -0
  84. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/integrations/register_sockets_token.py +2 -0
  85. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/listing/export_listing.py +2 -0
  86. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/listing/fetch_listing.py +2 -0
  87. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/material_families/update_entity_material_families.py +2 -0
  88. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/notebooks/add_notebook_content.py +4 -0
  89. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/notebooks/get_notebook_content.py +2 -0
  90. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/output_parameters/swap_output_condition_parameters.py +2 -0
  91. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/outputs/get_output_data.py +2 -0
  92. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/outputs/get_output_names.py +2 -0
  93. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/outputs/get_output_organization.py +2 -0
  94. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/outputs/resolve_output_conditions.py +2 -0
  95. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/outputs/update_output_condition_parameter.py +2 -0
  96. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/permissions/set_core_permissions.py +2 -0
  97. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/permissions/set_entity_permission.py +2 -0
  98. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/project/get_projects.py +2 -0
  99. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/project/get_projects_data.py +2 -0
  100. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipe_links/create_recipe_link.py +2 -0
  101. uncountablepythonsdk-0.0.172/uncountable/types/api/recipe_links/create_recipe_links.py +57 -0
  102. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipe_links/remove_recipe_link.py +2 -0
  103. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +2 -0
  104. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/add_recipe_to_project.py +2 -0
  105. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/add_time_series_data.py +2 -0
  106. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/archive_recipes.py +2 -0
  107. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/associate_recipe_as_input.py +2 -0
  108. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/associate_recipe_as_lot.py +2 -0
  109. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/clear_recipe_outputs.py +2 -0
  110. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/create_mix_order.py +2 -0
  111. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/create_recipe.py +2 -0
  112. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/create_recipes.py +2 -0
  113. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +2 -0
  114. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/edit_recipe_inputs.py +61 -2
  115. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/get_column_calculation_values.py +2 -0
  116. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/get_curve.py +2 -0
  117. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/get_recipe_calculations.py +2 -0
  118. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/get_recipe_links.py +2 -0
  119. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/get_recipe_names.py +2 -0
  120. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/get_recipe_output_metadata.py +2 -0
  121. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/get_recipes_data.py +16 -0
  122. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/lock_recipes.py +2 -0
  123. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/remove_recipe_from_project.py +2 -0
  124. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/set_recipe_inputs.py +2 -0
  125. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/set_recipe_metadata.py +2 -0
  126. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/set_recipe_output_annotations.py +2 -0
  127. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/set_recipe_output_file.py +2 -0
  128. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/set_recipe_outputs.py +2 -0
  129. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/set_recipe_tags.py +2 -0
  130. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/set_recipe_total.py +2 -0
  131. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/unarchive_recipes.py +2 -0
  132. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/unlock_recipes.py +2 -0
  133. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/upsert_recipe_workflow_step.py +2 -0
  134. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/upsert_step_relationships.py +2 -0
  135. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/runsheet/complete_async_upload.py +2 -0
  136. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/runsheet/export_default_runsheet.py +2 -0
  137. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/triggers/run_trigger.py +2 -0
  138. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/uploader/complete_async_parse.py +2 -0
  139. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/uploader/invoke_uploader.py +2 -0
  140. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/user/get_current_user_info.py +2 -0
  141. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/async_batch_processor.py +1 -1
  142. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/client_base.py +29 -2
  143. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/entity_t.py +18 -0
  144. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_workflow_step_types_t.py +2 -2
  145. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/request_headers.py +1 -0
  146. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/request_headers_t.py +6 -0
  147. uncountablepythonsdk-0.0.171/.python-version +0 -1
  148. uncountablepythonsdk-0.0.171/pkgs/argument_parser/__init__.py +0 -17
  149. uncountablepythonsdk-0.0.171/pkgs/argument_parser/_is_enum.py +0 -11
  150. uncountablepythonsdk-0.0.171/pkgs/argument_parser/_is_namedtuple.py +0 -14
  151. uncountablepythonsdk-0.0.171/pkgs/filesystem_utils/__init__.py +0 -24
  152. uncountablepythonsdk-0.0.171/pkgs/serialization/__init__.py +0 -18
  153. uncountablepythonsdk-0.0.171/pkgs/serialization/annotation.py +0 -64
  154. uncountablepythonsdk-0.0.171/uncountable/integration/http_server/__init__.py +0 -5
  155. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/.github/workflows/documentation.yml +0 -0
  156. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/.github/workflows/publish.yml +0 -0
  157. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/.gitignore +0 -0
  158. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/README.md +0 -0
  159. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
  160. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
  161. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/.gitignore +0 -0
  162. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/conf.py +0 -0
  163. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/index.md +0 -0
  164. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/integration_examples/add_file_to_folder.md +0 -0
  165. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/integration_examples/create_ingredient.md +0 -0
  166. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/integration_examples/create_output.md +0 -0
  167. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/integration_examples/index.md +0 -0
  168. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/integration_examples/upload_file.md +0 -0
  169. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/justfile +0 -0
  170. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/requirements.txt +0 -0
  171. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/static/favicons/android-chrome-192x192.png +0 -0
  172. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/static/favicons/android-chrome-512x512.png +0 -0
  173. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/static/favicons/apple-touch-icon.png +0 -0
  174. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/static/favicons/browserconfig.xml +0 -0
  175. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/static/favicons/favicon-16x16.png +0 -0
  176. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/static/favicons/favicon-32x32.png +0 -0
  177. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/static/favicons/manifest.json +0 -0
  178. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/static/favicons/mstile-150x150.png +0 -0
  179. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/static/favicons/safari-pinned-tab.svg +0 -0
  180. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/docs/static/logo_blue.png +0 -0
  181. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/async_batch.py +0 -0
  182. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/async_batch_large_parse.py +0 -0
  183. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/basic_auth.py +0 -0
  184. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/create_entity.py +0 -0
  185. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/create_ingredient_sdk.py +0 -0
  186. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/download_files.py +0 -0
  187. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/edit_recipe_inputs.py +0 -0
  188. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/integration-server/jobs/materials_auto/concurrent_cron.py +0 -0
  189. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
  190. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/integration-server/jobs/materials_auto/example_http.py +0 -0
  191. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/integration-server/jobs/materials_auto/example_parse.py +0 -0
  192. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/integration-server/jobs/materials_auto/example_predictions.py +0 -0
  193. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +0 -0
  194. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
  195. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
  196. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/invoke_uploader.py +0 -0
  197. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/oauth.py +0 -0
  198. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/set_input_pdf_attribute.py +0 -0
  199. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/set_recipe_metadata_file.py +0 -0
  200. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/set_recipe_output_file_sdk.py +0 -0
  201. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/examples/upload_files.py +0 -0
  202. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/__init__.py +0 -0
  203. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/argument_parser/case_convert.py +0 -0
  204. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/argument_parser/parser_error.py +0 -0
  205. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/filesystem_utils/_blob_session.py +0 -0
  206. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/filesystem_utils/_file_share_session.py +0 -0
  207. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
  208. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/filesystem_utils/_local_session.py +0 -0
  209. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/filesystem_utils/_s3_session.py +0 -0
  210. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/filesystem_utils/file_type_utils.py +0 -0
  211. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/filesystem_utils/filesystem_session.py +0 -0
  212. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/py.typed +0 -0
  213. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/serialization/missing_sentry.py +0 -0
  214. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/serialization/opaque_key.py +0 -0
  215. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/serialization/serial_alias.py +0 -0
  216. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/serialization/unknown.py +0 -0
  217. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
  218. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
  219. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/serialization_util/dataclasses.py +0 -0
  220. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/strenum_compat/__init__.py +0 -0
  221. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/strenum_compat/strenum_compat.py +0 -0
  222. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/__init__.py +0 -0
  223. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/__main__.py +0 -0
  224. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/actions_registry/__init__.py +0 -0
  225. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
  226. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/builder.py +0 -0
  227. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/builder_types.py +0 -0
  228. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/config.py +0 -0
  229. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/cross_output_links.py +0 -0
  230. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/emit_io_ts.py +0 -0
  231. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/emit_open_api.py +0 -0
  232. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/emit_open_api_util.py +0 -0
  233. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/emit_typescript.py +0 -0
  234. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/emit_typescript_util.py +0 -0
  235. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/parts/base.py.prepart +0 -0
  236. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/parts/base.ts.prepart +0 -0
  237. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/test.py +0 -0
  238. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/type_info/__main__.py +0 -0
  239. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/ui_entry_actions/__init__.py +0 -0
  240. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +0 -0
  241. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/util.py +0 -0
  242. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/value_spec/__init__.py +0 -0
  243. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/value_spec/convert_type.py +0 -0
  244. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/pkgs/type_spec/value_spec/types.py +0 -0
  245. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/setup.cfg +0 -0
  246. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/__init__.py +0 -0
  247. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/core/__init__.py +0 -0
  248. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/core/async_batch.py +0 -0
  249. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/core/environment.py +0 -0
  250. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/core/file_upload.py +0 -0
  251. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/core/query/__init__.py +0 -0
  252. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/core/query/builder.py +0 -0
  253. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/core/query/column.py +0 -0
  254. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/core/query/row.py +0 -0
  255. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/core/query/types.py +0 -0
  256. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/core/types.py +0 -0
  257. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/__init__.py +0 -0
  258. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/construct_client.py +0 -0
  259. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/cron.py +0 -0
  260. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/db/__init__.py +0 -0
  261. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/db/connect.py +0 -0
  262. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/db/session.py +0 -0
  263. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/entrypoint.py +0 -0
  264. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/executors/__init__.py +0 -0
  265. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/executors/executors.py +0 -0
  266. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/executors/generic_upload_executor.py +0 -0
  267. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/executors/script_executor.py +0 -0
  268. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/http_server/types.py +0 -0
  269. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/job.py +0 -0
  270. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/__init__.py +0 -0
  271. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
  272. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
  273. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
  274. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/command_server/constants.py +0 -0
  275. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  276. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
  277. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
  278. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
  279. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
  280. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/command_server/types.py +0 -0
  281. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
  282. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
  283. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
  284. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/datastore/model.py +0 -0
  285. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/queue_runner.py +0 -0
  286. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/types.py +0 -0
  287. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/queue_runner/worker.py +0 -0
  288. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/request_context.py +0 -0
  289. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/scan_profiles.py +0 -0
  290. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/scheduler.py +0 -0
  291. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/secret_retrieval/__init__.py +0 -0
  292. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
  293. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/server.py +0 -0
  294. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/integration/webhook_server/entrypoint.py +0 -0
  295. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/py.typed +0 -0
  296. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/__init__.py +0 -0
  297. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/batch/__init__.py +0 -0
  298. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/chemical/__init__.py +0 -0
  299. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/condition_parameters/__init__.py +0 -0
  300. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/entity/__init__.py +0 -0
  301. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/equipment/__init__.py +0 -0
  302. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/field_options/__init__.py +0 -0
  303. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/file_folders/__init__.py +0 -0
  304. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/files/__init__.py +0 -0
  305. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/id_source/__init__.py +0 -0
  306. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/input_groups/__init__.py +0 -0
  307. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/inputs/__init__.py +0 -0
  308. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/integrations/__init__.py +0 -0
  309. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/listing/__init__.py +0 -0
  310. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/material_families/__init__.py +0 -0
  311. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/notebooks/__init__.py +0 -0
  312. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/output_parameters/__init__.py +0 -0
  313. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/outputs/__init__.py +0 -0
  314. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/permissions/__init__.py +0 -0
  315. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/project/__init__.py +0 -0
  316. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipe_links/__init__.py +0 -0
  317. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
  318. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/recipes/__init__.py +0 -0
  319. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/runsheet/__init__.py +0 -0
  320. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/triggers/__init__.py +0 -0
  321. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/uploader/__init__.py +0 -0
  322. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/api/user/__init__.py +0 -0
  323. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/async_batch.py +0 -0
  324. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/async_batch_t.py +0 -0
  325. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/async_jobs.py +0 -0
  326. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/async_jobs_t.py +0 -0
  327. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/auth_retrieval.py +0 -0
  328. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/auth_retrieval_t.py +0 -0
  329. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/base.py +0 -0
  330. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/base_t.py +0 -0
  331. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/calculations.py +0 -0
  332. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/calculations_t.py +0 -0
  333. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/chemical_structure.py +0 -0
  334. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/chemical_structure_t.py +0 -0
  335. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/client_config.py +0 -0
  336. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/client_config_t.py +0 -0
  337. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/condition_match.py +0 -0
  338. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/condition_match_t.py +0 -0
  339. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/curves.py +0 -0
  340. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/curves_t.py +0 -0
  341. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/data.py +0 -0
  342. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/data_t.py +0 -0
  343. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/entity.py +0 -0
  344. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/experiment_groups.py +0 -0
  345. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/experiment_groups_t.py +0 -0
  346. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/exports.py +0 -0
  347. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/exports_t.py +0 -0
  348. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/field_values.py +0 -0
  349. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/field_values_t.py +0 -0
  350. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/fields.py +0 -0
  351. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/fields_t.py +0 -0
  352. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/generic_upload.py +0 -0
  353. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/generic_upload_t.py +0 -0
  354. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/id_source.py +0 -0
  355. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/id_source_t.py +0 -0
  356. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/identifier.py +0 -0
  357. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/identifier_t.py +0 -0
  358. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/input_attributes.py +0 -0
  359. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/input_attributes_t.py +0 -0
  360. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/inputs.py +0 -0
  361. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/inputs_t.py +0 -0
  362. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/integration_server.py +0 -0
  363. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/integration_server_t.py +0 -0
  364. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/integration_session.py +0 -0
  365. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/integration_session_t.py +0 -0
  366. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/integrations.py +0 -0
  367. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/integrations_t.py +0 -0
  368. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/job_definition.py +0 -0
  369. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/job_definition_t.py +0 -0
  370. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/listing.py +0 -0
  371. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/listing_t.py +0 -0
  372. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/notices.py +0 -0
  373. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/notices_t.py +0 -0
  374. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/notifications.py +0 -0
  375. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/notifications_t.py +0 -0
  376. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/outputs.py +0 -0
  377. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/outputs_t.py +0 -0
  378. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/overrides.py +0 -0
  379. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/overrides_t.py +0 -0
  380. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/permissions.py +0 -0
  381. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/permissions_t.py +0 -0
  382. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/phases.py +0 -0
  383. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/phases_t.py +0 -0
  384. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/post_base.py +0 -0
  385. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/post_base_t.py +0 -0
  386. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/queued_job.py +0 -0
  387. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/queued_job_t.py +0 -0
  388. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_identifiers.py +0 -0
  389. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_identifiers_t.py +0 -0
  390. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_inputs.py +0 -0
  391. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_inputs_t.py +0 -0
  392. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_links.py +0 -0
  393. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_links_t.py +0 -0
  394. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_metadata.py +0 -0
  395. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_metadata_t.py +0 -0
  396. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_output_metadata.py +0 -0
  397. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_output_metadata_t.py +0 -0
  398. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_step_relationships.py +0 -0
  399. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_step_relationships_t.py +0 -0
  400. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_tags.py +0 -0
  401. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_tags_t.py +0 -0
  402. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_workflow_step_types.py +0 -0
  403. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_workflow_steps.py +0 -0
  404. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipe_workflow_steps_t.py +0 -0
  405. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipes.py +0 -0
  406. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/recipes_t.py +0 -0
  407. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/response.py +0 -0
  408. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/response_t.py +0 -0
  409. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/runsheet.py +0 -0
  410. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/runsheet_format.py +0 -0
  411. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/runsheet_format_t.py +0 -0
  412. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/runsheet_t.py +0 -0
  413. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/secret_retrieval.py +0 -0
  414. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/secret_retrieval_t.py +0 -0
  415. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/sockets.py +0 -0
  416. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/sockets_t.py +0 -0
  417. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/specs.py +0 -0
  418. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/specs_t.py +0 -0
  419. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/step_relationships.py +0 -0
  420. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/step_relationships_t.py +0 -0
  421. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/units.py +0 -0
  422. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/units_t.py +0 -0
  423. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/uploader.py +0 -0
  424. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/uploader_t.py +0 -0
  425. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/users.py +0 -0
  426. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/users_t.py +0 -0
  427. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/webhook_job.py +0 -0
  428. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/webhook_job_t.py +0 -0
  429. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/workflows.py +0 -0
  430. {uncountablepythonsdk-0.0.171 → uncountablepythonsdk-0.0.172}/uncountable/types/workflows_t.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.171
3
+ Version: 0.0.172
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
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3
14
14
  Classifier: Topic :: Software Development
15
15
  Classifier: Topic :: Utilities
16
16
  Classifier: Typing :: Typed
17
- Requires-Python: >=3.11
17
+ Requires-Python: >=3.12
18
18
  Description-Content-Type: text/markdown
19
19
  Requires-Dist: aiotus==1.*
20
20
  Requires-Dist: aiohttp==3.*
@@ -22,16 +22,14 @@ Requires-Dist: requests==2.*
22
22
  Requires-Dist: SQLAlchemy>=1.4.0
23
23
  Requires-Dist: APScheduler==3.*
24
24
  Requires-Dist: python-dateutil==2.*
25
- Requires-Dist: shelljob==0.*
26
25
  Requires-Dist: PyYAML==6.*
27
26
  Requires-Dist: google-api-python-client==2.*
28
27
  Requires-Dist: tqdm==4.*
29
- Requires-Dist: pysftp==0.*
30
28
  Requires-Dist: opentelemetry-api==1.*
31
29
  Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.*
32
30
  Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.*
33
31
  Requires-Dist: opentelemetry-sdk>=1.39.1
34
- Requires-Dist: paramiko==3.*
32
+ Requires-Dist: paramiko==5.*
35
33
  Requires-Dist: boto3==1.*
36
34
  Requires-Dist: flask==3.*
37
35
  Requires-Dist: simplejson==3.*
@@ -40,12 +38,12 @@ Requires-Dist: protobuf>=4.21.1
40
38
  Requires-Dist: azure-storage-blob==12.*
41
39
  Requires-Dist: azure-storage-file-share==12.*
42
40
  Requires-Dist: boto3-stubs[essential,ses]==1.*
43
- Requires-Dist: msgspec<0.21,>=0.19
44
- Requires-Dist: tabulate==0.9.0
41
+ Requires-Dist: msgspec<0.22,>=0.21
42
+ Requires-Dist: tabulate==0.10.0
45
43
  Requires-Dist: types-psutil~=7.2.1
46
44
  Requires-Dist: psutil>=5.9.0
47
45
  Provides-Extra: test
48
- Requires-Dist: mypy==1.*; extra == "test"
46
+ Requires-Dist: mypy>=1; extra == "test"
49
47
  Requires-Dist: ruff==0.*; extra == "test"
50
48
  Requires-Dist: pytest>=8; extra == "test"
51
49
  Requires-Dist: coverage[toml]==7.*; extra == "test"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.171
3
+ Version: 0.0.172
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
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3
14
14
  Classifier: Topic :: Software Development
15
15
  Classifier: Topic :: Utilities
16
16
  Classifier: Typing :: Typed
17
- Requires-Python: >=3.11
17
+ Requires-Python: >=3.12
18
18
  Description-Content-Type: text/markdown
19
19
  Requires-Dist: aiotus==1.*
20
20
  Requires-Dist: aiohttp==3.*
@@ -22,16 +22,14 @@ Requires-Dist: requests==2.*
22
22
  Requires-Dist: SQLAlchemy>=1.4.0
23
23
  Requires-Dist: APScheduler==3.*
24
24
  Requires-Dist: python-dateutil==2.*
25
- Requires-Dist: shelljob==0.*
26
25
  Requires-Dist: PyYAML==6.*
27
26
  Requires-Dist: google-api-python-client==2.*
28
27
  Requires-Dist: tqdm==4.*
29
- Requires-Dist: pysftp==0.*
30
28
  Requires-Dist: opentelemetry-api==1.*
31
29
  Requires-Dist: opentelemetry-exporter-otlp-proto-common==1.*
32
30
  Requires-Dist: opentelemetry-exporter-otlp-proto-http==1.*
33
31
  Requires-Dist: opentelemetry-sdk>=1.39.1
34
- Requires-Dist: paramiko==3.*
32
+ Requires-Dist: paramiko==5.*
35
33
  Requires-Dist: boto3==1.*
36
34
  Requires-Dist: flask==3.*
37
35
  Requires-Dist: simplejson==3.*
@@ -40,12 +38,12 @@ Requires-Dist: protobuf>=4.21.1
40
38
  Requires-Dist: azure-storage-blob==12.*
41
39
  Requires-Dist: azure-storage-file-share==12.*
42
40
  Requires-Dist: boto3-stubs[essential,ses]==1.*
43
- Requires-Dist: msgspec<0.21,>=0.19
44
- Requires-Dist: tabulate==0.9.0
41
+ Requires-Dist: msgspec<0.22,>=0.21
42
+ Requires-Dist: tabulate==0.10.0
45
43
  Requires-Dist: types-psutil~=7.2.1
46
44
  Requires-Dist: psutil>=5.9.0
47
45
  Provides-Extra: test
48
- Requires-Dist: mypy==1.*; extra == "test"
46
+ Requires-Dist: mypy>=1; extra == "test"
49
47
  Requires-Dist: ruff==0.*; extra == "test"
50
48
  Requires-Dist: pytest>=8; extra == "test"
51
49
  Requires-Dist: coverage[toml]==7.*; extra == "test"
@@ -1,5 +1,4 @@
1
1
  .gitignore
2
- .python-version
3
2
  README.md
4
3
  pyproject.toml
5
4
  .github/workflows/documentation.yml
@@ -55,17 +54,23 @@ examples/integration-server/jobs/materials_auto/profile.yaml
55
54
  pkgs/__init__.py
56
55
  pkgs/py.typed
57
56
  pkgs/argument_parser/__init__.py
58
- pkgs/argument_parser/_is_enum.py
59
- pkgs/argument_parser/_is_namedtuple.py
60
- pkgs/argument_parser/argument_parser.py
57
+ pkgs/argument_parser/cached_parser.py
61
58
  pkgs/argument_parser/case_convert.py
59
+ pkgs/argument_parser/parser_base.py
60
+ pkgs/argument_parser/parser_builder.py
61
+ pkgs/argument_parser/parser_cache.py
62
62
  pkgs/argument_parser/parser_error.py
63
+ pkgs/argument_parser/parser_function_type.py
64
+ pkgs/argument_parser/parser_inner.py
65
+ pkgs/argument_parser/parser_options.py
66
+ pkgs/argument_parser/type_predicates.py
63
67
  pkgs/filesystem_utils/__init__.py
64
68
  pkgs/filesystem_utils/_blob_session.py
65
69
  pkgs/filesystem_utils/_file_share_session.py
66
70
  pkgs/filesystem_utils/_gdrive_session.py
67
71
  pkgs/filesystem_utils/_local_session.py
68
72
  pkgs/filesystem_utils/_s3_session.py
73
+ pkgs/filesystem_utils/_sftp_connection.py
69
74
  pkgs/filesystem_utils/_sftp_session.py
70
75
  pkgs/filesystem_utils/file_type_utils.py
71
76
  pkgs/filesystem_utils/filesystem_session.py
@@ -105,6 +110,7 @@ pkgs/type_spec/test.py
105
110
  pkgs/type_spec/util.py
106
111
  pkgs/type_spec/actions_registry/__init__.py
107
112
  pkgs/type_spec/actions_registry/__main__.py
113
+ pkgs/type_spec/actions_registry/emit_python.py
108
114
  pkgs/type_spec/actions_registry/emit_typescript.py
109
115
  pkgs/type_spec/parts/base.py.prepart
110
116
  pkgs/type_spec/parts/base.ts.prepart
@@ -366,6 +372,7 @@ uncountable/types/api/project/get_projects.py
366
372
  uncountable/types/api/project/get_projects_data.py
367
373
  uncountable/types/api/recipe_links/__init__.py
368
374
  uncountable/types/api/recipe_links/create_recipe_link.py
375
+ uncountable/types/api/recipe_links/create_recipe_links.py
369
376
  uncountable/types/api/recipe_links/remove_recipe_link.py
370
377
  uncountable/types/api/recipe_metadata/__init__.py
371
378
  uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py
@@ -4,16 +4,14 @@ requests==2.*
4
4
  SQLAlchemy>=1.4.0
5
5
  APScheduler==3.*
6
6
  python-dateutil==2.*
7
- shelljob==0.*
8
7
  PyYAML==6.*
9
8
  google-api-python-client==2.*
10
9
  tqdm==4.*
11
- pysftp==0.*
12
10
  opentelemetry-api==1.*
13
11
  opentelemetry-exporter-otlp-proto-common==1.*
14
12
  opentelemetry-exporter-otlp-proto-http==1.*
15
13
  opentelemetry-sdk>=1.39.1
16
- paramiko==3.*
14
+ paramiko==5.*
17
15
  boto3==1.*
18
16
  flask==3.*
19
17
  simplejson==3.*
@@ -22,13 +20,13 @@ protobuf>=4.21.1
22
20
  azure-storage-blob==12.*
23
21
  azure-storage-file-share==12.*
24
22
  boto3-stubs[essential,ses]==1.*
25
- msgspec<0.21,>=0.19
26
- tabulate==0.9.0
23
+ msgspec<0.22,>=0.21
24
+ tabulate==0.10.0
27
25
  types-psutil~=7.2.1
28
26
  psutil>=5.9.0
29
27
 
30
28
  [test]
31
- mypy==1.*
29
+ mypy>=1
32
30
  ruff==0.*
33
31
  pytest>=8
34
32
  coverage[toml]==7.*
@@ -14,7 +14,7 @@ from uncountable.types.integration_session_t import IntegrationSessionInstrument
14
14
  from websockets.sync.client import connect
15
15
  from websockets.typing import Data
16
16
 
17
- from pkgs.argument_parser.argument_parser import CachedParser
17
+ from pkgs.argument_parser import CachedParser
18
18
  from pkgs.serialization_util import serialize_for_api
19
19
 
20
20
 
@@ -5,19 +5,18 @@ name = "integration-server-testing"
5
5
  # end_project_name
6
6
  dynamic = ["version"]
7
7
  dependencies = [
8
- "mypy == 1.*",
8
+ "mypy >= 2.1.0, < 3",
9
9
  "ruff == 0.*",
10
10
  "openpyxl == 3.*",
11
11
  "more_itertools ==11.*",
12
- "types-paramiko ==4.0.0.20260402",
12
+ "types-paramiko ==4.0.0.20260518",
13
13
  "types-openpyxl == 3.*",
14
- "types-pysftp == 0.*",
15
14
  "types-pytz ==2026.*",
16
15
  "types-requests == 2.*",
17
16
  "types-simplejson == 3.*",
18
17
  "pandas-stubs",
19
18
  "xlrd == 2.*",
20
- "msgspec ==0.20.*",
19
+ "msgspec ==0.21.*",
21
20
  "websockets==16.0",
22
21
  ]
23
22
 
@@ -0,0 +1,47 @@
1
+ # CLOSED MODULE
2
+
3
+ __all__ = [
4
+ "CachedParser",
5
+ "ParserBase",
6
+ "ParserEnumError",
7
+ "ParserError",
8
+ "ParserExtraFieldsError",
9
+ "ParserFunction",
10
+ "ParserOptions",
11
+ "ParserTypeError",
12
+ "SourceEncoding",
13
+ "build_parser",
14
+ "camel_to_snake_case",
15
+ "is_missing",
16
+ "is_optional",
17
+ "is_string_enum_class",
18
+ "is_union",
19
+ "kebab_to_pascal_case",
20
+ "snake_to_camel_case",
21
+ ]
22
+
23
+ from .cached_parser import CachedParser as CachedParser
24
+ from .case_convert import (
25
+ camel_to_snake_case as camel_to_snake_case,
26
+ kebab_to_pascal_case as kebab_to_pascal_case,
27
+ snake_to_camel_case as snake_to_camel_case,
28
+ )
29
+ from .parser_base import ParserBase as ParserBase
30
+ from .parser_builder import build_parser as build_parser
31
+ from .parser_error import (
32
+ ParserEnumError as ParserEnumError,
33
+ ParserError as ParserError,
34
+ ParserExtraFieldsError as ParserExtraFieldsError,
35
+ ParserTypeError as ParserTypeError,
36
+ )
37
+ from .parser_function_type import ParserFunction as ParserFunction
38
+ from .parser_options import (
39
+ ParserOptions as ParserOptions,
40
+ SourceEncoding as SourceEncoding,
41
+ )
42
+ from .type_predicates import (
43
+ is_missing as is_missing,
44
+ is_optional as is_optional,
45
+ is_string_enum_class as is_string_enum_class,
46
+ is_union as is_union,
47
+ )
@@ -0,0 +1,56 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ from pkgs.serialization import SerialType
6
+
7
+ from .parser_base import ParserBase
8
+ from .parser_builder import build_parser
9
+ from .parser_function_type import ParserFunction
10
+ from .parser_options import ParserOptions
11
+
12
+ T = typing.TypeVar("T")
13
+
14
+
15
+ class CachedParser(ParserBase[T], typing.Generic[T]):
16
+ def __init__(
17
+ self,
18
+ args: SerialType[T],
19
+ strict_property_parsing: bool = False,
20
+ ):
21
+ self.arguments = args
22
+ self.parser_api: ParserFunction[T] | None = None
23
+ self.parser_storage: ParserFunction[T] | None = None
24
+ self.strict_property_parsing = strict_property_parsing
25
+
26
+ def parse_api(self, args: typing.Any) -> T:
27
+ """
28
+ Parses data coming from an API/Endpoint
29
+
30
+ NOTE: Some places use this to parse storage data due to backwards
31
+ compatibility. If your data is coming from the DB or a file, it is
32
+ preferred to use parse_storage.
33
+ """
34
+ if self.parser_api is None:
35
+ self.parser_api = build_parser(
36
+ self.arguments,
37
+ ParserOptions.Api(
38
+ strict_property_parsing=self.strict_property_parsing,
39
+ ),
40
+ )
41
+ assert self.parser_api is not None
42
+ return self.parser_api(args)
43
+
44
+ def parse_storage(self, args: typing.Any) -> T:
45
+ """
46
+ Parses data coming from the database or file.
47
+ """
48
+ if self.parser_storage is None:
49
+ self.parser_storage = build_parser(
50
+ self.arguments,
51
+ ParserOptions.Storage(
52
+ strict_property_parsing=self.strict_property_parsing,
53
+ ),
54
+ )
55
+ assert self.parser_storage is not None
56
+ return self.parser_storage(args)
@@ -0,0 +1,42 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+ from abc import ABC, abstractmethod
5
+ from importlib import resources
6
+
7
+ import msgspec.yaml
8
+
9
+ from .parser_options import SourceEncoding
10
+
11
+ T = typing.TypeVar("T")
12
+
13
+
14
+ class ParserBase(ABC, typing.Generic[T]):
15
+ def parse_from_encoding(
16
+ self,
17
+ args: typing.Any,
18
+ *,
19
+ source_encoding: SourceEncoding,
20
+ ) -> T:
21
+ match source_encoding:
22
+ case SourceEncoding.API:
23
+ return self.parse_api(args)
24
+ case SourceEncoding.STORAGE:
25
+ return self.parse_storage(args)
26
+ case _:
27
+ typing.assert_never(source_encoding)
28
+
29
+ # IMPROVE: Args would be better typed as "object"
30
+ @abstractmethod
31
+ def parse_storage(self, args: typing.Any) -> T: ...
32
+
33
+ @abstractmethod
34
+ def parse_api(self, args: typing.Any) -> T: ...
35
+
36
+ def parse_yaml_file(self, path: str) -> T:
37
+ with open(path, encoding="utf-8") as data_in:
38
+ return self.parse_storage(msgspec.yaml.decode(data_in.read()))
39
+
40
+ def parse_yaml_resource(self, package: resources.Package, resource: str) -> T:
41
+ with resources.open_text(package, resource) as fp:
42
+ return self.parse_storage(msgspec.yaml.decode(fp.read()))
@@ -0,0 +1,52 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+ from collections import defaultdict
5
+
6
+ from pkgs.serialization import SerialType
7
+
8
+ from .parser_cache import ParserCache, ParserCacheManager
9
+ from .parser_function_type import ParserFunction
10
+ from .parser_inner import build_parser_inner
11
+ from .parser_options import ParserContext, ParserOptions
12
+
13
+ T = typing.TypeVar("T")
14
+
15
+ _CACHE_MAP: dict[ParserOptions, ParserCache] = defaultdict(ParserCache)
16
+
17
+
18
+ def build_parser(
19
+ parsed_type: SerialType[T],
20
+ options: ParserOptions,
21
+ ) -> ParserFunction[T]:
22
+ """
23
+ Consider using CachedParser to provide a cleaner API for storage and API
24
+ data parsing.
25
+ """
26
+
27
+ # Keep a cache per ParserOptions type, as they produce distinct parsers
28
+ global_cache = _CACHE_MAP[options]
29
+
30
+ context = ParserContext(options=options, cache=ParserCacheManager(global_cache))
31
+
32
+ # PEP 695 ``type X[T] = ...`` aliases (and their subscripted forms) are not
33
+ # ``type`` instances, so they can't share the top-level cache keyed on
34
+ # ``type[Any]``. Skip the top-level cache for them; ``build_parser_inner``
35
+ # caches parameterized dataclasses internally by ``(type, type_var_map)``.
36
+ is_alias_type = isinstance(parsed_type, typing.TypeAliasType) or isinstance(
37
+ typing.get_origin(parsed_type), typing.TypeAliasType
38
+ )
39
+
40
+ if not is_alias_type:
41
+ cur_parser = global_cache.get(parsed_type)
42
+ if cur_parser is not None:
43
+ return cur_parser
44
+
45
+ built_parser = build_parser_inner(parsed_type, context, {})
46
+
47
+ if not is_alias_type:
48
+ context.cache.put(parsed_type, built_parser)
49
+
50
+ global_cache.update(context.cache.local_cache())
51
+
52
+ return built_parser
@@ -0,0 +1,30 @@
1
+ from __future__ import annotations
2
+
3
+ import types
4
+ import typing
5
+
6
+ from .parser_function_type import ParserFunction
7
+
8
+ T = typing.TypeVar("T")
9
+ ParserCacheKey = type[typing.Any] | typing.TypeAliasType | types.UnionType
10
+ ParserCache = dict[
11
+ ParserCacheKey,
12
+ ParserFunction[typing.Any],
13
+ ]
14
+
15
+
16
+ class ParserCacheManager:
17
+ def __init__(self, global_cache: ParserCache) -> None:
18
+ self._global_cache = global_cache
19
+ self._local_cache: ParserCache = dict()
20
+
21
+ def get(self, key: ParserCacheKey) -> ParserFunction[typing.Any] | None:
22
+ if key in self._local_cache:
23
+ return self._local_cache[key]
24
+ return self._global_cache.get(key)
25
+
26
+ def put(self, key: ParserCacheKey, value: ParserFunction[typing.Any]) -> None:
27
+ self._local_cache[key] = value
28
+
29
+ def local_cache(self) -> ParserCache:
30
+ return self._local_cache
@@ -0,0 +1,6 @@
1
+ from __future__ import annotations
2
+
3
+ import typing
4
+
5
+ T = typing.TypeVar("T")
6
+ ParserFunction = typing.Callable[[typing.Any], T]