UncountablePythonSDK 0.0.91__tar.gz → 0.0.93__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.91/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.93}/PKG-INFO +2 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93/UncountablePythonSDK.egg-info}/PKG-INFO +2 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/examples/set_recipe_metadata_file.py +1 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/examples/upload_files.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/argument_parser/__init__.py +3 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/argument_parser/argument_parser.py +52 -23
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/filesystem_utils/__init__.py +1 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/filesystem_utils/_gdrive_session.py +4 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/filesystem_utils/_s3_session.py +2 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/filesystem_utils/_sftp_session.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/filesystem_utils/file_type_utils.py +10 -10
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/annotation.py +5 -5
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/missing_sentry.py +1 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/serial_alias.py +3 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/serial_class.py +10 -10
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/serial_generic.py +1 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/serial_union.py +10 -10
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization_util/__init__.py +2 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization_util/serialization_helpers.py +1 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/actions_registry/__main__.py +0 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/builder.py +121 -40
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/config.py +10 -5
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/emit_open_api.py +2 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/emit_open_api_util.py +1 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/emit_python.py +145 -63
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/emit_typescript.py +57 -10
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/load_types.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/open_api_util.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/parts/base.py.prepart +2 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/type_info/emit_type_info.py +8 -8
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/util.py +5 -7
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/value_spec/__main__.py +15 -5
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/value_spec/emit_python.py +5 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/value_spec/types.py +1 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/core/client.py +16 -15
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/core/file_upload.py +39 -15
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/construct_client.py +3 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/executors/generic_upload_executor.py +1 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/job.py +2 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/command_server/types.py +1 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/worker.py +1 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/server.py +4 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/telemetry.py +11 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/__init__.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/batch/execute_batch.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/batch/execute_batch_load_async.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/chemical/convert_chemical_formats.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/entity/create_entities.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/entity/create_entity.py +4 -5
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/entity/get_entities_data.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/entity/grant_entity_permissions.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/entity/list_entities.py +5 -6
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/entity/lock_entity.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/entity/resolve_entity_ids.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/entity/set_entity_field_values.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/entity/set_values.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/entity/transition_entity_phase.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/entity/unlock_entity.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/equipment/associate_equipment_input.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/field_options/upsert_field_options.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/files/download_file.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/id_source/list_id_source.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/id_source/match_id_source.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/input_groups/get_input_group_names.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/inputs/create_inputs.py +4 -5
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/inputs/get_input_data.py +5 -6
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/inputs/get_input_names.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/inputs/get_inputs_data.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/inputs/set_input_attribute_values.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/inputs/set_input_category.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/inputs/set_input_subcategories.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/inputs/set_intermediate_type.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/material_families/update_entity_material_families.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/outputs/get_output_data.py +6 -7
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/outputs/get_output_names.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/outputs/resolve_output_conditions.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/permissions/set_core_permissions.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/project/get_projects.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/project/get_projects_data.py +4 -5
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipe_links/create_recipe_link.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipe_links/remove_recipe_link.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/add_recipe_to_project.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/archive_recipes.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/associate_recipe_as_input.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/associate_recipe_as_lot.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/clear_recipe_outputs.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/create_recipe.py +6 -7
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/create_recipes.py +4 -5
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/disassociate_recipe_as_input.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/edit_recipe_inputs.py +9 -10
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/get_column_calculation_values.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/get_curve.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/get_recipe_calculations.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/get_recipe_links.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/get_recipe_names.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/get_recipe_output_metadata.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/get_recipes_data.py +22 -23
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/lock_recipes.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/remove_recipe_from_project.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/set_recipe_inputs.py +6 -7
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/set_recipe_metadata.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/set_recipe_output_annotations.py +5 -6
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/set_recipe_output_file.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/set_recipe_outputs.py +8 -9
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/set_recipe_tags.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/unarchive_recipes.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/unlock_recipes.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/triggers/run_trigger.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/uploader/invoke_uploader.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/async_batch.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/async_batch_processor.py +23 -24
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/async_batch_t.py +5 -6
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/async_jobs.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/async_jobs_t.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/auth_retrieval.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/auth_retrieval_t.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/base.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/base_t.py +2 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/calculations.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/calculations_t.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/chemical_structure.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/chemical_structure_t.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/client_base.py +65 -66
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/client_config.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/client_config_t.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/curves.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/curves_t.py +4 -5
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/entity.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/entity_t.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/experiment_groups.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/experiment_groups_t.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/field_values.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/field_values_t.py +6 -7
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/fields.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/fields_t.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/generic_upload.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/generic_upload_t.py +7 -8
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/id_source.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/id_source_t.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/identifier.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/identifier_t.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/input_attributes.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/input_attributes_t.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/inputs.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/inputs_t.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/integration_server.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/integration_server_t.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/job_definition.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/job_definition_t.py +16 -17
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/outputs.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/outputs_t.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/overrides.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/overrides_t.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/permissions.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/permissions_t.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/phases.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/phases_t.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/post_base.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/post_base_t.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/queued_job.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/queued_job_t.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_identifiers.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_identifiers_t.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_inputs.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_inputs_t.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_links.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_links_t.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_metadata.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_metadata_t.py +6 -7
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_output_metadata.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_output_metadata_t.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_tags.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_tags_t.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_workflow_steps.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipe_workflow_steps_t.py +2 -3
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipes.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/recipes_t.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/response.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/response_t.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/secret_retrieval.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/secret_retrieval_t.py +3 -4
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/units.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/units_t.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/users.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/users_t.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/webhook_job.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/webhook_job_t.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/workflows.py +0 -1
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/workflows_t.py +1 -2
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/.github/workflows/documentation.yml +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/.github/workflows/publish.yml +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/.gitignore +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/README.md +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/UncountablePythonSDK.egg-info/SOURCES.txt +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/UncountablePythonSDK.egg-info/dependency_links.txt +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/UncountablePythonSDK.egg-info/requires.txt +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/UncountablePythonSDK.egg-info/top_level.txt +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/.gitignore +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/conf.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/index.md +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/justfile +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/quickstart.md +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/requirements.txt +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/static/favicons/android-chrome-192x192.png +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/static/favicons/android-chrome-512x512.png +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/static/favicons/apple-touch-icon.png +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/static/favicons/browserconfig.xml +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/static/favicons/favicon-16x16.png +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/static/favicons/favicon-32x32.png +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/static/favicons/manifest.json +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/static/favicons/mstile-150x150.png +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/static/favicons/safari-pinned-tab.svg +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/docs/static/logo_blue.png +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/examples/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/examples/create_entity.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/examples/download_files.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/examples/edit_recipe_inputs.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/examples/integration-server/jobs/materials_auto/example_cron.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/examples/integration-server/jobs/materials_auto/example_wh.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/examples/integration-server/jobs/materials_auto/profile.yaml +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/examples/integration-server/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/examples/invoke_uploader.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/examples/set_recipe_output_file_sdk.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/argument_parser/_is_enum.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/argument_parser/_is_namedtuple.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/argument_parser/case_convert.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/filesystem_utils/_blob_session.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/filesystem_utils/_local_session.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/filesystem_utils/filesystem_session.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/py.typed +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/opaque_key.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/yaml.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization_util/_get_type_for_serialization.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization_util/convert_to_snakecase.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization_util/dataclasses.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/strenum_compat/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/strenum_compat/strenum_compat.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/__main__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/actions_registry/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/actions_registry/emit_typescript.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/emit_io_ts.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/emit_typescript_util.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/parts/base.ts.prepart +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/test.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/type_info/__main__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/value_spec/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/type_spec/value_spec/convert_type.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pyproject.toml +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/setup.cfg +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/core/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/core/async_batch.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/core/environment.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/core/types.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/cli.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/cron.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/db/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/db/connect.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/db/session.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/executors/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/executors/executors.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/executors/script_executor.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/command_server/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/command_server/command_client.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/command_server/command_server.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/command_server/protocol/command_server.proto +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/datastore/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/datastore/datastore_sqlite.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/datastore/interface.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/datastore/model.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/job_scheduler.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/queue_runner.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/queue_runner/types.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/scan_profiles.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/scheduler.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/secret_retrieval/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/secret_retrieval/retrieve_secret.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/integration/webhook_server/entrypoint.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/py.typed +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/batch/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/chemical/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/entity/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/equipment/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/field_options/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/files/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/id_source/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/input_groups/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/inputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/material_families/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/outputs/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/permissions/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/project/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipe_links/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipe_metadata/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/recipes/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/triggers/__init__.py +0 -0
- {uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/uncountable/types/api/uploader/__init__.py +0 -0
{uncountablepythonsdk-0.0.91/UncountablePythonSDK.egg-info → uncountablepythonsdk-0.0.93}/PKG-INFO
RENAMED
|
@@ -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
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93/UncountablePythonSDK.egg-info}/PKG-INFO
RENAMED
|
@@ -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
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/argument_parser/__init__.py
RENAMED
|
@@ -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
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/argument_parser/argument_parser.py
RENAMED
|
@@ -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
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/filesystem_utils/__init__.py
RENAMED
|
@@ -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
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/filesystem_utils/_gdrive_session.py
RENAMED
|
@@ -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(
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/filesystem_utils/_s3_session.py
RENAMED
|
@@ -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()
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/filesystem_utils/_sftp_session.py
RENAMED
|
@@ -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] = []
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/filesystem_utils/file_type_utils.py
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from dataclasses import dataclass
|
|
3
3
|
from io import BytesIO
|
|
4
|
-
from typing import
|
|
4
|
+
from typing import Union
|
|
5
5
|
|
|
6
6
|
import paramiko
|
|
7
7
|
from azure.core.credentials import (
|
|
@@ -17,9 +17,9 @@ class FileObjectData:
|
|
|
17
17
|
file_data: bytes
|
|
18
18
|
file_IO: BytesIO
|
|
19
19
|
filename: str
|
|
20
|
-
filepath:
|
|
21
|
-
mime_type:
|
|
22
|
-
metadata:
|
|
20
|
+
filepath: str | None = None
|
|
21
|
+
mime_type: str | None = None
|
|
22
|
+
metadata: dict[str, str] | None = None
|
|
23
23
|
|
|
24
24
|
|
|
25
25
|
@dataclass
|
|
@@ -39,7 +39,7 @@ class FileSystemFileReference:
|
|
|
39
39
|
class RemoteObjectReference:
|
|
40
40
|
file_id: str
|
|
41
41
|
mime_type: str
|
|
42
|
-
filename:
|
|
42
|
+
filename: str | None = None
|
|
43
43
|
|
|
44
44
|
@property
|
|
45
45
|
def is_dir(self) -> bool:
|
|
@@ -63,7 +63,7 @@ class FileSystemSFTPConfig:
|
|
|
63
63
|
pem_path: str | None
|
|
64
64
|
pem_key: paramiko.RSAKey | None = None
|
|
65
65
|
password: str | None = None
|
|
66
|
-
valid_extensions:
|
|
66
|
+
valid_extensions: tuple[str] | None = None
|
|
67
67
|
recursive: bool = True
|
|
68
68
|
|
|
69
69
|
|
|
@@ -71,10 +71,10 @@ class FileSystemSFTPConfig:
|
|
|
71
71
|
class FileSystemS3Config:
|
|
72
72
|
endpoint_url: str
|
|
73
73
|
bucket_name: str
|
|
74
|
-
region_name:
|
|
75
|
-
access_key_id:
|
|
76
|
-
secret_access_key:
|
|
77
|
-
session_token:
|
|
74
|
+
region_name: str | None
|
|
75
|
+
access_key_id: str | None
|
|
76
|
+
secret_access_key: str | None
|
|
77
|
+
session_token: str | None
|
|
78
78
|
|
|
79
79
|
|
|
80
80
|
@dataclass(kw_only=True)
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/annotation.py
RENAMED
|
@@ -6,7 +6,7 @@ T = typing.TypeVar("T")
|
|
|
6
6
|
|
|
7
7
|
@dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
|
|
8
8
|
class SerialBase:
|
|
9
|
-
named_type_path:
|
|
9
|
+
named_type_path: str | None = None
|
|
10
10
|
# Indicates this type is allowed in dynamic lookups, such as via a named_type_path
|
|
11
11
|
# This isn't meant to be limting, but to catalog all the types where we need it
|
|
12
12
|
is_dynamic_allowed: bool = False
|
|
@@ -16,7 +16,7 @@ class SerialBase:
|
|
|
16
16
|
from_decorator: bool = False
|
|
17
17
|
|
|
18
18
|
|
|
19
|
-
def get_serial_annotation(parsed_type: type[T]) -> SerialBase | None:
|
|
19
|
+
def get_serial_annotation[T](parsed_type: type[T]) -> SerialBase | None:
|
|
20
20
|
if not hasattr(parsed_type, "__metadata__"):
|
|
21
21
|
return None
|
|
22
22
|
metadata = parsed_type.__metadata__ # type:ignore[attr-defined]
|
|
@@ -28,13 +28,13 @@ def get_serial_annotation(parsed_type: type[T]) -> SerialBase | None:
|
|
|
28
28
|
return serial
|
|
29
29
|
|
|
30
30
|
|
|
31
|
-
class SerialInspector
|
|
31
|
+
class SerialInspector[T]:
|
|
32
32
|
def __init__(self, parsed_type: type[T], serial_base: SerialBase) -> None:
|
|
33
33
|
self._parsed_type = parsed_type
|
|
34
34
|
self._serial_base = serial_base
|
|
35
35
|
|
|
36
36
|
@property
|
|
37
|
-
def named_type_path(self) ->
|
|
37
|
+
def named_type_path(self) -> str | None:
|
|
38
38
|
return self._serial_base.named_type_path
|
|
39
39
|
|
|
40
40
|
@property
|
|
@@ -53,7 +53,7 @@ class SerialInspector(typing.Generic[T]):
|
|
|
53
53
|
return self._serial_base.is_dynamic_allowed
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
def unwrap_annotated(parsed_type: type[T]) -> type[T]:
|
|
56
|
+
def unwrap_annotated[T](parsed_type: type[T]) -> type[T]:
|
|
57
57
|
"""
|
|
58
58
|
If the type is an annotated type then return the origin of it.
|
|
59
59
|
Otherwise return the original type.
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/missing_sentry.py
RENAMED
|
@@ -26,5 +26,5 @@ MISSING_SENTRY = MissingSentryType()
|
|
|
26
26
|
MissingType = Union[MissingSentryType, ClassT]
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
def coalesce_missing_sentry(value: MissingType[ClassT]) ->
|
|
29
|
+
def coalesce_missing_sentry[ClassT](value: MissingType[ClassT]) -> ClassT | None:
|
|
30
30
|
return None if isinstance(value, MissingSentryType) else value
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/serial_alias.py
RENAMED
|
@@ -16,7 +16,7 @@ class _SerialAlias(SerialBase):
|
|
|
16
16
|
|
|
17
17
|
def serial_alias_annotation(
|
|
18
18
|
*,
|
|
19
|
-
named_type_path:
|
|
19
|
+
named_type_path: str | None = None,
|
|
20
20
|
is_dynamic_allowed: bool = False,
|
|
21
21
|
) -> _SerialAlias:
|
|
22
22
|
return _SerialAlias(
|
|
@@ -26,7 +26,7 @@ def serial_alias_annotation(
|
|
|
26
26
|
)
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
def _get_serial_alias(parsed_type: type[T]) -> _SerialAlias | None:
|
|
29
|
+
def _get_serial_alias[T](parsed_type: type[T]) -> _SerialAlias | None:
|
|
30
30
|
serial = get_serial_annotation(parsed_type)
|
|
31
31
|
if not isinstance(serial, _SerialAlias):
|
|
32
32
|
return None
|
|
@@ -39,7 +39,7 @@ class SerialAliasInspector(SerialInspector[T]):
|
|
|
39
39
|
self._serial_alias = serial_alias
|
|
40
40
|
|
|
41
41
|
|
|
42
|
-
def get_serial_alias_data(parsed_type: type[T]) -> SerialAliasInspector[T] | None:
|
|
42
|
+
def get_serial_alias_data[T](parsed_type: type[T]) -> SerialAliasInspector[T] | None:
|
|
43
43
|
serial = _get_serial_alias(parsed_type)
|
|
44
44
|
if serial is None:
|
|
45
45
|
return None
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/serial_class.py
RENAMED
|
@@ -3,7 +3,7 @@ from __future__ import annotations
|
|
|
3
3
|
import dataclasses
|
|
4
4
|
from collections.abc import Callable
|
|
5
5
|
from enum import StrEnum
|
|
6
|
-
from typing import Any,
|
|
6
|
+
from typing import Any, TypeVar, cast
|
|
7
7
|
|
|
8
8
|
from .annotation import SerialBase, SerialInspector
|
|
9
9
|
|
|
@@ -16,7 +16,7 @@ class _SerialClassData(SerialBase):
|
|
|
16
16
|
unconverted_values: set[str] = dataclasses.field(default_factory=set)
|
|
17
17
|
to_string_values: set[str] = dataclasses.field(default_factory=set)
|
|
18
18
|
parse_require: set[str] = dataclasses.field(default_factory=set)
|
|
19
|
-
named_type_path:
|
|
19
|
+
named_type_path: str | None = None
|
|
20
20
|
|
|
21
21
|
|
|
22
22
|
EMPTY_SERIAL_CLASS_DATA = _SerialClassData()
|
|
@@ -24,11 +24,11 @@ EMPTY_SERIAL_CLASS_DATA = _SerialClassData()
|
|
|
24
24
|
|
|
25
25
|
def serial_class(
|
|
26
26
|
*,
|
|
27
|
-
unconverted_keys:
|
|
28
|
-
unconverted_values:
|
|
29
|
-
to_string_values:
|
|
30
|
-
parse_require:
|
|
31
|
-
named_type_path:
|
|
27
|
+
unconverted_keys: set[str] | None = None,
|
|
28
|
+
unconverted_values: set[str] | None = None,
|
|
29
|
+
to_string_values: set[str] | None = None,
|
|
30
|
+
parse_require: set[str] | None = None,
|
|
31
|
+
named_type_path: str | None = None,
|
|
32
32
|
is_dynamic_allowed: bool = False,
|
|
33
33
|
) -> Callable[[_ClassT], _ClassT]:
|
|
34
34
|
"""
|
|
@@ -119,7 +119,7 @@ def get_merged_serial_class_data(type_class: type[Any]) -> _SerialClassData | No
|
|
|
119
119
|
return base_class_data
|
|
120
120
|
|
|
121
121
|
|
|
122
|
-
def get_serial_class_data(
|
|
122
|
+
def get_serial_class_data[_ClassT](
|
|
123
123
|
type_class: type[_ClassT],
|
|
124
124
|
) -> SerialClassDataInspector[_ClassT]:
|
|
125
125
|
return SerialClassDataInspector(
|
|
@@ -134,7 +134,7 @@ class _SerialStringEnumData:
|
|
|
134
134
|
|
|
135
135
|
|
|
136
136
|
def serial_string_enum(
|
|
137
|
-
*, labels:
|
|
137
|
+
*, labels: dict[str, str] | None = None, deprecated: set[str] | None = None
|
|
138
138
|
) -> Callable[[_ClassT], _ClassT]:
|
|
139
139
|
"""
|
|
140
140
|
A decorator for enums to provide serialization data, including labels.
|
|
@@ -153,7 +153,7 @@ class SerialStringEnumInspector:
|
|
|
153
153
|
def __init__(self, current: _SerialStringEnumData) -> None:
|
|
154
154
|
self.current = current
|
|
155
155
|
|
|
156
|
-
def get_label(self, value: str) ->
|
|
156
|
+
def get_label(self, value: str) -> str | None:
|
|
157
157
|
return self.current.labels.get(value)
|
|
158
158
|
|
|
159
159
|
def get_deprecated(self, value: str) -> bool:
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/serial_generic.py
RENAMED
|
@@ -6,7 +6,7 @@ from .serial_class import get_merged_serial_class_data
|
|
|
6
6
|
T = typing.TypeVar("T")
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
def get_serial_data(parsed_type: type[T]) -> SerialInspector[T] | None:
|
|
9
|
+
def get_serial_data[T](parsed_type: type[T]) -> SerialInspector[T] | None:
|
|
10
10
|
serial = get_serial_annotation(parsed_type)
|
|
11
11
|
if serial is None:
|
|
12
12
|
serial = get_merged_serial_class_data(parsed_type)
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization/serial_union.py
RENAMED
|
@@ -6,7 +6,7 @@ from .annotation import SerialBase, SerialInspector, get_serial_annotation
|
|
|
6
6
|
T = typing.TypeVar("T")
|
|
7
7
|
|
|
8
8
|
|
|
9
|
-
class IdentityHashWrapper
|
|
9
|
+
class IdentityHashWrapper[T]:
|
|
10
10
|
"""This allows unhashable types to be used in the SerialUnion, like dict.
|
|
11
11
|
Since we have only one copy of the types themselves, we rely on
|
|
12
12
|
object identity for the hashing."""
|
|
@@ -27,15 +27,15 @@ class _SerialUnion(SerialBase):
|
|
|
27
27
|
|
|
28
28
|
# If specified, indicates the Union has a discriminator which should be used to
|
|
29
29
|
# determine which type to parse.
|
|
30
|
-
discriminator:
|
|
31
|
-
discriminator_map:
|
|
30
|
+
discriminator: str | None = None
|
|
31
|
+
discriminator_map: IdentityHashWrapper[dict[str, type]] | None = None
|
|
32
32
|
|
|
33
33
|
|
|
34
34
|
def serial_union_annotation(
|
|
35
35
|
*,
|
|
36
|
-
discriminator:
|
|
37
|
-
discriminator_map:
|
|
38
|
-
named_type_path:
|
|
36
|
+
discriminator: str | None = None,
|
|
37
|
+
discriminator_map: dict[str, type] | None = None,
|
|
38
|
+
named_type_path: str | None = None,
|
|
39
39
|
is_dynamic_allowed: bool = False,
|
|
40
40
|
) -> _SerialUnion:
|
|
41
41
|
return _SerialUnion(
|
|
@@ -49,7 +49,7 @@ def serial_union_annotation(
|
|
|
49
49
|
)
|
|
50
50
|
|
|
51
51
|
|
|
52
|
-
def _get_serial_union(parsed_type: type[T]) -> _SerialUnion | None:
|
|
52
|
+
def _get_serial_union[T](parsed_type: type[T]) -> _SerialUnion | None:
|
|
53
53
|
serial = get_serial_annotation(parsed_type)
|
|
54
54
|
if not isinstance(serial, _SerialUnion):
|
|
55
55
|
return None
|
|
@@ -66,17 +66,17 @@ class SerialClassInspector(SerialInspector[T]):
|
|
|
66
66
|
return typing.get_args(self._parsed_type)[0] # type:ignore[no-any-return]
|
|
67
67
|
|
|
68
68
|
@property
|
|
69
|
-
def discriminator(self) ->
|
|
69
|
+
def discriminator(self) -> str | None:
|
|
70
70
|
return self._serial_union.discriminator
|
|
71
71
|
|
|
72
72
|
@property
|
|
73
|
-
def discriminator_map(self) ->
|
|
73
|
+
def discriminator_map(self) -> dict[str, type] | None:
|
|
74
74
|
if self._serial_union.discriminator_map is None:
|
|
75
75
|
return None
|
|
76
76
|
return self._serial_union.discriminator_map.inner
|
|
77
77
|
|
|
78
78
|
|
|
79
|
-
def get_serial_union_data(parsed_type: type[T]) -> SerialClassInspector[T] | None:
|
|
79
|
+
def get_serial_union_data[T](parsed_type: type[T]) -> SerialClassInspector[T] | None:
|
|
80
80
|
serial = _get_serial_union(parsed_type)
|
|
81
81
|
if serial is None:
|
|
82
82
|
return None
|
{uncountablepythonsdk-0.0.91 → uncountablepythonsdk-0.0.93}/pkgs/serialization_util/__init__.py
RENAMED
|
@@ -2,6 +2,7 @@ from .convert_to_snakecase import convert_dict_to_snake_case
|
|
|
2
2
|
from .dataclasses import dict_fields as dict_fields
|
|
3
3
|
from .dataclasses import iterate_fields as iterate_fields
|
|
4
4
|
from .serialization_helpers import (
|
|
5
|
+
JsonValue,
|
|
5
6
|
serialize_for_api,
|
|
6
7
|
serialize_for_storage,
|
|
7
8
|
serialize_for_storage_dict,
|
|
@@ -14,4 +15,5 @@ __all__: list[str] = [
|
|
|
14
15
|
"serialize_for_storage_dict",
|
|
15
16
|
"iterate_fields",
|
|
16
17
|
"dict_fields",
|
|
18
|
+
"JsonValue",
|
|
17
19
|
]
|
|
@@ -12,7 +12,6 @@ from typing import (
|
|
|
12
12
|
Any,
|
|
13
13
|
ClassVar,
|
|
14
14
|
Protocol,
|
|
15
|
-
TypeVar,
|
|
16
15
|
Union,
|
|
17
16
|
overload,
|
|
18
17
|
)
|
|
@@ -34,14 +33,12 @@ if TYPE_CHECKING:
|
|
|
34
33
|
else:
|
|
35
34
|
JsonValue = Union[JsonScalar, dict[str, Any], list[Any]]
|
|
36
35
|
|
|
37
|
-
T = TypeVar("T")
|
|
38
|
-
|
|
39
36
|
|
|
40
37
|
class Dataclass(Protocol):
|
|
41
38
|
__dataclass_fields__: ClassVar[dict] # type: ignore[type-arg,unused-ignore]
|
|
42
39
|
|
|
43
40
|
|
|
44
|
-
def identity(x: T) -> T:
|
|
41
|
+
def identity[T](x: T) -> T:
|
|
45
42
|
return x
|
|
46
43
|
|
|
47
44
|
|
|
@@ -6,7 +6,6 @@ import os
|
|
|
6
6
|
import sys
|
|
7
7
|
from collections import defaultdict
|
|
8
8
|
from dataclasses import dataclass
|
|
9
|
-
from typing import TypeVar
|
|
10
9
|
|
|
11
10
|
from main.base.types import actions_registry_t
|
|
12
11
|
from pkgs.type_spec import builder
|
|
@@ -22,9 +21,6 @@ key_short_description = "short_description"
|
|
|
22
21
|
key_description = "description"
|
|
23
22
|
|
|
24
23
|
|
|
25
|
-
TypeT = TypeVar("TypeT")
|
|
26
|
-
|
|
27
|
-
|
|
28
24
|
class InvalidSpecException(Exception):
|
|
29
25
|
pass
|
|
30
26
|
|