UncountablePythonSDK 0.0.64__tar.gz → 0.0.65__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.64/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.65}/PKG-INFO +1 -1
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
- uncountablepythonsdk-0.0.65/uncountable/integration/cron.py +45 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/server.py +2 -1
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/telemetry.py +11 -12
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/webhook_server/entrypoint.py +27 -21
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/edit_recipe_inputs.py +17 -2
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/inputs.py +1 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/inputs_t.py +17 -0
- uncountablepythonsdk-0.0.64/uncountable/integration/cron.py +0 -43
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/.github/workflows/publish.yml +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/README.md +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/UncountablePythonSDK.egg-info/SOURCES.txt +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/UncountablePythonSDK.egg-info/requires.txt +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/quickstart.md +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/argument_parser.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/_s3_session.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/file_type_utils.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/serial_class.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/serial_union.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization_util/serialization_helpers.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/builder.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/config.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_open_api.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_typescript_util.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/core/client.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/core/file_upload.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/job.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/scan_profiles.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/list_entities.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/create_recipe.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/lock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/uploader/__init__.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/async_batch_processor.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/async_batch_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/base_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/calculations_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/chemical_structure_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/client_base.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/client_config.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/client_config_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/curves_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/entity_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/experiment_groups_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/field_values_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/fields_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/generic_upload.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/generic_upload_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/id_source_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/identifier_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/input_attributes_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/job_definition.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/job_definition_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/outputs_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/overrides.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/overrides_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/permissions_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/phases_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/post_base_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_identifiers_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_links_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_output_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_tags_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipe_workflow_steps_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/recipes_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/response_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/secret_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/secret_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/units_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/users_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/webhook_job.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/webhook_job_t.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/workflows.py +0 -0
- {uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/types/workflows_t.py +0 -0
{uncountablepythonsdk-0.0.64/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.65}/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.65
|
|
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.64 → uncountablepythonsdk-0.0.65/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.65
|
|
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
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
from dataclasses import dataclass
|
|
2
|
+
|
|
3
|
+
from pkgs.argument_parser import CachedParser
|
|
4
|
+
from uncountable.core.async_batch import AsyncBatchProcessor
|
|
5
|
+
from uncountable.integration.construct_client import construct_uncountable_client
|
|
6
|
+
from uncountable.integration.executors.executors import execute_job
|
|
7
|
+
from uncountable.integration.job import CronJobArguments
|
|
8
|
+
from uncountable.integration.telemetry import JobLogger, get_otel_tracer
|
|
9
|
+
from uncountable.types.job_definition_t import JobDefinition, ProfileMetadata
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
@dataclass
|
|
13
|
+
class CronJobArgs:
|
|
14
|
+
definition: JobDefinition
|
|
15
|
+
profile_metadata: ProfileMetadata
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
cron_args_parser = CachedParser(CronJobArgs)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def cron_job_executor(**kwargs: dict) -> None:
|
|
22
|
+
args_passed = cron_args_parser.parse_storage(kwargs)
|
|
23
|
+
with get_otel_tracer().start_as_current_span(name="cron_executor") as span:
|
|
24
|
+
job_logger = JobLogger(
|
|
25
|
+
base_span=span,
|
|
26
|
+
profile_metadata=args_passed.profile_metadata,
|
|
27
|
+
job_definition=args_passed.definition,
|
|
28
|
+
)
|
|
29
|
+
client = construct_uncountable_client(
|
|
30
|
+
profile_meta=args_passed.profile_metadata, job_logger=job_logger
|
|
31
|
+
)
|
|
32
|
+
batch_processor = AsyncBatchProcessor(client=client)
|
|
33
|
+
args = CronJobArguments(
|
|
34
|
+
job_definition=args_passed.definition,
|
|
35
|
+
client=client,
|
|
36
|
+
batch_processor=batch_processor,
|
|
37
|
+
profile_metadata=args_passed.profile_metadata,
|
|
38
|
+
logger=job_logger,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
execute_job(
|
|
42
|
+
args=args,
|
|
43
|
+
profile_metadata=args_passed.profile_metadata,
|
|
44
|
+
job_definition=args_passed.definition,
|
|
45
|
+
)
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/server.py
RENAMED
|
@@ -8,6 +8,7 @@ from apscheduler.jobstores.sqlalchemy import SQLAlchemyJobStore
|
|
|
8
8
|
from apscheduler.schedulers.background import BackgroundScheduler
|
|
9
9
|
from apscheduler.schedulers.base import BaseScheduler
|
|
10
10
|
from apscheduler.triggers.cron import CronTrigger
|
|
11
|
+
from opentelemetry.trace import get_current_span
|
|
11
12
|
from sqlalchemy.engine.base import Engine
|
|
12
13
|
|
|
13
14
|
from uncountable.integration.cron import CronJobArgs, cron_job_executor
|
|
@@ -37,7 +38,7 @@ class IntegrationServer:
|
|
|
37
38
|
jobstores={"default": SQLAlchemyJobStore(engine=engine)},
|
|
38
39
|
executors={"default": ThreadPoolExecutor(_MAX_APSCHEDULER_CONCURRENT_JOBS)},
|
|
39
40
|
)
|
|
40
|
-
self._server_logger = Logger()
|
|
41
|
+
self._server_logger = Logger(get_current_span())
|
|
41
42
|
|
|
42
43
|
def register_profile(
|
|
43
44
|
self,
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/telemetry.py
RENAMED
|
@@ -74,18 +74,17 @@ class LogSeverity(StrEnum):
|
|
|
74
74
|
|
|
75
75
|
|
|
76
76
|
class Logger:
|
|
77
|
-
current_span: Span
|
|
77
|
+
current_span: Span
|
|
78
|
+
|
|
79
|
+
def __init__(self, base_span: Span) -> None:
|
|
80
|
+
self.current_span = base_span
|
|
78
81
|
|
|
79
82
|
@property
|
|
80
|
-
def current_span_id(self) -> int
|
|
81
|
-
if self.current_span is None:
|
|
82
|
-
return None
|
|
83
|
+
def current_span_id(self) -> int:
|
|
83
84
|
return self.current_span.get_span_context().span_id
|
|
84
85
|
|
|
85
86
|
@property
|
|
86
87
|
def current_trace_id(self) -> int | None:
|
|
87
|
-
if self.current_span is None:
|
|
88
|
-
return None
|
|
89
88
|
return self.current_span.get_span_context().trace_id
|
|
90
89
|
|
|
91
90
|
def _patch_attributes(self, attributes: Attributes | None) -> Attributes:
|
|
@@ -134,10 +133,9 @@ class Logger:
|
|
|
134
133
|
) -> None:
|
|
135
134
|
traceback_str = "".join(traceback.format_tb(exception.__traceback__))
|
|
136
135
|
patched_attributes = self._patch_attributes(attributes)
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
)
|
|
136
|
+
self.current_span.record_exception(
|
|
137
|
+
exception=exception, attributes=patched_attributes
|
|
138
|
+
)
|
|
141
139
|
self.log_error(
|
|
142
140
|
message=f"error: {message}\nexception: {exception}{traceback_str}",
|
|
143
141
|
attributes=patched_attributes,
|
|
@@ -149,8 +147,7 @@ class Logger:
|
|
|
149
147
|
) -> Generator[typing.Self, None, None]:
|
|
150
148
|
with get_otel_tracer().start_as_current_span(
|
|
151
149
|
scope_name, attributes=self._patch_attributes(attributes)
|
|
152
|
-
)
|
|
153
|
-
self.current_span = span
|
|
150
|
+
):
|
|
154
151
|
yield self
|
|
155
152
|
|
|
156
153
|
|
|
@@ -158,11 +155,13 @@ class JobLogger(Logger):
|
|
|
158
155
|
def __init__(
|
|
159
156
|
self,
|
|
160
157
|
*,
|
|
158
|
+
base_span: Span,
|
|
161
159
|
profile_metadata: job_definition_t.ProfileMetadata,
|
|
162
160
|
job_definition: job_definition_t.JobDefinition,
|
|
163
161
|
) -> None:
|
|
164
162
|
self.profile_metadata = profile_metadata
|
|
165
163
|
self.job_definition = job_definition
|
|
164
|
+
super().__init__(base_span)
|
|
166
165
|
|
|
167
166
|
def _patch_attributes(self, attributes: Attributes | None) -> Attributes:
|
|
168
167
|
patched_attributes: dict[str, base_t.JsonValue] = {
|
|
@@ -5,6 +5,7 @@ import flask
|
|
|
5
5
|
import simplejson
|
|
6
6
|
from flask.typing import ResponseReturnValue
|
|
7
7
|
from flask.wrappers import Response
|
|
8
|
+
from opentelemetry.trace import get_current_span
|
|
8
9
|
from uncountable.core.async_batch import AsyncBatchProcessor
|
|
9
10
|
from uncountable.core.environment import get_integration_env, get_webhook_server_port
|
|
10
11
|
from uncountable.integration.construct_client import construct_uncountable_client
|
|
@@ -12,7 +13,7 @@ from uncountable.integration.executors.executors import execute_job
|
|
|
12
13
|
from uncountable.integration.job import WebhookJobArguments
|
|
13
14
|
from uncountable.integration.scan_profiles import load_profiles
|
|
14
15
|
from uncountable.integration.secret_retrieval.retrieve_secret import retrieve_secret
|
|
15
|
-
from uncountable.integration.telemetry import JobLogger, Logger
|
|
16
|
+
from uncountable.integration.telemetry import JobLogger, Logger, get_otel_tracer
|
|
16
17
|
from uncountable.types import job_definition_t, webhook_job_t
|
|
17
18
|
|
|
18
19
|
from pkgs.argument_parser import CachedParser
|
|
@@ -109,26 +110,31 @@ def register_route(
|
|
|
109
110
|
passed_signature=passed_signature,
|
|
110
111
|
)
|
|
111
112
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
)
|
|
115
|
-
|
|
116
|
-
profile_meta=profile_meta, job_logger=job_logger
|
|
117
|
-
)
|
|
118
|
-
execute_job(
|
|
119
|
-
job_definition=job,
|
|
120
|
-
profile_metadata=profile_meta,
|
|
121
|
-
args=WebhookJobArguments(
|
|
122
|
-
job_definition=job,
|
|
113
|
+
with get_otel_tracer().start_as_current_span(
|
|
114
|
+
"webhook_executor"
|
|
115
|
+
) as span:
|
|
116
|
+
job_logger = JobLogger(
|
|
123
117
|
profile_metadata=profile_metadata,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
118
|
+
job_definition=job,
|
|
119
|
+
base_span=span,
|
|
120
|
+
)
|
|
121
|
+
client = construct_uncountable_client(
|
|
122
|
+
profile_meta=profile_meta, job_logger=job_logger
|
|
123
|
+
)
|
|
124
|
+
execute_job(
|
|
125
|
+
job_definition=job,
|
|
126
|
+
profile_metadata=profile_meta,
|
|
127
|
+
args=WebhookJobArguments(
|
|
128
|
+
job_definition=job,
|
|
129
|
+
profile_metadata=profile_metadata,
|
|
130
|
+
client=client,
|
|
131
|
+
batch_processor=AsyncBatchProcessor(client=client),
|
|
132
|
+
logger=job_logger,
|
|
133
|
+
payload=webhook_payload,
|
|
134
|
+
),
|
|
135
|
+
)
|
|
136
|
+
|
|
137
|
+
return flask.jsonify(WebhookResponse())
|
|
132
138
|
except WebhookException as e:
|
|
133
139
|
server_logger.log_exception(e)
|
|
134
140
|
return e.make_error_response()
|
|
@@ -141,7 +147,7 @@ def register_route(
|
|
|
141
147
|
|
|
142
148
|
profiles = load_profiles()
|
|
143
149
|
for profile in profiles:
|
|
144
|
-
server_logger = Logger()
|
|
150
|
+
server_logger = Logger(get_current_span())
|
|
145
151
|
profile_metadata = job_definition_t.ProfileMetadata(
|
|
146
152
|
name=profile.name,
|
|
147
153
|
auth_retrieval=profile.definition.auth_retrieval,
|
|
@@ -12,6 +12,7 @@ import dataclasses
|
|
|
12
12
|
from pkgs.serialization import serial_class
|
|
13
13
|
from pkgs.serialization import serial_union_annotation
|
|
14
14
|
from ... import identifier_t
|
|
15
|
+
from ... import inputs_t
|
|
15
16
|
from ... import recipe_inputs_t
|
|
16
17
|
from ... import recipe_workflow_steps_t
|
|
17
18
|
|
|
@@ -29,6 +30,7 @@ __all__: list[str] = [
|
|
|
29
30
|
"RecipeInputEditClearInputs",
|
|
30
31
|
"RecipeInputEditInputBase",
|
|
31
32
|
"RecipeInputEditSetLot",
|
|
33
|
+
"RecipeInputEditSetRole",
|
|
32
34
|
"RecipeInputEditType",
|
|
33
35
|
"RecipeInputEditUpdateAnnotations",
|
|
34
36
|
"RecipeInputEditUpsertInput",
|
|
@@ -47,6 +49,7 @@ class RecipeInputEditType(StrEnum):
|
|
|
47
49
|
SET_LOT = "set_lot"
|
|
48
50
|
CHANGE_BASIS = "change_basis"
|
|
49
51
|
ADD_INSTRUCTIONS = "add_instructions"
|
|
52
|
+
SET_ROLE = "set_role"
|
|
50
53
|
|
|
51
54
|
|
|
52
55
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -75,6 +78,7 @@ class RecipeInputEditInputBase(RecipeInputEditBase):
|
|
|
75
78
|
input_value_type: recipe_inputs_t.InputValueType = recipe_inputs_t.InputValueType.VALUE
|
|
76
79
|
value_numeric: typing.Optional[Decimal] = None
|
|
77
80
|
value_str: typing.Optional[str] = None
|
|
81
|
+
behavior: typing.Optional[inputs_t.IngredientBehavior] = None
|
|
78
82
|
calculation_key: typing.Optional[identifier_t.IdentifierKey] = None
|
|
79
83
|
|
|
80
84
|
|
|
@@ -145,14 +149,24 @@ class AnnotationEdit:
|
|
|
145
149
|
@dataclasses.dataclass(kw_only=True)
|
|
146
150
|
class RecipeInputEditUpdateAnnotations(RecipeInputEditInputBase):
|
|
147
151
|
type: typing.Literal[RecipeInputEditType.UPDATE_ANNOTATIONS] = RecipeInputEditType.UPDATE_ANNOTATIONS
|
|
148
|
-
ingredient_key: identifier_t.IdentifierKey
|
|
149
152
|
clear_first: bool
|
|
150
153
|
annotations: list[AnnotationEdit]
|
|
151
154
|
|
|
152
155
|
|
|
156
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
157
|
+
@serial_class(
|
|
158
|
+
parse_require={"type"},
|
|
159
|
+
)
|
|
160
|
+
@dataclasses.dataclass(kw_only=True)
|
|
161
|
+
class RecipeInputEditSetRole(RecipeInputEditBase):
|
|
162
|
+
type: typing.Literal[RecipeInputEditType.SET_ROLE] = RecipeInputEditType.SET_ROLE
|
|
163
|
+
ingredient_key: identifier_t.IdentifierKey
|
|
164
|
+
ingredient_role_key: typing.Optional[identifier_t.IdentifierKey]
|
|
165
|
+
|
|
166
|
+
|
|
153
167
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
154
168
|
RecipeInputEdit = typing.Annotated[
|
|
155
|
-
typing.Union[RecipeInputEditClearInputs, RecipeInputEditUpsertInput, RecipeInputEditAddInput, RecipeInputEditUpdateAnnotations, RecipeInputEditSetLot, RecipeInputEditChangeBasisViewed, RecipeInputEditAddInstructions],
|
|
169
|
+
typing.Union[RecipeInputEditClearInputs, RecipeInputEditUpsertInput, RecipeInputEditAddInput, RecipeInputEditUpdateAnnotations, RecipeInputEditSetLot, RecipeInputEditChangeBasisViewed, RecipeInputEditAddInstructions, RecipeInputEditSetRole],
|
|
156
170
|
serial_union_annotation(
|
|
157
171
|
discriminator="type",
|
|
158
172
|
discriminator_map={
|
|
@@ -163,6 +177,7 @@ RecipeInputEdit = typing.Annotated[
|
|
|
163
177
|
"set_lot": RecipeInputEditSetLot,
|
|
164
178
|
"change_basis": RecipeInputEditChangeBasisViewed,
|
|
165
179
|
"add_instructions": RecipeInputEditAddInstructions,
|
|
180
|
+
"set_role": RecipeInputEditSetRole,
|
|
166
181
|
},
|
|
167
182
|
),
|
|
168
183
|
]
|
|
@@ -6,5 +6,6 @@
|
|
|
6
6
|
# Kept only for SDK backwards compatibility
|
|
7
7
|
from .inputs_t import IngredientQuantityType as IngredientQuantityType
|
|
8
8
|
from .inputs_t import IngredientType as IngredientType
|
|
9
|
+
from .inputs_t import IngredientBehavior as IngredientBehavior
|
|
9
10
|
from .inputs_t import SimpleInput as SimpleInput
|
|
10
11
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -13,6 +13,7 @@ from pkgs.serialization import serial_string_enum
|
|
|
13
13
|
from . import base_t
|
|
14
14
|
|
|
15
15
|
__all__: list[str] = [
|
|
16
|
+
"IngredientBehavior",
|
|
16
17
|
"IngredientQuantityType",
|
|
17
18
|
"IngredientType",
|
|
18
19
|
"SimpleInput",
|
|
@@ -50,6 +51,22 @@ class IngredientType(StrEnum):
|
|
|
50
51
|
EQUIPMENT = "equipment"
|
|
51
52
|
|
|
52
53
|
|
|
54
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
55
|
+
@serial_string_enum(
|
|
56
|
+
labels={
|
|
57
|
+
"included": "Included",
|
|
58
|
+
"use_quantity": "Use Quantity",
|
|
59
|
+
"not_included": "Not Included",
|
|
60
|
+
"autofill": "Autofill",
|
|
61
|
+
},
|
|
62
|
+
)
|
|
63
|
+
class IngredientBehavior(StrEnum):
|
|
64
|
+
INCLUDED = "included"
|
|
65
|
+
USE_QUANTITY = "use_quantity"
|
|
66
|
+
NOT_INCLUDED = "not_included"
|
|
67
|
+
AUTOFILL = "autofill"
|
|
68
|
+
|
|
69
|
+
|
|
53
70
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
54
71
|
@dataclasses.dataclass(kw_only=True)
|
|
55
72
|
class SimpleInput:
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
from dataclasses import dataclass
|
|
2
|
-
|
|
3
|
-
from pkgs.argument_parser import CachedParser
|
|
4
|
-
from uncountable.core.async_batch import AsyncBatchProcessor
|
|
5
|
-
from uncountable.integration.construct_client import construct_uncountable_client
|
|
6
|
-
from uncountable.integration.executors.executors import execute_job
|
|
7
|
-
from uncountable.integration.job import CronJobArguments
|
|
8
|
-
from uncountable.integration.telemetry import JobLogger
|
|
9
|
-
from uncountable.types.job_definition_t import JobDefinition, ProfileMetadata
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
@dataclass
|
|
13
|
-
class CronJobArgs:
|
|
14
|
-
definition: JobDefinition
|
|
15
|
-
profile_metadata: ProfileMetadata
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
cron_args_parser = CachedParser(CronJobArgs)
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
def cron_job_executor(**kwargs: dict) -> None:
|
|
22
|
-
args_passed = cron_args_parser.parse_storage(kwargs)
|
|
23
|
-
job_logger = JobLogger(
|
|
24
|
-
profile_metadata=args_passed.profile_metadata,
|
|
25
|
-
job_definition=args_passed.definition,
|
|
26
|
-
)
|
|
27
|
-
client = construct_uncountable_client(
|
|
28
|
-
profile_meta=args_passed.profile_metadata, job_logger=job_logger
|
|
29
|
-
)
|
|
30
|
-
batch_processor = AsyncBatchProcessor(client=client)
|
|
31
|
-
args = CronJobArguments(
|
|
32
|
-
job_definition=args_passed.definition,
|
|
33
|
-
client=client,
|
|
34
|
-
batch_processor=batch_processor,
|
|
35
|
-
profile_metadata=args_passed.profile_metadata,
|
|
36
|
-
logger=job_logger,
|
|
37
|
-
)
|
|
38
|
-
|
|
39
|
-
execute_job(
|
|
40
|
-
args=args,
|
|
41
|
-
profile_metadata=args_passed.profile_metadata,
|
|
42
|
-
job_definition=args_passed.definition,
|
|
43
|
-
)
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/.github/workflows/documentation.yml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/browserconfig.xml
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/favicon-16x16.png
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/favicon-32x32.png
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/manifest.json
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/docs/static/favicons/mstile-150x150.png
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/_is_enum.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/_is_namedtuple.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/argument_parser.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/argument_parser/case_convert.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/_gdrive_session.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/_local_session.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/_s3_session.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/_sftp_session.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/filesystem_utils/file_type_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/missing_sentry.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/opaque_key.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/serial_class.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization/serial_union.py
RENAMED
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/serialization_util/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/strenum_compat/strenum_compat.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_open_api_util.py
RENAMED
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_typescript.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/emit_typescript_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/parts/base.py.prepart
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/parts/base.ts.prepart
RENAMED
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/type_info/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/emit_python.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/pkgs/type_spec/value_spec/types.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/db/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/db/connect.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.64 → uncountablepythonsdk-0.0.65}/uncountable/integration/entrypoint.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|