UncountablePythonSDK 0.0.34__tar.gz → 0.0.36__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.34 → uncountablepythonsdk-0.0.36}/.github/workflows/publish.yml +1 -1
- {uncountablepythonsdk-0.0.34/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.36}/PKG-INFO +1 -1
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/UncountablePythonSDK.egg-info/SOURCES.txt +4 -0
- uncountablepythonsdk-0.0.36/examples/edit_recipe_inputs.py +45 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/serialization_util/serialization_helpers.py +28 -47
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/builder.py +21 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_open_api.py +11 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_open_api_util.py +4 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_typescript_util.py +2 -2
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/__init__.py +6 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/list_entities.py +1 -1
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/edit_recipe_inputs.py +27 -1
- uncountablepythonsdk-0.0.36/uncountable/types/api/recipes/lock_recipes.py +53 -0
- uncountablepythonsdk-0.0.36/uncountable/types/api/recipes/set_recipe_output_annotations.py +102 -0
- uncountablepythonsdk-0.0.36/uncountable/types/api/recipes/unlock_recipes.py +43 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/async_batch.py +2 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/client_base.py +83 -2
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/README.md +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/UncountablePythonSDK.egg-info/requires.txt +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/quickstart.md +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/argument_parser/argument_parser.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/serialization/serial_class.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/serialization/serial_union.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/config.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/core/client.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/core/file_upload.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/integration/job.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/integration/server.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/integration/types.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/create_recipe.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/async_batch_processor.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/workflows.py +0 -0
{uncountablepythonsdk-0.0.34/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.36}/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.36
|
|
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
|
{uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36/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.36
|
|
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
|
|
@@ -26,6 +26,7 @@ docs/static/favicons/mstile-150x150.png
|
|
|
26
26
|
docs/static/favicons/safari-pinned-tab.svg
|
|
27
27
|
examples/async_batch.py
|
|
28
28
|
examples/create_entity.py
|
|
29
|
+
examples/edit_recipe_inputs.py
|
|
29
30
|
examples/upload_files.py
|
|
30
31
|
pkgs/__init__.py
|
|
31
32
|
pkgs/argument_parser/__init__.py
|
|
@@ -182,11 +183,14 @@ uncountable/types/api/recipes/get_recipe_links.py
|
|
|
182
183
|
uncountable/types/api/recipes/get_recipe_names.py
|
|
183
184
|
uncountable/types/api/recipes/get_recipe_output_metadata.py
|
|
184
185
|
uncountable/types/api/recipes/get_recipes_data.py
|
|
186
|
+
uncountable/types/api/recipes/lock_recipes.py
|
|
185
187
|
uncountable/types/api/recipes/remove_recipe_from_project.py
|
|
186
188
|
uncountable/types/api/recipes/set_recipe_inputs.py
|
|
187
189
|
uncountable/types/api/recipes/set_recipe_metadata.py
|
|
190
|
+
uncountable/types/api/recipes/set_recipe_output_annotations.py
|
|
188
191
|
uncountable/types/api/recipes/set_recipe_outputs.py
|
|
189
192
|
uncountable/types/api/recipes/set_recipe_tags.py
|
|
190
193
|
uncountable/types/api/recipes/unarchive_recipes.py
|
|
194
|
+
uncountable/types/api/recipes/unlock_recipes.py
|
|
191
195
|
uncountable/types/api/triggers/__init__.py
|
|
192
196
|
uncountable/types/api/triggers/run_trigger.py
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from decimal import Decimal
|
|
3
|
+
|
|
4
|
+
from uncountable.core import AsyncBatchProcessor, AuthDetailsApiKey, Client
|
|
5
|
+
from uncountable.types import (
|
|
6
|
+
edit_recipe_inputs_t,
|
|
7
|
+
recipe_workflow_steps_t,
|
|
8
|
+
)
|
|
9
|
+
from uncountable.types.identifier import IdentifierKeyBatchReference, IdentifierKeyId
|
|
10
|
+
from uncountable.types.recipe_identifiers import (
|
|
11
|
+
RecipeIdentifiers,
|
|
12
|
+
)
|
|
13
|
+
from uncountable.types.recipe_inputs import QuantityBasis
|
|
14
|
+
|
|
15
|
+
client = Client(
|
|
16
|
+
base_url=os.environ["UNC_BASE_URL"],
|
|
17
|
+
auth_details=AuthDetailsApiKey(
|
|
18
|
+
api_id=os.environ["UNC_API_ID"], api_secret_key=os.environ["UNC_API_SECRET_KEY"]
|
|
19
|
+
),
|
|
20
|
+
)
|
|
21
|
+
batch_loader = AsyncBatchProcessor(client=client)
|
|
22
|
+
recipe_identifiers: RecipeIdentifiers = []
|
|
23
|
+
req = batch_loader.create_recipe(
|
|
24
|
+
material_family_id=1, workflow_id=1, identifiers=recipe_identifiers
|
|
25
|
+
)
|
|
26
|
+
created_recipe_reference = req.batch_reference
|
|
27
|
+
edits: list[edit_recipe_inputs_t.RecipeInputEdit] = []
|
|
28
|
+
edits.append(
|
|
29
|
+
edit_recipe_inputs_t.RecipeInputEditAddInput(
|
|
30
|
+
quantity_basis=QuantityBasis.MASS,
|
|
31
|
+
ingredient_key=IdentifierKeyId(id=1),
|
|
32
|
+
value_numeric=Decimal(56.7),
|
|
33
|
+
)
|
|
34
|
+
)
|
|
35
|
+
edits.append(
|
|
36
|
+
edit_recipe_inputs_t.RecipeInputEditChangeBasisViewed(
|
|
37
|
+
quantity_basis=QuantityBasis.VOLUME, ingredient_key=IdentifierKeyId(id=1)
|
|
38
|
+
)
|
|
39
|
+
)
|
|
40
|
+
batch_loader.edit_recipe_inputs(
|
|
41
|
+
recipe_key=IdentifierKeyBatchReference(reference=created_recipe_reference),
|
|
42
|
+
edits=edits,
|
|
43
|
+
recipe_workflow_step_identifier=recipe_workflow_steps_t.RecipeWorkflowStepIdentifierDefault(),
|
|
44
|
+
)
|
|
45
|
+
job_id = batch_loader.send()
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
# warnings -- types here assume that keys to dictionaries are strings
|
|
2
|
+
# this is true most of the time, but there are cases where we have integer indexes
|
|
3
|
+
|
|
1
4
|
import dataclasses
|
|
2
5
|
import datetime
|
|
3
6
|
import enum
|
|
@@ -14,11 +17,6 @@ from typing import (
|
|
|
14
17
|
overload,
|
|
15
18
|
)
|
|
16
19
|
|
|
17
|
-
try:
|
|
18
|
-
import flask
|
|
19
|
-
except Exception:
|
|
20
|
-
pass
|
|
21
|
-
|
|
22
20
|
from pkgs.argument_parser import snake_to_camel_case
|
|
23
21
|
from pkgs.serialization import (
|
|
24
22
|
MISSING_SENTRY,
|
|
@@ -46,30 +44,25 @@ def identity(x: T) -> T:
|
|
|
46
44
|
return x
|
|
47
45
|
|
|
48
46
|
|
|
49
|
-
|
|
47
|
+
@overload
|
|
48
|
+
def key_convert_to_camelcase(o: str) -> str: ...
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
@overload
|
|
52
|
+
def key_convert_to_camelcase(o: int) -> int: ...
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def key_convert_to_camelcase(o: Any) -> str | int:
|
|
50
56
|
if isinstance(o, OpaqueKey):
|
|
51
57
|
return o
|
|
52
58
|
if isinstance(o, enum.StrEnum):
|
|
53
59
|
return o.value
|
|
54
|
-
if isinstance(o, enum.Enum):
|
|
55
|
-
try:
|
|
56
|
-
print(
|
|
57
|
-
"DEPRECATED_SERIALIZATION--non-string-enum-used-as-key",
|
|
58
|
-
flask.request.path,
|
|
59
|
-
)
|
|
60
|
-
except Exception:
|
|
61
|
-
pass
|
|
62
|
-
return o.value # type: ignore[no-any-return]
|
|
63
60
|
if isinstance(o, str):
|
|
64
61
|
return snake_to_camel_case(o)
|
|
65
62
|
if isinstance(o, int):
|
|
66
|
-
#
|
|
67
|
-
return o
|
|
68
|
-
|
|
69
|
-
print("DEPRECATED_SERIALIZATION--non-string-used-as-key", o, flask.request.path)
|
|
70
|
-
except Exception:
|
|
71
|
-
pass
|
|
72
|
-
return o # type: ignore[no-any-return]
|
|
63
|
+
# we allow dictionaries to use integer keys
|
|
64
|
+
return o
|
|
65
|
+
raise ValueError("Unexpected key type", o)
|
|
73
66
|
|
|
74
67
|
|
|
75
68
|
def _convert_dict(d: dict[str, Any]) -> dict[str, JsonValue]:
|
|
@@ -124,33 +117,13 @@ def _get_dataclass_conversion_lookups(dataclass_type: Any) -> DataclassConversio
|
|
|
124
117
|
|
|
125
118
|
def _convert_dataclass(d: Any) -> dict[str, JsonValue]:
|
|
126
119
|
conversions = _get_dataclass_conversion_lookups(type(d)) # type: ignore[arg-type]
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
# conversions.value_conversion_functions[k](v) if v is not None else None
|
|
130
|
-
# )
|
|
131
|
-
# for k, v in d.__dict__.items()
|
|
132
|
-
# if v != MISSING_SENTRY
|
|
133
|
-
# }
|
|
134
|
-
|
|
135
|
-
serialized_data_class: dict[str, JsonValue] = {}
|
|
136
|
-
for k, v in d.__dict__.items():
|
|
137
|
-
if v == MISSING_SENTRY:
|
|
138
|
-
continue
|
|
139
|
-
if k not in conversions.key_conversions:
|
|
140
|
-
try:
|
|
141
|
-
print(
|
|
142
|
-
"DEPRECATED_SERIALIZATION--missing-dataclass-key",
|
|
143
|
-
k,
|
|
144
|
-
flask.request.path,
|
|
145
|
-
)
|
|
146
|
-
except Exception:
|
|
147
|
-
pass
|
|
148
|
-
continue
|
|
149
|
-
serialized_data_class[conversions.key_conversions[k]] = (
|
|
120
|
+
return {
|
|
121
|
+
conversions.key_conversions[k]: (
|
|
150
122
|
conversions.value_conversion_functions[k](v) if v is not None else None
|
|
151
123
|
)
|
|
152
|
-
|
|
153
|
-
|
|
124
|
+
for k, v in d.__dict__.items()
|
|
125
|
+
if v != MISSING_SENTRY
|
|
126
|
+
}
|
|
154
127
|
|
|
155
128
|
|
|
156
129
|
_SERIALIZATION_FUNCS_STANDARD = {
|
|
@@ -192,6 +165,10 @@ def serialize_for_api(obj: Any) -> JsonValue:
|
|
|
192
165
|
Use the CachedParser.parse_api to parse this data.
|
|
193
166
|
"""
|
|
194
167
|
serialization_type = get_serialization_type(type(obj)) # type: ignore
|
|
168
|
+
if (
|
|
169
|
+
serialization_type == SerializationType.UNKNOWN
|
|
170
|
+
): # performance optimization to not do function lookup
|
|
171
|
+
return obj # type: ignore
|
|
195
172
|
return _CONVERSION_SERIALIZATION_FUNCS[serialization_type](obj)
|
|
196
173
|
|
|
197
174
|
|
|
@@ -219,6 +196,10 @@ def serialize_for_storage(obj: Any) -> JsonValue:
|
|
|
219
196
|
Use the CachedParser.parse_storage to parse this data.
|
|
220
197
|
"""
|
|
221
198
|
serialization_type = get_serialization_type(type(obj)) # type: ignore
|
|
199
|
+
if (
|
|
200
|
+
serialization_type == SerializationType.UNKNOWN
|
|
201
|
+
): # performance optimization to not do function lookup
|
|
202
|
+
return obj # type: ignore
|
|
222
203
|
return _SERIALIZATION_FUNCS[serialization_type](obj)
|
|
223
204
|
|
|
224
205
|
|
|
@@ -18,6 +18,17 @@ from .util import parse_type_str, unused
|
|
|
18
18
|
RawDict = dict[Any, Any]
|
|
19
19
|
|
|
20
20
|
|
|
21
|
+
class StabilityLevel(StrEnum):
|
|
22
|
+
"""These are currently used for open api,
|
|
23
|
+
see: https://github.com/Tufin/oasdiff/blob/main/docs/STABILITY.md
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
draft = "draft"
|
|
27
|
+
alpha = "alpha"
|
|
28
|
+
beta = "beta"
|
|
29
|
+
stable = "stable"
|
|
30
|
+
|
|
31
|
+
|
|
21
32
|
class PropertyExtant(StrEnum):
|
|
22
33
|
required = "required"
|
|
23
34
|
optional = "optional"
|
|
@@ -791,6 +802,7 @@ class SpecEndpoint:
|
|
|
791
802
|
data_loader: bool
|
|
792
803
|
is_sdk: bool
|
|
793
804
|
is_beta: bool
|
|
805
|
+
stability_level: StabilityLevel | None
|
|
794
806
|
# Don't emit TypeScript endpoint code
|
|
795
807
|
suppress_ts: bool
|
|
796
808
|
function: Optional[str]
|
|
@@ -816,6 +828,7 @@ class SpecEndpoint:
|
|
|
816
828
|
"data_loader",
|
|
817
829
|
"is_sdk",
|
|
818
830
|
"is_beta",
|
|
831
|
+
"stability_level",
|
|
819
832
|
"async_batch_path",
|
|
820
833
|
"function",
|
|
821
834
|
"suppress_ts",
|
|
@@ -857,6 +870,14 @@ class SpecEndpoint:
|
|
|
857
870
|
assert isinstance(is_beta, bool)
|
|
858
871
|
self.is_beta = is_beta
|
|
859
872
|
|
|
873
|
+
stability_level_raw = data.get("stability_level")
|
|
874
|
+
assert stability_level_raw is None or isinstance(stability_level_raw, str)
|
|
875
|
+
self.stability_level = (
|
|
876
|
+
StabilityLevel(stability_level_raw)
|
|
877
|
+
if stability_level_raw is not None
|
|
878
|
+
else None
|
|
879
|
+
)
|
|
880
|
+
|
|
860
881
|
async_batch_path = data.get("async_batch_path")
|
|
861
882
|
if async_batch_path is not None:
|
|
862
883
|
assert isinstance(async_batch_path, str)
|
|
@@ -23,6 +23,7 @@ from .emit_open_api_util import (
|
|
|
23
23
|
EmitOpenAPIGuide,
|
|
24
24
|
EmitOpenAPIPath,
|
|
25
25
|
EmitOpenAPIServer,
|
|
26
|
+
EmitOpenAPIStabilityLevel,
|
|
26
27
|
EmitOpenAPITag,
|
|
27
28
|
GlobalContextInfo,
|
|
28
29
|
TagGroupToNamedTags,
|
|
@@ -256,6 +257,14 @@ def _emit_is_beta(is_beta: bool) -> DictApiSchema:
|
|
|
256
257
|
return {}
|
|
257
258
|
|
|
258
259
|
|
|
260
|
+
def _emit_stability_level(
|
|
261
|
+
stability_level: EmitOpenAPIStabilityLevel | None,
|
|
262
|
+
) -> DictApiSchema:
|
|
263
|
+
if stability_level is not None:
|
|
264
|
+
return {"x-stability-level": str(stability_level)}
|
|
265
|
+
return {}
|
|
266
|
+
|
|
267
|
+
|
|
259
268
|
def _emit_endpoint_request_body(
|
|
260
269
|
endpoint: EmitOpenAPIEndpoint,
|
|
261
270
|
arguments_type: OpenAPIType | None,
|
|
@@ -349,6 +358,7 @@ def _emit_namespace(
|
|
|
349
358
|
}
|
|
350
359
|
| _emit_endpoint_description(endpoint.description, ctx.endpoint.guides)
|
|
351
360
|
| _emit_is_beta(endpoint.is_beta)
|
|
361
|
+
| _emit_stability_level(endpoint.stability_level)
|
|
352
362
|
| _emit_endpoint_parameters(endpoint, argument_type, ctx.endpoint.examples)
|
|
353
363
|
| _emit_endpoint_request_body(endpoint, argument_type, ctx.endpoint.examples)
|
|
354
364
|
| {
|
|
@@ -564,6 +574,7 @@ def _emit_endpoint(
|
|
|
564
574
|
summary=f"{'/'.join(namespace.path[path_cutoff:])}",
|
|
565
575
|
description=description,
|
|
566
576
|
is_beta=namespace.endpoint.is_beta,
|
|
577
|
+
stability_level=namespace.endpoint.stability_level,
|
|
567
578
|
examples=[
|
|
568
579
|
EmitOpenAPIEndpointExample(
|
|
569
580
|
ref_name=f"ex_{i}",
|
{uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_open_api_util.py
RENAMED
|
@@ -72,6 +72,9 @@ class EmitOpenAPIEndpointExample:
|
|
|
72
72
|
data: dict[str, object]
|
|
73
73
|
|
|
74
74
|
|
|
75
|
+
EmitOpenAPIStabilityLevel = builder.StabilityLevel
|
|
76
|
+
|
|
77
|
+
|
|
75
78
|
@dataclass
|
|
76
79
|
class EmitOpenAPIEndpoint:
|
|
77
80
|
method: str
|
|
@@ -79,6 +82,7 @@ class EmitOpenAPIEndpoint:
|
|
|
79
82
|
summary: str
|
|
80
83
|
description: str
|
|
81
84
|
is_beta: bool
|
|
85
|
+
stability_level: EmitOpenAPIStabilityLevel | None
|
|
82
86
|
examples: list[EmitOpenAPIEndpointExample]
|
|
83
87
|
guides: list[EmitOpenAPIGuide]
|
|
84
88
|
|
{uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/pkgs/type_spec/emit_typescript_util.py
RENAMED
|
@@ -18,7 +18,7 @@ class EmitTypescriptContext:
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
def ts_type_name(name: str) -> str:
|
|
21
|
-
return "".join([x.
|
|
21
|
+
return "".join([x.title() for x in name.split("_")])
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
def resolve_namespace_ref(namespace: builder.SpecNamespace) -> str:
|
|
@@ -29,4 +29,4 @@ def ts_name(name: str, name_case: builder.NameCase) -> str:
|
|
|
29
29
|
if name_case == builder.NameCase.preserve:
|
|
30
30
|
return name
|
|
31
31
|
bits = util.split_any_name(name)
|
|
32
|
-
return "".join([bits[0], *[x.
|
|
32
|
+
return "".join([bits[0], *[x.title() for x in bits[1:]]])
|
|
@@ -50,6 +50,7 @@ from . import inputs as inputs_t
|
|
|
50
50
|
from .api.entity import list_entities as list_entities_t
|
|
51
51
|
from .api.id_source import list_id_source as list_id_source_t
|
|
52
52
|
from .api.entity import lock_entity as lock_entity_t
|
|
53
|
+
from .api.recipes import lock_recipes as lock_recipes_t
|
|
53
54
|
from .api.id_source import match_id_source as match_id_source_t
|
|
54
55
|
from . import outputs as outputs_t
|
|
55
56
|
from . import permissions as permissions_t
|
|
@@ -75,6 +76,7 @@ from .api.inputs import set_input_subcategories as set_input_subcategories_t
|
|
|
75
76
|
from .api.inputs import set_intermediate_type as set_intermediate_type_t
|
|
76
77
|
from .api.recipes import set_recipe_inputs as set_recipe_inputs_t
|
|
77
78
|
from .api.recipes import set_recipe_metadata as set_recipe_metadata_t
|
|
79
|
+
from .api.recipes import set_recipe_output_annotations as set_recipe_output_annotations_t
|
|
78
80
|
from .api.recipes import set_recipe_outputs as set_recipe_outputs_t
|
|
79
81
|
from .api.recipes import set_recipe_tags as set_recipe_tags_t
|
|
80
82
|
from .api.entity import set_values as set_values_t
|
|
@@ -82,6 +84,7 @@ from .api.entity import transition_entity_phase as transition_entity_phase_t
|
|
|
82
84
|
from .api.recipes import unarchive_recipes as unarchive_recipes_t
|
|
83
85
|
from . import units as units_t
|
|
84
86
|
from .api.entity import unlock_entity as unlock_entity_t
|
|
87
|
+
from .api.recipes import unlock_recipes as unlock_recipes_t
|
|
85
88
|
from .api.material_families import update_entity_material_families as update_entity_material_families_t
|
|
86
89
|
from .api.field_options import upsert_field_options as upsert_field_options_t
|
|
87
90
|
from . import users as users_t
|
|
@@ -136,6 +139,7 @@ __all__: list[str] = [
|
|
|
136
139
|
"list_entities_t",
|
|
137
140
|
"list_id_source_t",
|
|
138
141
|
"lock_entity_t",
|
|
142
|
+
"lock_recipes_t",
|
|
139
143
|
"match_id_source_t",
|
|
140
144
|
"outputs_t",
|
|
141
145
|
"permissions_t",
|
|
@@ -161,6 +165,7 @@ __all__: list[str] = [
|
|
|
161
165
|
"set_intermediate_type_t",
|
|
162
166
|
"set_recipe_inputs_t",
|
|
163
167
|
"set_recipe_metadata_t",
|
|
168
|
+
"set_recipe_output_annotations_t",
|
|
164
169
|
"set_recipe_outputs_t",
|
|
165
170
|
"set_recipe_tags_t",
|
|
166
171
|
"set_values_t",
|
|
@@ -168,6 +173,7 @@ __all__: list[str] = [
|
|
|
168
173
|
"unarchive_recipes_t",
|
|
169
174
|
"units_t",
|
|
170
175
|
"unlock_entity_t",
|
|
176
|
+
"unlock_recipes_t",
|
|
171
177
|
"update_entity_material_families_t",
|
|
172
178
|
"upsert_field_options_t",
|
|
173
179
|
"users_t",
|
|
@@ -32,8 +32,8 @@ ENDPOINT_PATH = "api/external/entity/external_list_entities"
|
|
|
32
32
|
)
|
|
33
33
|
@dataclass(kw_only=True)
|
|
34
34
|
class Arguments:
|
|
35
|
-
entity_type: entity_t.EntityType
|
|
36
35
|
config_reference: str
|
|
36
|
+
entity_type: typing.Optional[entity_t.EntityType] = None
|
|
37
37
|
attributes: typing.Optional[dict[OpaqueKey, base_t.JsonValue]] = None
|
|
38
38
|
offset: typing.Optional[typing.Optional[int]] = None
|
|
39
39
|
limit: typing.Optional[typing.Optional[int]] = None
|
|
@@ -24,8 +24,10 @@ __all__: list[str] = [
|
|
|
24
24
|
"RecipeInputEdit",
|
|
25
25
|
"RecipeInputEditAddInput",
|
|
26
26
|
"RecipeInputEditBase",
|
|
27
|
+
"RecipeInputEditChangeBasisViewed",
|
|
27
28
|
"RecipeInputEditClearInputs",
|
|
28
29
|
"RecipeInputEditInputBase",
|
|
30
|
+
"RecipeInputEditSetLot",
|
|
29
31
|
"RecipeInputEditType",
|
|
30
32
|
"RecipeInputEditUpdateAnnotations",
|
|
31
33
|
"RecipeInputEditUpsertInput",
|
|
@@ -41,6 +43,8 @@ class RecipeInputEditType(StrEnum):
|
|
|
41
43
|
UPSERT_INPUT = "upsert_input"
|
|
42
44
|
ADD_INPUT = "add_input"
|
|
43
45
|
UPDATE_ANNOTATIONS = "update_annotations"
|
|
46
|
+
SET_LOT = "set_lot"
|
|
47
|
+
CHANGE_BASIS = "change_basis"
|
|
44
48
|
|
|
45
49
|
|
|
46
50
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -72,6 +76,15 @@ class RecipeInputEditInputBase(RecipeInputEditBase):
|
|
|
72
76
|
calculation_key: typing.Optional[identifier_t.IdentifierKey] = None
|
|
73
77
|
|
|
74
78
|
|
|
79
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
80
|
+
@serial_class(
|
|
81
|
+
parse_require={"type"},
|
|
82
|
+
)
|
|
83
|
+
@dataclass(kw_only=True)
|
|
84
|
+
class RecipeInputEditChangeBasisViewed(RecipeInputEditInputBase):
|
|
85
|
+
type: typing.Literal[RecipeInputEditType.CHANGE_BASIS] = RecipeInputEditType.CHANGE_BASIS
|
|
86
|
+
|
|
87
|
+
|
|
75
88
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
76
89
|
@serial_class(
|
|
77
90
|
parse_require={"type"},
|
|
@@ -91,6 +104,17 @@ class RecipeInputEditAddInput(RecipeInputEditInputBase):
|
|
|
91
104
|
type: typing.Literal[RecipeInputEditType.ADD_INPUT] = RecipeInputEditType.ADD_INPUT
|
|
92
105
|
|
|
93
106
|
|
|
107
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
108
|
+
@serial_class(
|
|
109
|
+
parse_require={"type"},
|
|
110
|
+
)
|
|
111
|
+
@dataclass(kw_only=True)
|
|
112
|
+
class RecipeInputEditSetLot(RecipeInputEditBase):
|
|
113
|
+
type: typing.Literal[RecipeInputEditType.SET_LOT] = RecipeInputEditType.SET_LOT
|
|
114
|
+
ingredient_key: identifier_t.IdentifierKey
|
|
115
|
+
ingredient_lot_recipe_key: identifier_t.IdentifierKey
|
|
116
|
+
|
|
117
|
+
|
|
94
118
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
95
119
|
@serial_class(
|
|
96
120
|
to_string_values={"lower_value", "upper_value"},
|
|
@@ -116,7 +140,7 @@ class RecipeInputEditUpdateAnnotations(RecipeInputEditInputBase):
|
|
|
116
140
|
|
|
117
141
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
118
142
|
RecipeInputEdit = typing.Annotated[
|
|
119
|
-
typing.Union[RecipeInputEditClearInputs, RecipeInputEditUpsertInput, RecipeInputEditAddInput, RecipeInputEditUpdateAnnotations],
|
|
143
|
+
typing.Union[RecipeInputEditClearInputs, RecipeInputEditUpsertInput, RecipeInputEditAddInput, RecipeInputEditUpdateAnnotations, RecipeInputEditSetLot, RecipeInputEditChangeBasisViewed],
|
|
120
144
|
serial_union_annotation(
|
|
121
145
|
discriminator="type",
|
|
122
146
|
discriminator_map={
|
|
@@ -124,6 +148,8 @@ RecipeInputEdit = typing.Annotated[
|
|
|
124
148
|
"upsert_input": RecipeInputEditUpsertInput,
|
|
125
149
|
"add_input": RecipeInputEditAddInput,
|
|
126
150
|
"update_annotations": RecipeInputEditUpdateAnnotations,
|
|
151
|
+
"set_lot": RecipeInputEditSetLot,
|
|
152
|
+
"change_basis": RecipeInputEditChangeBasisViewed,
|
|
127
153
|
},
|
|
128
154
|
),
|
|
129
155
|
]
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# flake8: noqa: F821
|
|
3
|
+
# ruff: noqa: E402
|
|
4
|
+
# fmt: off
|
|
5
|
+
# isort: skip_file
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
import typing # noqa: F401
|
|
8
|
+
import datetime # noqa: F401
|
|
9
|
+
from decimal import Decimal # noqa: F401
|
|
10
|
+
from pkgs.strenum_compat import StrEnum
|
|
11
|
+
from dataclasses import dataclass
|
|
12
|
+
from ... import identifier as identifier_t
|
|
13
|
+
|
|
14
|
+
__all__: list[str] = [
|
|
15
|
+
"Arguments",
|
|
16
|
+
"Data",
|
|
17
|
+
"ENDPOINT_METHOD",
|
|
18
|
+
"ENDPOINT_PATH",
|
|
19
|
+
"RecipeLockBase",
|
|
20
|
+
"RecipeLockType",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
ENDPOINT_METHOD = "POST"
|
|
24
|
+
ENDPOINT_PATH = "api/external/recipes/lock_recipes"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
28
|
+
class RecipeLockType(StrEnum):
|
|
29
|
+
ALL = "all"
|
|
30
|
+
INPUTS_ONLY = "inputs_only"
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
34
|
+
@dataclass(kw_only=True)
|
|
35
|
+
class RecipeLockBase:
|
|
36
|
+
recipe: identifier_t.IdentifierKey
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
40
|
+
@dataclass(kw_only=True)
|
|
41
|
+
class Arguments:
|
|
42
|
+
type: RecipeLockType = RecipeLockType.ALL
|
|
43
|
+
recipes: list[identifier_t.IdentifierKey]
|
|
44
|
+
globally_removable: bool
|
|
45
|
+
lock_samples: typing.Optional[bool] = None
|
|
46
|
+
comments: typing.Optional[str] = None
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
50
|
+
@dataclass(kw_only=True)
|
|
51
|
+
class Data:
|
|
52
|
+
pass
|
|
53
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# flake8: noqa: F821
|
|
3
|
+
# ruff: noqa: E402
|
|
4
|
+
# fmt: off
|
|
5
|
+
# isort: skip_file
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
import typing # noqa: F401
|
|
8
|
+
import datetime # noqa: F401
|
|
9
|
+
from decimal import Decimal # noqa: F401
|
|
10
|
+
from pkgs.strenum_compat import StrEnum
|
|
11
|
+
from dataclasses import dataclass
|
|
12
|
+
from pkgs.serialization import serial_class
|
|
13
|
+
from pkgs.serialization import serial_union_annotation
|
|
14
|
+
from ... import base as base_t
|
|
15
|
+
from ... import identifier as identifier_t
|
|
16
|
+
|
|
17
|
+
__all__: list[str] = [
|
|
18
|
+
"AnnotationEdit",
|
|
19
|
+
"AnnotationUpdateType",
|
|
20
|
+
"Arguments",
|
|
21
|
+
"Data",
|
|
22
|
+
"ENDPOINT_METHOD",
|
|
23
|
+
"ENDPOINT_PATH",
|
|
24
|
+
"RecipeOutputEditBase",
|
|
25
|
+
"RecipeOutputMergeAnnotations",
|
|
26
|
+
"RecipeOutputReplaceAnnotations",
|
|
27
|
+
"RecipeOutputUpdateAnnotations",
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
ENDPOINT_METHOD = "POST"
|
|
31
|
+
ENDPOINT_PATH = "api/external/recipes/set_recipe_output_annotations"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
35
|
+
@serial_class(
|
|
36
|
+
to_string_values={"lower_value", "upper_value"},
|
|
37
|
+
)
|
|
38
|
+
@dataclass(kw_only=True)
|
|
39
|
+
class AnnotationEdit:
|
|
40
|
+
annotation_type_key: identifier_t.IdentifierKey
|
|
41
|
+
lower_value: typing.Optional[Decimal] = None
|
|
42
|
+
upper_value: typing.Optional[Decimal] = None
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
46
|
+
class AnnotationUpdateType(StrEnum):
|
|
47
|
+
MERGE = "merge"
|
|
48
|
+
REPLACE = "replace"
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
52
|
+
@dataclass(kw_only=True)
|
|
53
|
+
class RecipeOutputEditBase:
|
|
54
|
+
recipe_id: base_t.ObjectId
|
|
55
|
+
output_id: base_t.ObjectId
|
|
56
|
+
experiment_num: int
|
|
57
|
+
annotations: list[AnnotationEdit]
|
|
58
|
+
condition_id: typing.Optional[base_t.ObjectId] = None
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
62
|
+
@serial_class(
|
|
63
|
+
parse_require={"type"},
|
|
64
|
+
)
|
|
65
|
+
@dataclass(kw_only=True)
|
|
66
|
+
class RecipeOutputMergeAnnotations(RecipeOutputEditBase):
|
|
67
|
+
type: typing.Literal[AnnotationUpdateType.MERGE] = AnnotationUpdateType.MERGE
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
71
|
+
@serial_class(
|
|
72
|
+
parse_require={"type"},
|
|
73
|
+
)
|
|
74
|
+
@dataclass(kw_only=True)
|
|
75
|
+
class RecipeOutputReplaceAnnotations(RecipeOutputEditBase):
|
|
76
|
+
type: typing.Literal[AnnotationUpdateType.REPLACE] = AnnotationUpdateType.REPLACE
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
80
|
+
RecipeOutputUpdateAnnotations = typing.Annotated[
|
|
81
|
+
typing.Union[RecipeOutputMergeAnnotations, RecipeOutputReplaceAnnotations],
|
|
82
|
+
serial_union_annotation(
|
|
83
|
+
discriminator="type",
|
|
84
|
+
discriminator_map={
|
|
85
|
+
"merge": RecipeOutputMergeAnnotations,
|
|
86
|
+
"replace": RecipeOutputReplaceAnnotations,
|
|
87
|
+
},
|
|
88
|
+
),
|
|
89
|
+
]
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
93
|
+
@dataclass(kw_only=True)
|
|
94
|
+
class Arguments:
|
|
95
|
+
updates: list[RecipeOutputUpdateAnnotations]
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
99
|
+
@dataclass(kw_only=True)
|
|
100
|
+
class Data:
|
|
101
|
+
pass
|
|
102
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# flake8: noqa: F821
|
|
3
|
+
# ruff: noqa: E402
|
|
4
|
+
# fmt: off
|
|
5
|
+
# isort: skip_file
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
import typing # noqa: F401
|
|
8
|
+
import datetime # noqa: F401
|
|
9
|
+
from decimal import Decimal # noqa: F401
|
|
10
|
+
from pkgs.strenum_compat import StrEnum
|
|
11
|
+
from dataclasses import dataclass
|
|
12
|
+
from ... import identifier as identifier_t
|
|
13
|
+
|
|
14
|
+
__all__: list[str] = [
|
|
15
|
+
"Arguments",
|
|
16
|
+
"Data",
|
|
17
|
+
"ENDPOINT_METHOD",
|
|
18
|
+
"ENDPOINT_PATH",
|
|
19
|
+
"RecipeUnlockType",
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
ENDPOINT_METHOD = "POST"
|
|
23
|
+
ENDPOINT_PATH = "api/external/recipes/unlock_recipes"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
27
|
+
class RecipeUnlockType(StrEnum):
|
|
28
|
+
STANDARD = "standard"
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
32
|
+
@dataclass(kw_only=True)
|
|
33
|
+
class Arguments:
|
|
34
|
+
type: RecipeUnlockType = RecipeUnlockType.STANDARD
|
|
35
|
+
recipes: list[identifier_t.IdentifierKey]
|
|
36
|
+
unlock_samples: typing.Optional[bool] = None
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
40
|
+
@dataclass(kw_only=True)
|
|
41
|
+
class Data:
|
|
42
|
+
pass
|
|
43
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
{uncountablepythonsdk-0.0.34 → uncountablepythonsdk-0.0.36}/uncountable/types/async_batch.py
RENAMED
|
@@ -27,6 +27,8 @@ class AsyncBatchRequestPath(StrEnum):
|
|
|
27
27
|
SET_RECIPE_TAGS = "recipes/set_recipe_tags"
|
|
28
28
|
EDIT_RECIPE_INPUTS = "recipes/edit_recipe_inputs"
|
|
29
29
|
ARCHIVE_RECIPES = "recipes/archive"
|
|
30
|
+
LOCK_RECIPES = "recipes/lock_recipes"
|
|
31
|
+
UNLOCK_RECIPES = "recipes/unlock_recipes"
|
|
30
32
|
|
|
31
33
|
|
|
32
34
|
# DO NOT MODIFY -- This file is generated by type_spec
|