UncountablePythonSDK 0.0.56__tar.gz → 0.0.58__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.56/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.58}/PKG-INFO +1 -1
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58/UncountablePythonSDK.egg-info}/PKG-INFO +1 -1
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/UncountablePythonSDK.egg-info/SOURCES.txt +1 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/core/client.py +3 -1
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/core/file_upload.py +12 -2
- uncountablepythonsdk-0.0.58/uncountable/integration/entrypoint.py +21 -0
- uncountablepythonsdk-0.0.58/uncountable/integration/scan_profiles.py +36 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/telemetry.py +25 -10
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/job_definition.py +1 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/job_definition_t.py +12 -0
- uncountablepythonsdk-0.0.56/uncountable/integration/entrypoint.py +0 -42
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/.github/workflows/publish.yml +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/README.md +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/UncountablePythonSDK.egg-info/requires.txt +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/quickstart.md +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/argument_parser/argument_parser.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/filesystem_utils/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/filesystem_utils/_s3_session.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/filesystem_utils/file_type_utils.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization/serial_class.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization/serial_union.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization_util/serialization_helpers.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/builder.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/config.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/emit_open_api.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/emit_open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/emit_typescript_util.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/core/version.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/job.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/server.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/entity/list_entities.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/create_recipe.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/lock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/uploader/__init__.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/async_batch_processor.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/async_batch_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/base_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/calculations_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/chemical_structure_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/client_base.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/client_config.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/client_config_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/curves_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/entity_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/experiment_groups_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/field_values_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/fields_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/generic_upload.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/generic_upload_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/id_source_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/identifier_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/input_attributes_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/outputs_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/overrides.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/overrides_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/permissions_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/phases_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/post_base_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_identifiers_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_links_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_output_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_tags_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipe_workflow_steps_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/recipes_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/response_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/secret_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/secret_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/units_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/users_t.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/workflows.py +0 -0
- {uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/workflows_t.py +0 -0
{uncountablepythonsdk-0.0.56/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.58}/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.58
|
|
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.56 → uncountablepythonsdk-0.0.58/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.58
|
|
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
|
|
@@ -93,6 +93,7 @@ uncountable/integration/construct_client.py
|
|
|
93
93
|
uncountable/integration/cron.py
|
|
94
94
|
uncountable/integration/entrypoint.py
|
|
95
95
|
uncountable/integration/job.py
|
|
96
|
+
uncountable/integration/scan_profiles.py
|
|
96
97
|
uncountable/integration/server.py
|
|
97
98
|
uncountable/integration/telemetry.py
|
|
98
99
|
uncountable/integration/db/__init__.py
|
|
@@ -155,10 +155,12 @@ class Client(ClientMethods):
|
|
|
155
155
|
):
|
|
156
156
|
self._auth_details = auth_details
|
|
157
157
|
self._base_url = base_url
|
|
158
|
-
self._file_uploader = FileUploader(self._base_url, self._auth_details)
|
|
159
158
|
self._cfg = config or ClientConfig()
|
|
160
159
|
self._session = requests.Session()
|
|
161
160
|
self._session.verify = not self._cfg.allow_insecure_tls
|
|
161
|
+
self._file_uploader = FileUploader(
|
|
162
|
+
self._base_url, self._auth_details, self._cfg.allow_insecure_tls
|
|
163
|
+
)
|
|
162
164
|
|
|
163
165
|
def _get_response_json(
|
|
164
166
|
self, response: requests.Response, request_id: str
|
|
@@ -68,10 +68,17 @@ class UploadFailed(Exception):
|
|
|
68
68
|
class FileUploader:
|
|
69
69
|
_auth_details: AuthDetailsAll
|
|
70
70
|
_base_url: str
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
_allow_insecure_tls: bool
|
|
72
|
+
|
|
73
|
+
def __init__(
|
|
74
|
+
self: Self,
|
|
75
|
+
base_url: str,
|
|
76
|
+
auth_details: AuthDetailsAll,
|
|
77
|
+
allow_insecure_tls: bool = False,
|
|
78
|
+
) -> None:
|
|
73
79
|
self._base_url = base_url
|
|
74
80
|
self._auth_details = auth_details
|
|
81
|
+
self._allow_insecure_tls = allow_insecure_tls
|
|
75
82
|
|
|
76
83
|
async def _upload_file(self: Self, file_upload: FileUpload) -> UploadedFile:
|
|
77
84
|
creation_url = f"{self._base_url}/api/external/file_upload/files"
|
|
@@ -92,6 +99,9 @@ class FileUploader:
|
|
|
92
99
|
file_bytes.bytes_data,
|
|
93
100
|
{"filename": file_bytes.name.encode()},
|
|
94
101
|
client_session=session,
|
|
102
|
+
config=aiotus.RetryConfiguration(
|
|
103
|
+
ssl=False if self._allow_insecure_tls else None
|
|
104
|
+
),
|
|
95
105
|
chunksize=_CHUNK_SIZE,
|
|
96
106
|
)
|
|
97
107
|
if location is None:
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
from uncountable.integration.db.connect import create_db_engine
|
|
2
|
+
from uncountable.integration.scan_profiles import load_profiles
|
|
3
|
+
from uncountable.integration.server import IntegrationServer
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def main(blocking: bool) -> None:
|
|
7
|
+
with IntegrationServer(create_db_engine()) as server:
|
|
8
|
+
for profile_details in load_profiles():
|
|
9
|
+
server.register_profile(
|
|
10
|
+
profile_name=profile_details.name,
|
|
11
|
+
base_url=profile_details.definition.base_url,
|
|
12
|
+
auth_retrieval=profile_details.definition.auth_retrieval,
|
|
13
|
+
jobs=profile_details.definition.jobs,
|
|
14
|
+
client_options=profile_details.definition.client_options,
|
|
15
|
+
)
|
|
16
|
+
|
|
17
|
+
if blocking:
|
|
18
|
+
server.serve_forever()
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
main(__name__ == "__main__")
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import os
|
|
2
|
+
from dataclasses import dataclass
|
|
3
|
+
from importlib import resources
|
|
4
|
+
|
|
5
|
+
from pkgs.argument_parser import CachedParser
|
|
6
|
+
from uncountable.types import job_definition_t
|
|
7
|
+
|
|
8
|
+
profile_parser = CachedParser(job_definition_t.ProfileDefinition)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
@dataclass(kw_only=True)
|
|
12
|
+
class ProfileDetails:
|
|
13
|
+
name: str
|
|
14
|
+
definition: job_definition_t.ProfileDefinition
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def load_profiles() -> list[ProfileDetails]:
|
|
18
|
+
profiles_module = os.environ["UNC_PROFILES_MODULE"]
|
|
19
|
+
profiles = [
|
|
20
|
+
entry for entry in resources.files(profiles_module).iterdir() if entry.is_dir()
|
|
21
|
+
]
|
|
22
|
+
profile_details: list[ProfileDetails] = []
|
|
23
|
+
for profile_file in profiles:
|
|
24
|
+
profile_name = profile_file.name
|
|
25
|
+
try:
|
|
26
|
+
definition = profile_parser.parse_yaml_resource(
|
|
27
|
+
package=".".join([profiles_module, profile_name]),
|
|
28
|
+
resource="profile.yaml",
|
|
29
|
+
)
|
|
30
|
+
profile_details.append(
|
|
31
|
+
ProfileDetails(name=profile_name, definition=definition)
|
|
32
|
+
)
|
|
33
|
+
except FileNotFoundError as e:
|
|
34
|
+
print(f"WARN: profile.yaml not found for {profile_name}", e)
|
|
35
|
+
continue
|
|
36
|
+
return profile_details
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/telemetry.py
RENAMED
|
@@ -1,14 +1,16 @@
|
|
|
1
1
|
import functools
|
|
2
2
|
import os
|
|
3
|
-
import sys
|
|
4
3
|
import time
|
|
5
4
|
from contextlib import contextmanager
|
|
6
5
|
from enum import StrEnum
|
|
7
|
-
from typing import Generator,
|
|
6
|
+
from typing import Generator, assert_never, cast
|
|
8
7
|
|
|
9
|
-
from opentelemetry import trace
|
|
8
|
+
from opentelemetry import _logs, trace
|
|
9
|
+
from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
|
|
10
10
|
from opentelemetry.exporter.otlp.proto.http.trace_exporter import OTLPSpanExporter
|
|
11
|
-
from opentelemetry.sdk._logs import
|
|
11
|
+
from opentelemetry.sdk._logs import Logger as OTELLogger
|
|
12
|
+
from opentelemetry.sdk._logs import LoggerProvider, LogRecord
|
|
13
|
+
from opentelemetry.sdk._logs.export import BatchLogRecordProcessor, ConsoleLogExporter
|
|
12
14
|
from opentelemetry.sdk.resources import Attributes, Resource
|
|
13
15
|
from opentelemetry.sdk.trace import TracerProvider
|
|
14
16
|
from opentelemetry.sdk.trace.export import (
|
|
@@ -25,7 +27,7 @@ def _cast_attributes(attributes: dict[str, base_t.JsonValue]) -> Attributes:
|
|
|
25
27
|
|
|
26
28
|
|
|
27
29
|
@functools.cache
|
|
28
|
-
def
|
|
30
|
+
def get_otel_resource() -> Resource:
|
|
29
31
|
attributes: dict[str, base_t.JsonValue] = {
|
|
30
32
|
"service.name": "integration-server",
|
|
31
33
|
"sdk.version": get_version(),
|
|
@@ -37,12 +39,26 @@ def get_tracer() -> Tracer:
|
|
|
37
39
|
if unc_env is not None:
|
|
38
40
|
attributes["deployment.environment"] = unc_env
|
|
39
41
|
resource = Resource.create(attributes=_cast_attributes(attributes))
|
|
40
|
-
|
|
42
|
+
return resource
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
@functools.cache
|
|
46
|
+
def get_otel_tracer() -> Tracer:
|
|
47
|
+
provider = TracerProvider(resource=get_otel_resource())
|
|
41
48
|
provider.add_span_processor(SimpleSpanProcessor(OTLPSpanExporter()))
|
|
42
49
|
trace.set_tracer_provider(provider)
|
|
43
50
|
return provider.get_tracer("integration.telemetry")
|
|
44
51
|
|
|
45
52
|
|
|
53
|
+
@functools.cache
|
|
54
|
+
def get_otel_logger() -> OTELLogger:
|
|
55
|
+
provider = LoggerProvider(resource=get_otel_resource())
|
|
56
|
+
provider.add_log_record_processor(BatchLogRecordProcessor(ConsoleLogExporter()))
|
|
57
|
+
provider.add_log_record_processor(BatchLogRecordProcessor(OTLPLogExporter()))
|
|
58
|
+
_logs.set_logger_provider(provider)
|
|
59
|
+
return provider.get_logger("integration.telemetry")
|
|
60
|
+
|
|
61
|
+
|
|
46
62
|
class LogSeverity(StrEnum):
|
|
47
63
|
INFO = "Info"
|
|
48
64
|
WARN = "Warn"
|
|
@@ -59,6 +75,7 @@ class Logger:
|
|
|
59
75
|
def _emit_log(
|
|
60
76
|
self, message: str, *, severity: LogSeverity, attributes: Attributes | None
|
|
61
77
|
) -> None:
|
|
78
|
+
otel_logger = get_otel_logger()
|
|
62
79
|
log_record = LogRecord(
|
|
63
80
|
body=message,
|
|
64
81
|
severity_text=severity,
|
|
@@ -67,9 +84,7 @@ class Logger:
|
|
|
67
84
|
span_id=self.current_span_id,
|
|
68
85
|
trace_id=self.current_trace_id,
|
|
69
86
|
)
|
|
70
|
-
|
|
71
|
-
log_file.write(log_record.to_json())
|
|
72
|
-
log_file.flush()
|
|
87
|
+
otel_logger.emit(log_record)
|
|
73
88
|
|
|
74
89
|
def log_info(self, message: str, *, attributes: Attributes | None = None) -> None:
|
|
75
90
|
self._emit_log(
|
|
@@ -135,7 +150,7 @@ class JobLogger(Logger):
|
|
|
135
150
|
def push_scope(
|
|
136
151
|
self, scope_name: str, *, attributes: Attributes | None = None
|
|
137
152
|
) -> Generator["JobLogger", None, None]:
|
|
138
|
-
with
|
|
153
|
+
with get_otel_tracer().start_as_current_span(
|
|
139
154
|
scope_name, attributes=self._patch_attributes(attributes)
|
|
140
155
|
) as span:
|
|
141
156
|
self.current_span_id = span.get_span_context().span_id
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/job_definition.py
RENAMED
|
@@ -19,6 +19,7 @@ from .job_definition_t import JobExecutorGenericUpload as JobExecutorGenericUplo
|
|
|
19
19
|
from .job_definition_t import JobExecutor as JobExecutor
|
|
20
20
|
from .job_definition_t import JobDefinitionBase as JobDefinitionBase
|
|
21
21
|
from .job_definition_t import CronJobDefinition as CronJobDefinition
|
|
22
|
+
from .job_definition_t import WebhookJobDefinition as WebhookJobDefinition
|
|
22
23
|
from .job_definition_t import JobDefinition as JobDefinition
|
|
23
24
|
from .job_definition_t import AuthRetrievalBase as AuthRetrievalBase
|
|
24
25
|
from .job_definition_t import AuthRetrievalOAuth as AuthRetrievalOAuth
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/job_definition_t.py
RENAMED
|
@@ -39,12 +39,14 @@ __all__: list[str] = [
|
|
|
39
39
|
"ProfileDefinition",
|
|
40
40
|
"ProfileMetadata",
|
|
41
41
|
"S3CloudProvider",
|
|
42
|
+
"WebhookJobDefinition",
|
|
42
43
|
]
|
|
43
44
|
|
|
44
45
|
|
|
45
46
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
46
47
|
class JobDefinitionType(StrEnum):
|
|
47
48
|
CRON = "cron"
|
|
49
|
+
WEBHOOK = "webhook"
|
|
48
50
|
|
|
49
51
|
|
|
50
52
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -177,6 +179,16 @@ class CronJobDefinition(JobDefinitionBase):
|
|
|
177
179
|
cron_spec: str
|
|
178
180
|
|
|
179
181
|
|
|
182
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
183
|
+
@serial_class(
|
|
184
|
+
parse_require={"type"},
|
|
185
|
+
)
|
|
186
|
+
@dataclasses.dataclass(kw_only=True)
|
|
187
|
+
class WebhookJobDefinition(JobDefinitionBase):
|
|
188
|
+
type: typing.Literal[JobDefinitionType.WEBHOOK] = JobDefinitionType.WEBHOOK
|
|
189
|
+
signature_key_secret: secret_retrieval_t.SecretRetrieval
|
|
190
|
+
|
|
191
|
+
|
|
180
192
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
181
193
|
JobDefinition = typing.Annotated[
|
|
182
194
|
typing.Union[CronJobDefinition],
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import os
|
|
2
|
-
from importlib import resources
|
|
3
|
-
|
|
4
|
-
from pkgs.argument_parser import CachedParser
|
|
5
|
-
from uncountable.integration.db.connect import create_db_engine
|
|
6
|
-
from uncountable.integration.server import IntegrationServer
|
|
7
|
-
from uncountable.types.job_definition_t import ProfileDefinition
|
|
8
|
-
|
|
9
|
-
profile_parser = CachedParser(ProfileDefinition)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
def main(blocking: bool) -> None:
|
|
13
|
-
profiles_module = os.environ["UNC_PROFILES_MODULE"]
|
|
14
|
-
with IntegrationServer(create_db_engine()) as server:
|
|
15
|
-
profiles = [
|
|
16
|
-
entry
|
|
17
|
-
for entry in resources.files(profiles_module).iterdir()
|
|
18
|
-
if entry.is_dir()
|
|
19
|
-
]
|
|
20
|
-
for profile_file in profiles:
|
|
21
|
-
profile_name = profile_file.name
|
|
22
|
-
try:
|
|
23
|
-
profile = profile_parser.parse_yaml_resource(
|
|
24
|
-
package=".".join([profiles_module, profile_name]),
|
|
25
|
-
resource="profile.yaml",
|
|
26
|
-
)
|
|
27
|
-
except FileNotFoundError as e:
|
|
28
|
-
print(f"WARN: profile.yaml not found for {profile_name}", e)
|
|
29
|
-
continue
|
|
30
|
-
server.register_profile(
|
|
31
|
-
profile_name=profile_name,
|
|
32
|
-
base_url=profile.base_url,
|
|
33
|
-
auth_retrieval=profile.auth_retrieval,
|
|
34
|
-
jobs=profile.jobs,
|
|
35
|
-
client_options=profile.client_options,
|
|
36
|
-
)
|
|
37
|
-
|
|
38
|
-
if blocking:
|
|
39
|
-
server.serve_forever()
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
main(__name__ == "__main__")
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/.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
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/favicons/browserconfig.xml
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/favicons/favicon-16x16.png
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/favicons/favicon-32x32.png
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/docs/static/favicons/manifest.json
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/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.56 → uncountablepythonsdk-0.0.58}/pkgs/argument_parser/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/argument_parser/_is_enum.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/argument_parser/_is_namedtuple.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/argument_parser/argument_parser.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/argument_parser/case_convert.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/filesystem_utils/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/filesystem_utils/_gdrive_session.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/filesystem_utils/_local_session.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/filesystem_utils/_s3_session.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/filesystem_utils/_sftp_session.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/filesystem_utils/file_type_utils.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization/missing_sentry.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization/opaque_key.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization/serial_class.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization/serial_union.py
RENAMED
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/serialization_util/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/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.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/emit_open_api_util.py
RENAMED
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/emit_typescript.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/emit_typescript_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/parts/base.py.prepart
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/parts/base.ts.prepart
RENAMED
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/type_info/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/value_spec/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/value_spec/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/pkgs/type_spec/value_spec/emit_python.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/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
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/db/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/db/connect.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
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/integration/server.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/batch/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.56 → uncountablepythonsdk-0.0.58}/uncountable/types/api/entity/__init__.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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|