UncountablePythonSDK 0.0.71__tar.gz → 0.0.73__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.71/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.73}/PKG-INFO +1 -1
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/examples/integration-server/jobs/materials_auto/profile.yaml +1 -1
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/examples/integration-server/pyproject.toml +1 -1
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/serialization/serial_class.py +5 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/serialization/serial_union.py +3 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/builder.py +2 -1
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/config.py +5 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/emit_python.py +36 -20
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/load_types.py +3 -2
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/core/client.py +2 -2
- uncountablepythonsdk-0.0.73/uncountable/integration/cli.py +49 -0
- uncountablepythonsdk-0.0.73/uncountable/integration/entrypoint.py +13 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/worker.py +9 -5
- uncountablepythonsdk-0.0.73/uncountable/integration/server.py +125 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/batch/execute_batch.py +8 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/batch/execute_batch_load_async.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/chemical/convert_chemical_formats.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/entity/create_entities.py +11 -1
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/entity/create_entity.py +8 -1
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/entity/get_entities_data.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/entity/list_entities.py +8 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/entity/lock_entity.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/entity/resolve_entity_ids.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/entity/set_values.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/entity/transition_entity_phase.py +8 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/entity/unlock_entity.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/equipment/associate_equipment_input.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/field_options/upsert_field_options.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/id_source/list_id_source.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/id_source/match_id_source.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/input_groups/get_input_group_names.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/inputs/create_inputs.py +13 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/inputs/get_input_data.py +19 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/inputs/get_input_names.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/inputs/get_inputs_data.py +19 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/inputs/set_input_attribute_values.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/inputs/set_input_category.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/inputs/set_input_subcategories.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/inputs/set_intermediate_type.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/material_families/update_entity_material_families.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/outputs/get_output_data.py +16 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/outputs/get_output_names.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/outputs/resolve_output_conditions.py +13 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/permissions/set_core_permissions.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/project/get_projects.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/project/get_projects_data.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipe_links/create_recipe_link.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipe_links/remove_recipe_link.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/add_recipe_to_project.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/archive_recipes.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/associate_recipe_as_input.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/associate_recipe_as_lot.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/clear_recipe_outputs.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/create_recipe.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/create_recipes.py +13 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/edit_recipe_inputs.py +20 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/get_curve.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/get_recipe_calculations.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/get_recipe_links.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/get_recipe_names.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/get_recipe_output_metadata.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/get_recipes_data.py +25 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/lock_recipes.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/remove_recipe_from_project.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/set_recipe_inputs.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/set_recipe_metadata.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/set_recipe_output_annotations.py +13 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/set_recipe_output_file.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/set_recipe_outputs.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/set_recipe_tags.py +12 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/unarchive_recipes.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/unlock_recipes.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/triggers/run_trigger.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/uploader/invoke_uploader.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/async_batch_t.py +10 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/calculations_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/chemical_structure_t.py +1 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/client_base.py +2 -2
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/client_config_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/curves_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/entity_t.py +6 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/experiment_groups_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/field_values_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/fields_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/generic_upload_t.py +13 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/id_source_t.py +13 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/identifier_t.py +3 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/input_attributes_t.py +1 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/inputs_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/job_definition_t.py +33 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/outputs_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/overrides_t.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/phases_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/queued_job_t.py +16 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_identifiers_t.py +3 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_links_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_metadata_t.py +5 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_output_metadata_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_tags_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_workflow_steps_t.py +7 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipes_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/response_t.py +1 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/secret_retrieval_t.py +6 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/units_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/users_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/webhook_job_t.py +4 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/workflows_t.py +7 -0
- uncountablepythonsdk-0.0.71/uncountable/integration/cli.py +0 -75
- uncountablepythonsdk-0.0.71/uncountable/integration/entrypoint.py +0 -21
- uncountablepythonsdk-0.0.71/uncountable/integration/server.py +0 -128
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/.github/workflows/publish.yml +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/README.md +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/UncountablePythonSDK.egg-info/SOURCES.txt +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/UncountablePythonSDK.egg-info/requires.txt +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/quickstart.md +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/examples/set_recipe_metadata_file.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/examples/set_recipe_output_file_sdk.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/argument_parser/argument_parser.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/filesystem_utils/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/filesystem_utils/_s3_session.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/filesystem_utils/file_type_utils.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/serialization_util/serialization_helpers.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/emit_open_api.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/emit_open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/emit_typescript_util.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/core/file_upload.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/db/session.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/job.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/command_server/types.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/datastore/model.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/queue_runner.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/queue_runner/types.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/scan_profiles.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/scheduler.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/telemetry.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/integration/webhook_server/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/api/uploader/__init__.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/async_batch_processor.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/base_t.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/client_config.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/generic_upload.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/job_definition.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/overrides.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/permissions_t.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/post_base_t.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/queued_job.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/secret_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/webhook_job.py +0 -0
- {uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/uncountable/types/workflows.py +0 -0
{uncountablepythonsdk-0.0.71/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.73}/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.73
|
|
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.71 → uncountablepythonsdk-0.0.73/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.73
|
|
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.71 → uncountablepythonsdk-0.0.73}/pkgs/serialization/serial_class.py
RENAMED
|
@@ -14,6 +14,7 @@ class _SerialClassData:
|
|
|
14
14
|
unconverted_values: set[str] = dataclasses.field(default_factory=set)
|
|
15
15
|
to_string_values: set[str] = dataclasses.field(default_factory=set)
|
|
16
16
|
parse_require: set[str] = dataclasses.field(default_factory=set)
|
|
17
|
+
named_type_path: Optional[str] = None
|
|
17
18
|
|
|
18
19
|
|
|
19
20
|
EMPTY_SERIAL_CLASS_DATA = _SerialClassData()
|
|
@@ -25,6 +26,7 @@ def serial_class(
|
|
|
25
26
|
unconverted_values: Optional[set[str]] = None,
|
|
26
27
|
to_string_values: Optional[set[str]] = None,
|
|
27
28
|
parse_require: Optional[set[str]] = None,
|
|
29
|
+
named_type_path: Optional[str] = None,
|
|
28
30
|
) -> Callable[[_ClassT], _ClassT]:
|
|
29
31
|
"""
|
|
30
32
|
An additional decorator to a dataclass that specifies serialization options.
|
|
@@ -45,6 +47,8 @@ def serial_class(
|
|
|
45
47
|
This field is always required while parsing, even if it has a default in the definition.
|
|
46
48
|
This allows supporting literal type defaults for Python instantiation, but
|
|
47
49
|
requiring them for the API input.
|
|
50
|
+
@param named_type_path
|
|
51
|
+
The type_spec type-path to this type. This applies only to named types.
|
|
48
52
|
"""
|
|
49
53
|
|
|
50
54
|
def decorate(orig_class: _ClassT) -> _ClassT:
|
|
@@ -53,6 +57,7 @@ def serial_class(
|
|
|
53
57
|
unconverted_values=unconverted_values or set(),
|
|
54
58
|
to_string_values=to_string_values or set(),
|
|
55
59
|
parse_require=parse_require or set(),
|
|
60
|
+
named_type_path=named_type_path,
|
|
56
61
|
)
|
|
57
62
|
return orig_class
|
|
58
63
|
|
{uncountablepythonsdk-0.0.71 → uncountablepythonsdk-0.0.73}/pkgs/serialization/serial_union.py
RENAMED
|
@@ -27,18 +27,21 @@ class _SerialUnion:
|
|
|
27
27
|
# determine which type to parse.
|
|
28
28
|
discriminator: typing.Optional[str] = None
|
|
29
29
|
discriminator_map: typing.Optional[IdentityHashWrapper[dict[str, type]]] = None
|
|
30
|
+
named_type_path: typing.Optional[str] = None
|
|
30
31
|
|
|
31
32
|
|
|
32
33
|
def serial_union_annotation(
|
|
33
34
|
*,
|
|
34
35
|
discriminator: typing.Optional[str] = None,
|
|
35
36
|
discriminator_map: typing.Optional[dict[str, type]] = None,
|
|
37
|
+
named_type_path: typing.Optional[str] = None,
|
|
36
38
|
) -> _SerialUnion:
|
|
37
39
|
return _SerialUnion(
|
|
38
40
|
discriminator=discriminator,
|
|
39
41
|
discriminator_map=IdentityHashWrapper(discriminator_map)
|
|
40
42
|
if discriminator_map is not None
|
|
41
43
|
else None,
|
|
44
|
+
named_type_path=named_type_path,
|
|
42
45
|
)
|
|
43
46
|
|
|
44
47
|
|
|
@@ -1159,7 +1159,8 @@ class NamespaceDataPair:
|
|
|
1159
1159
|
|
|
1160
1160
|
|
|
1161
1161
|
class SpecBuilder:
|
|
1162
|
-
def __init__(self, *, api_endpoints: dict[str, str]) -> None:
|
|
1162
|
+
def __init__(self, *, api_endpoints: dict[str, str], top_namespace: str) -> None:
|
|
1163
|
+
self.top_namespace = top_namespace
|
|
1163
1164
|
self.where: list[str] = []
|
|
1164
1165
|
self.namespaces = {}
|
|
1165
1166
|
self.pending: list[NamespaceDataPair] = []
|
|
@@ -86,6 +86,7 @@ class OpenAPIConfig(BaseLanguageConfig):
|
|
|
86
86
|
|
|
87
87
|
@dataclass(kw_only=True)
|
|
88
88
|
class Config:
|
|
89
|
+
top_namespace: str
|
|
89
90
|
type_spec_types: list[str] # folders containing the yaml type spec definitions
|
|
90
91
|
api_endpoint: dict[str, str]
|
|
91
92
|
# languages
|
|
@@ -130,7 +131,11 @@ def parse_yaml_config(config_file: str) -> Config:
|
|
|
130
131
|
else None
|
|
131
132
|
)
|
|
132
133
|
|
|
134
|
+
top_namespace = raw_config["top_namespace"]
|
|
135
|
+
assert isinstance(top_namespace, str)
|
|
136
|
+
|
|
133
137
|
return Config(
|
|
138
|
+
top_namespace=top_namespace,
|
|
134
139
|
type_spec_types=type_spec_types,
|
|
135
140
|
api_endpoint=api_endpoint,
|
|
136
141
|
typescript=typescript,
|
|
@@ -54,6 +54,7 @@ class TrackingContext:
|
|
|
54
54
|
class Context(TrackingContext):
|
|
55
55
|
out: io.StringIO
|
|
56
56
|
namespace: builder.SpecNamespace
|
|
57
|
+
builder: builder.SpecBuilder
|
|
57
58
|
|
|
58
59
|
|
|
59
60
|
def _resolve_namespace_name(namespace: builder.SpecNamespace) -> str:
|
|
@@ -258,6 +259,7 @@ def _emit_types(*, builder: builder.SpecBuilder, config: PythonConfig) -> None:
|
|
|
258
259
|
ctx = Context(
|
|
259
260
|
out=io.StringIO(),
|
|
260
261
|
namespace=namespace,
|
|
262
|
+
builder=builder,
|
|
261
263
|
)
|
|
262
264
|
|
|
263
265
|
_emit_namespace(ctx, namespace)
|
|
@@ -753,6 +755,12 @@ def _emit_properties(
|
|
|
753
755
|
)
|
|
754
756
|
|
|
755
757
|
|
|
758
|
+
def _named_type_path(ctx: Context, stype: builder.SpecTypeDefn) -> str:
|
|
759
|
+
parts = [] if stype.is_base else stype.namespace.path.copy()
|
|
760
|
+
parts.append(stype.name)
|
|
761
|
+
return f"{ctx.builder.top_namespace}.{".".join(parts)}"
|
|
762
|
+
|
|
763
|
+
|
|
756
764
|
def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
757
765
|
if not isinstance(stype, builder.SpecTypeDefn):
|
|
758
766
|
return
|
|
@@ -781,6 +789,9 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
781
789
|
ctx.out.write(f"{stype.name} = typing.Annotated[\n")
|
|
782
790
|
ctx.out.write(f"{INDENT}{refer_to(ctx, stype.get_backing_type())},\n")
|
|
783
791
|
ctx.out.write(f"{INDENT}serial_union_annotation(\n")
|
|
792
|
+
ctx.out.write(
|
|
793
|
+
f"{INDENT}named_type_path={util.encode_common_string(_named_type_path(ctx, stype))},\n"
|
|
794
|
+
)
|
|
784
795
|
if stype.discriminator is not None:
|
|
785
796
|
ctx.out.write(
|
|
786
797
|
f"{INDENT * 2}discriminator={util.encode_common_string(stype.discriminator)},\n"
|
|
@@ -822,28 +833,27 @@ def _emit_type(ctx: Context, stype: builder.SpecType) -> None:
|
|
|
822
833
|
|
|
823
834
|
_emit_generic(ctx, stype.get_generic())
|
|
824
835
|
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
)
|
|
831
|
-
ctx.use_serial_class = True
|
|
832
|
-
ctx.out.write("@serial_class(\n")
|
|
836
|
+
# Emit serial_class decorator
|
|
837
|
+
ctx.use_serial_class = True
|
|
838
|
+
ctx.out.write("@serial_class(\n")
|
|
839
|
+
ctx.out.write(
|
|
840
|
+
f"{INDENT}named_type_path={util.encode_common_string(_named_type_path(ctx, stype))},\n"
|
|
841
|
+
)
|
|
833
842
|
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
843
|
+
def write_values(key: str, values: set[str]) -> None:
|
|
844
|
+
if len(values) == 0:
|
|
845
|
+
return
|
|
846
|
+
value_str = ", ".join([f'"{name}"' for name in sorted(values)])
|
|
847
|
+
ctx.out.write(f"{INDENT}{key}={{{value_str}}},\n")
|
|
839
848
|
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
849
|
+
write_values("unconverted_keys", unconverted_keys)
|
|
850
|
+
write_values("unconverted_values", unconverted_values)
|
|
851
|
+
write_values("to_string_values", to_string_values)
|
|
852
|
+
write_values("parse_require", parse_require)
|
|
844
853
|
|
|
845
|
-
|
|
854
|
+
ctx.out.write(")\n")
|
|
846
855
|
|
|
856
|
+
# Emit dataclass decorator
|
|
847
857
|
dataclass = "@dataclasses.dataclass"
|
|
848
858
|
dc_args = []
|
|
849
859
|
if stype.is_kw_only():
|
|
@@ -1275,7 +1285,9 @@ def _emit_async_batch_processor(
|
|
|
1275
1285
|
|
|
1276
1286
|
async_batch_processor_out = io.StringIO()
|
|
1277
1287
|
ctx = Context(
|
|
1278
|
-
out=io.StringIO(),
|
|
1288
|
+
out=io.StringIO(),
|
|
1289
|
+
namespace=builder.SpecNamespace("async_batch_processor"),
|
|
1290
|
+
builder=spec_builder,
|
|
1279
1291
|
)
|
|
1280
1292
|
|
|
1281
1293
|
for namespace in sorted(
|
|
@@ -1325,7 +1337,11 @@ def _emit_client_class(
|
|
|
1325
1337
|
return
|
|
1326
1338
|
|
|
1327
1339
|
client_base_out = io.StringIO()
|
|
1328
|
-
ctx = Context(
|
|
1340
|
+
ctx = Context(
|
|
1341
|
+
out=io.StringIO(),
|
|
1342
|
+
builder=spec_builder,
|
|
1343
|
+
namespace=builder.SpecNamespace("client_base"),
|
|
1344
|
+
)
|
|
1329
1345
|
for namespace in sorted(
|
|
1330
1346
|
spec_builder.namespaces.values(),
|
|
1331
1347
|
key=lambda ns: _resolve_namespace_name(ns),
|
|
@@ -42,7 +42,9 @@ def find_and_handle_files(
|
|
|
42
42
|
|
|
43
43
|
|
|
44
44
|
def load_types(config: Config) -> Optional[SpecBuilder]:
|
|
45
|
-
builder = SpecBuilder(
|
|
45
|
+
builder = SpecBuilder(
|
|
46
|
+
api_endpoints=config.api_endpoint, top_namespace=config.top_namespace
|
|
47
|
+
)
|
|
46
48
|
|
|
47
49
|
def handle_builder_add(
|
|
48
50
|
file_name: str, file_content: str, handler: Callable[[str, str, str], None]
|
|
@@ -115,4 +117,3 @@ def load_types(config: Config) -> Optional[SpecBuilder]:
|
|
|
115
117
|
return None
|
|
116
118
|
|
|
117
119
|
return builder
|
|
118
|
-
return True
|
|
@@ -65,7 +65,7 @@ class ClientConfig(ClientConfigOptions):
|
|
|
65
65
|
OAUTH_REFRESH_WINDOW_SECONDS = 60 * 5
|
|
66
66
|
|
|
67
67
|
|
|
68
|
-
class APIResponseError(
|
|
68
|
+
class APIResponseError(Exception):
|
|
69
69
|
status_code: int
|
|
70
70
|
message: str
|
|
71
71
|
extra_details: dict[str, JsonValue] | None
|
|
@@ -107,7 +107,7 @@ class APIResponseError(BaseException):
|
|
|
107
107
|
)
|
|
108
108
|
|
|
109
109
|
|
|
110
|
-
class SDKError(
|
|
110
|
+
class SDKError(Exception):
|
|
111
111
|
message: str
|
|
112
112
|
request_id: str
|
|
113
113
|
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import argparse
|
|
2
|
+
|
|
3
|
+
from opentelemetry.trace import get_current_span
|
|
4
|
+
|
|
5
|
+
from uncountable.core.environment import get_local_admin_server_port
|
|
6
|
+
from uncountable.integration.queue_runner.command_server.command_client import (
|
|
7
|
+
send_job_queue_message,
|
|
8
|
+
)
|
|
9
|
+
from uncountable.integration.telemetry import Logger
|
|
10
|
+
from uncountable.types import queued_job_t
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def main() -> None:
|
|
14
|
+
logger = Logger(get_current_span())
|
|
15
|
+
|
|
16
|
+
parser = argparse.ArgumentParser(
|
|
17
|
+
description="Process a job with a given command and job ID."
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
parser.add_argument(
|
|
21
|
+
"command",
|
|
22
|
+
type=str,
|
|
23
|
+
choices=["run"],
|
|
24
|
+
help="The command to execute (e.g., 'run')",
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
parser.add_argument("job_id", type=str, help="The ID of the job to process")
|
|
28
|
+
|
|
29
|
+
parser.add_argument(
|
|
30
|
+
"--host", type=str, default="localhost", nargs="?", help="The host to run on"
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
args = parser.parse_args()
|
|
34
|
+
|
|
35
|
+
with logger.push_scope(args.command):
|
|
36
|
+
if args.command == "run":
|
|
37
|
+
send_job_queue_message(
|
|
38
|
+
job_ref_name=args.job_id,
|
|
39
|
+
payload=queued_job_t.QueuedJobPayload(
|
|
40
|
+
invocation_context=queued_job_t.InvocationContextManual()
|
|
41
|
+
),
|
|
42
|
+
host=args.host,
|
|
43
|
+
port=get_local_admin_server_port(),
|
|
44
|
+
)
|
|
45
|
+
else:
|
|
46
|
+
parser.print_usage()
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
main()
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
from uncountable.integration.db.connect import IntegrationDBService, create_db_engine
|
|
2
|
+
from uncountable.integration.scan_profiles import load_profiles
|
|
3
|
+
from uncountable.integration.server import IntegrationServer
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def main() -> None:
|
|
7
|
+
with IntegrationServer(create_db_engine(IntegrationDBService.CRON)) as server:
|
|
8
|
+
server.register_jobs(load_profiles())
|
|
9
|
+
server.serve_forever()
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
if __name__ == "__main__":
|
|
13
|
+
main()
|
|
@@ -102,8 +102,12 @@ def run_queued_job(
|
|
|
102
102
|
payload=payload,
|
|
103
103
|
)
|
|
104
104
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
105
|
+
try:
|
|
106
|
+
return execute_job(
|
|
107
|
+
args=args,
|
|
108
|
+
profile_metadata=job_details.profile_metadata,
|
|
109
|
+
job_definition=job_details.job_definition,
|
|
110
|
+
)
|
|
111
|
+
except Exception as e:
|
|
112
|
+
job_logger.log_exception(e)
|
|
113
|
+
return job_definition_t.JobResult(success=False)
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import signal
|
|
2
|
+
from dataclasses import asdict
|
|
3
|
+
from types import TracebackType
|
|
4
|
+
from typing import Optional, assert_never
|
|
5
|
+
|
|
6
|
+
from apscheduler.executors.pool import ThreadPoolExecutor
|
|
7
|
+
from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
|
|
8
|
+
from apscheduler.schedulers.background import BackgroundScheduler
|
|
9
|
+
from apscheduler.schedulers.base import BaseScheduler
|
|
10
|
+
from apscheduler.triggers.cron import CronTrigger
|
|
11
|
+
from opentelemetry.trace import get_current_span
|
|
12
|
+
from sqlalchemy.engine.base import Engine
|
|
13
|
+
|
|
14
|
+
from uncountable.integration.cron import CronJobArgs, cron_job_executor
|
|
15
|
+
from uncountable.integration.scan_profiles import ProfileDetails
|
|
16
|
+
from uncountable.integration.telemetry import Logger
|
|
17
|
+
from uncountable.types import base_t
|
|
18
|
+
from uncountable.types.job_definition_t import (
|
|
19
|
+
CronJobDefinition,
|
|
20
|
+
ProfileMetadata,
|
|
21
|
+
WebhookJobDefinition,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
_MAX_APSCHEDULER_CONCURRENT_JOBS = 1
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
class IntegrationServer:
|
|
28
|
+
_scheduler: BaseScheduler
|
|
29
|
+
_engine: Engine
|
|
30
|
+
_server_logger: Logger
|
|
31
|
+
|
|
32
|
+
def __init__(self, engine: Engine) -> None:
|
|
33
|
+
self._engine = engine
|
|
34
|
+
self._scheduler = BackgroundScheduler(
|
|
35
|
+
timezone="UTC",
|
|
36
|
+
jobstores={"default": SQLAlchemyJobStore(engine=engine)},
|
|
37
|
+
executors={"default": ThreadPoolExecutor(_MAX_APSCHEDULER_CONCURRENT_JOBS)},
|
|
38
|
+
)
|
|
39
|
+
self._server_logger = Logger(get_current_span())
|
|
40
|
+
|
|
41
|
+
def register_jobs(self, profiles: list[ProfileDetails]) -> None:
|
|
42
|
+
valid_job_ids = []
|
|
43
|
+
for profile in profiles:
|
|
44
|
+
for job_defn in profile.definition.jobs:
|
|
45
|
+
valid_job_ids.append(job_defn.id)
|
|
46
|
+
profile_metadata = ProfileMetadata(
|
|
47
|
+
name=profile.name,
|
|
48
|
+
auth_retrieval=profile.definition.auth_retrieval,
|
|
49
|
+
base_url=profile.definition.base_url,
|
|
50
|
+
client_options=profile.definition.client_options,
|
|
51
|
+
)
|
|
52
|
+
match job_defn:
|
|
53
|
+
case CronJobDefinition():
|
|
54
|
+
# Add to ap scheduler
|
|
55
|
+
job_kwargs = asdict(
|
|
56
|
+
CronJobArgs(
|
|
57
|
+
definition=job_defn, profile_metadata=profile_metadata
|
|
58
|
+
)
|
|
59
|
+
)
|
|
60
|
+
try:
|
|
61
|
+
existing_job = self._scheduler.get_job(job_defn.id)
|
|
62
|
+
except ValueError as e:
|
|
63
|
+
self._server_logger.log_warning(
|
|
64
|
+
f"could not reconstitute job {job_defn.id}: {e}"
|
|
65
|
+
)
|
|
66
|
+
self._scheduler.remove_job(job_defn.id)
|
|
67
|
+
existing_job = None
|
|
68
|
+
if existing_job is not None:
|
|
69
|
+
existing_job.modify(
|
|
70
|
+
name=job_defn.name,
|
|
71
|
+
kwargs=job_kwargs,
|
|
72
|
+
misfire_grace_time=None,
|
|
73
|
+
)
|
|
74
|
+
existing_job.reschedule(
|
|
75
|
+
CronTrigger.from_crontab(job_defn.cron_spec)
|
|
76
|
+
)
|
|
77
|
+
if not job_defn.enabled:
|
|
78
|
+
existing_job.pause()
|
|
79
|
+
else:
|
|
80
|
+
existing_job.resume()
|
|
81
|
+
else:
|
|
82
|
+
job_opts: dict[str, base_t.JsonValue] = {}
|
|
83
|
+
if not job_defn.enabled:
|
|
84
|
+
job_opts["next_run_time"] = None
|
|
85
|
+
self._scheduler.add_job(
|
|
86
|
+
cron_job_executor,
|
|
87
|
+
# IMPROVE: reconsider these defaults
|
|
88
|
+
max_instances=1,
|
|
89
|
+
coalesce=True,
|
|
90
|
+
trigger=CronTrigger.from_crontab(job_defn.cron_spec),
|
|
91
|
+
name=job_defn.name,
|
|
92
|
+
id=job_defn.id,
|
|
93
|
+
kwargs=job_kwargs,
|
|
94
|
+
misfire_grace_time=None,
|
|
95
|
+
**job_opts,
|
|
96
|
+
)
|
|
97
|
+
case WebhookJobDefinition():
|
|
98
|
+
pass
|
|
99
|
+
case _:
|
|
100
|
+
assert_never(job_defn)
|
|
101
|
+
all_jobs = self._scheduler.get_jobs()
|
|
102
|
+
for job in all_jobs:
|
|
103
|
+
if job.id not in valid_job_ids:
|
|
104
|
+
self._scheduler.remove_job(job.id)
|
|
105
|
+
|
|
106
|
+
def serve_forever(self) -> None:
|
|
107
|
+
signal.pause()
|
|
108
|
+
|
|
109
|
+
def _start_apscheduler(self) -> None:
|
|
110
|
+
self._scheduler.start()
|
|
111
|
+
|
|
112
|
+
def _stop_apscheduler(self) -> None:
|
|
113
|
+
self._scheduler.shutdown()
|
|
114
|
+
|
|
115
|
+
def __enter__(self) -> "IntegrationServer":
|
|
116
|
+
self._start_apscheduler()
|
|
117
|
+
return self
|
|
118
|
+
|
|
119
|
+
def __exit__(
|
|
120
|
+
self,
|
|
121
|
+
exc_type: Optional[type[BaseException]],
|
|
122
|
+
exc_val: Optional[BaseException],
|
|
123
|
+
exc_tb: Optional[TracebackType],
|
|
124
|
+
) -> None:
|
|
125
|
+
self._stop_apscheduler()
|
|
@@ -41,6 +41,7 @@ class RequestMethod(StrEnum):
|
|
|
41
41
|
|
|
42
42
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
43
43
|
@serial_class(
|
|
44
|
+
named_type_path="sdk.api.batch.execute_batch.BatchRequest",
|
|
44
45
|
unconverted_values={"data"},
|
|
45
46
|
)
|
|
46
47
|
@dataclasses.dataclass(kw_only=True)
|
|
@@ -51,6 +52,9 @@ class BatchRequest:
|
|
|
51
52
|
|
|
52
53
|
|
|
53
54
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
55
|
+
@serial_class(
|
|
56
|
+
named_type_path="sdk.api.batch.execute_batch.Arguments",
|
|
57
|
+
)
|
|
54
58
|
@dataclasses.dataclass(kw_only=True)
|
|
55
59
|
class Arguments:
|
|
56
60
|
requests: list[BatchRequest]
|
|
@@ -58,6 +62,7 @@ class Arguments:
|
|
|
58
62
|
|
|
59
63
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
60
64
|
@serial_class(
|
|
65
|
+
named_type_path="sdk.api.batch.execute_batch.BatchResponse",
|
|
61
66
|
unconverted_values={"response"},
|
|
62
67
|
)
|
|
63
68
|
@dataclasses.dataclass(kw_only=True)
|
|
@@ -69,6 +74,9 @@ class BatchResponse:
|
|
|
69
74
|
|
|
70
75
|
|
|
71
76
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
77
|
+
@serial_class(
|
|
78
|
+
named_type_path="sdk.api.batch.execute_batch.Data",
|
|
79
|
+
)
|
|
72
80
|
@dataclasses.dataclass(kw_only=True)
|
|
73
81
|
class Data:
|
|
74
82
|
responses: list[BatchResponse]
|
|
@@ -8,6 +8,7 @@ import typing # noqa: F401
|
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
10
|
import dataclasses
|
|
11
|
+
from pkgs.serialization import serial_class
|
|
11
12
|
from ... import async_batch_t
|
|
12
13
|
from ... import base_t
|
|
13
14
|
|
|
@@ -23,12 +24,18 @@ ENDPOINT_PATH = "api/external/batch/execute_batch_load_async"
|
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
27
|
+
@serial_class(
|
|
28
|
+
named_type_path="sdk.api.batch.execute_batch_load_async.Arguments",
|
|
29
|
+
)
|
|
26
30
|
@dataclasses.dataclass(kw_only=True)
|
|
27
31
|
class Arguments:
|
|
28
32
|
requests: list[async_batch_t.AsyncBatchRequest]
|
|
29
33
|
|
|
30
34
|
|
|
31
35
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
36
|
+
@serial_class(
|
|
37
|
+
named_type_path="sdk.api.batch.execute_batch_load_async.Data",
|
|
38
|
+
)
|
|
32
39
|
@dataclasses.dataclass(kw_only=True)
|
|
33
40
|
class Data:
|
|
34
41
|
job_id: base_t.ObjectId
|
|
@@ -25,12 +25,18 @@ ENDPOINT_PATH = "api/external/chemical/convert_chemical_formats"
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
28
|
+
@serial_class(
|
|
29
|
+
named_type_path="sdk.api.chemical.convert_chemical_formats.ChemicalStructureFile",
|
|
30
|
+
)
|
|
28
31
|
@dataclasses.dataclass(kw_only=True)
|
|
29
32
|
class ChemicalStructureFile:
|
|
30
33
|
struct_file: str
|
|
31
34
|
|
|
32
35
|
|
|
33
36
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
37
|
+
@serial_class(
|
|
38
|
+
named_type_path="sdk.api.chemical.convert_chemical_formats.Arguments",
|
|
39
|
+
)
|
|
34
40
|
@dataclasses.dataclass(kw_only=True)
|
|
35
41
|
class Arguments:
|
|
36
42
|
source_chemical_structures: list[ChemicalStructureFile]
|
|
@@ -42,6 +48,7 @@ UncountableChemicalStructure = dict[str, base_t.JsonValue]
|
|
|
42
48
|
|
|
43
49
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
44
50
|
@serial_class(
|
|
51
|
+
named_type_path="sdk.api.chemical.convert_chemical_formats.Data",
|
|
45
52
|
unconverted_values={"chemical_structures"},
|
|
46
53
|
)
|
|
47
54
|
@dataclasses.dataclass(kw_only=True)
|
|
@@ -8,6 +8,7 @@ import typing # noqa: F401
|
|
|
8
8
|
import datetime # noqa: F401
|
|
9
9
|
from decimal import Decimal # noqa: F401
|
|
10
10
|
import dataclasses
|
|
11
|
+
from pkgs.serialization import serial_class
|
|
11
12
|
from ... import base_t
|
|
12
13
|
from ... import entity_t
|
|
13
14
|
from ... import field_values_t
|
|
@@ -25,20 +26,29 @@ ENDPOINT_PATH = "api/external/entity/external_create_entities"
|
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
29
|
+
@serial_class(
|
|
30
|
+
named_type_path="sdk.api.entity.create_entities.EntityToCreate",
|
|
31
|
+
)
|
|
28
32
|
@dataclasses.dataclass(kw_only=True)
|
|
29
33
|
class EntityToCreate:
|
|
30
34
|
field_values: typing.Optional[typing.Optional[list[field_values_t.FieldRefNameValue]]] = None
|
|
31
35
|
|
|
32
36
|
|
|
33
37
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
38
|
+
@serial_class(
|
|
39
|
+
named_type_path="sdk.api.entity.create_entities.Arguments",
|
|
40
|
+
)
|
|
34
41
|
@dataclasses.dataclass(kw_only=True)
|
|
35
42
|
class Arguments:
|
|
36
43
|
definition_id: base_t.ObjectId
|
|
37
|
-
entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL], typing.Literal[entity_t.EntityType.INGREDIENT_TAG_MAP], typing.Literal[entity_t.EntityType.INGREDIENT_TAG]]
|
|
44
|
+
entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL], typing.Literal[entity_t.EntityType.INGREDIENT_TAG_MAP], typing.Literal[entity_t.EntityType.INGREDIENT_TAG], typing.Literal[entity_t.EntityType.OUTPUT]]
|
|
38
45
|
entities_to_create: list[EntityToCreate]
|
|
39
46
|
|
|
40
47
|
|
|
41
48
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
49
|
+
@serial_class(
|
|
50
|
+
named_type_path="sdk.api.entity.create_entities.Data",
|
|
51
|
+
)
|
|
42
52
|
@dataclasses.dataclass(kw_only=True)
|
|
43
53
|
class Data:
|
|
44
54
|
entities: list[entity_t.Entity]
|
|
@@ -27,6 +27,7 @@ ENDPOINT_PATH = "api/external/entity/external_create_entity"
|
|
|
27
27
|
|
|
28
28
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
29
29
|
@serial_class(
|
|
30
|
+
named_type_path="sdk.api.entity.create_entity.EntityFieldInitialValue",
|
|
30
31
|
unconverted_values={"value"},
|
|
31
32
|
)
|
|
32
33
|
@dataclasses.dataclass(kw_only=True)
|
|
@@ -37,14 +38,20 @@ class EntityFieldInitialValue:
|
|
|
37
38
|
|
|
38
39
|
|
|
39
40
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
41
|
+
@serial_class(
|
|
42
|
+
named_type_path="sdk.api.entity.create_entity.Arguments",
|
|
43
|
+
)
|
|
40
44
|
@dataclasses.dataclass(kw_only=True)
|
|
41
45
|
class Arguments:
|
|
42
46
|
definition_id: base_t.ObjectId
|
|
43
|
-
entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL], typing.Literal[entity_t.EntityType.INGREDIENT_TAG_MAP], typing.Literal[entity_t.EntityType.INGREDIENT_TAG]]
|
|
47
|
+
entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.INVENTORY_AMOUNT], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS], typing.Literal[entity_t.EntityType.FIELD_OPTION_SET], typing.Literal[entity_t.EntityType.WEBHOOK], typing.Literal[entity_t.EntityType.SPECS], typing.Literal[entity_t.EntityType.GOAL], typing.Literal[entity_t.EntityType.INGREDIENT_TAG_MAP], typing.Literal[entity_t.EntityType.INGREDIENT_TAG], typing.Literal[entity_t.EntityType.OUTPUT]]
|
|
44
48
|
field_values: typing.Optional[typing.Optional[list[field_values_t.FieldRefNameValue]]] = None
|
|
45
49
|
|
|
46
50
|
|
|
47
51
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
52
|
+
@serial_class(
|
|
53
|
+
named_type_path="sdk.api.entity.create_entity.Data",
|
|
54
|
+
)
|
|
48
55
|
@dataclasses.dataclass(kw_only=True)
|
|
49
56
|
class Data:
|
|
50
57
|
entity: entity_t.Entity
|