UncountablePythonSDK 0.0.91__py3-none-any.whl → 0.0.93__py3-none-any.whl
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.91.dist-info → UncountablePythonSDK-0.0.93.dist-info}/METADATA +2 -2
- UncountablePythonSDK-0.0.93.dist-info/RECORD +301 -0
- {UncountablePythonSDK-0.0.91.dist-info → UncountablePythonSDK-0.0.93.dist-info}/WHEEL +1 -1
- examples/set_recipe_metadata_file.py +1 -1
- examples/upload_files.py +1 -2
- pkgs/argument_parser/__init__.py +3 -0
- pkgs/argument_parser/argument_parser.py +52 -23
- pkgs/filesystem_utils/__init__.py +1 -0
- pkgs/filesystem_utils/_gdrive_session.py +4 -4
- pkgs/filesystem_utils/_s3_session.py +2 -1
- pkgs/filesystem_utils/_sftp_session.py +2 -3
- pkgs/filesystem_utils/file_type_utils.py +10 -10
- pkgs/serialization/annotation.py +5 -5
- pkgs/serialization/missing_sentry.py +1 -1
- pkgs/serialization/serial_alias.py +3 -3
- pkgs/serialization/serial_class.py +10 -10
- pkgs/serialization/serial_generic.py +1 -1
- pkgs/serialization/serial_union.py +10 -10
- pkgs/serialization_util/__init__.py +2 -0
- pkgs/serialization_util/serialization_helpers.py +1 -4
- pkgs/type_spec/actions_registry/__main__.py +0 -4
- pkgs/type_spec/builder.py +121 -40
- pkgs/type_spec/config.py +10 -5
- pkgs/type_spec/emit_open_api.py +2 -2
- pkgs/type_spec/emit_open_api_util.py +1 -1
- pkgs/type_spec/emit_python.py +145 -63
- pkgs/type_spec/emit_typescript.py +57 -10
- pkgs/type_spec/load_types.py +1 -2
- pkgs/type_spec/open_api_util.py +1 -2
- pkgs/type_spec/parts/base.py.prepart +2 -0
- pkgs/type_spec/type_info/emit_type_info.py +8 -8
- pkgs/type_spec/util.py +5 -7
- pkgs/type_spec/value_spec/__main__.py +15 -5
- pkgs/type_spec/value_spec/emit_python.py +5 -2
- pkgs/type_spec/value_spec/types.py +1 -1
- uncountable/core/client.py +16 -15
- uncountable/core/file_upload.py +39 -15
- uncountable/integration/construct_client.py +3 -3
- uncountable/integration/executors/generic_upload_executor.py +1 -1
- uncountable/integration/job.py +2 -2
- uncountable/integration/queue_runner/command_server/types.py +1 -1
- uncountable/integration/queue_runner/worker.py +1 -1
- uncountable/integration/server.py +4 -4
- uncountable/integration/telemetry.py +11 -0
- uncountable/types/__init__.py +0 -1
- uncountable/types/api/batch/execute_batch.py +1 -2
- uncountable/types/api/batch/execute_batch_load_async.py +0 -1
- uncountable/types/api/chemical/convert_chemical_formats.py +0 -1
- uncountable/types/api/entity/create_entities.py +3 -4
- uncountable/types/api/entity/create_entity.py +4 -5
- uncountable/types/api/entity/get_entities_data.py +0 -1
- uncountable/types/api/entity/grant_entity_permissions.py +3 -4
- uncountable/types/api/entity/list_entities.py +5 -6
- uncountable/types/api/entity/lock_entity.py +1 -2
- uncountable/types/api/entity/resolve_entity_ids.py +2 -3
- uncountable/types/api/entity/set_entity_field_values.py +0 -1
- uncountable/types/api/entity/set_values.py +0 -1
- uncountable/types/api/entity/transition_entity_phase.py +1 -2
- uncountable/types/api/entity/unlock_entity.py +0 -1
- uncountable/types/api/equipment/associate_equipment_input.py +0 -1
- uncountable/types/api/field_options/upsert_field_options.py +3 -4
- uncountable/types/api/files/download_file.py +1 -2
- uncountable/types/api/id_source/list_id_source.py +3 -4
- uncountable/types/api/id_source/match_id_source.py +1 -2
- uncountable/types/api/input_groups/get_input_group_names.py +0 -1
- uncountable/types/api/inputs/create_inputs.py +4 -5
- uncountable/types/api/inputs/get_input_data.py +5 -6
- uncountable/types/api/inputs/get_input_names.py +3 -4
- uncountable/types/api/inputs/get_inputs_data.py +0 -1
- uncountable/types/api/inputs/set_input_attribute_values.py +2 -3
- uncountable/types/api/inputs/set_input_category.py +2 -3
- uncountable/types/api/inputs/set_input_subcategories.py +0 -1
- uncountable/types/api/inputs/set_intermediate_type.py +1 -2
- uncountable/types/api/material_families/update_entity_material_families.py +1 -2
- uncountable/types/api/outputs/get_output_data.py +6 -7
- uncountable/types/api/outputs/get_output_names.py +2 -3
- uncountable/types/api/outputs/resolve_output_conditions.py +2 -3
- uncountable/types/api/permissions/set_core_permissions.py +3 -4
- uncountable/types/api/project/get_projects.py +3 -4
- uncountable/types/api/project/get_projects_data.py +4 -5
- uncountable/types/api/recipe_links/create_recipe_link.py +1 -2
- uncountable/types/api/recipe_links/remove_recipe_link.py +1 -2
- uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -4
- uncountable/types/api/recipes/add_recipe_to_project.py +0 -1
- uncountable/types/api/recipes/archive_recipes.py +1 -2
- uncountable/types/api/recipes/associate_recipe_as_input.py +2 -3
- uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -1
- uncountable/types/api/recipes/clear_recipe_outputs.py +0 -1
- uncountable/types/api/recipes/create_recipe.py +6 -7
- uncountable/types/api/recipes/create_recipes.py +4 -5
- uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -1
- uncountable/types/api/recipes/edit_recipe_inputs.py +9 -10
- uncountable/types/api/recipes/get_column_calculation_values.py +1 -2
- uncountable/types/api/recipes/get_curve.py +2 -3
- uncountable/types/api/recipes/get_recipe_calculations.py +3 -4
- uncountable/types/api/recipes/get_recipe_links.py +1 -2
- uncountable/types/api/recipes/get_recipe_names.py +0 -1
- uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -1
- uncountable/types/api/recipes/get_recipes_data.py +22 -23
- uncountable/types/api/recipes/lock_recipes.py +3 -4
- uncountable/types/api/recipes/remove_recipe_from_project.py +0 -1
- uncountable/types/api/recipes/set_recipe_inputs.py +6 -7
- uncountable/types/api/recipes/set_recipe_metadata.py +0 -1
- uncountable/types/api/recipes/set_recipe_output_annotations.py +5 -6
- uncountable/types/api/recipes/set_recipe_output_file.py +2 -3
- uncountable/types/api/recipes/set_recipe_outputs.py +8 -9
- uncountable/types/api/recipes/set_recipe_tags.py +2 -3
- uncountable/types/api/recipes/unarchive_recipes.py +0 -1
- uncountable/types/api/recipes/unlock_recipes.py +2 -3
- uncountable/types/api/triggers/run_trigger.py +1 -2
- uncountable/types/api/uploader/invoke_uploader.py +2 -3
- uncountable/types/async_batch.py +0 -1
- uncountable/types/async_batch_processor.py +23 -24
- uncountable/types/async_batch_t.py +5 -6
- uncountable/types/async_jobs.py +0 -1
- uncountable/types/async_jobs_t.py +1 -2
- uncountable/types/auth_retrieval.py +0 -1
- uncountable/types/auth_retrieval_t.py +2 -3
- uncountable/types/base.py +0 -1
- uncountable/types/base_t.py +2 -1
- uncountable/types/calculations.py +0 -1
- uncountable/types/calculations_t.py +0 -1
- uncountable/types/chemical_structure.py +0 -1
- uncountable/types/chemical_structure_t.py +3 -4
- uncountable/types/client_base.py +65 -66
- uncountable/types/client_config.py +0 -1
- uncountable/types/client_config_t.py +1 -2
- uncountable/types/curves.py +0 -1
- uncountable/types/curves_t.py +4 -5
- uncountable/types/entity.py +0 -1
- uncountable/types/entity_t.py +3 -4
- uncountable/types/experiment_groups.py +0 -1
- uncountable/types/experiment_groups_t.py +0 -1
- uncountable/types/field_values.py +0 -1
- uncountable/types/field_values_t.py +6 -7
- uncountable/types/fields.py +0 -1
- uncountable/types/fields_t.py +0 -1
- uncountable/types/generic_upload.py +0 -1
- uncountable/types/generic_upload_t.py +7 -8
- uncountable/types/id_source.py +0 -1
- uncountable/types/id_source_t.py +2 -3
- uncountable/types/identifier.py +0 -1
- uncountable/types/identifier_t.py +1 -2
- uncountable/types/input_attributes.py +0 -1
- uncountable/types/input_attributes_t.py +2 -3
- uncountable/types/inputs.py +0 -1
- uncountable/types/inputs_t.py +2 -3
- uncountable/types/integration_server.py +0 -1
- uncountable/types/integration_server_t.py +2 -3
- uncountable/types/job_definition.py +0 -1
- uncountable/types/job_definition_t.py +16 -17
- uncountable/types/outputs.py +0 -1
- uncountable/types/outputs_t.py +1 -2
- uncountable/types/overrides.py +0 -1
- uncountable/types/overrides_t.py +0 -1
- uncountable/types/permissions.py +0 -1
- uncountable/types/permissions_t.py +1 -2
- uncountable/types/phases.py +0 -1
- uncountable/types/phases_t.py +0 -1
- uncountable/types/post_base.py +0 -1
- uncountable/types/post_base_t.py +1 -2
- uncountable/types/queued_job.py +0 -1
- uncountable/types/queued_job_t.py +2 -3
- uncountable/types/recipe_identifiers.py +0 -1
- uncountable/types/recipe_identifiers_t.py +3 -4
- uncountable/types/recipe_inputs.py +0 -1
- uncountable/types/recipe_inputs_t.py +1 -2
- uncountable/types/recipe_links.py +0 -1
- uncountable/types/recipe_links_t.py +2 -3
- uncountable/types/recipe_metadata.py +0 -1
- uncountable/types/recipe_metadata_t.py +6 -7
- uncountable/types/recipe_output_metadata.py +0 -1
- uncountable/types/recipe_output_metadata_t.py +0 -1
- uncountable/types/recipe_tags.py +0 -1
- uncountable/types/recipe_tags_t.py +0 -1
- uncountable/types/recipe_workflow_steps.py +0 -1
- uncountable/types/recipe_workflow_steps_t.py +2 -3
- uncountable/types/recipes.py +0 -1
- uncountable/types/recipes_t.py +0 -1
- uncountable/types/response.py +0 -1
- uncountable/types/response_t.py +0 -1
- uncountable/types/secret_retrieval.py +0 -1
- uncountable/types/secret_retrieval_t.py +3 -4
- uncountable/types/units.py +0 -1
- uncountable/types/units_t.py +0 -1
- uncountable/types/users.py +0 -1
- uncountable/types/users_t.py +0 -1
- uncountable/types/webhook_job.py +0 -1
- uncountable/types/webhook_job_t.py +0 -1
- uncountable/types/workflows.py +0 -1
- uncountable/types/workflows_t.py +1 -2
- UncountablePythonSDK-0.0.91.dist-info/RECORD +0 -301
- {UncountablePythonSDK-0.0.91.dist-info → UncountablePythonSDK-0.0.93.dist-info}/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.93
|
|
4
4
|
Summary: Uncountable SDK
|
|
5
5
|
Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
docs/.gitignore,sha256=_ebkZUcwfvfnGEJ95rfj1lxoBNd6EE9ZvtOc7FsbfFE,7
|
|
2
|
+
docs/conf.py,sha256=YF5J-9g_Wg8wXmyHsGaE8xYlDEzqocNl3UWUmP0CwBg,1702
|
|
3
|
+
docs/index.md,sha256=eEdirX_Ds6ICTRtIS5iT4irCquHcQyKN7E4M5QP9T8A,257
|
|
4
|
+
docs/justfile,sha256=cvNcpb-ByPOF2aCrFlg3DDZBoYMx5W8xGdr13m9HcnI,215
|
|
5
|
+
docs/quickstart.md,sha256=3GuJ0MB1O5kjlsrgAmdSkDq0rYqATrYy-tzEHDy8H-c,422
|
|
6
|
+
docs/requirements.txt,sha256=-sWMwUL2L6vU1QzoQAS-aP8oPbUqXDfMxCeeTKnShFc,138
|
|
7
|
+
docs/static/logo_blue.png,sha256=SyYpMTVhhBbhF5Wl8lWaVwz-_p1MIR6dW6bVhufQRME,46708
|
|
8
|
+
docs/static/favicons/android-chrome-192x192.png,sha256=XoF-AhD55JlSBDGsEPJKfT_VeXT-awhwKyZnxLhrwvk,1369
|
|
9
|
+
docs/static/favicons/android-chrome-512x512.png,sha256=1S4xwY9YtJQ5ifFsZ-DOzssoyBYs0t9uwdOUmYx0Xso,3888
|
|
10
|
+
docs/static/favicons/apple-touch-icon.png,sha256=4qdKI-pFHxrot00cFGY-_jD7Kame6Ct_klQBNmW3j80,1403
|
|
11
|
+
docs/static/favicons/browserconfig.xml,sha256=oU7ZjY1qKLU992MIOAOZ7h-uVyqmEah2TKzyae4Uw0s,263
|
|
12
|
+
docs/static/favicons/favicon-16x16.png,sha256=M4r4A3_NVuw3h5pWZs5-CmhmquSMiKaNcCqyyJRjNmU,392
|
|
13
|
+
docs/static/favicons/favicon-32x32.png,sha256=U4UU652zGnSeU3P9kUqxPeEnVf6zhtdNdNwGz1E40UU,511
|
|
14
|
+
docs/static/favicons/manifest.json,sha256=6q_3nZkcg_x0xut4eE-xpdeMY1TydwiZIcbXlLAq9X8,437
|
|
15
|
+
docs/static/favicons/mstile-150x150.png,sha256=eAK4QdEofhdLtfmjuPTpnX3MJqYnvGXsHYUjlcQekyY,1035
|
|
16
|
+
docs/static/favicons/safari-pinned-tab.svg,sha256=S84fRnz0ZxLnQrKtmmFZytiRyu1xLtMR_RVy5jmwU7k,1926
|
|
17
|
+
examples/async_batch.py,sha256=tEyvgxk2uf681mKlN4TDuPMkb1OHyM9oO8pYW4A7HvM,1142
|
|
18
|
+
examples/create_entity.py,sha256=t6WBZsWRDbWZgFCWXKGgKL5LAB6-38oaiNYGxMAa2No,686
|
|
19
|
+
examples/download_files.py,sha256=rjv7EUgSw_W24_F5La-MljnIDQhbrvA7p2M-qPFbrXA,734
|
|
20
|
+
examples/edit_recipe_inputs.py,sha256=mtk_oSkN-OT2hKkb1XKXrRiUaGYTJstXuOKyTR51Fjo,1663
|
|
21
|
+
examples/invoke_uploader.py,sha256=rEvmVY5TjigN_-4PTQdkjY-bC5DrYMcJgquyZ4Tt5FM,748
|
|
22
|
+
examples/set_recipe_metadata_file.py,sha256=cRVXGz4UN4aqnNrNSzyBmikYHpe63lMIuzOpMwD9EDU,1036
|
|
23
|
+
examples/set_recipe_output_file_sdk.py,sha256=Lz1amqppnWTX83z-C090wCJ4hcKmCD3kb-4v0uBRi0Y,782
|
|
24
|
+
examples/upload_files.py,sha256=qMaSvMSdTMPOOP55y1AwEurc0SOdZAMvEydlqJPsGpg,432
|
|
25
|
+
examples/integration-server/pyproject.toml,sha256=ziyEbSiTYlOk784euVJjuZ3UqIEENkPXuug5VTrkjms,9131
|
|
26
|
+
examples/integration-server/jobs/materials_auto/example_cron.py,sha256=7VVQ-UJsq3DbGpN3XPnorRVZYo-vCwbfSU3VVDluIzA,699
|
|
27
|
+
examples/integration-server/jobs/materials_auto/example_wh.py,sha256=Hx5nonavOh2L3JykDpI5bPqPu8L1wwhwekTUfTRgq9g,479
|
|
28
|
+
examples/integration-server/jobs/materials_auto/profile.yaml,sha256=XlOXSRplMJ13T6900pv1wDKxeE9V1hZZTMuvup1MiBM,896
|
|
29
|
+
pkgs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
+
pkgs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
|
+
pkgs/argument_parser/__init__.py,sha256=AOL6yZkJg9Z8Q4v4JY4agEbMDQWPptVauSA_itShv64,693
|
|
32
|
+
pkgs/argument_parser/_is_enum.py,sha256=Gw6jJa8nBwYGqXwwCZbSnWL8Rvr5alkg5lSVAqXtOZM,257
|
|
33
|
+
pkgs/argument_parser/_is_namedtuple.py,sha256=Rjc1bKanIPPogl3qG5JPBxglG1TqWYOo1nxxhBASQWY,265
|
|
34
|
+
pkgs/argument_parser/argument_parser.py,sha256=_W0-HLC1F8jXgeFJnhUREorqcXzuhZi__eX_7FFkkVs,19363
|
|
35
|
+
pkgs/argument_parser/case_convert.py,sha256=NuJLJUJRbyVb6_Slen4uqaStEHbcOS1d-hBBfDrrw-c,605
|
|
36
|
+
pkgs/filesystem_utils/__init__.py,sha256=2a0d2rEPlEEYwhm3Wckny4VCp4ZS7JtYSXmwdwNCRjo,1332
|
|
37
|
+
pkgs/filesystem_utils/_blob_session.py,sha256=CtoB7PIocuZo8vvFIS_Rc-YR6KwzFB0rHUVPKFEbRAI,4862
|
|
38
|
+
pkgs/filesystem_utils/_gdrive_session.py,sha256=XTAKppTfIiJtPkzq90yftoMHa-kcGe9MDZQlmx1bviQ,11058
|
|
39
|
+
pkgs/filesystem_utils/_local_session.py,sha256=xFEYhAvNqrOYqwt4jrEYOuYkjJn0zclZhTelW_Q1-rw,2325
|
|
40
|
+
pkgs/filesystem_utils/_s3_session.py,sha256=DdD6M90z1VyTiuRdTmjvBNJOEFHBPyEU8wGKRKwHvOU,4027
|
|
41
|
+
pkgs/filesystem_utils/_sftp_session.py,sha256=6qwBGYu8UTFYw9YAmYAD0qL9qtivRRQpvzmlInmJZ_k,4709
|
|
42
|
+
pkgs/filesystem_utils/file_type_utils.py,sha256=oklu7Wtcxg9pBz84cAlXpNlhYEM0AbsO5DoEqvFjoXY,1896
|
|
43
|
+
pkgs/filesystem_utils/filesystem_session.py,sha256=BQ2Go8Mu9-GcnaWh2Pm4x7ugLVsres6XrOQ8RoiEpcE,1045
|
|
44
|
+
pkgs/serialization/__init__.py,sha256=b2sNfYICz0D6Y8shzEUfyUoHZukfuAvfuaZvg8dZHic,1163
|
|
45
|
+
pkgs/serialization/annotation.py,sha256=wn9yb4a4DrsyPAYqY9mVswJarP4lsOkgfnvchrg5toE,2104
|
|
46
|
+
pkgs/serialization/missing_sentry.py,sha256=89SomyM0sBWLr_N0SPOyxU3hWcm1ljL-veTazZ1-GU8,811
|
|
47
|
+
pkgs/serialization/opaque_key.py,sha256=8ak7aMCGWkKDjnG374yqy8gtnCCUzG2DSJEBfoPgi0c,194
|
|
48
|
+
pkgs/serialization/serial_alias.py,sha256=zP0wAy7NGvpyOe-TGUwHy3wPF0XZTIwFLh_caDX67BU,1343
|
|
49
|
+
pkgs/serialization/serial_class.py,sha256=hL5SVL4MqSzeTXSLL15fvDQtk32z0NywsKBWUL9b-k0,6100
|
|
50
|
+
pkgs/serialization/serial_generic.py,sha256=vAC0-o9fkco2lM_YvBavY0JDYncDxbW3jFboYeHRImw,461
|
|
51
|
+
pkgs/serialization/serial_union.py,sha256=IdWsSsM8j-qGfl5Wv6haX37ZS1SKob8XT8cilBBOVIo,2670
|
|
52
|
+
pkgs/serialization/yaml.py,sha256=yoJtu7_ixnJV6uTxA_U1PpK5F_ixT08AKVh5ocyYwXM,1466
|
|
53
|
+
pkgs/serialization_util/__init__.py,sha256=YykkhqGNKiLCo-D5vSTq6WiPNfCyPXyr-mQO5e5Klak,513
|
|
54
|
+
pkgs/serialization_util/_get_type_for_serialization.py,sha256=dW5_W9MFd6wgWfW5qlWork-GBb-QFLtiOZkjk2Zqn2M,1177
|
|
55
|
+
pkgs/serialization_util/convert_to_snakecase.py,sha256=H2BAo5ZdcCDN77RpLb-uP0s7-FQ5Ukwnsd3VYc1vD0M,583
|
|
56
|
+
pkgs/serialization_util/dataclasses.py,sha256=uhNGXQPQLZblDFQuuwkAGmKOPiRyfDzCdg72CVtYJGA,390
|
|
57
|
+
pkgs/serialization_util/serialization_helpers.py,sha256=d11gYBe0WDlPDMqi8LatD4I5RluIcheD8xtMXnPLF1g,6537
|
|
58
|
+
pkgs/strenum_compat/__init__.py,sha256=wXRFeNvBm8RU6dy1PFJ5sRLgUIEeH_DVR95Sv5qpGbk,59
|
|
59
|
+
pkgs/strenum_compat/strenum_compat.py,sha256=uOUAgpYTjHs1MX8dG81jRlyTkt3KNbkV_25zp7xTX2s,36
|
|
60
|
+
pkgs/type_spec/__init__.py,sha256=h5DmJTca4QVV10sZR1x0-MlkZfuGYDfapR3zHvXfzto,19
|
|
61
|
+
pkgs/type_spec/__main__.py,sha256=5bJaX9Y_-FavP0qwzhk-z-V97UY7uaezJTa1zhO_HHQ,1048
|
|
62
|
+
pkgs/type_spec/builder.py,sha256=eXvfY3TaxF4zdSvoshVQC_q_ZA0S0x6-caJ4M_5oY7M,52731
|
|
63
|
+
pkgs/type_spec/config.py,sha256=K-DFjRVIW5RCJOuB0QhkWZMOrsIZavFURqmhgAoULgw,5103
|
|
64
|
+
pkgs/type_spec/emit_io_ts.py,sha256=CUvBs0boB_X-Kndh66yYcqFfq3oC_LGs8YffLkJ0ZXA,5707
|
|
65
|
+
pkgs/type_spec/emit_open_api.py,sha256=9AgtHB3ZIObs9cV-RqNZt_q1icmIGwPeovQ63gTl-l8,24541
|
|
66
|
+
pkgs/type_spec/emit_open_api_util.py,sha256=34zslFjTiOI5q8YreBOLD-afmaW4lrlK7pBpNAd3CxA,2379
|
|
67
|
+
pkgs/type_spec/emit_python.py,sha256=BohmwGN89EDHiNlT6-z7xv2C0vIRhQ2SXr4kdoue2a4,52103
|
|
68
|
+
pkgs/type_spec/emit_typescript.py,sha256=_7-SLAOP0jMIrDWDKCPJpyykJh3n0hynm5b-Ltq23hM,10620
|
|
69
|
+
pkgs/type_spec/emit_typescript_util.py,sha256=sugxboeMwXiIdk4RDyUR_CxU31Le3OQ7i5HmuHeSLvc,10447
|
|
70
|
+
pkgs/type_spec/load_types.py,sha256=ero3SXB0M7xKHni5Qxop5Yh5A1TYjjoqwkEgUCQx71Q,3657
|
|
71
|
+
pkgs/type_spec/open_api_util.py,sha256=OiuMWUIwi7ibIOABtuHnhrPdfd3rVxv0MJ1ZY1xj_qw,7083
|
|
72
|
+
pkgs/type_spec/test.py,sha256=4ueujBq-pEgnX3Z69HyPmD-bullFXmpixcpVzfOkhP4,489
|
|
73
|
+
pkgs/type_spec/util.py,sha256=TPmFVgiGj6niurg4V-AKFkQQDDDtJ8a5o2Z_EDgMTvU,4827
|
|
74
|
+
pkgs/type_spec/actions_registry/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
75
|
+
pkgs/type_spec/actions_registry/__main__.py,sha256=SRw6kIhHTW7W2wGijYq66JARzoc4KpPmbLqwvnETyTE,4277
|
|
76
|
+
pkgs/type_spec/actions_registry/emit_typescript.py,sha256=W1lI36ITdJ7MBf37wlTB7H3X9Ljt217vIGMv4e3fxfY,5986
|
|
77
|
+
pkgs/type_spec/parts/base.py.prepart,sha256=RDNNo4nbLiC9ASIODq2xIt0HkwDNiJVcmjDD33Bubaw,2303
|
|
78
|
+
pkgs/type_spec/parts/base.ts.prepart,sha256=2FJJvpg2olCcavxj0nbYWdwKl6KeScour2JjSvN42l8,1001
|
|
79
|
+
pkgs/type_spec/type_info/__main__.py,sha256=pmVjVqXyVh8vKTNCTFgz80Sg74C5BKToP3E6GS-X_So,857
|
|
80
|
+
pkgs/type_spec/type_info/emit_type_info.py,sha256=mQSxG-UTFl0i8ylvXEvpk1d9NIMYsx39Le7-i5JVuN0,13520
|
|
81
|
+
pkgs/type_spec/value_spec/__init__.py,sha256=Z-grlcZtxAfEXhPHsK0nD7PFLGsv4eqvunaPN7_TA84,83
|
|
82
|
+
pkgs/type_spec/value_spec/__main__.py,sha256=hCTdANTgCNTdZVcXeUd8axENrKNb_oVNrmrygjQht48,8663
|
|
83
|
+
pkgs/type_spec/value_spec/convert_type.py,sha256=X5N7DOTo5XOIHbcYHh9RZFthzb2gcnYg2tRuVMBhbxY,2517
|
|
84
|
+
pkgs/type_spec/value_spec/emit_python.py,sha256=lWO4PFcXo0jgkQy6ZAVN4QJ1jdNXXzkS3oxWCtycQ4k,7131
|
|
85
|
+
pkgs/type_spec/value_spec/types.py,sha256=Yc3LaKHN1G6wbgrBv0dpu5vijUXtS2GcDTusYPnDvK0,454
|
|
86
|
+
uncountable/__init__.py,sha256=8l8XWNCKsu7TG94c-xa2KHpDegvxDC2FyQISdWC763Y,89
|
|
87
|
+
uncountable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
88
|
+
uncountable/core/__init__.py,sha256=RFv0kO6rKFf1PtBPu83hCGmxqkJamRtsgQ9_-ztw7tA,341
|
|
89
|
+
uncountable/core/async_batch.py,sha256=9pYGFzVCQXt8059qFHgutweGIFPquJ5Xfq6NT5P-1K0,1206
|
|
90
|
+
uncountable/core/client.py,sha256=cypErG4AXAcgkzetvlSLWA75-LKjqreobZgjSfSUKbY,13004
|
|
91
|
+
uncountable/core/environment.py,sha256=6cc-nUvUIbJMI0OSEg3dWI-iNgSYhCdUKKn607Z3QpM,1040
|
|
92
|
+
uncountable/core/file_upload.py,sha256=bgvXk9vfF5qlhy2NAUcEEG7Q7i-c1wr2HrpaWD7HldU,4516
|
|
93
|
+
uncountable/core/types.py,sha256=s2CjqYJpsmbC7xMwxxT7kJ_V9bwokrjjWVVjpMcQpKI,333
|
|
94
|
+
uncountable/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
95
|
+
uncountable/integration/cli.py,sha256=h3RE0l1SdjkveOKeY2amlmrJppK4HEQJXk8VG9UJRWg,1359
|
|
96
|
+
uncountable/integration/construct_client.py,sha256=I53mGcdS88hba3HFwgXmWQaTd1d5u0jWNSwyc_vlVsQ,1937
|
|
97
|
+
uncountable/integration/cron.py,sha256=6eH-kIs3sdYPCyb62_L2M7U_uQTdMTdwY5hreEJb0hw,887
|
|
98
|
+
uncountable/integration/entrypoint.py,sha256=BHOYPQgKvZE6HG8Rv15MkdYl8lRkvfDgv1OdLo0oQ9Q,433
|
|
99
|
+
uncountable/integration/job.py,sha256=zamfyEhtZh0cWyd8DvVq64RlaA1aX_wtOALv6Kf7tyo,2354
|
|
100
|
+
uncountable/integration/scan_profiles.py,sha256=760zbv7O7wXxHUHqUkFBpd1Afe8hqxMPU3ugwZGdhEo,2925
|
|
101
|
+
uncountable/integration/scheduler.py,sha256=jrtktQYGW4QKRLH5GvhOFvCl4S9CLLhWY2GF0rzY-KM,4780
|
|
102
|
+
uncountable/integration/server.py,sha256=m_DYRosGbHuPhygM32Xo-jRBl_oaUhOYsBBD1qwwKh4,4697
|
|
103
|
+
uncountable/integration/telemetry.py,sha256=QFvvJdzc15CvdaRLFaJeru0OouAFbYdhHYYovbT8bXg,7425
|
|
104
|
+
uncountable/integration/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
105
|
+
uncountable/integration/db/connect.py,sha256=mE3bdV0huclH2iT_dXCQdRL4LkjIuf_myAR64RTWXEs,498
|
|
106
|
+
uncountable/integration/db/session.py,sha256=96cGQXpe6IugBTdSsjdP0S5yhJ6toSmbVB6qhc3FJzE,693
|
|
107
|
+
uncountable/integration/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
108
|
+
uncountable/integration/executors/executors.py,sha256=Kzisp1eKufGCWrHIw4mmAj-l1UQ2oJsJR7I-_mksnVs,5441
|
|
109
|
+
uncountable/integration/executors/generic_upload_executor.py,sha256=OnVY4KfmAgaf9LPSAgj7H2wFRXwNXBpg7egVy85z5lk,10327
|
|
110
|
+
uncountable/integration/executors/script_executor.py,sha256=BBQ9f0l7uH2hgKf60jtm-pONzwk-EeOhM2qBAbv_URo,846
|
|
111
|
+
uncountable/integration/queue_runner/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
112
|
+
uncountable/integration/queue_runner/job_scheduler.py,sha256=2acmeWscG87MZsifxwMRMGJ4sQgQVNJNr5CqIPUg75E,6288
|
|
113
|
+
uncountable/integration/queue_runner/queue_runner.py,sha256=0BmYu5zHdothTevGsB-nXg6MBd1UD-WkP3h1WCKMdQg,710
|
|
114
|
+
uncountable/integration/queue_runner/types.py,sha256=8qTq29BTSa5rmW6CBlBntP0pNIiDcwu1wHa78pjroS0,219
|
|
115
|
+
uncountable/integration/queue_runner/worker.py,sha256=WwJmwHkgovfiqrMeNJVtIyDYJAib5ajog5ag2l_AquI,4584
|
|
116
|
+
uncountable/integration/queue_runner/command_server/__init__.py,sha256=gQPVILGpWzCr2i5GJyoqna7AOSFvtn4tav69gB78mTQ,571
|
|
117
|
+
uncountable/integration/queue_runner/command_server/command_client.py,sha256=DJb0TUVFkiiLBEQzHSN94sTRnuEbutNEgdN39XmnOXI,2046
|
|
118
|
+
uncountable/integration/queue_runner/command_server/command_server.py,sha256=yyXryhiEC2eGS0yFElLGsVzSKwOuYvj-zp22jQorkv0,2138
|
|
119
|
+
uncountable/integration/queue_runner/command_server/types.py,sha256=PGq6EAGPC_nppXQKp9alAjuBQx1h87BefiMa0XU--PY,975
|
|
120
|
+
uncountable/integration/queue_runner/command_server/protocol/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
121
|
+
uncountable/integration/queue_runner/command_server/protocol/command_server.proto,sha256=pf7FAT2eGuao0VYCFrgTAsM-tiPi1Bhz19XN5So1WFk,439
|
|
122
|
+
uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py,sha256=-lBTc5Tz48agqNSeOSpBE69e2kRmWF59sUaowCl8p7U,2207
|
|
123
|
+
uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi,sha256=9viBn6PHvtfMSRwam57ke5O2D_k8LapWYVfBRjknIYg,1281
|
|
124
|
+
uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py,sha256=ZVHkuLDjEbXMCxBsw1UrRhT3EEF8CDDqEvmE3Kbp1H4,5359
|
|
125
|
+
uncountable/integration/queue_runner/datastore/__init__.py,sha256=6BefApqN8D2zlVOH14QAeVzwQ8j5NIb41-njT02Za0k,88
|
|
126
|
+
uncountable/integration/queue_runner/datastore/datastore_sqlite.py,sha256=UZQABTrM3HxVaojCnI1pTU3v1GsbE3G-OCgXP5ekcxI,3801
|
|
127
|
+
uncountable/integration/queue_runner/datastore/interface.py,sha256=j4D-zVvLq-48VTVwHVei82UVUJ_P3cxiseyiTl0MoNw,534
|
|
128
|
+
uncountable/integration/queue_runner/datastore/model.py,sha256=8-RI5A2yPZVGBLWINVmMd6VOl_oHtqGtnaNXcapAChw,577
|
|
129
|
+
uncountable/integration/secret_retrieval/__init__.py,sha256=3QXVj35w8rRMxVvmmsViFYDi3lcb3g70incfalOEm6o,87
|
|
130
|
+
uncountable/integration/secret_retrieval/retrieve_secret.py,sha256=9iz9N8Z-B68QwFCXsx8hTYbgDbk06ejkJ3RQ9mCLMyM,3000
|
|
131
|
+
uncountable/integration/webhook_server/entrypoint.py,sha256=yQWQq_k3kbJkSsEEt6k22YwhXekezJZfV0rnn-hP-Yo,5516
|
|
132
|
+
uncountable/types/__init__.py,sha256=BEYks35yh8J3pp-BI5-CyIUrH96IQ7myliD-zOhbyao,9196
|
|
133
|
+
uncountable/types/async_batch.py,sha256=yCCWrrLQfxXVqZp-KskxLBNkNmuELdz4PJjx8ULppgs,662
|
|
134
|
+
uncountable/types/async_batch_processor.py,sha256=ETgkfb-DLmI4bZwsgS6Awbm_zEXyjbtW5TZVpIIGN_0,14170
|
|
135
|
+
uncountable/types/async_batch_t.py,sha256=zJF7BsrVEquPPg7z28clkLXo6_cGFBwHriCmJ3y7eEw,3001
|
|
136
|
+
uncountable/types/async_jobs.py,sha256=JI0ScfawaqMRbJ2jbgW3YQLhijPnBeYdMnZJjygSxHg,322
|
|
137
|
+
uncountable/types/async_jobs_t.py,sha256=u4xd3i512PZ-9592Q2ZgWh_faMiI4UMm0F_gOmZnerI,1389
|
|
138
|
+
uncountable/types/auth_retrieval.py,sha256=770zjN1K9EF5zs1Xml7x6ke6Hkze7rcMT5FdDVCIl9M,549
|
|
139
|
+
uncountable/types/auth_retrieval_t.py,sha256=PFjSoRupf2wGAz1SonuNyf8CVW9nVeaiHLFOPMZkQxw,2172
|
|
140
|
+
uncountable/types/base.py,sha256=10-34wiyxrOZr2RQNiBohDNWc7b2i_La_yMuKLYslcU,338
|
|
141
|
+
uncountable/types/base_t.py,sha256=9Hrcs0Op6xrJCmhfyzUqKsJmt1WBZMa0K9cuSiPDKfg,2822
|
|
142
|
+
uncountable/types/calculations.py,sha256=fApOFpgBemt_t7IVneVR0VdI3X5EOxiG6Xhzr6RR8Gw,263
|
|
143
|
+
uncountable/types/calculations_t.py,sha256=LE_HWYPf7yxNTpH5sVPaC0e98OxJ5hUOhHezeJNKDtk,648
|
|
144
|
+
uncountable/types/chemical_structure.py,sha256=ujyragaD26-QG5jgKnWhO7TN3N1V9b_04T2WhqNYxxo,281
|
|
145
|
+
uncountable/types/chemical_structure_t.py,sha256=iYmGER_vXqoksv2Nr189qU1Zm70s-U49Eiv0DkWaB1I,773
|
|
146
|
+
uncountable/types/client_base.py,sha256=h5nOrnuw6Szq-fEu9mxzMhqMlm3HDpoi5PlL9Or8ypk,68699
|
|
147
|
+
uncountable/types/client_config.py,sha256=qLpHt4O_B098CyN6qQajoxZ2zjZ1DILXLUEGyyGP0TQ,280
|
|
148
|
+
uncountable/types/client_config_t.py,sha256=k_UkjemqiVuJBiFUjJYk3h673Nahr0nGZvfEZFzsC0k,699
|
|
149
|
+
uncountable/types/curves.py,sha256=QyEyC20jsG-LGKVx6miiF-w70vKMwNkILFBDIJ5Ok9g,345
|
|
150
|
+
uncountable/types/curves_t.py,sha256=2_9qdrSl1XAvIG57lo45KWNpa0wXgZ97OkSRCPRrudc,1347
|
|
151
|
+
uncountable/types/entity.py,sha256=Zclk1LYcRaYrMDhqyCjMSLEg0fE6_q8LHvV22Qvscgs,566
|
|
152
|
+
uncountable/types/entity_t.py,sha256=dTf525ZlAnhWwuCPElR5xooLt0q0LtdtTMkgMQv15nM,17422
|
|
153
|
+
uncountable/types/experiment_groups.py,sha256=qUpFOx1AKgzaT_4khCOv5Xs6jwiQGbvHH-GUh3v1nv4,288
|
|
154
|
+
uncountable/types/experiment_groups_t.py,sha256=_fAYZwqYLR3cFdv2vwLOYs5TvH5CEWDEbh3kFpg26zY,700
|
|
155
|
+
uncountable/types/field_values.py,sha256=hERqHIDmWPQpdW7BLitdA-DNiutmll-ggecwEO7FoVU,1181
|
|
156
|
+
uncountable/types/field_values_t.py,sha256=2BFTqfmlf1tvTFfY5I8xMIBd0IX-EupnzOtwFYFklQs,5751
|
|
157
|
+
uncountable/types/fields.py,sha256=M0_ZZr0QdNLXkdHAGo5mfU90kEtHedCSKrcod-FG30Y,245
|
|
158
|
+
uncountable/types/fields_t.py,sha256=Ze-X83HyM7q4oMk5LLRfPqvRojyAx6dDqIUPX70gNYc,644
|
|
159
|
+
uncountable/types/generic_upload.py,sha256=bNep2nT0fbKAlJaGvHWPmuvfX5KtS8kgTqTh8FQk1NA,858
|
|
160
|
+
uncountable/types/generic_upload_t.py,sha256=z7rxOu8SEyOmIlz06AAXmRkbQdBEpZigb8N2eGi6XIY,3756
|
|
161
|
+
uncountable/types/id_source.py,sha256=sBlDfUwHQ7bGWMschSD_aPQL7LVnCPiV2RAlPLXrAqk,546
|
|
162
|
+
uncountable/types/id_source_t.py,sha256=XzxQWkD0iQoq6LxtpCVWylYtOvq5dXslu_2ML1xNP_U,1838
|
|
163
|
+
uncountable/types/identifier.py,sha256=J-ptCFE0_R0bBAvrYp-gvHk8H9Qq9rhbmeyXgwb9nos,482
|
|
164
|
+
uncountable/types/identifier_t.py,sha256=b0V4_vQYWrsCnCJgNlR1FlHQGsGmGgrqREB5IhKsOec,1787
|
|
165
|
+
uncountable/types/input_attributes.py,sha256=T4qGyuZAgcdkaWeS0T7PFKQN44GEdAvVBBsaEkaCmdA,283
|
|
166
|
+
uncountable/types/input_attributes_t.py,sha256=3m5Bbs5Hj6jX425T0hmqUkjxfDTjhDgMgvKsE2vPBlA,843
|
|
167
|
+
uncountable/types/inputs.py,sha256=3ghg39_oiLF5HqWF_wNwYv4HMR1lrKLfeRLn5ptIGw4,446
|
|
168
|
+
uncountable/types/inputs_t.py,sha256=0b3U77JcZT4hgUvbP_i-E5RoJbJnRxn3OKBqGWu32TM,2097
|
|
169
|
+
uncountable/types/integration_server.py,sha256=VonA8h8TGnVBiss5W8-K82lA01JQa7TLk0ubFo8iiBQ,364
|
|
170
|
+
uncountable/types/integration_server_t.py,sha256=37zyqeet54P9m6pxaZfLOgZCqqZA2dxJ5gl6NCoelQ0,1188
|
|
171
|
+
uncountable/types/job_definition.py,sha256=6BkLZrmTfIYh45XFGZ5HOYveued0YXvl17YTlXblXjw,1646
|
|
172
|
+
uncountable/types/job_definition_t.py,sha256=n8lwjNtt6eHg01yARRIgDiLO9W8ev5upb3qs2RPHZXg,7753
|
|
173
|
+
uncountable/types/outputs.py,sha256=I6zP2WHXg_jXgMqmuEJuJOlsjKjQGHjfs1JOwW9YxBM,260
|
|
174
|
+
uncountable/types/outputs_t.py,sha256=ZJhKKkksJ-K7iuuumCly9edU8TRv-eWol4PKG7XPo3E,734
|
|
175
|
+
uncountable/types/overrides.py,sha256=fOvj8P9K9ul8fnTwA--l140EWHuc1BFq8tXgtBkYld4,410
|
|
176
|
+
uncountable/types/overrides_t.py,sha256=WNKKHrZcO6ZzeZfEXEW0xCsGWjbmHeUddT-4qp81Y8o,1303
|
|
177
|
+
uncountable/types/permissions.py,sha256=F24reVRd-J3iRSif8BwMNUcDwxRluBrTre3mJ36HP90,276
|
|
178
|
+
uncountable/types/permissions_t.py,sha256=hmAUZryOdnkZS0BeFViH-6fJ4rVPtwJaZ1JLlL_aGl4,1589
|
|
179
|
+
uncountable/types/phases.py,sha256=Capx0Tbx52151tHWw8tdOT_NMKMOyHZhrNuGrhuBzfo,245
|
|
180
|
+
uncountable/types/phases_t.py,sha256=L4HsYZHw_PR79eBbMwluN-Cpvv1bZvep2Foe3ju3WP0,624
|
|
181
|
+
uncountable/types/post_base.py,sha256=nHqFw6U6ENxcuj_Y3VG-Sk1NEt4Tud2iBxPhRsJpQKM,258
|
|
182
|
+
uncountable/types/post_base_t.py,sha256=nZl7XQHc9cSnLgccaBZM93bcnSSjTlo2_TL40n-o7K0,734
|
|
183
|
+
uncountable/types/queued_job.py,sha256=TlQMf69foLfr134k00LvFEB4OuGAZHZJl9ro9UzVpaU,821
|
|
184
|
+
uncountable/types/queued_job_t.py,sha256=NyJSdn3VECk_EIONGq8_FXA7S2cJJmlPs32c8BAOEuY,3527
|
|
185
|
+
uncountable/types/recipe_identifiers.py,sha256=nqrubqofaeg_zV6vOrzqbiuX5tDUQYrGyvugpWX38mY,633
|
|
186
|
+
uncountable/types/recipe_identifiers_t.py,sha256=0L2xT9uqQCFr2F8VkAKdjsbQFp-CQ8-wKNn6UFoPcP4,2260
|
|
187
|
+
uncountable/types/recipe_inputs.py,sha256=dLqKvac-Ff3owutgvBD8Hc5KPoiu-6Zy22WOUJtAuus,330
|
|
188
|
+
uncountable/types/recipe_inputs_t.py,sha256=jZ4uFw20-87rBJswK0UYxDNp6AcHhug7nSm5-3HN0XA,710
|
|
189
|
+
uncountable/types/recipe_links.py,sha256=5E25kptfPIAd96RRlE9lbdRrWKkbLz21S5K_tJ4sKrA,322
|
|
190
|
+
uncountable/types/recipe_links_t.py,sha256=6igPp7IzbqJGmFJXrB1hbMGYrWkaqQ5yapXoKjj-G3w,1483
|
|
191
|
+
uncountable/types/recipe_metadata.py,sha256=98whijK1TSrvkk_5oumyb8312nZvb6nw7x4Op6jSJy8,420
|
|
192
|
+
uncountable/types/recipe_metadata_t.py,sha256=ORth4ae2SHtbASZmiVpMSZhE_-pNOqyzus-w7YM5YCw,1641
|
|
193
|
+
uncountable/types/recipe_output_metadata.py,sha256=SfG1IKRC0Sybp9v9kUjr7kTV_PO365I8W7jvgKZ9j60,301
|
|
194
|
+
uncountable/types/recipe_output_metadata_t.py,sha256=llf9O2vK6AFRva5hx0VdiKXT9XQ2iN-N25W_0Zlxp9g,723
|
|
195
|
+
uncountable/types/recipe_tags.py,sha256=tKIwHY677lZCxrmOk1bbuZQgDuf1n1cNyp6c5r1uRbo,270
|
|
196
|
+
uncountable/types/recipe_tags_t.py,sha256=7qi9m8NAq7BdocIBdYyMVArFnPJrwuX0B9qoqlJiwzM,670
|
|
197
|
+
uncountable/types/recipe_workflow_steps.py,sha256=fb55_sREdeZrtguIZOuy4ZcTLbRBNAxQ3A0oGbH8muA,950
|
|
198
|
+
uncountable/types/recipe_workflow_steps_t.py,sha256=dwjuFI6ncLBwr7Ufa-W26nrfF-BqZ_pKFIpKP05WqOo,3406
|
|
199
|
+
uncountable/types/recipes.py,sha256=6Z7bagYXX15kGlhYt_OFiYSD3lqFp4H0EquI1fUfYyk,286
|
|
200
|
+
uncountable/types/recipes_t.py,sha256=GBT56H34_pqAdeTgcye6ZNZLR1V47lG_S-R_uV-XUh8,652
|
|
201
|
+
uncountable/types/response.py,sha256=SJTwjTxZGItGJJYPZ_T1zTooEbtR5ZA8GT_cf8aXfn8,253
|
|
202
|
+
uncountable/types/response_t.py,sha256=I4lArMXf50SFWon_Tl9AJjqqrzvfeSXv_C-AKfnGcZM,646
|
|
203
|
+
uncountable/types/secret_retrieval.py,sha256=poY_nuZBIjNu64Wa0x5Ytsmh3OdAxps2kzuDgv1sa_8,571
|
|
204
|
+
uncountable/types/secret_retrieval_t.py,sha256=hcJRp2OLPd5m7twve63F8gloL8KFJiCtyJD17H6WiAc,2138
|
|
205
|
+
uncountable/types/units.py,sha256=yxuddayiE8cnzrjQiIsURisWc-Vm1F37uyS3fjM--Ao,254
|
|
206
|
+
uncountable/types/units_t.py,sha256=DUP2ydfWdPM8X4sBGOvm6g7CoZ1kqwpWidwSlWYQEek,643
|
|
207
|
+
uncountable/types/users.py,sha256=R-bFIh07mMl6HyxP8hKmlT-QMbBXZPZ7mVuOIeOlCsg,254
|
|
208
|
+
uncountable/types/users_t.py,sha256=rpwi31aZMyrNJgzUUPgo2lHAlYv82UKr5XGq1XmkrUA,666
|
|
209
|
+
uncountable/types/webhook_job.py,sha256=3LdsSMCNmZZrFwTHJpVR7XzIJiu2T2cbE-0ScwfLMBc,342
|
|
210
|
+
uncountable/types/webhook_job_t.py,sha256=BJvqdio9n93qhNw1aUWkU0WaGqXU_03qSzBM1gj3_9E,958
|
|
211
|
+
uncountable/types/workflows.py,sha256=sZhBDSzu85M0teTRiKNqd389oUK2tMcWGpKUlKIuSdY,332
|
|
212
|
+
uncountable/types/workflows_t.py,sha256=UCsCd_1-SHRZZljpQRxOuM74epKH2H5D2qfSNDzI2Ek,986
|
|
213
|
+
uncountable/types/api/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
214
|
+
uncountable/types/api/batch/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
215
|
+
uncountable/types/api/batch/execute_batch.py,sha256=jOjMcne7iEF7LP_dURjHzG0_0dLkW7FDKSKKyhi5OU4,1970
|
|
216
|
+
uncountable/types/api/batch/execute_batch_load_async.py,sha256=rxr2pvJ4w_2XnqzffX4Lu0JKB1s9AHZweSua-bvUK_A,1072
|
|
217
|
+
uncountable/types/api/chemical/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
218
|
+
uncountable/types/api/chemical/convert_chemical_formats.py,sha256=B1MT10IfFLapomSwzJyAKvyjrwKVDqEuESIhCJPJtgc,1778
|
|
219
|
+
uncountable/types/api/entity/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
220
|
+
uncountable/types/api/entity/create_entities.py,sha256=2MVtjfpegFwwUU0NGu-cpvgwusV-6B0zhCPWclXTEsc,1562
|
|
221
|
+
uncountable/types/api/entity/create_entity.py,sha256=cVEYcn3ao1vEiF7CiKd85OYBqqqd7ElwRyD_V5C_BHg,1647
|
|
222
|
+
uncountable/types/api/entity/get_entities_data.py,sha256=OUeBo0YkZmVTHT2EHAQt19rm2PU4OpJzOj3aCmZMw0Y,1433
|
|
223
|
+
uncountable/types/api/entity/grant_entity_permissions.py,sha256=Zx3FDHSjiBN_wRtmxbWSWdmT-CkzEoi2uoVLCIdS2Q8,1391
|
|
224
|
+
uncountable/types/api/entity/list_entities.py,sha256=1I6T6fjfolXx1lg8iRiCO5J0ieU0bdudPp31ZmMkXIQ,1895
|
|
225
|
+
uncountable/types/api/entity/lock_entity.py,sha256=cWRTNlXj6Ei1M0mHwfbhid7hQs4whCheUCOmf8PIGqw,1166
|
|
226
|
+
uncountable/types/api/entity/resolve_entity_ids.py,sha256=44B79L4erUB0G90WBGor0ZPs3XhdkuX7ZvgVF9uWB2M,1340
|
|
227
|
+
uncountable/types/api/entity/set_entity_field_values.py,sha256=ZYtRrsx0MWc0txC6yH2HtCONC5A0IolpqvwHm_YgirU,1179
|
|
228
|
+
uncountable/types/api/entity/set_values.py,sha256=2lANfjqPOcyxqDeISmzW0KghVbe8_i4QNkcLXzdAkag,1104
|
|
229
|
+
uncountable/types/api/entity/transition_entity_phase.py,sha256=HOFFjo4vEqxYTO_-ugFFIzI21llWAxXZ1m86ANrd8t4,2325
|
|
230
|
+
uncountable/types/api/entity/unlock_entity.py,sha256=D-EO1hQ5MckX_8D-pDgiOqMLCEV0rcjoCTNdqZUofNs,1129
|
|
231
|
+
uncountable/types/api/equipment/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
232
|
+
uncountable/types/api/equipment/associate_equipment_input.py,sha256=T10F9R5HaqEwqkUBDxxCRHqhWCX_ufHezKOgBuDYnEc,1176
|
|
233
|
+
uncountable/types/api/field_options/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
234
|
+
uncountable/types/api/field_options/upsert_field_options.py,sha256=7HOoqenKWU8r7u_M8FXM2WfPFD3_gpCuyI_tJG56C5w,1425
|
|
235
|
+
uncountable/types/api/files/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
236
|
+
uncountable/types/api/files/download_file.py,sha256=uk-GpdpuhC4Eng815c1LfTDBjPEdqVWKuCFGwJZmNf8,2208
|
|
237
|
+
uncountable/types/api/id_source/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
238
|
+
uncountable/types/api/id_source/list_id_source.py,sha256=rKNuf78xPMKzmwNErrSsAEikpQOfXc4HxKXZ8VNf6j4,1359
|
|
239
|
+
uncountable/types/api/id_source/match_id_source.py,sha256=9rA8IbFFZArWByFtXXFGmBNhX7g5URSRHmDa7GsvuLE,1306
|
|
240
|
+
uncountable/types/api/input_groups/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
241
|
+
uncountable/types/api/input_groups/get_input_group_names.py,sha256=bSEZZpWMLw-H433tIcfUMPsiC6y2Waw7_nLl_vVn5gY,1355
|
|
242
|
+
uncountable/types/api/inputs/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
243
|
+
uncountable/types/api/inputs/create_inputs.py,sha256=mhX7J19QyT93pN2MRePprm_RSmTSWynZE0zT-m25XjI,1969
|
|
244
|
+
uncountable/types/api/inputs/get_input_data.py,sha256=LGpeCzfwJg_HytTI-gr3Y9qXqdMheiiKTcB_oqCAs2g,2661
|
|
245
|
+
uncountable/types/api/inputs/get_input_names.py,sha256=ZUaIyUQRisaaLAl8X_VHqF4WqLacFhMwAFYZucGAPEc,1372
|
|
246
|
+
uncountable/types/api/inputs/get_inputs_data.py,sha256=nMgN_PE1AuKHnnYgMAwjYoWIQNjkvTyiiyt9G0xGJNc,2392
|
|
247
|
+
uncountable/types/api/inputs/set_input_attribute_values.py,sha256=aHZAEdV7YNao1nk_pwFXlAZ0W217eX9Fa7Uga3SX7LM,1570
|
|
248
|
+
uncountable/types/api/inputs/set_input_category.py,sha256=a2sV0pE_EsZd6DBS3ud2KLl4JhzrKFN5T2kHCNSaBf4,1138
|
|
249
|
+
uncountable/types/api/inputs/set_input_subcategories.py,sha256=y-Wttpmddpe7ps9OxsVe96x3t1R_p5h4xShJxI7i5MY,1175
|
|
250
|
+
uncountable/types/api/inputs/set_intermediate_type.py,sha256=8eodqt_J6OqmU4qyfbjgc43UrlG8xBfUEY-e9oRDFxI,1286
|
|
251
|
+
uncountable/types/api/material_families/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
252
|
+
uncountable/types/api/material_families/update_entity_material_families.py,sha256=UNKzPnwF7IjeaZFe8NwK4hwxyEe7Yd6v4p19yvf43-U,1577
|
|
253
|
+
uncountable/types/api/outputs/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
254
|
+
uncountable/types/api/outputs/get_output_data.py,sha256=Sg2gkAN9k9171eW1-5spsHKERgIFfPkX8mGe_t0ep2c,2703
|
|
255
|
+
uncountable/types/api/outputs/get_output_names.py,sha256=m4lSzpZF1g0CBtQBzOS0MH6hsuVOMs0FlJAKlTz6hW4,1356
|
|
256
|
+
uncountable/types/api/outputs/resolve_output_conditions.py,sha256=8Zs_CcCenDyypI3L0nEkVYx_fRJ-J7wq-J1sw5Ztass,2273
|
|
257
|
+
uncountable/types/api/permissions/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
258
|
+
uncountable/types/api/permissions/set_core_permissions.py,sha256=Kf5yt2IlwSqGpyEyIl1sTVO0wpdGEk984ojmK3-JwYk,3262
|
|
259
|
+
uncountable/types/api/project/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
260
|
+
uncountable/types/api/project/get_projects.py,sha256=DHThOC3XesjDPjle3LTW93ef6DTjrVKIK2AZcbv2_s0,1466
|
|
261
|
+
uncountable/types/api/project/get_projects_data.py,sha256=wp-mL40BNR9I1NXBXYVWlCGxLOFsT2T9B0aoFTYCuZA,1675
|
|
262
|
+
uncountable/types/api/recipe_links/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
263
|
+
uncountable/types/api/recipe_links/create_recipe_link.py,sha256=Z8WTy6SQPDt2zleRXhKzj2jS-R1QfLnQFg56XVctftQ,1368
|
|
264
|
+
uncountable/types/api/recipe_links/remove_recipe_link.py,sha256=HZQ15AqPjTqSEJjRY3L9RnU0T2EuzV4Wu7ilbeLhuDI,1354
|
|
265
|
+
uncountable/types/api/recipe_metadata/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
266
|
+
uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py,sha256=fW-6_vBIGa5Wx8JvEdpKb3orXD60DX_wOeHnmMPduc8,1550
|
|
267
|
+
uncountable/types/api/recipes/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
268
|
+
uncountable/types/api/recipes/add_recipe_to_project.py,sha256=vJL6DljCu4okNHvXJ5_uaBj0-QDEm9iTvVGMLYyDd2U,1061
|
|
269
|
+
uncountable/types/api/recipes/archive_recipes.py,sha256=07Rjd9kwh5pMpiMXNr9OfjOB4vYXeuLjQtBxrXkXC7o,1024
|
|
270
|
+
uncountable/types/api/recipes/associate_recipe_as_input.py,sha256=TtsAJRT9vRjnsIh0IvfFimA2hstZvgyn6rpaDIsDfK4,1194
|
|
271
|
+
uncountable/types/api/recipes/associate_recipe_as_lot.py,sha256=_4SgFfH-wFxW9Vevv9k3G3T10Uz8CMLjuiDEv1oT2So,1138
|
|
272
|
+
uncountable/types/api/recipes/clear_recipe_outputs.py,sha256=BfTQrV79UePkJ4HSSixV1AZovgVdIIIKK2OLJe1r8Dw,1082
|
|
273
|
+
uncountable/types/api/recipes/create_recipe.py,sha256=tVeQgikCWAwGtxpq2vLyXd5Aeqo_8Tde64x5GAOJl50,1472
|
|
274
|
+
uncountable/types/api/recipes/create_recipes.py,sha256=J1CBE13d8JaVpUxOftFg1Plo8RKa0vc-A2nHdO1yoj8,1862
|
|
275
|
+
uncountable/types/api/recipes/disassociate_recipe_as_input.py,sha256=zWUfwJlkgWexblqKCKCF5HWR40ynQ8rg_PPo2WPGISY,1106
|
|
276
|
+
uncountable/types/api/recipes/edit_recipe_inputs.py,sha256=NEK0PrM-SnGx95KcjpSWimi3xTrOMKO8BMURom08ppc,9837
|
|
277
|
+
uncountable/types/api/recipes/get_column_calculation_values.py,sha256=9eqURjD2Mwm2lyV1bJIq66Z7a3enLhhx_scZBt4SYYc,1671
|
|
278
|
+
uncountable/types/api/recipes/get_curve.py,sha256=C-elYAKcBw7P5bWwN-8p_SWj15l5aBJrKNR8yjphZ-Q,1085
|
|
279
|
+
uncountable/types/api/recipes/get_recipe_calculations.py,sha256=iBmkhKC1qBFxuPPziM3LD6tGsdsN_xb4NcUaJwF6cHU,1679
|
|
280
|
+
uncountable/types/api/recipes/get_recipe_links.py,sha256=jYygHnuzTzuc_H8AG72Ihrb38kEhtfbVNlb4b7elLfI,1149
|
|
281
|
+
uncountable/types/api/recipes/get_recipe_names.py,sha256=HXv39OI6GRedSAKOhurEQEY_djaxvJcxlTTWghLgA5I,1274
|
|
282
|
+
uncountable/types/api/recipes/get_recipe_output_metadata.py,sha256=7lF2cnRsBLPDSsjlNIy-aJ4Dao5-qe7WrNaf4XNmq74,1703
|
|
283
|
+
uncountable/types/api/recipes/get_recipes_data.py,sha256=srZBvl8dCdoo7yil0D1ohAxnbMaCS28ctCH93NaYQd0,6099
|
|
284
|
+
uncountable/types/api/recipes/lock_recipes.py,sha256=8z_g5lokbzkATZvN5Vpvx6uXS3xPZN77AP5OhHPsGhc,1581
|
|
285
|
+
uncountable/types/api/recipes/remove_recipe_from_project.py,sha256=_KWbYnMMEOZAaC_jdXZvCEYXJaVhs3x27ZWlJbq3CV4,1076
|
|
286
|
+
uncountable/types/api/recipes/set_recipe_inputs.py,sha256=RvWj2SOtcuy_msp9pUjz20O3Y_EjEMKd48o-RhpCDNE,1583
|
|
287
|
+
uncountable/types/api/recipes/set_recipe_metadata.py,sha256=R4GVqpMJdJuoSXsJx1e4vhmWqKKTPMyPPEArwV45crI,1104
|
|
288
|
+
uncountable/types/api/recipes/set_recipe_output_annotations.py,sha256=yczFBmuB0grzNWsnXspCPUsDA608M9wGkJ2dugyxG4U,3526
|
|
289
|
+
uncountable/types/api/recipes/set_recipe_output_file.py,sha256=W_qvEkZxzDczwU9EZ7zKyBmLGnO6GFqMsJ3zwXCnpA0,1502
|
|
290
|
+
uncountable/types/api/recipes/set_recipe_outputs.py,sha256=hNeV3hwPw3fT-pnhe17fPPgLH7pfpva0kjpt2NTt55E,2104
|
|
291
|
+
uncountable/types/api/recipes/set_recipe_tags.py,sha256=HS5GG-nTy0vTNTANG-ROawku0VhzOs0hIzGKfRFefYY,3098
|
|
292
|
+
uncountable/types/api/recipes/unarchive_recipes.py,sha256=G0jYuarNZLmTCQ6m5_ZAUwBl4M8_cqKRlP-jMJp-Rcw,1000
|
|
293
|
+
uncountable/types/api/recipes/unlock_recipes.py,sha256=QFvz13eJipWQlIRrqOybnIPeJxfR4yZM8yIr841jd28,1258
|
|
294
|
+
uncountable/types/api/triggers/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
295
|
+
uncountable/types/api/triggers/run_trigger.py,sha256=diX1ix_5hkti1F1uYoZhP5iyc6GHAU5coKgqq5syLhI,1059
|
|
296
|
+
uncountable/types/api/uploader/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
297
|
+
uncountable/types/api/uploader/invoke_uploader.py,sha256=-loZzBihKqx63eP-f5RuV1mu6tgkRTZmIc545kklZLk,1273
|
|
298
|
+
UncountablePythonSDK-0.0.93.dist-info/METADATA,sha256=Pwy0kXB5Pc8CCUeDNAzQXwTcJwZb9N_7jTpUigM7KFw,2064
|
|
299
|
+
UncountablePythonSDK-0.0.93.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
|
300
|
+
UncountablePythonSDK-0.0.93.dist-info/top_level.txt,sha256=1UVGjAU-6hJY9qw2iJ7nCBeEwZ793AEN5ZfKX9A1uj4,31
|
|
301
|
+
UncountablePythonSDK-0.0.93.dist-info/RECORD,,
|
examples/upload_files.py
CHANGED
pkgs/argument_parser/__init__.py
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
from .argument_parser import CachedParser as CachedParser
|
|
2
2
|
from .argument_parser import ParserError as ParserError
|
|
3
|
+
from .argument_parser import ParserExtraFieldsError as ParserExtraFieldsError
|
|
3
4
|
from .argument_parser import ParserFunction as ParserFunction
|
|
4
5
|
from .argument_parser import ParserOptions as ParserOptions
|
|
6
|
+
from .argument_parser import SourceEncoding as SourceEncoding
|
|
5
7
|
from .argument_parser import build_parser as build_parser
|
|
8
|
+
from .argument_parser import is_union as is_union
|
|
6
9
|
from .case_convert import camel_to_snake_case as camel_to_snake_case
|
|
7
10
|
from .case_convert import kebab_to_pascal_case as kebab_to_pascal_case
|
|
8
11
|
from .case_convert import snake_to_camel_case as snake_to_camel_case
|
|
@@ -5,7 +5,6 @@ import math
|
|
|
5
5
|
import types
|
|
6
6
|
import typing
|
|
7
7
|
from collections import defaultdict
|
|
8
|
-
from dataclasses import MISSING, dataclass
|
|
9
8
|
from datetime import date, datetime
|
|
10
9
|
from decimal import Decimal
|
|
11
10
|
from enum import Enum, auto
|
|
@@ -35,7 +34,7 @@ class SourceEncoding(Enum):
|
|
|
35
34
|
STORAGE = auto()
|
|
36
35
|
|
|
37
36
|
|
|
38
|
-
@dataclass(frozen=True, eq=True)
|
|
37
|
+
@dataclasses.dataclass(frozen=True, eq=True)
|
|
39
38
|
class ParserOptions:
|
|
40
39
|
encoding: SourceEncoding
|
|
41
40
|
strict_property_parsing: bool = False
|
|
@@ -57,8 +56,12 @@ class ParserOptions:
|
|
|
57
56
|
def from_camel_case(self) -> bool:
|
|
58
57
|
return self.encoding == SourceEncoding.API
|
|
59
58
|
|
|
59
|
+
@property
|
|
60
|
+
def allow_direct_dataclass(self) -> bool:
|
|
61
|
+
return self.encoding == SourceEncoding.STORAGE
|
|
62
|
+
|
|
60
63
|
|
|
61
|
-
@dataclass(frozen=True)
|
|
64
|
+
@dataclasses.dataclass(frozen=True)
|
|
62
65
|
class ParserContext:
|
|
63
66
|
options: ParserOptions
|
|
64
67
|
cache: ParserCache
|
|
@@ -77,21 +80,23 @@ class ParserExtraFieldsError(ParserError):
|
|
|
77
80
|
return f"extra fields were provided: {', '.join(self.extra_fields)}"
|
|
78
81
|
|
|
79
82
|
|
|
83
|
+
def is_union(field_type: typing.Any) -> bool:
|
|
84
|
+
origin = typing.get_origin(field_type)
|
|
85
|
+
return origin is typing.Union or origin is types.UnionType
|
|
86
|
+
|
|
87
|
+
|
|
80
88
|
def is_optional(field_type: typing.Any) -> bool:
|
|
81
|
-
return
|
|
82
|
-
None
|
|
83
|
-
) in typing.get_args(field_type)
|
|
89
|
+
return is_union(field_type) and type(None) in typing.get_args(field_type)
|
|
84
90
|
|
|
85
91
|
|
|
86
92
|
def is_missing(field_type: typing.Any) -> bool:
|
|
87
|
-
|
|
88
|
-
if origin is not typing.Union:
|
|
93
|
+
if not is_union(field_type):
|
|
89
94
|
return False
|
|
90
95
|
args = typing.get_args(field_type)
|
|
91
96
|
return not (len(args) == 0 or args[0] is not MissingSentryType)
|
|
92
97
|
|
|
93
98
|
|
|
94
|
-
def _invoke_tuple_parsers(
|
|
99
|
+
def _invoke_tuple_parsers[T](
|
|
95
100
|
tuple_type: type[T],
|
|
96
101
|
arg_parsers: typing.Sequence[typing.Callable[[typing.Any], object]],
|
|
97
102
|
has_ellipsis: bool,
|
|
@@ -128,7 +133,7 @@ def _invoke_fallback_parsers(
|
|
|
128
133
|
) from ExceptionGroup("Fallback Parser Exception", exceptions)
|
|
129
134
|
|
|
130
135
|
|
|
131
|
-
def _invoke_membership_parser(
|
|
136
|
+
def _invoke_membership_parser[T](
|
|
132
137
|
expected_values: set[T],
|
|
133
138
|
value: typing.Any,
|
|
134
139
|
) -> T:
|
|
@@ -143,11 +148,16 @@ def _invoke_membership_parser(
|
|
|
143
148
|
raise ValueError(f"Expected value from {expected_values} but got value {value}")
|
|
144
149
|
|
|
145
150
|
|
|
146
|
-
def _build_parser_discriminated_union(
|
|
147
|
-
|
|
151
|
+
def _build_parser_discriminated_union[T](
|
|
152
|
+
context: ParserContext,
|
|
153
|
+
discriminator: str,
|
|
154
|
+
discriminator_map: dict[str, ParserFunction[T]],
|
|
148
155
|
) -> ParserFunction[T]:
|
|
149
156
|
def parse(value: typing.Any) -> typing.Any:
|
|
150
|
-
|
|
157
|
+
if context.options.allow_direct_dataclass and dataclasses.is_dataclass(value):
|
|
158
|
+
discriminant = getattr(value, discriminator)
|
|
159
|
+
else:
|
|
160
|
+
discriminant = value.get(discriminator)
|
|
151
161
|
if discriminant is None:
|
|
152
162
|
raise ValueError("missing-union-discriminant")
|
|
153
163
|
if not isinstance(discriminant, str):
|
|
@@ -160,7 +170,7 @@ def _build_parser_discriminated_union(
|
|
|
160
170
|
return parse
|
|
161
171
|
|
|
162
172
|
|
|
163
|
-
def _build_parser_inner(
|
|
173
|
+
def _build_parser_inner[T](
|
|
164
174
|
parsed_type: type[T],
|
|
165
175
|
context: ParserContext,
|
|
166
176
|
) -> ParserFunction[T]:
|
|
@@ -178,6 +188,7 @@ def _build_parser_inner(
|
|
|
178
188
|
parsed_type = serial_union.get_union_underlying()
|
|
179
189
|
else:
|
|
180
190
|
return _build_parser_discriminated_union(
|
|
191
|
+
context,
|
|
181
192
|
discriminator,
|
|
182
193
|
{
|
|
183
194
|
key: _build_parser_inner(value, context)
|
|
@@ -357,7 +368,7 @@ def _build_parser_inner(
|
|
|
357
368
|
raise ValueError(f"Unhandled type {parsed_type}")
|
|
358
369
|
|
|
359
370
|
|
|
360
|
-
def _build_parser_dataclass(
|
|
371
|
+
def _build_parser_dataclass[T](
|
|
361
372
|
parsed_type: type[T],
|
|
362
373
|
context: ParserContext,
|
|
363
374
|
) -> ParserFunction[T]:
|
|
@@ -392,21 +403,25 @@ def _build_parser_dataclass(
|
|
|
392
403
|
)
|
|
393
404
|
|
|
394
405
|
def parse(value: typing.Any) -> typing.Any:
|
|
406
|
+
# Use an exact type match to prevent base/derived class mismatches
|
|
407
|
+
if context.options.allow_direct_dataclass and type(value) is parsed_type:
|
|
408
|
+
return value
|
|
409
|
+
|
|
395
410
|
data: dict[typing.Any, typing.Any] = {}
|
|
396
411
|
for field, field_type, field_parser in dc_field_parsers:
|
|
397
412
|
field_raw_value = None
|
|
398
413
|
try:
|
|
399
414
|
field_raw_value = value.get(
|
|
400
415
|
resolve_serialized_field_name(field_name=field.name),
|
|
401
|
-
MISSING,
|
|
416
|
+
dataclasses.MISSING,
|
|
402
417
|
)
|
|
403
418
|
field_value: typing.Any
|
|
404
|
-
if field_raw_value == MISSING:
|
|
419
|
+
if field_raw_value == dataclasses.MISSING:
|
|
405
420
|
if serial_class_data.has_parse_require(field.name):
|
|
406
421
|
raise ValueError("missing-required-field", field.name)
|
|
407
|
-
if field.default != MISSING:
|
|
422
|
+
if field.default != dataclasses.MISSING:
|
|
408
423
|
field_value = field.default
|
|
409
|
-
elif field.default_factory != MISSING:
|
|
424
|
+
elif field.default_factory != dataclasses.MISSING:
|
|
410
425
|
field_value = field.default_factory()
|
|
411
426
|
elif is_missing(field_type):
|
|
412
427
|
field_value = MissingSentryType()
|
|
@@ -464,7 +479,7 @@ def _build_parser_dataclass(
|
|
|
464
479
|
_CACHE_MAP: dict[ParserOptions, ParserCache] = defaultdict(ParserCache)
|
|
465
480
|
|
|
466
481
|
|
|
467
|
-
def build_parser(
|
|
482
|
+
def build_parser[T](
|
|
468
483
|
parsed_type: type[T],
|
|
469
484
|
options: ParserOptions,
|
|
470
485
|
) -> ParserFunction[T]:
|
|
@@ -486,17 +501,31 @@ def build_parser(
|
|
|
486
501
|
return built_parser
|
|
487
502
|
|
|
488
503
|
|
|
489
|
-
class CachedParser
|
|
504
|
+
class CachedParser[T]:
|
|
490
505
|
def __init__(
|
|
491
506
|
self,
|
|
492
507
|
args: type[T],
|
|
493
508
|
strict_property_parsing: bool = False,
|
|
494
509
|
):
|
|
495
510
|
self.arguments = args
|
|
496
|
-
self.parser_api:
|
|
497
|
-
self.parser_storage:
|
|
511
|
+
self.parser_api: ParserFunction[T] | None = None
|
|
512
|
+
self.parser_storage: ParserFunction[T] | None = None
|
|
498
513
|
self.strict_property_parsing = strict_property_parsing
|
|
499
514
|
|
|
515
|
+
def parse_from_encoding(
|
|
516
|
+
self,
|
|
517
|
+
args: typing.Any,
|
|
518
|
+
*,
|
|
519
|
+
source_encoding: SourceEncoding,
|
|
520
|
+
) -> T:
|
|
521
|
+
match source_encoding:
|
|
522
|
+
case SourceEncoding.API:
|
|
523
|
+
return self.parse_api(args)
|
|
524
|
+
case SourceEncoding.STORAGE:
|
|
525
|
+
return self.parse_storage(args)
|
|
526
|
+
case _:
|
|
527
|
+
typing.assert_never(source_encoding)
|
|
528
|
+
|
|
500
529
|
def parse_api(self, args: typing.Any) -> T:
|
|
501
530
|
"""
|
|
502
531
|
Parses data coming from an API/Endpoint
|
|
@@ -17,3 +17,4 @@ from .file_type_utils import FileSystemSFTPConfig as FileSystemSFTPConfig
|
|
|
17
17
|
from .file_type_utils import FileTransfer as FileTransfer
|
|
18
18
|
from .file_type_utils import IncompatibleFileReference as IncompatibleFileReference
|
|
19
19
|
from .file_type_utils import RemoteObjectReference as RemoteObjectReference
|
|
20
|
+
from .filesystem_session import FileSystemSession as FileSystemSession
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from io import BytesIO
|
|
3
|
-
from typing import Any
|
|
3
|
+
from typing import Any
|
|
4
4
|
|
|
5
5
|
from google.oauth2 import service_account
|
|
6
6
|
from googleapiclient.discovery import build as build_gdrive_connection
|
|
@@ -30,7 +30,7 @@ def download_gdrive_file(
|
|
|
30
30
|
mime_type: str,
|
|
31
31
|
*,
|
|
32
32
|
verbose: bool = False,
|
|
33
|
-
) ->
|
|
33
|
+
) -> FileObjectData | None:
|
|
34
34
|
if "folder" in mime_type:
|
|
35
35
|
if verbose:
|
|
36
36
|
print(f"{filename} is a folder and will not be downloaded.")
|
|
@@ -148,7 +148,7 @@ def move_gdrive_file(
|
|
|
148
148
|
src_file_id: str,
|
|
149
149
|
dest_folder_id: str,
|
|
150
150
|
*,
|
|
151
|
-
dest_filename:
|
|
151
|
+
dest_filename: str | None = None,
|
|
152
152
|
) -> None:
|
|
153
153
|
# Retrieve the existing parents to remove
|
|
154
154
|
file = (
|
|
@@ -197,7 +197,7 @@ class GDriveSession(FileSystemSession):
|
|
|
197
197
|
dir_path: FileSystemObject,
|
|
198
198
|
*,
|
|
199
199
|
recursive: bool = False,
|
|
200
|
-
valid_file_extensions:
|
|
200
|
+
valid_file_extensions: tuple[str, ...] | None = None,
|
|
201
201
|
) -> list[FileSystemObject]:
|
|
202
202
|
if not isinstance(dir_path, RemoteObjectReference):
|
|
203
203
|
raise IncompatibleFileReference(
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
from io import BytesIO
|
|
2
2
|
|
|
3
3
|
from boto3.session import Session
|
|
4
|
+
from mypy_boto3_s3.service_resource import Bucket
|
|
4
5
|
|
|
5
6
|
from pkgs.filesystem_utils.file_type_utils import (
|
|
6
7
|
FileObjectData,
|
|
@@ -37,7 +38,7 @@ class S3Session(FileSystemSession):
|
|
|
37
38
|
aws_session_token=self.config.session_token,
|
|
38
39
|
)
|
|
39
40
|
|
|
40
|
-
self.bucket = s3_resource.Bucket(self.config.bucket_name)
|
|
41
|
+
self.bucket: Bucket | None = s3_resource.Bucket(self.config.bucket_name)
|
|
41
42
|
|
|
42
43
|
def __enter__(self) -> "S3Session":
|
|
43
44
|
self.start()
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from collections.abc import Iterable
|
|
3
3
|
from io import BytesIO
|
|
4
|
-
from typing import Optional
|
|
5
4
|
|
|
6
5
|
import paramiko
|
|
7
6
|
import pysftp
|
|
@@ -30,8 +29,8 @@ def list_sftp_files(
|
|
|
30
29
|
connection: pysftp.Connection,
|
|
31
30
|
dir_path: str,
|
|
32
31
|
*,
|
|
33
|
-
valid_extensions:
|
|
34
|
-
parent_dir_path:
|
|
32
|
+
valid_extensions: Iterable[str] | None = None,
|
|
33
|
+
parent_dir_path: str | None = None,
|
|
35
34
|
recursive: bool = True,
|
|
36
35
|
) -> list[str]:
|
|
37
36
|
file_paths: list[str] = []
|