UncountablePythonSDK 0.0.86__tar.gz → 0.0.87__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.86/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.87}/PKG-INFO +2 -1
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87/UncountablePythonSDK.egg-info}/PKG-INFO +2 -1
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/UncountablePythonSDK.egg-info/SOURCES.txt +1 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/UncountablePythonSDK.egg-info/requires.txt +1 -0
- uncountablepythonsdk-0.0.87/pkgs/filesystem_utils/_blob_session.py +137 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/filesystem_utils/file_type_utils.py +20 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pyproject.toml +4 -3
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/.github/workflows/publish.yml +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/README.md +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/quickstart.md +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/examples/integration-server/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/examples/set_recipe_metadata_file.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/examples/set_recipe_output_file_sdk.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/examples/upload_files.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/argument_parser/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/argument_parser/argument_parser.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/filesystem_utils/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/filesystem_utils/_gdrive_session.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/filesystem_utils/_s3_session.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/filesystem_utils/_sftp_session.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization/missing_sentry.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization/serial_class.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization/serial_union.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization_util/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization_util/serialization_helpers.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/actions_registry/__main__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/builder.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/config.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/emit_open_api.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/emit_open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/emit_typescript_util.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/load_types.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/open_api_util.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/parts/base.py.prepart +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/type_info/emit_type_info.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/util.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/value_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/value_spec/emit_python.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/value_spec/types.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/core/client.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/core/file_upload.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/cli.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/construct_client.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/db/session.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/executors/generic_upload_executor.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/job.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/command_server/types.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/datastore/model.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/queue_runner.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/types.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/queue_runner/worker.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/scan_profiles.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/scheduler.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/server.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/telemetry.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/webhook_server/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/batch/execute_batch.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/batch/execute_batch_load_async.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/entity/create_entities.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/entity/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/entity/get_entities_data.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/entity/grant_entity_permissions.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/entity/list_entities.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/entity/lock_entity.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/entity/resolve_entity_ids.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/entity/set_values.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/entity/transition_entity_phase.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/entity/unlock_entity.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/equipment/associate_equipment_input.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/field_options/upsert_field_options.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/id_source/list_id_source.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/id_source/match_id_source.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/input_groups/get_input_group_names.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/inputs/create_inputs.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/inputs/get_input_data.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/inputs/get_input_names.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/inputs/get_inputs_data.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/inputs/set_input_attribute_values.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/inputs/set_input_category.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/inputs/set_input_subcategories.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/inputs/set_intermediate_type.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/material_families/update_entity_material_families.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/outputs/get_output_data.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/outputs/get_output_names.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/outputs/resolve_output_conditions.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/permissions/set_core_permissions.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/project/get_projects.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/project/get_projects_data.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipe_links/create_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipe_links/remove_recipe_link.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/archive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/associate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/create_recipe.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/create_recipes.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/get_column_calculation_values.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/get_curve.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/get_recipe_calculations.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/get_recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/get_recipe_names.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/get_recipes_data.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/lock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/set_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/set_recipe_output_annotations.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/set_recipe_output_file.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/set_recipe_outputs.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/set_recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/unarchive_recipes.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/recipes/unlock_recipes.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/triggers/run_trigger.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/uploader/__init__.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/uploader/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/async_batch_processor.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/async_batch_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/async_jobs.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/async_jobs_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/auth_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/auth_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/base.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/base_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/calculations.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/calculations_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/chemical_structure.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/chemical_structure_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/client_base.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/client_config.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/client_config_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/curves.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/curves_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/entity.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/entity_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/experiment_groups.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/experiment_groups_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/field_values.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/field_values_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/fields.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/fields_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/generic_upload.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/generic_upload_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/id_source.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/id_source_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/identifier.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/identifier_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/input_attributes.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/input_attributes_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/inputs.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/integration_server.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/integration_server_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/job_definition.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/job_definition_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/outputs.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/outputs_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/overrides.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/overrides_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/permissions.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/permissions_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/phases.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/phases_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/post_base.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/post_base_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/queued_job.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/queued_job_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_identifiers.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_identifiers_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_inputs_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_links.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_links_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_metadata.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_output_metadata.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_output_metadata_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_tags.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_tags_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_workflow_steps.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipe_workflow_steps_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipes.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/recipes_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/response.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/response_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/secret_retrieval.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/secret_retrieval_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/units.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/units_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/users.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/users_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/webhook_job.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/webhook_job_t.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/workflows.py +0 -0
- {uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/workflows_t.py +0 -0
{uncountablepythonsdk-0.0.86/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.87}/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.87
|
|
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
|
|
@@ -37,6 +37,7 @@ Requires-Dist: flask==3.*
|
|
|
37
37
|
Requires-Dist: simplejson==3.*
|
|
38
38
|
Requires-Dist: grpcio==1.67.1
|
|
39
39
|
Requires-Dist: protobuf>=4.21.1
|
|
40
|
+
Requires-Dist: azure-storage-blob==12.*
|
|
40
41
|
Provides-Extra: test
|
|
41
42
|
Requires-Dist: mypy==1.*; extra == "test"
|
|
42
43
|
Requires-Dist: ruff==0.*; extra == "test"
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87/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.87
|
|
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
|
|
@@ -37,6 +37,7 @@ Requires-Dist: flask==3.*
|
|
|
37
37
|
Requires-Dist: simplejson==3.*
|
|
38
38
|
Requires-Dist: grpcio==1.67.1
|
|
39
39
|
Requires-Dist: protobuf>=4.21.1
|
|
40
|
+
Requires-Dist: azure-storage-blob==12.*
|
|
40
41
|
Provides-Extra: test
|
|
41
42
|
Requires-Dist: mypy==1.*; extra == "test"
|
|
42
43
|
Requires-Dist: ruff==0.*; extra == "test"
|
|
@@ -43,6 +43,7 @@ pkgs/argument_parser/_is_namedtuple.py
|
|
|
43
43
|
pkgs/argument_parser/argument_parser.py
|
|
44
44
|
pkgs/argument_parser/case_convert.py
|
|
45
45
|
pkgs/filesystem_utils/__init__.py
|
|
46
|
+
pkgs/filesystem_utils/_blob_session.py
|
|
46
47
|
pkgs/filesystem_utils/_gdrive_session.py
|
|
47
48
|
pkgs/filesystem_utils/_local_session.py
|
|
48
49
|
pkgs/filesystem_utils/_s3_session.py
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
from io import BytesIO
|
|
2
|
+
|
|
3
|
+
from azure.storage.blob import BlobServiceClient, ContainerClient
|
|
4
|
+
|
|
5
|
+
from pkgs.filesystem_utils.file_type_utils import (
|
|
6
|
+
FileObjectData,
|
|
7
|
+
FileSystemBlobConfig,
|
|
8
|
+
FileSystemFileReference,
|
|
9
|
+
FileSystemObject,
|
|
10
|
+
FileTransfer,
|
|
11
|
+
IncompatibleFileReference,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
from .filesystem_session import FileSystemSession
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _add_slash(prefix: str) -> str:
|
|
18
|
+
if len(prefix) > 0 and prefix[-1] != "/":
|
|
19
|
+
prefix = prefix + "/"
|
|
20
|
+
return prefix
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
class BlobSession(FileSystemSession):
|
|
24
|
+
config: FileSystemBlobConfig
|
|
25
|
+
|
|
26
|
+
def __init__(self, blob_config: FileSystemBlobConfig) -> None:
|
|
27
|
+
super().__init__()
|
|
28
|
+
self.config = blob_config
|
|
29
|
+
|
|
30
|
+
def start(self) -> None:
|
|
31
|
+
self.service_client: BlobServiceClient | None = BlobServiceClient(
|
|
32
|
+
self.config.account_url, credential=self.config.credential
|
|
33
|
+
)
|
|
34
|
+
self.container_client: ContainerClient | None = (
|
|
35
|
+
self.service_client.get_container_client(self.config.container)
|
|
36
|
+
)
|
|
37
|
+
|
|
38
|
+
def __enter__(self) -> "BlobSession":
|
|
39
|
+
self.start()
|
|
40
|
+
return self
|
|
41
|
+
|
|
42
|
+
def __exit__(self, exc_type: object, exc_val: object, exc_tb: object) -> None:
|
|
43
|
+
self.service_client = None
|
|
44
|
+
self.container_client = None
|
|
45
|
+
|
|
46
|
+
def list_files(
|
|
47
|
+
self,
|
|
48
|
+
dir_path: FileSystemObject,
|
|
49
|
+
*,
|
|
50
|
+
recursive: bool = False,
|
|
51
|
+
valid_extensions: list[str] | None = None,
|
|
52
|
+
) -> list[FileSystemObject]:
|
|
53
|
+
if not isinstance(dir_path, FileSystemFileReference):
|
|
54
|
+
raise IncompatibleFileReference()
|
|
55
|
+
|
|
56
|
+
assert self.service_client is not None and self.container_client is not None, (
|
|
57
|
+
"call to list_files on uninitialized blob session"
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
filesystem_file_references: list[FileSystemObject] = []
|
|
61
|
+
prefix = _add_slash(dir_path.filepath)
|
|
62
|
+
for blob in self.container_client.list_blobs(name_starts_with=prefix):
|
|
63
|
+
if not recursive and (
|
|
64
|
+
blob.name == prefix or "/" in blob.name[len(prefix) :]
|
|
65
|
+
):
|
|
66
|
+
continue
|
|
67
|
+
if valid_extensions is None or any(
|
|
68
|
+
blob.name.endswith(valid_extension)
|
|
69
|
+
for valid_extension in valid_extensions
|
|
70
|
+
):
|
|
71
|
+
filesystem_file_references.append(
|
|
72
|
+
FileSystemFileReference(
|
|
73
|
+
filepath=blob.name,
|
|
74
|
+
)
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
return filesystem_file_references
|
|
78
|
+
|
|
79
|
+
def download_files(
|
|
80
|
+
self,
|
|
81
|
+
filepaths: list[FileSystemObject],
|
|
82
|
+
) -> list[FileObjectData]:
|
|
83
|
+
downloaded_files: list[FileObjectData] = []
|
|
84
|
+
assert self.service_client is not None and self.container_client is not None, (
|
|
85
|
+
"call to download_files on uninitialized blob session"
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
for file_object in filepaths:
|
|
89
|
+
if (
|
|
90
|
+
not isinstance(file_object, FileSystemFileReference)
|
|
91
|
+
or file_object.filename is None
|
|
92
|
+
):
|
|
93
|
+
raise IncompatibleFileReference()
|
|
94
|
+
|
|
95
|
+
blob_client = self.container_client.get_blob_client(file_object.filepath)
|
|
96
|
+
download_stream = blob_client.download_blob()
|
|
97
|
+
file_data = download_stream.readall()
|
|
98
|
+
downloaded_files.append(
|
|
99
|
+
FileObjectData(
|
|
100
|
+
file_data=file_data,
|
|
101
|
+
file_IO=BytesIO(file_data),
|
|
102
|
+
filename=file_object.filename,
|
|
103
|
+
filepath=file_object.filepath,
|
|
104
|
+
)
|
|
105
|
+
)
|
|
106
|
+
|
|
107
|
+
return downloaded_files
|
|
108
|
+
|
|
109
|
+
def move_files(self, file_mappings: list[FileTransfer]) -> None:
|
|
110
|
+
assert self.service_client is not None and self.container_client is not None, (
|
|
111
|
+
"call to move_files on uninitialized blob session"
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
for src_file, dest_file in file_mappings:
|
|
115
|
+
if not isinstance(src_file, FileSystemFileReference) or not isinstance(
|
|
116
|
+
dest_file, FileSystemFileReference
|
|
117
|
+
):
|
|
118
|
+
raise IncompatibleFileReference()
|
|
119
|
+
|
|
120
|
+
source_blob_client = self.container_client.get_blob_client(
|
|
121
|
+
src_file.filepath
|
|
122
|
+
)
|
|
123
|
+
dest_blob_client = self.container_client.get_blob_client(dest_file.filepath)
|
|
124
|
+
|
|
125
|
+
dest_blob_client.start_copy_from_url(source_blob_client.url)
|
|
126
|
+
source_blob_client.delete_blob()
|
|
127
|
+
|
|
128
|
+
def delete_files(self, filepaths: list[FileSystemObject]) -> None:
|
|
129
|
+
assert self.service_client is not None and self.container_client is not None, (
|
|
130
|
+
"call to delete_files on uninitialized blob session"
|
|
131
|
+
)
|
|
132
|
+
for file_object in filepaths:
|
|
133
|
+
if not isinstance(file_object, FileSystemFileReference):
|
|
134
|
+
raise IncompatibleFileReference()
|
|
135
|
+
|
|
136
|
+
blob_client = self.container_client.get_blob_client(file_object.filepath)
|
|
137
|
+
blob_client.delete_blob()
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/filesystem_utils/file_type_utils.py
RENAMED
|
@@ -4,6 +4,12 @@ from io import BytesIO
|
|
|
4
4
|
from typing import Optional, Union
|
|
5
5
|
|
|
6
6
|
import paramiko
|
|
7
|
+
from azure.core.credentials import (
|
|
8
|
+
AzureNamedKeyCredential,
|
|
9
|
+
AzureSasCredential,
|
|
10
|
+
TokenCredential,
|
|
11
|
+
)
|
|
12
|
+
from azure.storage.blob import ContainerProperties
|
|
7
13
|
|
|
8
14
|
|
|
9
15
|
@dataclass
|
|
@@ -69,3 +75,17 @@ class FileSystemS3Config:
|
|
|
69
75
|
access_key_id: Optional[str]
|
|
70
76
|
secret_access_key: Optional[str]
|
|
71
77
|
session_token: Optional[str]
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
@dataclass(kw_only=True)
|
|
81
|
+
class FileSystemBlobConfig:
|
|
82
|
+
account_url: str
|
|
83
|
+
credential: (
|
|
84
|
+
str
|
|
85
|
+
| dict[str, str]
|
|
86
|
+
| AzureNamedKeyCredential
|
|
87
|
+
| AzureSasCredential
|
|
88
|
+
| TokenCredential
|
|
89
|
+
| None
|
|
90
|
+
)
|
|
91
|
+
container: ContainerProperties | str
|
|
@@ -61,15 +61,16 @@ dependencies = [
|
|
|
61
61
|
"tqdm == 4.*",
|
|
62
62
|
"pysftp == 0.*",
|
|
63
63
|
"opentelemetry-api==1.*",
|
|
64
|
-
"opentelemetry-exporter-otlp-proto-common==1.*",
|
|
65
|
-
"opentelemetry-exporter-otlp-proto-http==1.*",
|
|
64
|
+
"opentelemetry-exporter-otlp-proto-common==1.*",
|
|
65
|
+
"opentelemetry-exporter-otlp-proto-http==1.*",
|
|
66
66
|
"opentelemetry-sdk==1.*",
|
|
67
67
|
"paramiko == 3.*",
|
|
68
68
|
"boto3 == 1.*",
|
|
69
69
|
"flask == 3.*",
|
|
70
70
|
"simplejson == 3.*",
|
|
71
71
|
"grpcio == 1.67.1",
|
|
72
|
-
"protobuf >= 4.21.1"
|
|
72
|
+
"protobuf >= 4.21.1",
|
|
73
|
+
"azure-storage-blob == 12.*"
|
|
73
74
|
]
|
|
74
75
|
dynamic = ["version"]
|
|
75
76
|
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/.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
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/favicons/browserconfig.xml
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/favicons/favicon-16x16.png
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/favicons/favicon-32x32.png
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/docs/static/favicons/manifest.json
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/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
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/examples/set_recipe_metadata_file.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/examples/set_recipe_output_file_sdk.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/argument_parser/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/argument_parser/_is_enum.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/argument_parser/_is_namedtuple.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/argument_parser/argument_parser.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/argument_parser/case_convert.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/filesystem_utils/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/filesystem_utils/_gdrive_session.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/filesystem_utils/_local_session.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/filesystem_utils/_s3_session.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/filesystem_utils/_sftp_session.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization/missing_sentry.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization/opaque_key.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization/serial_class.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization/serial_union.py
RENAMED
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/serialization_util/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/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.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/emit_open_api_util.py
RENAMED
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/emit_typescript.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/emit_typescript_util.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/parts/base.py.prepart
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/parts/base.ts.prepart
RENAMED
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/type_info/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/value_spec/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/value_spec/__main__.py
RENAMED
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/pkgs/type_spec/value_spec/emit_python.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/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
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/db/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/db/connect.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/db/session.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/entrypoint.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
|
|
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.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/scan_profiles.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/scheduler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/server.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/integration/telemetry.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/__init__.py
RENAMED
|
File without changes
|
{uncountablepythonsdk-0.0.86 → uncountablepythonsdk-0.0.87}/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.86 → uncountablepythonsdk-0.0.87}/uncountable/types/api/entity/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|