UncountablePythonSDK 0.0.29__tar.gz → 0.0.31__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.
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/.github/workflows/documentation.yml +4 -4
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/.github/workflows/publish.yml +5 -5
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/.gitignore +5 -0
- {uncountablepythonsdk-0.0.29/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.31}/PKG-INFO +4 -4
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31/UncountablePythonSDK.egg-info}/PKG-INFO +4 -4
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/UncountablePythonSDK.egg-info/SOURCES.txt +4 -52
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/UncountablePythonSDK.egg-info/requires.txt +3 -3
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/UncountablePythonSDK.egg-info/top_level.txt +0 -1
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/conf.py +9 -4
- uncountablepythonsdk-0.0.31/docs/requirements.txt +7 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/examples/async_batch.py +2 -3
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/examples/create_entity.py +4 -7
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/examples/upload_files.py +1 -1
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/argument_parser/case_convert.py +4 -3
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/serialization/serial_class.py +31 -37
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/emit_python.py +0 -1
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/type_info/emit_type_info.py +14 -6
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pyproject.toml +3 -3
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/__init__.py +1 -2
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/core/__init__.py +10 -3
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/core/client.py +27 -17
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/core/file_upload.py +3 -5
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/core/types.py +1 -1
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/integration/construct_client.py +1 -1
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/integration/cron.py +4 -2
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/integration/entrypoint.py +4 -5
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/integration/executors/script_executor.py +11 -5
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/integration/job.py +5 -8
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/__init__.py +8 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/list_entities.py +7 -0
- uncountablepythonsdk-0.0.31/uncountable/types/api/inputs/set_intermediate_type.py +43 -0
- uncountablepythonsdk-0.0.31/uncountable/types/api/recipes/add_recipe_to_project.py +35 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/associate_recipe_as_input.py +1 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/edit_recipe_inputs.py +27 -1
- uncountablepythonsdk-0.0.31/uncountable/types/api/recipes/remove_recipe_from_project.py +35 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/set_recipe_outputs.py +2 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/async_batch_processor.py +0 -1
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/client_base.py +72 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/inputs.py +1 -0
- uncountablepythonsdk-0.0.31/uncountable/types/recipes.py +21 -0
- uncountablepythonsdk-0.0.29/docs/requirements.txt +0 -7
- uncountablepythonsdk-0.0.29/examples/recipe-import/importer.py +0 -39
- uncountablepythonsdk-0.0.29/type_spec/external/api/batch/execute_batch.yaml +0 -56
- uncountablepythonsdk-0.0.29/type_spec/external/api/batch/execute_batch_load_async.yaml +0 -18
- uncountablepythonsdk-0.0.29/type_spec/external/api/chemical/convert_chemical_formats.yaml +0 -33
- uncountablepythonsdk-0.0.29/type_spec/external/api/entity/create_entities.yaml +0 -45
- uncountablepythonsdk-0.0.29/type_spec/external/api/entity/create_entity.yaml +0 -51
- uncountablepythonsdk-0.0.29/type_spec/external/api/entity/get_entities_data.yaml +0 -29
- uncountablepythonsdk-0.0.29/type_spec/external/api/entity/list_entities.yaml +0 -52
- uncountablepythonsdk-0.0.29/type_spec/external/api/entity/lock_entity.yaml +0 -21
- uncountablepythonsdk-0.0.29/type_spec/external/api/entity/resolve_entity_ids.yaml +0 -29
- uncountablepythonsdk-0.0.29/type_spec/external/api/entity/set_values.yaml +0 -18
- uncountablepythonsdk-0.0.29/type_spec/external/api/entity/transition_entity_phase.yaml +0 -44
- uncountablepythonsdk-0.0.29/type_spec/external/api/entity/unlock_entity.yaml +0 -18
- uncountablepythonsdk-0.0.29/type_spec/external/api/field_options/upsert_field_options.yaml +0 -37
- uncountablepythonsdk-0.0.29/type_spec/external/api/id_source/list_id_source.yaml +0 -35
- uncountablepythonsdk-0.0.29/type_spec/external/api/id_source/match_id_source.yaml +0 -32
- uncountablepythonsdk-0.0.29/type_spec/external/api/input_groups/get_input_group_names.yaml +0 -29
- uncountablepythonsdk-0.0.29/type_spec/external/api/inputs/create_inputs.yaml +0 -48
- uncountablepythonsdk-0.0.29/type_spec/external/api/inputs/get_input_data.yaml +0 -95
- uncountablepythonsdk-0.0.29/type_spec/external/api/inputs/get_input_names.yaml +0 -38
- uncountablepythonsdk-0.0.29/type_spec/external/api/inputs/get_inputs_data.yaml +0 -82
- uncountablepythonsdk-0.0.29/type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -33
- uncountablepythonsdk-0.0.29/type_spec/external/api/inputs/set_input_category.yaml +0 -23
- uncountablepythonsdk-0.0.29/type_spec/external/api/inputs/set_input_subcategories.yaml +0 -23
- uncountablepythonsdk-0.0.29/type_spec/external/api/material_families/update_entity_material_families.yaml +0 -33
- uncountablepythonsdk-0.0.29/type_spec/external/api/outputs/get_output_data.yaml +0 -92
- uncountablepythonsdk-0.0.29/type_spec/external/api/outputs/get_output_names.yaml +0 -35
- uncountablepythonsdk-0.0.29/type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -50
- uncountablepythonsdk-0.0.29/type_spec/external/api/permissions/set_core_permissions.yaml +0 -69
- uncountablepythonsdk-0.0.29/type_spec/external/api/project/get_projects.yaml +0 -42
- uncountablepythonsdk-0.0.29/type_spec/external/api/project/get_projects_data.yaml +0 -50
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipe_links/create_recipe_link.yaml +0 -25
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +0 -41
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/archive_recipes.yaml +0 -20
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/associate_recipe_as_input.yaml +0 -19
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/associate_recipe_as_lot.yaml +0 -19
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/create_recipe.yaml +0 -42
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/create_recipes.yaml +0 -47
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/disassociate_recipe_as_input.yaml +0 -16
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/edit_recipe_inputs.yaml +0 -85
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/get_curve.yaml +0 -21
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -39
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/get_recipe_links.yaml +0 -26
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/get_recipe_names.yaml +0 -29
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -36
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/get_recipes_data.yaml +0 -244
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/set_recipe_inputs.yaml +0 -42
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/set_recipe_metadata.yaml +0 -20
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -52
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/set_recipe_tags.yaml +0 -62
- uncountablepythonsdk-0.0.29/type_spec/external/api/recipes/unarchive_recipes.yaml +0 -17
- uncountablepythonsdk-0.0.29/type_spec/external/api/triggers/run_trigger.yaml +0 -18
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/README.md +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/quickstart.md +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/argument_parser/argument_parser.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/serialization_util/serialization_helpers.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/builder.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/config.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/emit_open_api.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/emit_open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/emit_typescript_util.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/core/async_batch.py +1 -1
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/integration/db/connect.py +1 -1
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/integration/server.py +5 -5
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/integration/types.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/create_recipe.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/uncountable/types/workflows.py +0 -0
{uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/.github/workflows/documentation.yml
RENAMED
|
@@ -9,9 +9,9 @@ jobs:
|
|
|
9
9
|
docs:
|
|
10
10
|
runs-on: ubuntu-latest
|
|
11
11
|
steps:
|
|
12
|
-
- uses: actions/checkout@v3
|
|
13
|
-
- uses: actions/setup-python@
|
|
14
|
-
- uses: extractions/setup-just@
|
|
12
|
+
- uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 # v3
|
|
13
|
+
- uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
|
|
14
|
+
- uses: extractions/setup-just@dd310ad5a97d8e7b41793f8ef055398d51ad4de6 # v2
|
|
15
15
|
with:
|
|
16
16
|
just-version: '1.8.0'
|
|
17
17
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -25,7 +25,7 @@ jobs:
|
|
|
25
25
|
run: |
|
|
26
26
|
just -f docs/justfile docs-build
|
|
27
27
|
- name: Deploy to GitHub Pages
|
|
28
|
-
uses: peaceiris/actions-gh-pages@
|
|
28
|
+
uses: peaceiris/actions-gh-pages@4f9cc6602d3f66b9c108549d475ec49e8ef4d45e # v4
|
|
29
29
|
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
|
|
30
30
|
with:
|
|
31
31
|
publish_branch: gh-pages
|
|
@@ -19,10 +19,10 @@ jobs:
|
|
|
19
19
|
name: Build distribution packages
|
|
20
20
|
runs-on: ubuntu-latest
|
|
21
21
|
steps:
|
|
22
|
-
- uses: actions/checkout@v4
|
|
22
|
+
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4
|
|
23
23
|
with:
|
|
24
24
|
fetch-depth: 0
|
|
25
|
-
- uses: actions/setup-python@v5
|
|
25
|
+
- uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5
|
|
26
26
|
with:
|
|
27
27
|
python-version: '3.11'
|
|
28
28
|
- name: Install build dependencies
|
|
@@ -31,7 +31,7 @@ jobs:
|
|
|
31
31
|
- name: Build distributions and wheels
|
|
32
32
|
run: |
|
|
33
33
|
python3 -m build
|
|
34
|
-
- uses: actions/upload-artifact@v4
|
|
34
|
+
- uses: actions/upload-artifact@65462800fd760344b1a7b4382951275a0abb4808 # v4
|
|
35
35
|
with:
|
|
36
36
|
name: package-distributions
|
|
37
37
|
path: dist/
|
|
@@ -45,9 +45,9 @@ jobs:
|
|
|
45
45
|
permissions:
|
|
46
46
|
id-token: write
|
|
47
47
|
steps:
|
|
48
|
-
- uses: actions/download-artifact@v4
|
|
48
|
+
- uses: actions/download-artifact@65a9edc5881444af0b9093a5e628f2fe47ea3b2e # v4
|
|
49
49
|
with:
|
|
50
50
|
name: package-distributions
|
|
51
51
|
path: dist/
|
|
52
52
|
- name: Publish package distributions to PyPI
|
|
53
|
-
uses: pypa/gh-action-pypi-publish@
|
|
53
|
+
uses: pypa/gh-action-pypi-publish@ec4db0b4ddc65acdf4bff5fa45ac92d78b56bdf0
|
{uncountablepythonsdk-0.0.29/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.31}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.31
|
|
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
|
|
@@ -27,9 +27,9 @@ Requires-Dist: PyYAML==6.*
|
|
|
27
27
|
Provides-Extra: test
|
|
28
28
|
Requires-Dist: mypy==1.*; extra == "test"
|
|
29
29
|
Requires-Dist: ruff==0.*; extra == "test"
|
|
30
|
-
Requires-Dist: pytest==
|
|
31
|
-
Requires-Dist: coverage[toml]==
|
|
32
|
-
Requires-Dist: pytest-cov==
|
|
30
|
+
Requires-Dist: pytest==8.*; extra == "test"
|
|
31
|
+
Requires-Dist: coverage[toml]==7.*; extra == "test"
|
|
32
|
+
Requires-Dist: pytest-cov==5.*; extra == "test"
|
|
33
33
|
Requires-Dist: pytest-xdist==3.*; extra == "test"
|
|
34
34
|
|
|
35
35
|
# Uncountable Python SDK
|
{uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31/UncountablePythonSDK.egg-info}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.31
|
|
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
|
|
@@ -27,9 +27,9 @@ Requires-Dist: PyYAML==6.*
|
|
|
27
27
|
Provides-Extra: test
|
|
28
28
|
Requires-Dist: mypy==1.*; extra == "test"
|
|
29
29
|
Requires-Dist: ruff==0.*; extra == "test"
|
|
30
|
-
Requires-Dist: pytest==
|
|
31
|
-
Requires-Dist: coverage[toml]==
|
|
32
|
-
Requires-Dist: pytest-cov==
|
|
30
|
+
Requires-Dist: pytest==8.*; extra == "test"
|
|
31
|
+
Requires-Dist: coverage[toml]==7.*; extra == "test"
|
|
32
|
+
Requires-Dist: pytest-cov==5.*; extra == "test"
|
|
33
33
|
Requires-Dist: pytest-xdist==3.*; extra == "test"
|
|
34
34
|
|
|
35
35
|
# Uncountable Python SDK
|
|
@@ -27,7 +27,6 @@ docs/static/favicons/safari-pinned-tab.svg
|
|
|
27
27
|
examples/async_batch.py
|
|
28
28
|
examples/create_entity.py
|
|
29
29
|
examples/upload_files.py
|
|
30
|
-
examples/recipe-import/importer.py
|
|
31
30
|
pkgs/__init__.py
|
|
32
31
|
pkgs/argument_parser/__init__.py
|
|
33
32
|
pkgs/argument_parser/_is_enum.py
|
|
@@ -69,57 +68,6 @@ pkgs/type_spec/value_spec/__main__.py
|
|
|
69
68
|
pkgs/type_spec/value_spec/convert_type.py
|
|
70
69
|
pkgs/type_spec/value_spec/emit_python.py
|
|
71
70
|
pkgs/type_spec/value_spec/types.py
|
|
72
|
-
type_spec/external/api/batch/execute_batch.yaml
|
|
73
|
-
type_spec/external/api/batch/execute_batch_load_async.yaml
|
|
74
|
-
type_spec/external/api/chemical/convert_chemical_formats.yaml
|
|
75
|
-
type_spec/external/api/entity/create_entities.yaml
|
|
76
|
-
type_spec/external/api/entity/create_entity.yaml
|
|
77
|
-
type_spec/external/api/entity/get_entities_data.yaml
|
|
78
|
-
type_spec/external/api/entity/list_entities.yaml
|
|
79
|
-
type_spec/external/api/entity/lock_entity.yaml
|
|
80
|
-
type_spec/external/api/entity/resolve_entity_ids.yaml
|
|
81
|
-
type_spec/external/api/entity/set_values.yaml
|
|
82
|
-
type_spec/external/api/entity/transition_entity_phase.yaml
|
|
83
|
-
type_spec/external/api/entity/unlock_entity.yaml
|
|
84
|
-
type_spec/external/api/field_options/upsert_field_options.yaml
|
|
85
|
-
type_spec/external/api/id_source/list_id_source.yaml
|
|
86
|
-
type_spec/external/api/id_source/match_id_source.yaml
|
|
87
|
-
type_spec/external/api/input_groups/get_input_group_names.yaml
|
|
88
|
-
type_spec/external/api/inputs/create_inputs.yaml
|
|
89
|
-
type_spec/external/api/inputs/get_input_data.yaml
|
|
90
|
-
type_spec/external/api/inputs/get_input_names.yaml
|
|
91
|
-
type_spec/external/api/inputs/get_inputs_data.yaml
|
|
92
|
-
type_spec/external/api/inputs/set_input_attribute_values.yaml
|
|
93
|
-
type_spec/external/api/inputs/set_input_category.yaml
|
|
94
|
-
type_spec/external/api/inputs/set_input_subcategories.yaml
|
|
95
|
-
type_spec/external/api/material_families/update_entity_material_families.yaml
|
|
96
|
-
type_spec/external/api/outputs/get_output_data.yaml
|
|
97
|
-
type_spec/external/api/outputs/get_output_names.yaml
|
|
98
|
-
type_spec/external/api/outputs/resolve_output_conditions.yaml
|
|
99
|
-
type_spec/external/api/permissions/set_core_permissions.yaml
|
|
100
|
-
type_spec/external/api/project/get_projects.yaml
|
|
101
|
-
type_spec/external/api/project/get_projects_data.yaml
|
|
102
|
-
type_spec/external/api/recipe_links/create_recipe_link.yaml
|
|
103
|
-
type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml
|
|
104
|
-
type_spec/external/api/recipes/archive_recipes.yaml
|
|
105
|
-
type_spec/external/api/recipes/associate_recipe_as_input.yaml
|
|
106
|
-
type_spec/external/api/recipes/associate_recipe_as_lot.yaml
|
|
107
|
-
type_spec/external/api/recipes/create_recipe.yaml
|
|
108
|
-
type_spec/external/api/recipes/create_recipes.yaml
|
|
109
|
-
type_spec/external/api/recipes/disassociate_recipe_as_input.yaml
|
|
110
|
-
type_spec/external/api/recipes/edit_recipe_inputs.yaml
|
|
111
|
-
type_spec/external/api/recipes/get_curve.yaml
|
|
112
|
-
type_spec/external/api/recipes/get_recipe_calculations.yaml
|
|
113
|
-
type_spec/external/api/recipes/get_recipe_links.yaml
|
|
114
|
-
type_spec/external/api/recipes/get_recipe_names.yaml
|
|
115
|
-
type_spec/external/api/recipes/get_recipe_output_metadata.yaml
|
|
116
|
-
type_spec/external/api/recipes/get_recipes_data.yaml
|
|
117
|
-
type_spec/external/api/recipes/set_recipe_inputs.yaml
|
|
118
|
-
type_spec/external/api/recipes/set_recipe_metadata.yaml
|
|
119
|
-
type_spec/external/api/recipes/set_recipe_outputs.yaml
|
|
120
|
-
type_spec/external/api/recipes/set_recipe_tags.yaml
|
|
121
|
-
type_spec/external/api/recipes/unarchive_recipes.yaml
|
|
122
|
-
type_spec/external/api/triggers/run_trigger.yaml
|
|
123
71
|
uncountable/__init__.py
|
|
124
72
|
uncountable/py.typed
|
|
125
73
|
uncountable/core/__init__.py
|
|
@@ -165,6 +113,7 @@ uncountable/types/recipe_metadata.py
|
|
|
165
113
|
uncountable/types/recipe_output_metadata.py
|
|
166
114
|
uncountable/types/recipe_tags.py
|
|
167
115
|
uncountable/types/recipe_workflow_steps.py
|
|
116
|
+
uncountable/types/recipes.py
|
|
168
117
|
uncountable/types/response.py
|
|
169
118
|
uncountable/types/units.py
|
|
170
119
|
uncountable/types/users.py
|
|
@@ -200,6 +149,7 @@ uncountable/types/api/inputs/get_inputs_data.py
|
|
|
200
149
|
uncountable/types/api/inputs/set_input_attribute_values.py
|
|
201
150
|
uncountable/types/api/inputs/set_input_category.py
|
|
202
151
|
uncountable/types/api/inputs/set_input_subcategories.py
|
|
152
|
+
uncountable/types/api/inputs/set_intermediate_type.py
|
|
203
153
|
uncountable/types/api/material_families/__init__.py
|
|
204
154
|
uncountable/types/api/material_families/update_entity_material_families.py
|
|
205
155
|
uncountable/types/api/outputs/__init__.py
|
|
@@ -216,6 +166,7 @@ uncountable/types/api/recipe_links/create_recipe_link.py
|
|
|
216
166
|
uncountable/types/api/recipe_metadata/__init__.py
|
|
217
167
|
uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py
|
|
218
168
|
uncountable/types/api/recipes/__init__.py
|
|
169
|
+
uncountable/types/api/recipes/add_recipe_to_project.py
|
|
219
170
|
uncountable/types/api/recipes/archive_recipes.py
|
|
220
171
|
uncountable/types/api/recipes/associate_recipe_as_input.py
|
|
221
172
|
uncountable/types/api/recipes/associate_recipe_as_lot.py
|
|
@@ -229,6 +180,7 @@ uncountable/types/api/recipes/get_recipe_links.py
|
|
|
229
180
|
uncountable/types/api/recipes/get_recipe_names.py
|
|
230
181
|
uncountable/types/api/recipes/get_recipe_output_metadata.py
|
|
231
182
|
uncountable/types/api/recipes/get_recipes_data.py
|
|
183
|
+
uncountable/types/api/recipes/remove_recipe_from_project.py
|
|
232
184
|
uncountable/types/api/recipes/set_recipe_inputs.py
|
|
233
185
|
uncountable/types/api/recipes/set_recipe_metadata.py
|
|
234
186
|
uncountable/types/api/recipes/set_recipe_outputs.py
|
|
@@ -7,7 +7,6 @@
|
|
|
7
7
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
|
|
8
8
|
|
|
9
9
|
from datetime import date
|
|
10
|
-
import uncountable
|
|
11
10
|
|
|
12
11
|
project = "Uncountable SDK"
|
|
13
12
|
copyright = f"{date.today().year}, Uncountable Inc"
|
|
@@ -26,9 +25,15 @@ extensions = [
|
|
|
26
25
|
myst_enable_extensions = ["fieldlist", "deflist"]
|
|
27
26
|
|
|
28
27
|
autoapi_dirs = ["../uncountable"]
|
|
29
|
-
autoapi_options = [
|
|
30
|
-
|
|
31
|
-
|
|
28
|
+
autoapi_options = [
|
|
29
|
+
"members",
|
|
30
|
+
"undoc-members",
|
|
31
|
+
"show-inheritance",
|
|
32
|
+
"show-module-summary",
|
|
33
|
+
"imported-members",
|
|
34
|
+
]
|
|
35
|
+
autoapi_ignore = ["*integration*"]
|
|
36
|
+
autodoc_typehints = "description"
|
|
32
37
|
|
|
33
38
|
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]
|
|
34
39
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from decimal import Decimal
|
|
2
|
-
|
|
3
|
-
from uncountable.core import AsyncBatchProcessor
|
|
2
|
+
|
|
3
|
+
from uncountable.core import AsyncBatchProcessor, AuthDetailsApiKey, Client
|
|
4
4
|
from uncountable.types import (
|
|
5
5
|
recipe_metadata,
|
|
6
6
|
)
|
|
@@ -10,7 +10,6 @@ from uncountable.types.recipe_identifiers import (
|
|
|
10
10
|
RecipeIdentifiers,
|
|
11
11
|
)
|
|
12
12
|
|
|
13
|
-
|
|
14
13
|
client = Client(
|
|
15
14
|
base_url="https://app.uncountable.com",
|
|
16
15
|
auth_details=AuthDetailsApiKey(
|
|
@@ -1,23 +1,20 @@
|
|
|
1
1
|
from uncountable.core import AuthDetailsOAuth, Client
|
|
2
|
+
from uncountable.core.client import ClientConfig
|
|
2
3
|
from uncountable.types import (
|
|
3
4
|
entity_t,
|
|
4
5
|
field_values_t,
|
|
5
6
|
)
|
|
6
7
|
|
|
7
|
-
|
|
8
8
|
client = Client(
|
|
9
9
|
base_url="https://app.uncountable.com",
|
|
10
|
-
auth_details=AuthDetailsOAuth(
|
|
11
|
-
|
|
12
|
-
),
|
|
10
|
+
auth_details=AuthDetailsOAuth(refresh_token="x"),
|
|
11
|
+
config=ClientConfig(allow_insecure_tls=False),
|
|
13
12
|
)
|
|
14
13
|
entities = client.create_entity(
|
|
15
14
|
definition_id=24,
|
|
16
15
|
entity_type=entity_t.EntityType.LAB_REQUEST,
|
|
17
16
|
field_values=[
|
|
18
|
-
field_values_t.FieldRefNameValue(
|
|
19
|
-
field_ref_name="name", value="SDK Lab Request"
|
|
20
|
-
),
|
|
17
|
+
field_values_t.FieldRefNameValue(field_ref_name="name", value="SDK Lab Request"),
|
|
21
18
|
field_values_t.FieldRefNameValue(field_ref_name="materialFamilyId", value=1),
|
|
22
19
|
],
|
|
23
20
|
)
|
{uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/argument_parser/case_convert.py
RENAMED
|
@@ -4,9 +4,10 @@ import re
|
|
|
4
4
|
|
|
5
5
|
@functools.lru_cache(maxsize=500000)
|
|
6
6
|
def snake_to_camel_case(o: str) -> str:
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
tokens = o.split("_")
|
|
8
|
+
if len(tokens) < 2:
|
|
9
|
+
return o
|
|
10
|
+
return "".join([part.title() if i > 0 else part for i, part in enumerate(tokens)])
|
|
10
11
|
|
|
11
12
|
|
|
12
13
|
def kebab_to_pascal_case(o: str) -> str:
|
{uncountablepythonsdk-0.0.29 → uncountablepythonsdk-0.0.31}/pkgs/serialization/serial_class.py
RENAMED
|
@@ -16,6 +16,9 @@ class _SerialClassData:
|
|
|
16
16
|
parse_require: set[str] = dataclasses.field(default_factory=set)
|
|
17
17
|
|
|
18
18
|
|
|
19
|
+
EMPTY_SERIAL_CLASS_DATA = _SerialClassData()
|
|
20
|
+
|
|
21
|
+
|
|
19
22
|
def serial_class(
|
|
20
23
|
*,
|
|
21
24
|
unconverted_keys: Optional[set[str]] = None,
|
|
@@ -57,58 +60,49 @@ def serial_class(
|
|
|
57
60
|
|
|
58
61
|
|
|
59
62
|
class SerialClassDataInspector:
|
|
60
|
-
bases: list[SerialClassDataInspector]
|
|
61
|
-
|
|
62
63
|
def __init__(
|
|
63
|
-
self,
|
|
64
|
+
self,
|
|
65
|
+
current: _SerialClassData,
|
|
64
66
|
) -> None:
|
|
65
|
-
self.bases = bases
|
|
66
67
|
self.current = current
|
|
67
68
|
|
|
68
69
|
def has_unconverted_key(self, key: str) -> bool:
|
|
69
|
-
|
|
70
|
-
return True
|
|
71
|
-
for base in self.bases:
|
|
72
|
-
if base.has_unconverted_key(key):
|
|
73
|
-
return True
|
|
74
|
-
return False
|
|
70
|
+
return key in self.current.unconverted_keys
|
|
75
71
|
|
|
76
72
|
def has_unconverted_value(self, key: str) -> bool:
|
|
77
|
-
|
|
78
|
-
return True
|
|
79
|
-
for base in self.bases:
|
|
80
|
-
if base.has_unconverted_value(key):
|
|
81
|
-
return True
|
|
82
|
-
return False
|
|
73
|
+
return key in self.current.unconverted_values
|
|
83
74
|
|
|
84
75
|
def has_to_string_value(self, key: str) -> bool:
|
|
85
|
-
|
|
86
|
-
return True
|
|
87
|
-
for base in self.bases:
|
|
88
|
-
if base.has_to_string_value(key):
|
|
89
|
-
return True
|
|
90
|
-
return False
|
|
76
|
+
return key in self.current.to_string_values
|
|
91
77
|
|
|
92
78
|
def has_parse_require(self, key: str) -> bool:
|
|
93
|
-
|
|
94
|
-
return True
|
|
95
|
-
for base in self.bases:
|
|
96
|
-
if base.has_parse_require(key):
|
|
97
|
-
return True
|
|
98
|
-
return False
|
|
79
|
+
return key in self.current.parse_require
|
|
99
80
|
|
|
100
81
|
|
|
101
|
-
def
|
|
102
|
-
|
|
103
|
-
[get_serial_class_data(base) for base in type_class.__bases__]
|
|
104
|
-
if type_class.__bases__ is not None
|
|
105
|
-
else []
|
|
106
|
-
)
|
|
107
|
-
return SerialClassDataInspector(
|
|
108
|
-
bases,
|
|
82
|
+
def _get_merged_serial_class_data(type_class: type[Any]) -> _SerialClassData | None:
|
|
83
|
+
base_class_data = (
|
|
109
84
|
cast(_SerialClassData, type_class.__unc_serial_data)
|
|
110
85
|
if hasattr(type_class, "__unc_serial_data")
|
|
111
|
-
else
|
|
86
|
+
else None
|
|
87
|
+
)
|
|
88
|
+
if type_class.__bases__ is not None:
|
|
89
|
+
for base in type_class.__bases__:
|
|
90
|
+
curr_base_class_data = _get_merged_serial_class_data(base)
|
|
91
|
+
if curr_base_class_data is not None:
|
|
92
|
+
if base_class_data is None:
|
|
93
|
+
base_class_data = _SerialClassData()
|
|
94
|
+
base_class_data.unconverted_keys |= curr_base_class_data.unconverted_keys
|
|
95
|
+
base_class_data.unconverted_values |= (
|
|
96
|
+
curr_base_class_data.unconverted_values
|
|
97
|
+
)
|
|
98
|
+
base_class_data.to_string_values |= curr_base_class_data.to_string_values
|
|
99
|
+
base_class_data.parse_require |= curr_base_class_data.parse_require
|
|
100
|
+
return base_class_data
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def get_serial_class_data(type_class: type[Any]) -> SerialClassDataInspector:
|
|
104
|
+
return SerialClassDataInspector(
|
|
105
|
+
_get_merged_serial_class_data(type_class) or EMPTY_SERIAL_CLASS_DATA
|
|
112
106
|
)
|
|
113
107
|
|
|
114
108
|
|
|
@@ -1194,7 +1194,6 @@ ASYNC_BATCH_PROCESSOR_FILENAME = "async_batch_processor"
|
|
|
1194
1194
|
ASYNC_BATCH_PROCESSOR_IMPORTS = [
|
|
1195
1195
|
"import uuid",
|
|
1196
1196
|
"from abc import ABC, abstractmethod",
|
|
1197
|
-
"from dataclasses import dataclass",
|
|
1198
1197
|
"from pkgs.serialization_util.serialization_helpers import serialize_for_api",
|
|
1199
1198
|
]
|
|
1200
1199
|
|
|
@@ -247,17 +247,25 @@ def _extract_and_validate_layout(
|
|
|
247
247
|
return layout
|
|
248
248
|
|
|
249
249
|
|
|
250
|
-
def _validate_type_ext_info(
|
|
250
|
+
def _validate_type_ext_info(
|
|
251
|
+
stype: builder.SpecTypeDefnObject,
|
|
252
|
+
) -> tuple[ExtInfoLayout | None, Optional[data_t.ExtInfo]]:
|
|
251
253
|
ext_info = _parse_ext_info(stype.ext_info)
|
|
252
254
|
if ext_info is None:
|
|
253
|
-
return None
|
|
255
|
+
return None, None
|
|
256
|
+
|
|
257
|
+
if ext_info.label_fields is not None:
|
|
258
|
+
assert stype.properties is not None
|
|
259
|
+
for name in ext_info.label_fields:
|
|
260
|
+
prop = stype.properties.get(name)
|
|
261
|
+
assert prop is not None, f"missing-label-field:{name}"
|
|
254
262
|
|
|
255
263
|
if not stype.is_base and isinstance(stype.base, builder.SpecTypeDefnObject):
|
|
256
|
-
base_layout = _validate_type_ext_info(stype.base)
|
|
264
|
+
base_layout, _ = _validate_type_ext_info(stype.base)
|
|
257
265
|
else:
|
|
258
266
|
base_layout = None
|
|
259
267
|
|
|
260
|
-
return _extract_and_validate_layout(stype, ext_info, base_layout)
|
|
268
|
+
return _extract_and_validate_layout(stype, ext_info, base_layout), ext_info
|
|
261
269
|
|
|
262
270
|
|
|
263
271
|
def _build_map_type(
|
|
@@ -270,7 +278,7 @@ def _build_map_type(
|
|
|
270
278
|
and not stype.is_base
|
|
271
279
|
and stype.base is not None
|
|
272
280
|
):
|
|
273
|
-
_validate_type_ext_info(stype)
|
|
281
|
+
_, ext_info = _validate_type_ext_info(stype)
|
|
274
282
|
|
|
275
283
|
properties: dict[str, MapProperty] = {}
|
|
276
284
|
map_type = MapTypeObject(
|
|
@@ -279,7 +287,7 @@ def _build_map_type(
|
|
|
279
287
|
properties=properties,
|
|
280
288
|
desc=stype.desc,
|
|
281
289
|
base_type_path=type_path_of(stype.base),
|
|
282
|
-
ext_info=
|
|
290
|
+
ext_info=serialize_for_api(ext_info),
|
|
283
291
|
)
|
|
284
292
|
|
|
285
293
|
if stype.properties is not None:
|
|
@@ -1,6 +1,13 @@
|
|
|
1
|
+
from .async_batch import AsyncBatchProcessor
|
|
1
2
|
from .client import Client
|
|
2
|
-
from .types import AuthDetailsApiKey, AuthDetailsOAuth
|
|
3
3
|
from .file_upload import MediaFileUpload, UploadedFile
|
|
4
|
-
from .
|
|
4
|
+
from .types import AuthDetailsApiKey, AuthDetailsOAuth
|
|
5
5
|
|
|
6
|
-
__all__: list[str] = [
|
|
6
|
+
__all__: list[str] = [
|
|
7
|
+
"AuthDetailsApiKey",
|
|
8
|
+
"AuthDetailsOAuth",
|
|
9
|
+
"AsyncBatchProcessor",
|
|
10
|
+
"Client",
|
|
11
|
+
"MediaFileUpload",
|
|
12
|
+
"UploadedFile",
|
|
13
|
+
]
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import base64
|
|
2
|
-
from datetime import datetime, timedelta
|
|
3
2
|
import json
|
|
4
3
|
import typing
|
|
5
4
|
from dataclasses import dataclass
|
|
5
|
+
from datetime import datetime, timedelta
|
|
6
6
|
from enum import StrEnum
|
|
7
7
|
from urllib.parse import urljoin
|
|
8
|
+
from uuid import uuid4
|
|
8
9
|
|
|
9
10
|
import requests
|
|
10
11
|
from requests.exceptions import JSONDecodeError
|
|
@@ -18,6 +19,7 @@ from .file_upload import FileUpload, FileUploader, UploadedFile
|
|
|
18
19
|
from .types import AuthDetailsAll, AuthDetailsApiKey, AuthDetailsOAuth
|
|
19
20
|
|
|
20
21
|
DT = typing.TypeVar("DT")
|
|
22
|
+
UNC_REQUEST_ID_HEADER = "X-UNC-REQUEST-ID"
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
class EndpointMethod(StrEnum):
|
|
@@ -30,19 +32,17 @@ class HTTPRequestBase:
|
|
|
30
32
|
method: EndpointMethod
|
|
31
33
|
url: str
|
|
32
34
|
headers: dict[str, str]
|
|
33
|
-
body: typing.Optional[typing.Union[str, dict[str, str]]] = None
|
|
34
|
-
query_params: typing.Optional[dict[str, str]] = None
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
@dataclass(kw_only=True)
|
|
38
38
|
class HTTPGetRequest(HTTPRequestBase):
|
|
39
|
-
method
|
|
39
|
+
method = EndpointMethod.GET
|
|
40
40
|
query_params: dict[str, str]
|
|
41
41
|
|
|
42
42
|
|
|
43
43
|
@dataclass(kw_only=True)
|
|
44
44
|
class HTTPPostRequest(HTTPRequestBase):
|
|
45
|
-
method
|
|
45
|
+
method = EndpointMethod.POST
|
|
46
46
|
body: typing.Union[str, dict[str, str]]
|
|
47
47
|
|
|
48
48
|
|
|
@@ -101,13 +101,15 @@ class APIResponseError(BaseException):
|
|
|
101
101
|
|
|
102
102
|
class SDKError(BaseException):
|
|
103
103
|
message: str
|
|
104
|
+
request_id: str
|
|
104
105
|
|
|
105
|
-
def __init__(self, message: str) -> None:
|
|
106
|
+
def __init__(self, message: str, *, request_id: str) -> None:
|
|
106
107
|
super().__init__(message)
|
|
107
108
|
self.message = message
|
|
109
|
+
self.request_id = request_id
|
|
108
110
|
|
|
109
111
|
def __str__(self) -> str:
|
|
110
|
-
return f"internal SDK error, please contact Uncountable support: {self.message}"
|
|
112
|
+
return f"internal SDK error (request id {self.request_id}), please contact Uncountable support: {self.message}"
|
|
111
113
|
|
|
112
114
|
|
|
113
115
|
@dataclass(kw_only=True)
|
|
@@ -147,7 +149,9 @@ class Client(ClientMethods):
|
|
|
147
149
|
self._file_uploader = FileUploader(self._base_url, self._auth_details)
|
|
148
150
|
self._cfg = config or ClientConfig()
|
|
149
151
|
|
|
150
|
-
def _get_response_json(
|
|
152
|
+
def _get_response_json(
|
|
153
|
+
self, response: requests.Response, request_id: str
|
|
154
|
+
) -> dict[str, JsonValue]:
|
|
151
155
|
if response.status_code < 200 or response.status_code > 299:
|
|
152
156
|
extra_details: dict[str, JsonValue] | None = None
|
|
153
157
|
try:
|
|
@@ -160,12 +164,15 @@ class Client(ClientMethods):
|
|
|
160
164
|
status_code=response.status_code, extra_details=extra_details
|
|
161
165
|
)
|
|
162
166
|
try:
|
|
163
|
-
return response.json()
|
|
164
|
-
except JSONDecodeError:
|
|
165
|
-
raise SDKError("unable to process response")
|
|
167
|
+
return typing.cast(dict[str, JsonValue], response.json())
|
|
168
|
+
except JSONDecodeError as e:
|
|
169
|
+
raise SDKError("unable to process response", request_id=request_id) from e
|
|
166
170
|
|
|
167
171
|
def do_request(self, *, api_request: APIRequest, return_type: type[DT]) -> DT:
|
|
168
|
-
|
|
172
|
+
request_id = str(uuid4())
|
|
173
|
+
http_request = self._build_http_request(
|
|
174
|
+
api_request=api_request, request_id=request_id
|
|
175
|
+
)
|
|
169
176
|
match http_request:
|
|
170
177
|
case HTTPGetRequest():
|
|
171
178
|
response = requests.get(
|
|
@@ -179,18 +186,17 @@ class Client(ClientMethods):
|
|
|
179
186
|
http_request.url,
|
|
180
187
|
headers=http_request.headers,
|
|
181
188
|
data=http_request.body,
|
|
182
|
-
params=http_request.query_params,
|
|
183
189
|
verify=not self._cfg.allow_insecure_tls,
|
|
184
190
|
)
|
|
185
191
|
case _:
|
|
186
192
|
typing.assert_never(http_request)
|
|
187
|
-
response_data = self._get_response_json(response)
|
|
193
|
+
response_data = self._get_response_json(response, request_id=request_id)
|
|
188
194
|
cached_parser = self._get_cached_parser(return_type)
|
|
189
195
|
try:
|
|
190
196
|
data = response_data["data"]
|
|
191
197
|
return cached_parser.parse_api(data)
|
|
192
198
|
except (ValueError, JSONDecodeError, KeyError) as e:
|
|
193
|
-
raise SDKError("unable to process response") from e
|
|
199
|
+
raise SDKError("unable to process response", request_id=request_id) from e
|
|
194
200
|
|
|
195
201
|
def _get_cached_parser(self, data_type: type[DT]) -> CachedParser[DT]:
|
|
196
202
|
if data_type not in self._parser_map:
|
|
@@ -213,8 +219,9 @@ class Client(ClientMethods):
|
|
|
213
219
|
"scope": oauth_details.scope,
|
|
214
220
|
"grant_type": "client_credentials",
|
|
215
221
|
},
|
|
222
|
+
verify=not self._cfg.allow_insecure_tls,
|
|
216
223
|
)
|
|
217
|
-
data = self._get_response_json(response)
|
|
224
|
+
data = self._get_response_json(response, request_id=str(uuid4()))
|
|
218
225
|
token_data = oauth_bearer_token_data_parser.parse_storage(data)
|
|
219
226
|
self._oauth_bearer_token_cache = OAuthBearerTokenCache(
|
|
220
227
|
token=token_data.access_token,
|
|
@@ -235,8 +242,11 @@ class Client(ClientMethods):
|
|
|
235
242
|
return {"Authorization": f"Bearer {token}"}
|
|
236
243
|
typing.assert_never(self._auth_details)
|
|
237
244
|
|
|
238
|
-
def _build_http_request(
|
|
245
|
+
def _build_http_request(
|
|
246
|
+
self, *, api_request: APIRequest, request_id: str
|
|
247
|
+
) -> HTTPRequest:
|
|
239
248
|
headers = self._build_auth_headers()
|
|
249
|
+
headers[UNC_REQUEST_ID_HEADER] = request_id
|
|
240
250
|
method = api_request.method.lower()
|
|
241
251
|
data = {"data": json.dumps(serialize_for_api(api_request.args))}
|
|
242
252
|
match method:
|