lsst-daf-butler 29.2025.1100__tar.gz → 29.2025.1300__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.
- {lsst_daf_butler-29.2025.1100/python/lsst_daf_butler.egg-info → lsst_daf_butler-29.2025.1300}/PKG-INFO +3 -2
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/doc/lsst.daf.butler/CHANGES.rst +82 -14
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/pyproject.toml +1 -1
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/arrow_utils.py +4 -6
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/cli/cmd/commands.py +3 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/column_spec.py +77 -34
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastore/_datastore.py +4 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastores/fileDatastore.py +30 -15
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_coordinate.py +4 -15
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_record_set.py +116 -3
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_record_table.py +1 -1
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_records.py +127 -6
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/direct_butler/_direct_butler.py +7 -12
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/formatters/parquet.py +2 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/pydantic_utils.py +26 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/tree/_column_set.py +1 -1
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py +67 -64
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/interfaces/_datasets.py +4 -16
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/sql_registry.py +17 -45
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/_query_driver.py +5 -7
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/server/handlers/_query_serialization.py +5 -7
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/transferDatasets.py +5 -0
- lsst_daf_butler-29.2025.1300/python/lsst/daf/butler/version.py +2 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300/python/lsst_daf_butler.egg-info}/PKG-INFO +3 -2
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst_daf_butler.egg-info/SOURCES.txt +1 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_butler.py +65 -2
- lsst_daf_butler-29.2025.1300/tests/test_column_spec.py +95 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_dimension_record_containers.py +47 -2
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_pydantic_utils.py +22 -1
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_query_utilities.py +1 -1
- lsst_daf_butler-29.2025.1100/python/lsst/daf/butler/version.py +0 -2
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/COPYRIGHT +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/LICENSE +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/MANIFEST.in +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/README.md +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/bsd_license.txt +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/doc/lsst.daf.butler/concreteStorageClasses.rst +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/doc/lsst.daf.butler/configuring.rst +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/doc/lsst.daf.butler/datastores.rst +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/doc/lsst.daf.butler/dimensions.rst +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/doc/lsst.daf.butler/formatters.rst +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/doc/lsst.daf.butler/index.rst +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/doc/lsst.daf.butler/organizing.rst +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/doc/lsst.daf.butler/queries.rst +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/doc/lsst.daf.butler/use-in-tests.rst +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/doc/lsst.daf.butler/writing-subcommands.rst +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/gpl-v3.0.txt +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_butler.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_butler_config.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_butler_instance_options.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_butler_repo_index.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_collection_type.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_column_categorization.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_column_tags.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_column_type_info.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_config.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_config_support.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_dataset_association.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_dataset_existence.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_dataset_provenance.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_dataset_ref.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_dataset_type.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_deferredDatasetHandle.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_exceptions.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_exceptions_legacy.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_file_dataset.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_file_descriptor.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_formatter.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_labeled_butler_factory.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_limited_butler.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_location.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_named.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_quantum.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_quantum_backed.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_query_all_datasets.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_registry_shim.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_storage_class.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_storage_class_delegate.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_timespan.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_topology.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_utilities/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_utilities/locked_object.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_utilities/named_locks.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/_utilities/thread_safe_cache.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/cli/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/cli/butler.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/cli/cliLog.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/cli/cmd/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/cli/cmd/_remove_collections.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/cli/cmd/_remove_runs.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/cli/opt/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/cli/opt/arguments.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/cli/opt/optionGroups.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/cli/opt/options.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/cli/progress.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/cli/utils.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/datastore.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/datastores/composites.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/datastores/fileDatastore.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/datastores/formatters.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/datastores/writeRecipes.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/dimensions.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe0.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe1.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe2.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe3.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe4.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe5.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe6.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe7.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/registry.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/repo_transfer_formats.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/configs/storageClasses.yaml +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastore/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastore/cache_manager.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastore/composites.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastore/constraints.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastore/file_templates.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastore/generic_base.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastore/record_data.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastore/stored_file_info.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastores/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastores/chainedDatastore.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastores/fileDatastoreClient.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastores/file_datastore/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastores/file_datastore/get.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/datastores/inMemoryDatastore.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/ddl.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/delegates/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/delegates/arrowtable.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_config.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_database.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_elements.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_governor.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_group.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_packer.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_schema.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_skypix.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/_universe.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/construction.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/dimensions/record_cache.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/direct_butler/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/direct_butler/_direct_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/direct_query_driver/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/direct_query_driver/_driver.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/direct_query_driver/_postprocessing.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/direct_query_driver/_predicate_constraints_summary.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/direct_query_driver/_query_analysis.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/direct_query_driver/_query_builder.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/direct_query_driver/_result_page_converter.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/direct_query_driver/_sql_builders.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/formatters/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/formatters/astropyTable.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/formatters/file.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/formatters/json.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/formatters/logs.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/formatters/matplotlib.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/formatters/packages.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/formatters/pickle.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/formatters/typeless.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/formatters/yaml.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/json.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/logging.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/mapping_factory.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/name_shrinker.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/nonempty_mapping.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/persistence_context.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/progress.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/py.typed +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/_base.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/_data_coordinate_query_results.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/_dataset_query_results.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/_dimension_record_query_results.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/_expression_strings.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/_general_query_results.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/_identifiers.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/_query.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/convert_args.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/driver.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/expression_factory.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/overlaps.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/result_specs.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/tree/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/tree/_base.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/tree/_column_expression.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/tree/_column_literal.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/tree/_column_reference.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/tree/_predicate.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/tree/_query_tree.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/queries/visitors.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/_caching_context.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/_collection_record_cache.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/_collection_summary.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/_collection_summary_cache.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/_config.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/_defaults.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/_exceptions.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/_registry.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/_registry_factory.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/attributes.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/bridge/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/bridge/ephemeral.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/bridge/monolithic.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/collections/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/collections/_base.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/collections/nameKey.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/collections/synthIntKey.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/connectionString.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/databases/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/databases/postgresql.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/databases/sqlite.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/datasets/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/datasets/byDimensions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/datasets/byDimensions/tables.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/dimensions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/dimensions/static.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/interfaces/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/interfaces/_attributes.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/interfaces/_bridge.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/interfaces/_collections.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/interfaces/_database.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/interfaces/_database_explain.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/interfaces/_dimensions.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/interfaces/_obscore.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/interfaces/_opaque.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/interfaces/_versioning.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/managers.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/nameShrinker.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/obscore/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/obscore/_config.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/obscore/_manager.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/obscore/_records.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/obscore/_schema.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/obscore/_spatial.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/obscore/default_spatial.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/obscore/pgsphere.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/opaque.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/_builder.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/_query.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/_query_backend.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/_query_context.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/_readers.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/_results.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/_sql_query_backend.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/_sql_query_context.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/_structs.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/butler_sql_engine.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/_predicate.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/categorize.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/check.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/normalForm.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/parser/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/parser/exprTree.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/parser/parser.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/parser/parserLex.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/parser/parserYacc.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/lex.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/yacc.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/expressions/parser/treeVisitor.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/queries/find_first_dataset.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/tests/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/tests/_database.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/tests/_registry.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/versions.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/registry/wildcards.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/_authentication.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/_collection_args.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/_config.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/_defaults.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/_errors.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/_factory.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/_http_connection.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/_query_results.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/_ref_utils.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/_registry.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/_remote_butler.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/_remote_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/registry/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/registry/_query_common.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/registry/_query_data_coordinates.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/registry/_query_datasets.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/registry/_query_dimension_records.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/server/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/server/_config.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/server/_dependencies.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/server/_factory.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/server/_server.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/server/handlers/_external.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/server/handlers/_external_query.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/server/handlers/_internal.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/server/handlers/_query_streaming.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/server/handlers/_utils.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/remote_butler/server_models.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/repo_relocation.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/_associate.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/_pruneDatasets.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/butlerImport.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/certifyCalibrations.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/collectionChain.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/configDump.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/configValidate.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/createRepo.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/exportCalibs.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/ingest_files.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/ingest_zip.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/queryCollections.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/queryDataIds.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/queryDatasetTypes.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/queryDatasets.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/queryDimensionRecords.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/register_dataset_type.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/removeCollections.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/removeDatasetType.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/removeRuns.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/script/retrieveArtifacts.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/_datasetsHelper.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/_dummyRegistry.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/_examplePythonTypes.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/_testRepo.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/butler_queries.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/cliCmdTestBase.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/cliLogTestBase.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/deferredFormatter.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/dict_convertible_model.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/hybrid_butler.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/hybrid_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/hybrid_butler_registry.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/postgresql.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/server.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/server_utils.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/testFormatters.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/tests/utils.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/time_utils.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/timespan_database_representation.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/transfers/__init__.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/transfers/_context.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/transfers/_interfaces.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/transfers/_yaml.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/utils.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst_daf_butler.egg-info/dependency_links.txt +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst_daf_butler.egg-info/entry_points.txt +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst_daf_butler.egg-info/requires.txt +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst_daf_butler.egg-info/top_level.txt +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst_daf_butler.egg-info/zip-safe +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/setup.cfg +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_astropyTableFormatter.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_authentication.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_butler_factory.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdAssociate.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdConfigDump.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdConfigValidate.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdCreate.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdImport.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdIngestFiles.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdPruneDatasets.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdQueryCollections.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdQueryDataIds.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdQueryDatasetTypes.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdQueryDatasets.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdQueryDimensionRecords.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdRemoveCollections.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdRemoveRuns.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliCmdRetrieveArtifacts.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliLog.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliPluginLoader.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliUtilSplitCommas.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliUtilSplitKv.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliUtilToUpper.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_cliUtils.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_composites.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_config.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_connectionString.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_constraints.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_datasets.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_datastore.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_ddl.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_dimensions.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_exprParserLex.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_exprParserYacc.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_expressions.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_formatter.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_location.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_logFormatter.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_logging.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_matplotlibFormatter.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_nonempty_mapping.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_normalFormExpression.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_obscore.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_packages.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_parquet.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_postgresql.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_progress.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_quantum.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_quantumBackedButler.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_query_direct_postgresql.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_query_direct_sqlite.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_query_interface.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_query_relations.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_query_remote.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_remote_butler.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_server.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_simpleButler.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_sqlite.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_storageClass.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_templates.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_testRepo.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_thread_utils.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_time_utils.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_timespan.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_utils.py +0 -0
- {lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/tests/test_versioning.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: lsst-daf-butler
|
|
3
|
-
Version: 29.2025.
|
|
3
|
+
Version: 29.2025.1300
|
|
4
4
|
Summary: An abstraction layer for reading and writing astronomical data to datastores.
|
|
5
5
|
Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
|
|
6
6
|
License: BSD 3-Clause License
|
|
@@ -51,6 +51,7 @@ Provides-Extra: https
|
|
|
51
51
|
Requires-Dist: lsst-resources[https]; extra == "https"
|
|
52
52
|
Provides-Extra: gs
|
|
53
53
|
Requires-Dist: lsst-resources[gs]; extra == "gs"
|
|
54
|
+
Dynamic: license-file
|
|
54
55
|
|
|
55
56
|
# lsst-daf-butler
|
|
56
57
|
|
{lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/doc/lsst.daf.butler/CHANGES.rst
RENAMED
|
@@ -1,5 +1,73 @@
|
|
|
1
|
-
Butler
|
|
2
|
-
|
|
1
|
+
Butler v29.0.0 (2025-03-25)
|
|
2
|
+
===========================
|
|
3
|
+
|
|
4
|
+
New Features
|
|
5
|
+
------------
|
|
6
|
+
|
|
7
|
+
- * Added new class ``DatasetProvenance`` for tracking the provenance of an individual dataset.
|
|
8
|
+
* Modified ``Butler.put()`` to accept an optional ``DatasetProvenance``.
|
|
9
|
+
* Added ``add_provenance`` methods to ``FormatterV2`` and ``StorageClassDelegate``.
|
|
10
|
+
These methods will now be called with the provenance object during ``Butler.put()`` to allow the in-memory dataset to be updated prior to writing. (`DM-35396 <https://rubinobs.atlassian.net/browse/DM-35396>`_)
|
|
11
|
+
- * Added ``Butler.retrieve_artifacts_zip`` and ``QuantumBackedButler.retrieve_artifacts_zip`` methods to retrieve the dataset artifacts and store them into a zip file.
|
|
12
|
+
* Added ``Butler.ingest_zip`` to ingest the contents of a Zip file.
|
|
13
|
+
* Added ``SerializedDatasetRefContainerV1`` class to allow a collection of ``DatasetRef`` to be serialized efficiently.
|
|
14
|
+
JSON serializations made using this class will be supported.
|
|
15
|
+
* Added ``--zip`` parameter to ``butler retrieve-artifacts``.
|
|
16
|
+
* Changed ``Butler.retrieveArtifacts`` to always write a JSON index file describing where the artifacts came from.
|
|
17
|
+
* Added a ``butler ingest-zip`` command-line tool for ingesting zip files created by ``butler retrieve-artifacts``. (`DM-46776 <https://rubinobs.atlassian.net/browse/DM-46776>`_)
|
|
18
|
+
- The ``DAF_BUTLER_PLUGINS`` environment variable should no longer be set if packages use ``pip install`` and have been upgraded to use entry points.
|
|
19
|
+
Butler can now read the subcommands from ``pipe_base`` and ``daf_butler_migrate`` automatically.
|
|
20
|
+
Setting the environment variable for these packages will result in an error. (`DM-47143 <https://rubinobs.atlassian.net/browse/DM-47143>`_)
|
|
21
|
+
- Added two new APIs for handling Butler dataset URIs.
|
|
22
|
+
``Butler.parse_dataset_uri`` parses a URI and returns the butler repository label and associated UUID.
|
|
23
|
+
``Butler.get_dataset_from_uri`` will parse a URI and attempt to retrieve the ``DatasetRef``.
|
|
24
|
+
URIs should be in the form of IVOA identifiers as described in `DMTN-302 <https://dmtn-302.lsst.io>`_.
|
|
25
|
+
Deprecated ``butler://`` URIs are still supported but should not be used in new systems. (`DM-47325 <https://rubinobs.atlassian.net/browse/DM-47325>`_)
|
|
26
|
+
- Added a ``--chains NO-CHILDREN`` mode to the ``butler query-collections`` CLI,
|
|
27
|
+
which returns results without recursing into ``CHAINED`` collections. (`DM-47768 <https://rubinobs.atlassian.net/browse/DM-47768>`_)
|
|
28
|
+
- Added ``lsst.daf.butler.formatters.parquet.add_pandas_index_to_astropy()`` function which stores special metadata that will be used to create a pandas DataFrame index if the table is read as a ``DataFrame``. (`DM-48141 <https://rubinobs.atlassian.net/browse/DM-48141>`_)
|
|
29
|
+
- Modified the Obscore ``RecordFactory`` to support per-universe subclass discovery using entry points.
|
|
30
|
+
|
|
31
|
+
* Added ``RecordFactory.get_record_type_from_universe`` to obtain the correct factory class.
|
|
32
|
+
* Renamed ``ExposureRegionFactory`` to ``DerivedRegionFactory`` to make it clearer that this class is not solely used for exposures but the usage can change with universe.
|
|
33
|
+
* Added ``RecordFactory.region_dimension`` to return the dimension that would be needed to obtain a region for this universe. (`DM-48282 <https://rubinobs.atlassian.net/browse/DM-48282>`_)
|
|
34
|
+
- * Added new methods to ``DatasetProvenance`` for serializing provenance to a flat dictionary and recovering provenance from that dictionary.
|
|
35
|
+
* Modifed ``ParquetFormatter`` to write provenance metadata to Astropy tables. (`DM-48869 <https://rubinobs.atlassian.net/browse/DM-48869>`_)
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
API Changes
|
|
39
|
+
-----------
|
|
40
|
+
|
|
41
|
+
- Added ``QuantumBackedButler.retrieve_artifacts`` method to allow dataset artifacts to be retrieved from a graph. (`DM-47328 <https://rubinobs.atlassian.net/browse/DM-47328>`_)
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
Bug Fixes
|
|
45
|
+
---------
|
|
46
|
+
|
|
47
|
+
- Fixed inserts with ``replace=True`` on dimensions with only primary key columns. (`DM-46631 <https://rubinobs.atlassian.net/browse/DM-46631>`_)
|
|
48
|
+
- Fixed a bug where ``DatastoreCacheManager`` would raise ``ValueError('badly formed hexadecimal UUID string')`` if files with unexpected names are present in the cache directory when trying to load a file from the cache. (`DM-46936 <https://rubinobs.atlassian.net/browse/DM-46936>`_)
|
|
49
|
+
- Fixed a crash in the new Butler query system which happened in some conditions when using the find-first option with multiple collections. (`DM-47475 <https://rubinobs.atlassian.net/browse/DM-47475>`_)
|
|
50
|
+
- Fixed a bug in which projections spatial-join queries (particularly those where the dimensions of the actual regions being compared are not in the query result rows) could return additional records where there actually was no overlap. (`DM-47947 <https://rubinobs.atlassian.net/browse/DM-47947>`_)
|
|
51
|
+
- Fixed a bug where dataset fields like ``ingest_date`` were raising ``InvalidQueryError: Unrecognized identifier`` when used in a ``Butler.query_datasets`` ``where`` clause. (`DM-48094 <https://rubinobs.atlassian.net/browse/DM-48094>`_)
|
|
52
|
+
- Fixed a query bug that could lead to unexpectedly coarse spatial joins.
|
|
53
|
+
|
|
54
|
+
When dataset search or other join operand had some dimensions from either side of a potential spatial join (e.g. ``{tract, visit}``), we had been blocking the addition of an automatic spatial join on the assumption that this would be embedded in that join operand.
|
|
55
|
+
But this is only desirable when the spatial join that would have been added actually the same one implied by that join operand's dimensions; if it's something more fine grained (e.g. ``{tract, patch, visit}``) we end up with result rows that relate dimensions (e.g. ``patch`` and ``visit``) that do not actually overlap.
|
|
56
|
+
Now automatic spatial joins are only blocked when the join operand includes all dimensions that would have participated in the automatic join. (`DM-48880 <https://rubinobs.atlassian.net/browse/DM-48880>`_)
|
|
57
|
+
- Fixed a bug that could result in incorrectly empty query results when a data ID constraint was inconsistent with some dataset types in a collection, but not the on actually being queried for. (`DM-48974 <https://rubinobs.atlassian.net/browse/DM-48974>`_)
|
|
58
|
+
- Added pyarrow metadata keywords for astropy table to fix warnings on read. (`DM-49509 <https://rubinobs.atlassian.net/browse/DM-49509>`_)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
Other Changes and Additions
|
|
62
|
+
---------------------------
|
|
63
|
+
|
|
64
|
+
- Now support a type conversion field in file template format strings. (`DM-47976 <https://rubinobs.atlassian.net/browse/DM-47976>`_)
|
|
65
|
+
- Modified ObsCore configuration to support ``facility_map`` lookup table to allow the facility to be associated with a specific instrument.
|
|
66
|
+
This is important for butler repositories containing data from multiple instruments and facilities. (`DM-46914 <https://rubinobs.atlassian.net/browse/DM-46914>`_)
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
Butler v28.0.0 (2024-11-20)
|
|
70
|
+
===========================
|
|
3
71
|
|
|
4
72
|
New Features
|
|
5
73
|
------------
|
|
@@ -135,8 +203,8 @@ An API Removal or Deprecation
|
|
|
135
203
|
Using ``Butler.collections`` to get the list of default collections is now deprecated. Use ``Butler.collections.defaults`` instead. (`DM-46599 <https://rubinobs.atlassian.net/browse/DM-46599>`_)
|
|
136
204
|
|
|
137
205
|
|
|
138
|
-
Butler 27.0.0 2024-05-28
|
|
139
|
-
|
|
206
|
+
Butler 27.0.0 (2024-05-28)
|
|
207
|
+
==========================
|
|
140
208
|
|
|
141
209
|
Now supports Python 3.12.
|
|
142
210
|
|
|
@@ -296,8 +364,8 @@ An API Removal or Deprecation
|
|
|
296
364
|
* Removed the ``reconsitutedDimension`` parameter from ``Quantum.from_simple``. (`DM-40150 <https://rubinobs.atlassian.net/browse/DM-40150>`_)
|
|
297
365
|
|
|
298
366
|
|
|
299
|
-
Butler v26.0.0 2023-09-22
|
|
300
|
-
|
|
367
|
+
Butler v26.0.0 (2023-09-22)
|
|
368
|
+
===========================
|
|
301
369
|
|
|
302
370
|
Now supports Python 3.11.
|
|
303
371
|
|
|
@@ -475,8 +543,8 @@ An API Removal or Deprecation
|
|
|
475
543
|
- ``lsst.daf.butler.registry.DbAuth`` class has been moved to the ``lsst-utils`` package and can be imported from the ``lsst.utils.db_auth`` module. (`DM-40462 <https://rubinobs.atlassian.net/browse/DM-40462>`_)
|
|
476
544
|
|
|
477
545
|
|
|
478
|
-
Butler v25.0.0 2023-02-27
|
|
479
|
-
|
|
546
|
+
Butler v25.0.0 (2023-02-27)
|
|
547
|
+
===========================
|
|
480
548
|
|
|
481
549
|
This is the last release that can access data repositories using integer dataset IDs.
|
|
482
550
|
Please either recreate these repositories or convert them to use UUIDs using `the butler migrate tooling <https://github.com/lsst-dm/daf_butler_migrate>`_.
|
|
@@ -570,8 +638,8 @@ An API Removal or Deprecation
|
|
|
570
638
|
- Removed deprecated filterLabel exposure component access. (`DM-27811 <https://rubinobs.atlassian.net/browse/DM-27811>`_)
|
|
571
639
|
|
|
572
640
|
|
|
573
|
-
Butler v24.0.0 2022-08-26
|
|
574
|
-
|
|
641
|
+
Butler v24.0.0 (2022-08-26)
|
|
642
|
+
===========================
|
|
575
643
|
|
|
576
644
|
New Features
|
|
577
645
|
------------
|
|
@@ -695,8 +763,8 @@ An API Removal or Deprecation
|
|
|
695
763
|
It functions identically to the ``filterLabel`` component, which has been deprecated. (`DM-27177 <https://rubinobs.atlassian.net/browse/DM-27177>`_)
|
|
696
764
|
|
|
697
765
|
|
|
698
|
-
Butler v23.0.0 2021-12-10
|
|
699
|
-
|
|
766
|
+
Butler v23.0.0 (2021-12-10)
|
|
767
|
+
===========================
|
|
700
768
|
|
|
701
769
|
New Features
|
|
702
770
|
------------
|
|
@@ -797,8 +865,8 @@ Other Changes and Additions
|
|
|
797
865
|
- Add ``split`` transfer mode that can be used when some files are inside the datastore and some files are outside the datastore.
|
|
798
866
|
This is equivalent to using `None` and ``direct`` mode dynamically. (`DM-31251 <https://rubinobs.atlassian.net/browse/DM-31251>`_)
|
|
799
867
|
|
|
800
|
-
Butler v22.0 2021-04-01
|
|
801
|
-
|
|
868
|
+
Butler v22.0 (2021-04-01)
|
|
869
|
+
=========================
|
|
802
870
|
|
|
803
871
|
New Features
|
|
804
872
|
------------
|
|
@@ -91,7 +91,7 @@ butler = "lsst.daf.butler.cli.butler:main"
|
|
|
91
91
|
package_dir = "python"
|
|
92
92
|
filename = "doc/lsst.daf.butler/CHANGES.rst"
|
|
93
93
|
directory = "doc/changes"
|
|
94
|
-
title_format = "Butler {version} {project_date}"
|
|
94
|
+
title_format = "Butler {version} ({project_date})"
|
|
95
95
|
issue_format = "`{issue} <https://rubinobs.atlassian.net/browse/{issue}>`_"
|
|
96
96
|
|
|
97
97
|
[[tool.towncrier.type]]
|
{lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/arrow_utils.py
RENAMED
|
@@ -383,7 +383,7 @@ class _ToArrowTimespan(ToArrow):
|
|
|
383
383
|
# Docstring inherited.
|
|
384
384
|
return TimespanArrowType()
|
|
385
385
|
|
|
386
|
-
def append(self, value: Timespan | None, column: list[
|
|
386
|
+
def append(self, value: Timespan | None, column: list[dict[str, int] | None]) -> None:
|
|
387
387
|
# Docstring inherited.
|
|
388
388
|
column.append({"begin_nsec": value.nsec[0], "end_nsec": value.nsec[1]} if value is not None else None)
|
|
389
389
|
|
|
@@ -432,12 +432,10 @@ class _ToArrowDateTime(ToArrow):
|
|
|
432
432
|
|
|
433
433
|
@final
|
|
434
434
|
class UUIDArrowType(pa.ExtensionType):
|
|
435
|
-
"""An Arrow extension type for `
|
|
436
|
-
nanoseconds since 1970-01-01.
|
|
437
|
-
"""
|
|
435
|
+
"""An Arrow extension type for `uuid.UUID`, stored as 16 bytes."""
|
|
438
436
|
|
|
439
437
|
def __init__(self) -> None:
|
|
440
|
-
super().__init__(
|
|
438
|
+
super().__init__(_ToArrowUUID.storage_type, "uuid.UUID")
|
|
441
439
|
|
|
442
440
|
def __arrow_ext_serialize__(self) -> bytes:
|
|
443
441
|
return b""
|
|
@@ -458,7 +456,7 @@ class UUIDArrowScalar(pa.ExtensionScalar):
|
|
|
458
456
|
instance.
|
|
459
457
|
"""
|
|
460
458
|
|
|
461
|
-
def as_py(self) ->
|
|
459
|
+
def as_py(self) -> uuid.UUID:
|
|
462
460
|
return uuid.UUID(bytes=self.value.as_py())
|
|
463
461
|
|
|
464
462
|
|
|
@@ -638,6 +638,9 @@ def retrieve_artifacts(**kwargs: Any) -> None:
|
|
|
638
638
|
@transfer_option()
|
|
639
639
|
@register_dataset_types_option()
|
|
640
640
|
@transfer_dimensions_option()
|
|
641
|
+
@click.option(
|
|
642
|
+
"--dry-run/--no-dry-run", default=False, help="Enable dry run mode and do not transfer any datasets."
|
|
643
|
+
)
|
|
641
644
|
@options_file_option()
|
|
642
645
|
def transfer_datasets(**kwargs: Any) -> None:
|
|
643
646
|
"""Transfer datasets from a source butler to a destination butler.
|
{lsst_daf_butler-29.2025.1100 → lsst_daf_butler-29.2025.1300}/python/lsst/daf/butler/column_spec.py
RENAMED
|
@@ -39,12 +39,24 @@ __all__ = (
|
|
|
39
39
|
"StringColumnSpec",
|
|
40
40
|
"TimespanColumnSpec",
|
|
41
41
|
"UUIDColumnSpec",
|
|
42
|
+
"make_tuple_type_adapter",
|
|
42
43
|
)
|
|
43
44
|
|
|
44
45
|
import textwrap
|
|
45
46
|
import uuid
|
|
46
47
|
from abc import ABC, abstractmethod
|
|
47
|
-
from
|
|
48
|
+
from collections.abc import Iterable
|
|
49
|
+
from typing import (
|
|
50
|
+
TYPE_CHECKING,
|
|
51
|
+
Annotated,
|
|
52
|
+
Any,
|
|
53
|
+
ClassVar,
|
|
54
|
+
Literal,
|
|
55
|
+
Optional,
|
|
56
|
+
TypeAlias,
|
|
57
|
+
Union,
|
|
58
|
+
final,
|
|
59
|
+
)
|
|
48
60
|
|
|
49
61
|
import astropy.time
|
|
50
62
|
import pyarrow as pa
|
|
@@ -54,7 +66,7 @@ from lsst.sphgeom import Region
|
|
|
54
66
|
|
|
55
67
|
from . import arrow_utils, ddl
|
|
56
68
|
from ._timespan import Timespan
|
|
57
|
-
from .pydantic_utils import SerializableRegion, SerializableTime
|
|
69
|
+
from .pydantic_utils import SerializableBytesHex, SerializableRegion, SerializableTime
|
|
58
70
|
|
|
59
71
|
if TYPE_CHECKING:
|
|
60
72
|
from .name_shrinker import NameShrinker
|
|
@@ -125,18 +137,6 @@ class ColumnValueSerializer(ABC):
|
|
|
125
137
|
raise NotImplementedError
|
|
126
138
|
|
|
127
139
|
|
|
128
|
-
class _DefaultColumnValueSerializer(ColumnValueSerializer):
|
|
129
|
-
"""Default implementation of serializer for basic types."""
|
|
130
|
-
|
|
131
|
-
def serialize(self, value: Any) -> Any:
|
|
132
|
-
# Docstring inherited.
|
|
133
|
-
return value
|
|
134
|
-
|
|
135
|
-
def deserialize(self, value: Any) -> Any:
|
|
136
|
-
# Docstring inherited.
|
|
137
|
-
return value
|
|
138
|
-
|
|
139
|
-
|
|
140
140
|
class _TypeAdapterColumnValueSerializer(ColumnValueSerializer):
|
|
141
141
|
"""Implementation of serializer that uses pydantic type adapter."""
|
|
142
142
|
|
|
@@ -156,6 +156,8 @@ class _TypeAdapterColumnValueSerializer(ColumnValueSerializer):
|
|
|
156
156
|
class _BaseColumnSpec(pydantic.BaseModel, ABC):
|
|
157
157
|
"""Base class for descriptions of table columns."""
|
|
158
158
|
|
|
159
|
+
pytype: ClassVar[type]
|
|
160
|
+
|
|
159
161
|
name: str = pydantic.Field(description="""Name of the column.""")
|
|
160
162
|
|
|
161
163
|
doc: str = pydantic.Field(default="", description="Documentation for the column.")
|
|
@@ -200,7 +202,6 @@ class _BaseColumnSpec(pydantic.BaseModel, ABC):
|
|
|
200
202
|
"""
|
|
201
203
|
raise NotImplementedError()
|
|
202
204
|
|
|
203
|
-
@abstractmethod
|
|
204
205
|
def serializer(self) -> ColumnValueSerializer:
|
|
205
206
|
"""Return object that converts values of this column to or from
|
|
206
207
|
serializable format.
|
|
@@ -210,7 +211,7 @@ class _BaseColumnSpec(pydantic.BaseModel, ABC):
|
|
|
210
211
|
serializer : `ColumnValueSerializer`
|
|
211
212
|
A converter instance.
|
|
212
213
|
"""
|
|
213
|
-
|
|
214
|
+
return _TypeAdapterColumnValueSerializer(pydantic.TypeAdapter(self.annotated_type))
|
|
214
215
|
|
|
215
216
|
def display(self, level: int = 0, tab: str = " ") -> list[str]:
|
|
216
217
|
"""Return a human-reader-focused string description of this column as
|
|
@@ -243,6 +244,48 @@ class _BaseColumnSpec(pydantic.BaseModel, ABC):
|
|
|
243
244
|
def __str__(self) -> str:
|
|
244
245
|
return "\n".join(self.display())
|
|
245
246
|
|
|
247
|
+
@property
|
|
248
|
+
def annotated_type(self) -> Any:
|
|
249
|
+
"""Return a Pydantic-friendly type annotation for this column type.
|
|
250
|
+
|
|
251
|
+
Since this is a runtime object and most type annotations must be
|
|
252
|
+
static, this is really only useful for `pydantic.TypeAdapter`
|
|
253
|
+
construction and dynamic `pydantic.create_model` construction.
|
|
254
|
+
"""
|
|
255
|
+
base = self._get_base_annotated_type()
|
|
256
|
+
if self.nullable:
|
|
257
|
+
return Optional[base]
|
|
258
|
+
return base
|
|
259
|
+
|
|
260
|
+
@abstractmethod
|
|
261
|
+
def _get_base_annotated_type(self) -> Any:
|
|
262
|
+
"""Return the base annotated type (not taking into account `nullable`)
|
|
263
|
+
for this column type.
|
|
264
|
+
"""
|
|
265
|
+
raise NotImplementedError()
|
|
266
|
+
|
|
267
|
+
|
|
268
|
+
def make_tuple_type_adapter(
|
|
269
|
+
columns: Iterable[ColumnSpec],
|
|
270
|
+
) -> pydantic.TypeAdapter[tuple[Any, ...]]:
|
|
271
|
+
"""Return a `pydantic.TypeAdapter` for a `tuple` with types defined by an
|
|
272
|
+
iterable of `ColumnSpec` objects.
|
|
273
|
+
|
|
274
|
+
Parameters
|
|
275
|
+
----------
|
|
276
|
+
columns : `~collections.abc.Iterable` [ `ColumnSpec` ]
|
|
277
|
+
Iterable of column specifications.
|
|
278
|
+
|
|
279
|
+
Returns
|
|
280
|
+
-------
|
|
281
|
+
adapter : `pydantic.TypeAdapter`
|
|
282
|
+
A Pydantic type adapter for the `tuple` representation of a row with
|
|
283
|
+
the given columns.
|
|
284
|
+
"""
|
|
285
|
+
# Static type-checkers don't like this runtime use of static-typing
|
|
286
|
+
# constructs, but that's how Pydantic works.
|
|
287
|
+
return pydantic.TypeAdapter(tuple[*[spec.annotated_type for spec in columns]]) # type: ignore
|
|
288
|
+
|
|
246
289
|
|
|
247
290
|
@final
|
|
248
291
|
class IntColumnSpec(_BaseColumnSpec):
|
|
@@ -256,9 +299,9 @@ class IntColumnSpec(_BaseColumnSpec):
|
|
|
256
299
|
# Docstring inherited.
|
|
257
300
|
return arrow_utils.ToArrow.for_primitive(self.name, pa.uint64(), nullable=self.nullable)
|
|
258
301
|
|
|
259
|
-
def
|
|
302
|
+
def _get_base_annotated_type(self) -> Any:
|
|
260
303
|
# Docstring inherited.
|
|
261
|
-
return
|
|
304
|
+
return pydantic.StrictInt
|
|
262
305
|
|
|
263
306
|
|
|
264
307
|
@final
|
|
@@ -280,9 +323,9 @@ class StringColumnSpec(_BaseColumnSpec):
|
|
|
280
323
|
# Docstring inherited.
|
|
281
324
|
return arrow_utils.ToArrow.for_primitive(self.name, pa.string(), nullable=self.nullable)
|
|
282
325
|
|
|
283
|
-
def
|
|
326
|
+
def _get_base_annotated_type(self) -> Any:
|
|
284
327
|
# Docstring inherited.
|
|
285
|
-
return
|
|
328
|
+
return pydantic.StrictStr
|
|
286
329
|
|
|
287
330
|
|
|
288
331
|
@final
|
|
@@ -310,9 +353,9 @@ class HashColumnSpec(_BaseColumnSpec):
|
|
|
310
353
|
nullable=self.nullable,
|
|
311
354
|
)
|
|
312
355
|
|
|
313
|
-
def
|
|
356
|
+
def _get_base_annotated_type(self) -> Any:
|
|
314
357
|
# Docstring inherited.
|
|
315
|
-
return
|
|
358
|
+
return SerializableBytesHex
|
|
316
359
|
|
|
317
360
|
|
|
318
361
|
@final
|
|
@@ -328,9 +371,9 @@ class FloatColumnSpec(_BaseColumnSpec):
|
|
|
328
371
|
assert self.nullable is not None, "nullable=None should be resolved by validators"
|
|
329
372
|
return arrow_utils.ToArrow.for_primitive(self.name, pa.float64(), nullable=self.nullable)
|
|
330
373
|
|
|
331
|
-
def
|
|
374
|
+
def _get_base_annotated_type(self) -> Any:
|
|
332
375
|
# Docstring inherited.
|
|
333
|
-
return
|
|
376
|
+
return pydantic.StrictFloat
|
|
334
377
|
|
|
335
378
|
|
|
336
379
|
@final
|
|
@@ -345,9 +388,9 @@ class BoolColumnSpec(_BaseColumnSpec):
|
|
|
345
388
|
# Docstring inherited.
|
|
346
389
|
return arrow_utils.ToArrow.for_primitive(self.name, pa.bool_(), nullable=self.nullable)
|
|
347
390
|
|
|
348
|
-
def
|
|
391
|
+
def _get_base_annotated_type(self) -> Any:
|
|
349
392
|
# Docstring inherited.
|
|
350
|
-
return
|
|
393
|
+
return pydantic.StrictBool
|
|
351
394
|
|
|
352
395
|
|
|
353
396
|
@final
|
|
@@ -363,9 +406,9 @@ class UUIDColumnSpec(_BaseColumnSpec):
|
|
|
363
406
|
assert self.nullable is not None, "nullable=None should be resolved by validators"
|
|
364
407
|
return arrow_utils.ToArrow.for_uuid(self.name, nullable=self.nullable)
|
|
365
408
|
|
|
366
|
-
def
|
|
409
|
+
def _get_base_annotated_type(self) -> Any:
|
|
367
410
|
# Docstring inherited.
|
|
368
|
-
return
|
|
411
|
+
return uuid.UUID
|
|
369
412
|
|
|
370
413
|
|
|
371
414
|
@final
|
|
@@ -386,9 +429,9 @@ class RegionColumnSpec(_BaseColumnSpec):
|
|
|
386
429
|
assert self.nullable is not None, "nullable=None should be resolved by validators"
|
|
387
430
|
return arrow_utils.ToArrow.for_region(self.name, nullable=self.nullable)
|
|
388
431
|
|
|
389
|
-
def
|
|
432
|
+
def _get_base_annotated_type(self) -> Any:
|
|
390
433
|
# Docstring inherited.
|
|
391
|
-
return
|
|
434
|
+
return SerializableRegion
|
|
392
435
|
|
|
393
436
|
|
|
394
437
|
@final
|
|
@@ -405,9 +448,9 @@ class TimespanColumnSpec(_BaseColumnSpec):
|
|
|
405
448
|
# Docstring inherited.
|
|
406
449
|
return arrow_utils.ToArrow.for_timespan(self.name, nullable=self.nullable)
|
|
407
450
|
|
|
408
|
-
def
|
|
451
|
+
def _get_base_annotated_type(self) -> Any:
|
|
409
452
|
# Docstring inherited.
|
|
410
|
-
return
|
|
453
|
+
return Timespan
|
|
411
454
|
|
|
412
455
|
|
|
413
456
|
@final
|
|
@@ -425,9 +468,9 @@ class DateTimeColumnSpec(_BaseColumnSpec):
|
|
|
425
468
|
assert self.nullable is not None, "nullable=None should be resolved by validators"
|
|
426
469
|
return arrow_utils.ToArrow.for_datetime(self.name, nullable=self.nullable)
|
|
427
470
|
|
|
428
|
-
def
|
|
471
|
+
def _get_base_annotated_type(self) -> Any:
|
|
429
472
|
# Docstring inherited.
|
|
430
|
-
return
|
|
473
|
+
return SerializableTime
|
|
431
474
|
|
|
432
475
|
|
|
433
476
|
ColumnSpec = Annotated[
|
|
@@ -2158,10 +2158,15 @@ class FileDatastore(GenericBaseDatastore[StoredFileInfo]):
|
|
|
2158
2158
|
target_uri = to_transfer[cleaned_source_uri]
|
|
2159
2159
|
artifact_map[target_uri].append(ref.id)
|
|
2160
2160
|
|
|
2161
|
-
#
|
|
2161
|
+
# Parallelize the transfer. Re-raise as a single exception if
|
|
2162
|
+
# a FileExistsError is encountered anywhere.
|
|
2162
2163
|
log.debug("Number of artifacts to transfer to %s: %d", str(destination), len(to_transfer))
|
|
2163
|
-
|
|
2164
|
-
|
|
2164
|
+
try:
|
|
2165
|
+
ResourcePath.mtransfer(transfer, tuple(to_transfer.items()), overwrite=overwrite)
|
|
2166
|
+
except* FileExistsError as egroup:
|
|
2167
|
+
raise FileExistsError(
|
|
2168
|
+
"Some files already exist in destination directory and overwrite is False"
|
|
2169
|
+
) from egroup
|
|
2165
2170
|
|
|
2166
2171
|
# Transfer the Zip files and unpack them.
|
|
2167
2172
|
zipped_artifacts = unpack_zips(zips_to_transfer, requested_ids, destination, preserve_path, overwrite)
|
|
@@ -2748,6 +2753,9 @@ class FileDatastore(GenericBaseDatastore[StoredFileInfo]):
|
|
|
2748
2753
|
# Record each time we have done a "direct" transfer.
|
|
2749
2754
|
direct_transfers = []
|
|
2750
2755
|
|
|
2756
|
+
# Keep track of all the file transfers that are required.
|
|
2757
|
+
from_to: list[tuple[ResourcePath, ResourcePath]] = []
|
|
2758
|
+
|
|
2751
2759
|
# Now can transfer the artifacts
|
|
2752
2760
|
log.verbose("Transferring artifacts")
|
|
2753
2761
|
for ref in refs:
|
|
@@ -2796,21 +2804,28 @@ class FileDatastore(GenericBaseDatastore[StoredFileInfo]):
|
|
|
2796
2804
|
info = info.update(path=target_location.pathInStore.path)
|
|
2797
2805
|
|
|
2798
2806
|
# Need to transfer it to the new location.
|
|
2799
|
-
|
|
2800
|
-
# is there this might indicate that a previous transfer
|
|
2801
|
-
# was interrupted but was not able to be rolled back
|
|
2802
|
-
# completely (eg pre-emption) so follow Datastore default
|
|
2803
|
-
# and overwrite. Do not copy if we are in dry-run mode.
|
|
2804
|
-
if not dry_run:
|
|
2805
|
-
target_location.uri.transfer_from(
|
|
2806
|
-
source_location.uri,
|
|
2807
|
-
transfer=transfer,
|
|
2808
|
-
overwrite=True,
|
|
2809
|
-
transaction=self._transaction,
|
|
2810
|
-
)
|
|
2807
|
+
from_to.append((source_location.uri, target_location.uri))
|
|
2811
2808
|
|
|
2812
2809
|
artifacts.append((ref, info))
|
|
2813
2810
|
|
|
2811
|
+
# Do the file transfers in bulk.
|
|
2812
|
+
# Assume we should always overwrite. If the artifact
|
|
2813
|
+
# is there this might indicate that a previous transfer
|
|
2814
|
+
# was interrupted but was not able to be rolled back
|
|
2815
|
+
# completely (eg pre-emption) so follow Datastore default
|
|
2816
|
+
# and overwrite. Do not copy if we are in dry-run mode.
|
|
2817
|
+
if dry_run:
|
|
2818
|
+
log.info("Would be copying %d file artifacts", len(from_to))
|
|
2819
|
+
else:
|
|
2820
|
+
log.verbose("Copying %d file artifacts", len(from_to))
|
|
2821
|
+
with time_this(log, msg="Transferring datasets into datastore", level=VERBOSE):
|
|
2822
|
+
ResourcePath.mtransfer(
|
|
2823
|
+
transfer,
|
|
2824
|
+
from_to,
|
|
2825
|
+
overwrite=True,
|
|
2826
|
+
transaction=self._transaction,
|
|
2827
|
+
)
|
|
2828
|
+
|
|
2814
2829
|
if direct_transfers:
|
|
2815
2830
|
log.info(
|
|
2816
2831
|
"Transfer request for an outside-datastore artifact with absolute URI done %d time%s",
|
|
@@ -44,7 +44,7 @@ __all__ = (
|
|
|
44
44
|
import numbers
|
|
45
45
|
from abc import abstractmethod
|
|
46
46
|
from collections.abc import Iterable, Iterator, Mapping
|
|
47
|
-
from typing import TYPE_CHECKING, Any, ClassVar, overload
|
|
47
|
+
from typing import TYPE_CHECKING, Any, ClassVar, TypeAlias, overload
|
|
48
48
|
|
|
49
49
|
import pydantic
|
|
50
50
|
|
|
@@ -55,24 +55,13 @@ from .._timespan import Timespan
|
|
|
55
55
|
from ..json import from_json_pydantic, to_json_pydantic
|
|
56
56
|
from ..persistence_context import PersistenceContextVars
|
|
57
57
|
from ._group import DimensionGroup
|
|
58
|
-
from ._records import DimensionRecord, SerializedDimensionRecord
|
|
58
|
+
from ._records import DataIdKey, DataIdValue, DimensionRecord, SerializedDimensionRecord
|
|
59
59
|
|
|
60
60
|
if TYPE_CHECKING: # Imports needed only for type annotations; may be circular.
|
|
61
61
|
from ..registry import Registry
|
|
62
62
|
from ._universe import DimensionUniverse
|
|
63
63
|
|
|
64
|
-
|
|
65
|
-
"""Type annotation alias for the keys that can be used to index a
|
|
66
|
-
DataCoordinate.
|
|
67
|
-
"""
|
|
68
|
-
|
|
69
|
-
# Pydantic will cast int to str if str is first in the Union.
|
|
70
|
-
DataIdValue = int | str | None
|
|
71
|
-
"""Type annotation alias for the values that can be present in a
|
|
72
|
-
DataCoordinate or other data ID.
|
|
73
|
-
"""
|
|
74
|
-
|
|
75
|
-
SerializedDataId = dict[str, DataIdValue]
|
|
64
|
+
SerializedDataId: TypeAlias = dict[str, DataIdValue]
|
|
76
65
|
"""Simplified model for serializing the ``mapping`` property of
|
|
77
66
|
`DataCoordinate`.
|
|
78
67
|
"""
|
|
@@ -247,7 +236,7 @@ class DataCoordinate:
|
|
|
247
236
|
# Some backends cannot handle numpy.int64 type which is a subclass of
|
|
248
237
|
# numbers.Integral; convert that to int.
|
|
249
238
|
for k, v in new_mapping.items():
|
|
250
|
-
if isinstance(v, numbers.Integral):
|
|
239
|
+
if isinstance(v, numbers.Integral): # type: ignore
|
|
251
240
|
new_mapping[k] = int(v) # type: ignore
|
|
252
241
|
if defaults is not None:
|
|
253
242
|
for k, v in defaults.mapping.items():
|