lsst-daf-butler 29.2025.3800__tar.gz → 29.2025.4000__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.3800/python/lsst_daf_butler.egg-info → lsst_daf_butler-29.2025.4000}/PKG-INFO +2 -3
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/pyproject.toml +2 -3
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_quantum_backed.py +28 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/utils.py +9 -2
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/datastores/formatters.yaml +1 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/storageClasses.yaml +2 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastore/_datastore.py +18 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastores/chainedDatastore.py +19 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastores/fileDatastore.py +18 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastores/inMemoryDatastore.py +6 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/_expression_strings.py +0 -3
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/_identifiers.py +1 -5
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/tree/_base.py +1 -1
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/_dependencies.py +27 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/handlers/_external.py +17 -2
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/utils.py +7 -2
- lsst_daf_butler-29.2025.4000/python/lsst/daf/butler/version.py +2 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000/python/lsst_daf_butler.egg-info}/PKG-INFO +2 -3
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_datastore.py +27 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_quantumBackedButler.py +13 -0
- lsst_daf_butler-29.2025.3800/python/lsst/daf/butler/version.py +0 -2
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/COPYRIGHT +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/LICENSE +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/MANIFEST.in +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/README.md +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/bsd_license.txt +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/CHANGES.rst +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/concreteStorageClasses.rst +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/configuring.rst +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/datastores.rst +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/dimensions.rst +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/formatters.rst +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/index.rst +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/organizing.rst +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/queries.rst +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/use-in-tests.rst +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/writing-subcommands.rst +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/gpl-v3.0.txt +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_butler.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_butler_config.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_butler_instance_options.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_butler_metrics.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_butler_repo_index.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_collection_type.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_column_categorization.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_column_tags.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_column_type_info.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_config.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_config_support.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_dataset_association.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_dataset_existence.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_dataset_provenance.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_dataset_ref.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_dataset_type.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_deferredDatasetHandle.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_exceptions.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_exceptions_legacy.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_file_dataset.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_file_descriptor.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_formatter.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_labeled_butler_factory.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_limited_butler.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_location.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_named.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_quantum.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_query_all_datasets.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_registry_shim.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_rubin/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_rubin/file_datasets.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_standalone_datastore.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_storage_class.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_storage_class_delegate.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_timespan.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_topology.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_utilities/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_utilities/locked_object.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_utilities/named_locks.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_utilities/thread_safe_cache.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/arrow_utils.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/butler.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/cliLog.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/cmd/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/cmd/_remove_collections.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/cmd/_remove_runs.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/cmd/commands.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/opt/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/opt/arguments.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/opt/optionGroups.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/opt/options.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/progress.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/column_spec.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/datastore.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/datastores/composites.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/datastores/fileDatastore.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/datastores/writeRecipes.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/dimensions.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe0.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe1.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe2.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe3.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe4.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe5.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe6.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe7.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/registry.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/configs/repo_transfer_formats.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastore/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastore/_transfer.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastore/cache_manager.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastore/composites.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastore/constraints.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastore/file_templates.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastore/generic_base.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastore/record_data.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastore/stored_file_info.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastores/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastores/file_datastore/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastores/file_datastore/get.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/datastores/file_datastore/transfer.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/ddl.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/delegates/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/delegates/arrowtable.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_config.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_coordinate.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_database.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_elements.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_governor.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_group.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_packer.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_record_set.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_record_table.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_records.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_schema.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_skypix.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/_universe.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/construction.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/dimensions/record_cache.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/direct_butler/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/direct_butler/_direct_butler.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/direct_butler/_direct_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/direct_query_driver/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/direct_query_driver/_driver.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/direct_query_driver/_postprocessing.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/direct_query_driver/_query_analysis.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/direct_query_driver/_query_builder.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/direct_query_driver/_result_page_converter.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/direct_query_driver/_sql_builders.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/formatters/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/formatters/astropyTable.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/formatters/file.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/formatters/json.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/formatters/logs.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/formatters/matplotlib.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/formatters/packages.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/formatters/parquet.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/formatters/pickle.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/formatters/typeless.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/formatters/yaml.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/json.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/logging.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/mapping_factory.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/name_shrinker.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/nonempty_mapping.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/persistence_context.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/progress.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/py.typed +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/pydantic_utils.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/_base.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/_data_coordinate_query_results.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/_dataset_query_results.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/_dimension_record_query_results.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/_general_query_results.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/_query.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/convert_args.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/driver.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/expression_factory.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/overlaps.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/predicate_constraints_summary.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/result_specs.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/tree/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/tree/_column_expression.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/tree/_column_literal.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/tree/_column_reference.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/tree/_column_set.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/tree/_predicate.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/tree/_query_tree.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/queries/visitors.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/_caching_context.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/_collection_record_cache.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/_collection_summary.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/_collection_summary_cache.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/_config.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/_defaults.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/_exceptions.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/_registry.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/_registry_factory.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/attributes.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/bridge/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/bridge/ephemeral.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/bridge/monolithic.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/collections/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/collections/_base.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/collections/nameKey.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/collections/synthIntKey.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/connectionString.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/databases/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/databases/postgresql.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/databases/sqlite.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/datasets/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/datasets/byDimensions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/datasets/byDimensions/tables.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/dimensions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/dimensions/static.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/interfaces/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/interfaces/_attributes.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/interfaces/_bridge.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/interfaces/_collections.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/interfaces/_database.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/interfaces/_database_explain.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/interfaces/_datasets.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/interfaces/_dimensions.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/interfaces/_obscore.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/interfaces/_opaque.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/interfaces/_versioning.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/managers.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/nameShrinker.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/obscore/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/obscore/_config.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/obscore/_manager.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/obscore/_records.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/obscore/_schema.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/obscore/_spatial.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/obscore/default_spatial.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/obscore/pgsphere.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/opaque.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/_builder.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/_query.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/_query_backend.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/_query_context.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/_readers.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/_results.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/_sql_query_backend.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/_sql_query_context.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/_structs.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/butler_sql_engine.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/_predicate.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/categorize.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/check.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/normalForm.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/parser/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/parser/exprTree.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/parser/parser.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/parser/parserLex.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/parser/parserYacc.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/lex.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/yacc.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/expressions/parser/treeVisitor.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/queries/find_first_dataset.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/sql_registry.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/tests/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/tests/_database.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/tests/_registry.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/versions.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/registry/wildcards.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_collection_args.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_config.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_defaults.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_errors.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_factory.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_get.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_http_connection.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_query_driver.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_query_results.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_ref_utils.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_registry.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_remote_butler.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_remote_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/authentication/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/authentication/cadc.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/authentication/interface.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/authentication/rubin.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/registry/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/registry/_query_common.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/registry/_query_data_coordinates.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/registry/_query_datasets.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/registry/_query_dimension_records.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/_config.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/_factory.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/_server.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/_telemetry.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/handlers/_external_query.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/handlers/_file_info.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/handlers/_internal.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/handlers/_query_limits.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/handlers/_query_serialization.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/handlers/_query_streaming.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server/handlers/_utils.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/remote_butler/server_models.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/repo_relocation.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/_associate.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/_pruneDatasets.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/butlerImport.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/certifyCalibrations.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/collectionChain.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/configDump.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/configValidate.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/createRepo.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/exportCalibs.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/ingest_files.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/ingest_zip.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/queryCollections.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/queryDataIds.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/queryDatasetTypes.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/queryDatasets.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/queryDimensionRecords.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/register_dataset_type.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/removeCollections.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/removeDatasetType.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/removeRuns.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/retrieveArtifacts.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/script/transferDatasets.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/_datasetsHelper.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/_dummyRegistry.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/_examplePythonTypes.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/_testRepo.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/butler_queries.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/cliCmdTestBase.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/cliLogTestBase.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/deferredFormatter.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/dict_convertible_model.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/hybrid_butler.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/hybrid_butler_collections.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/hybrid_butler_registry.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/postgresql.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/registry_data/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/registry_data/base.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset-skymap.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/registry_data/datasets.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/registry_data/hsc-rc2-subset-v0.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/registry_data/spatial.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/registry_data/spatial.yaml +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/server.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/server_utils.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/testFormatters.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/time_utils.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/timespan_database_representation.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/transfers/__init__.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/transfers/_context.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/transfers/_interfaces.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/transfers/_yaml.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/utils.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst_daf_butler.egg-info/SOURCES.txt +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst_daf_butler.egg-info/dependency_links.txt +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst_daf_butler.egg-info/entry_points.txt +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst_daf_butler.egg-info/requires.txt +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst_daf_butler.egg-info/top_level.txt +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst_daf_butler.egg-info/zip-safe +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/setup.cfg +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_astropyTableFormatter.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_authentication.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_butler.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_butler_factory.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdAssociate.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdConfigDump.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdConfigValidate.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdCreate.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdImport.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdIngestFiles.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdPruneDatasets.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdQueryCollections.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdQueryDataIds.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdQueryDatasetTypes.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdQueryDatasets.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdQueryDimensionRecords.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdRemoveCollections.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdRemoveRuns.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliCmdRetrieveArtifacts.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliLog.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliPluginLoader.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliUtilSplitCommas.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliUtilSplitKv.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliUtilToUpper.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_cliUtils.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_column_spec.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_composites.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_config.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_connectionString.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_constraints.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_datasets.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_ddl.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_dimension_record_containers.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_dimensions.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_exprParserLex.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_exprParserYacc.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_expressions.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_formatter.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_gafaelfawr.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_location.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_logFormatter.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_logging.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_matplotlibFormatter.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_nonempty_mapping.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_normalFormExpression.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_obscore.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_packages.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_parquet.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_postgresql.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_progress.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_pydantic_utils.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_quantum.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_query_direct_postgresql.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_query_direct_sqlite.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_query_interface.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_query_relations.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_query_remote.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_query_utilities.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_remote_butler.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_server.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_simpleButler.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_sqlite.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_storageClass.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_templates.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_testRepo.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_thread_utils.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_time_utils.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_timespan.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_utils.py +0 -0
- {lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_versioning.py +0 -0
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lsst-daf-butler
|
|
3
|
-
Version: 29.2025.
|
|
3
|
+
Version: 29.2025.4000
|
|
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
|
-
License: BSD
|
|
6
|
+
License-Expression: BSD-3-Clause OR GPL-3.0-or-later
|
|
7
7
|
Project-URL: Homepage, https://github.com/lsst/daf_butler
|
|
8
8
|
Keywords: lsst
|
|
9
9
|
Classifier: Intended Audience :: Science/Research
|
|
10
|
-
Classifier: License :: OSI Approved :: BSD License
|
|
11
10
|
Classifier: Operating System :: OS Independent
|
|
12
11
|
Classifier: Programming Language :: Python :: 3
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -6,14 +6,14 @@ build-backend = "setuptools.build_meta"
|
|
|
6
6
|
name = "lsst-daf-butler"
|
|
7
7
|
requires-python = ">=3.11.0"
|
|
8
8
|
description = "An abstraction layer for reading and writing astronomical data to datastores."
|
|
9
|
-
license =
|
|
9
|
+
license = "BSD-3-Clause OR GPL-3.0-or-later"
|
|
10
|
+
license-files = ["COPYRIGHT", "LICENSE", "bsd_license.txt", "gpl-v3.0.txt"]
|
|
10
11
|
readme = "README.md"
|
|
11
12
|
authors = [
|
|
12
13
|
{name="Rubin Observatory Data Management", email="dm-admin@lists.lsst.org"},
|
|
13
14
|
]
|
|
14
15
|
classifiers = [
|
|
15
16
|
"Intended Audience :: Science/Research",
|
|
16
|
-
"License :: OSI Approved :: BSD License",
|
|
17
17
|
"Operating System :: OS Independent",
|
|
18
18
|
"Programming Language :: Python :: 3",
|
|
19
19
|
"Programming Language :: Python :: 3.12",
|
|
@@ -74,7 +74,6 @@ where = ["python"]
|
|
|
74
74
|
|
|
75
75
|
[tool.setuptools]
|
|
76
76
|
zip-safe = true
|
|
77
|
-
license-files = ["COPYRIGHT", "LICENSE", "bsd_license.txt", "gpl-v3.0.txt"]
|
|
78
77
|
|
|
79
78
|
[tool.setuptools.package-data]
|
|
80
79
|
"lsst.daf.butler" = ["py.typed", "configs/*.yaml", "configs/*/*.yaml", "tests/registry_data/*.yaml"]
|
|
@@ -614,6 +614,34 @@ class QuantumBackedButler(LimitedButler):
|
|
|
614
614
|
datastore_records=provenance_records,
|
|
615
615
|
)
|
|
616
616
|
|
|
617
|
+
def export_predicted_datastore_records(
|
|
618
|
+
self, refs: Iterable[DatasetRef]
|
|
619
|
+
) -> dict[str, DatastoreRecordData]:
|
|
620
|
+
"""Export datastore records for a set of predicted output dataset
|
|
621
|
+
references.
|
|
622
|
+
|
|
623
|
+
Parameters
|
|
624
|
+
----------
|
|
625
|
+
refs : `~collections.abc.Iterable` [ `DatasetRef` ]
|
|
626
|
+
Dataset references for which to export datastore records. These
|
|
627
|
+
refs must be known to this butler.
|
|
628
|
+
|
|
629
|
+
Returns
|
|
630
|
+
-------
|
|
631
|
+
records : `dict` [ `str`, `DatastoreRecordData` ]
|
|
632
|
+
Predicted datastore records indexed by datastore name. No attempt
|
|
633
|
+
is made to ensure that the associated datasets exist on disk.
|
|
634
|
+
"""
|
|
635
|
+
unknowns = [
|
|
636
|
+
ref
|
|
637
|
+
for ref in refs
|
|
638
|
+
if (ref.id not in self._predicted_outputs and ref.id not in self._predicted_inputs)
|
|
639
|
+
]
|
|
640
|
+
if unknowns:
|
|
641
|
+
raise ValueError(f"Cannot export datastore records for unknown outputs: {unknowns}")
|
|
642
|
+
|
|
643
|
+
return self._datastore.export_predicted_records(refs)
|
|
644
|
+
|
|
617
645
|
|
|
618
646
|
class QuantumProvenanceData(pydantic.BaseModel):
|
|
619
647
|
"""A serializable struct for per-quantum provenance information and
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/cli/utils.py
RENAMED
|
@@ -74,6 +74,7 @@ from typing import TYPE_CHECKING, Any, cast
|
|
|
74
74
|
from unittest.mock import patch
|
|
75
75
|
|
|
76
76
|
import click
|
|
77
|
+
import click.core
|
|
77
78
|
import click.exceptions
|
|
78
79
|
import click.testing
|
|
79
80
|
import yaml
|
|
@@ -95,6 +96,11 @@ if _click_version >= Version("8.2.0"):
|
|
|
95
96
|
else:
|
|
96
97
|
_click_make_metavar_has_context = False
|
|
97
98
|
|
|
99
|
+
# Starting from Click 8.3.0, a special `UNSET` sentinel value is used to
|
|
100
|
+
# indicate the absence of a default value for a parameter. Prior to 8.3.0,
|
|
101
|
+
# they just used `None`.
|
|
102
|
+
_CLICK_UNSET_SENTINEL = getattr(click.core, "UNSET", None)
|
|
103
|
+
|
|
98
104
|
log = logging.getLogger(__name__)
|
|
99
105
|
|
|
100
106
|
# This is used as the metavar argument to Options that accept multiple string
|
|
@@ -554,7 +560,7 @@ def split_kv(
|
|
|
554
560
|
|
|
555
561
|
if add_to_default:
|
|
556
562
|
default = param.get_default(context)
|
|
557
|
-
if default:
|
|
563
|
+
if default and default != _CLICK_UNSET_SENTINEL:
|
|
558
564
|
vals = tuple(v for v in itertools.chain(default, vals)) # Convert to tuple for mypy
|
|
559
565
|
|
|
560
566
|
ret: RetDict | RetTuple
|
|
@@ -1013,7 +1019,8 @@ class MWCommand(click.Command):
|
|
|
1013
1019
|
captured_args.append(val)
|
|
1014
1020
|
elif isinstance(param, click.Argument):
|
|
1015
1021
|
param_name = cast(str, param.name)
|
|
1016
|
-
|
|
1022
|
+
opt = opts[param_name]
|
|
1023
|
+
if opt is not None and opt != _CLICK_UNSET_SENTINEL:
|
|
1017
1024
|
captured_args.append(opt)
|
|
1018
1025
|
else:
|
|
1019
1026
|
raise AssertionError("All parameters should be an Option or an Argument")
|
|
@@ -95,3 +95,4 @@ RegionTimeInfo: lsst.daf.butler.formatters.json.JsonFormatter
|
|
|
95
95
|
QPEnsemble: lsst.meas.pz.qp_formatter.QPFormatter
|
|
96
96
|
PZModel: lsst.meas.pz.model_formatter.ModelFormatter
|
|
97
97
|
VisitBackgroundModel: lsst.daf.butler.formatters.json.JsonFormatter
|
|
98
|
+
VignettingCorrection: lsst.ts.observatory.control.utils.extras.vignetting_storage.VignettingCorrectionFormatter
|
|
@@ -428,3 +428,5 @@ storageClasses:
|
|
|
428
428
|
pytype: rail.core.model.Model
|
|
429
429
|
VisitBackgroundModel:
|
|
430
430
|
pytype: lsst.drp.tasks.fit_visit_background.VisitBackgroundModel
|
|
431
|
+
VignettingCorrection:
|
|
432
|
+
pytype: lsst.ts.observatory.control.utils.extras.vignetting_correction.VignettingCorrection
|
|
@@ -1381,6 +1381,24 @@ class Datastore(FileTransferSource, metaclass=ABCMeta):
|
|
|
1381
1381
|
"""
|
|
1382
1382
|
raise NotImplementedError()
|
|
1383
1383
|
|
|
1384
|
+
def export_predicted_records(self, refs: Iterable[DatasetRef]) -> dict[str, DatastoreRecordData]:
|
|
1385
|
+
"""Export predicted datastore records and locations to an in-memory
|
|
1386
|
+
data structure.
|
|
1387
|
+
|
|
1388
|
+
Parameters
|
|
1389
|
+
----------
|
|
1390
|
+
refs : `~collections.abc.Iterable` [ `DatasetRef` ]
|
|
1391
|
+
Datastore records that would be used if the given refs were to
|
|
1392
|
+
exist in this datastore. No attempt is made to determine if these
|
|
1393
|
+
datasets actually exist.
|
|
1394
|
+
|
|
1395
|
+
Returns
|
|
1396
|
+
-------
|
|
1397
|
+
data : `~collections.abc.Mapping` [ `str`, `DatastoreRecordData` ]
|
|
1398
|
+
Exported datastore records indexed by datastore name.
|
|
1399
|
+
"""
|
|
1400
|
+
raise NotImplementedError()
|
|
1401
|
+
|
|
1384
1402
|
def set_retrieve_dataset_type_method(self, method: Callable[[str], DatasetType | None] | None) -> None:
|
|
1385
1403
|
"""Specify a method that can be used by datastore to retrieve
|
|
1386
1404
|
registry-defined dataset type.
|
|
@@ -1165,6 +1165,25 @@ class ChainedDatastore(Datastore):
|
|
|
1165
1165
|
|
|
1166
1166
|
return all_records
|
|
1167
1167
|
|
|
1168
|
+
def export_predicted_records(self, refs: Iterable[DatasetRef]) -> dict[str, DatastoreRecordData]:
|
|
1169
|
+
# Docstring inherited from the base class.
|
|
1170
|
+
|
|
1171
|
+
all_records: dict[str, DatastoreRecordData] = {}
|
|
1172
|
+
|
|
1173
|
+
# Filter out datasets that this datastore is not allowed to contain.
|
|
1174
|
+
refs = [ref for ref in refs if self.constraints.isAcceptable(ref)]
|
|
1175
|
+
|
|
1176
|
+
# Merge all sub-datastore records into one structure
|
|
1177
|
+
for datastore in self.datastores:
|
|
1178
|
+
sub_records = datastore.export_predicted_records(refs)
|
|
1179
|
+
for name, record_data in sub_records.items():
|
|
1180
|
+
# All datastore names must be unique in a chain.
|
|
1181
|
+
if name in all_records:
|
|
1182
|
+
raise ValueError("Non-unique datastore name found in datastore {datastore}")
|
|
1183
|
+
all_records[name] = record_data
|
|
1184
|
+
|
|
1185
|
+
return all_records
|
|
1186
|
+
|
|
1168
1187
|
def export(
|
|
1169
1188
|
self,
|
|
1170
1189
|
refs: Iterable[DatasetRef],
|
|
@@ -3188,6 +3188,24 @@ class FileDatastore(GenericBaseDatastore[StoredFileInfo]):
|
|
|
3188
3188
|
record_data = DatastoreRecordData(records=records)
|
|
3189
3189
|
return {self.name: record_data}
|
|
3190
3190
|
|
|
3191
|
+
def export_predicted_records(self, refs: Iterable[DatasetRef]) -> dict[str, DatastoreRecordData]:
|
|
3192
|
+
# Docstring inherited from the base class.
|
|
3193
|
+
refs = [self._cast_storage_class(ref) for ref in refs]
|
|
3194
|
+
records: dict[DatasetId, dict[str, list[StoredDatastoreItemInfo]]] = {}
|
|
3195
|
+
for ref in refs:
|
|
3196
|
+
if not self.constraints.isAcceptable(ref):
|
|
3197
|
+
continue
|
|
3198
|
+
fileLocations = self._get_expected_dataset_locations_info(ref)
|
|
3199
|
+
if not fileLocations:
|
|
3200
|
+
continue
|
|
3201
|
+
dataset_records = records.setdefault(ref.id, {})
|
|
3202
|
+
dataset_records.setdefault(self._table.name, [])
|
|
3203
|
+
for _, storedFileInfo in fileLocations:
|
|
3204
|
+
dataset_records[self._table.name].append(storedFileInfo)
|
|
3205
|
+
|
|
3206
|
+
record_data = DatastoreRecordData(records=records)
|
|
3207
|
+
return {self.name: record_data}
|
|
3208
|
+
|
|
3191
3209
|
def set_retrieve_dataset_type_method(self, method: Callable[[str], DatasetType | None] | None) -> None:
|
|
3192
3210
|
# Docstring inherited from the base class.
|
|
3193
3211
|
self._retrieve_dataset_method = method
|
|
@@ -763,6 +763,12 @@ class InMemoryDatastore(GenericBaseDatastore[StoredMemoryItemInfo]):
|
|
|
763
763
|
# In-memory Datastore records cannot be exported or imported
|
|
764
764
|
return {}
|
|
765
765
|
|
|
766
|
+
def export_predicted_records(self, refs: Iterable[DatasetIdRef]) -> dict[str, DatastoreRecordData]:
|
|
767
|
+
# Docstring inherited from the base class.
|
|
768
|
+
|
|
769
|
+
# In-memory Datastore records cannot be exported or imported
|
|
770
|
+
return {}
|
|
771
|
+
|
|
766
772
|
def get_opaque_table_definitions(self) -> Mapping[str, DatastoreOpaqueTable]:
|
|
767
773
|
# Docstring inherited from the base class.
|
|
768
774
|
return {}
|
|
@@ -204,8 +204,6 @@ class _ConversionVisitor(TreeVisitor[_VisitorResult]):
|
|
|
204
204
|
return result
|
|
205
205
|
|
|
206
206
|
def visitIdentifier(self, name: str, node: Node) -> _VisitorResult:
|
|
207
|
-
name = name.lower()
|
|
208
|
-
|
|
209
207
|
if name in self.context.bind:
|
|
210
208
|
value = self.context.bind[name]
|
|
211
209
|
# Lists of values do not have a direct representation in the new
|
|
@@ -242,7 +240,6 @@ class _ConversionVisitor(TreeVisitor[_VisitorResult]):
|
|
|
242
240
|
return _ColExpr(column_expression)
|
|
243
241
|
|
|
244
242
|
def visitBind(self, name: str, node: Node) -> _VisitorResult:
|
|
245
|
-
name = name.lower()
|
|
246
243
|
if name not in self.context.bind:
|
|
247
244
|
raise InvalidQueryError("Name {name!r} is not in the bind map.")
|
|
248
245
|
# Logic in visitIdentifier handles binds.
|
|
@@ -71,8 +71,7 @@ class IdentifierContext: # numpydoc ignore=PR01
|
|
|
71
71
|
if bind is None:
|
|
72
72
|
self.bind = {}
|
|
73
73
|
else:
|
|
74
|
-
|
|
75
|
-
self.bind = {k.lower(): v for k, v in bind.items()}
|
|
74
|
+
self.bind = dict(bind)
|
|
76
75
|
if len(self.bind.keys()) != len(bind.keys()):
|
|
77
76
|
raise ValueError(f"Duplicate keys present in bind: {bind.keys()}")
|
|
78
77
|
|
|
@@ -96,9 +95,6 @@ def interpret_identifier(context: IdentifierContext, identifier: str) -> ColumnE
|
|
|
96
95
|
dimensions = context.dimensions
|
|
97
96
|
datasets = context.datasets
|
|
98
97
|
bind = context.bind
|
|
99
|
-
# Make identifiers case-insensitive.
|
|
100
|
-
identifier = identifier.lower()
|
|
101
|
-
|
|
102
98
|
if identifier in bind:
|
|
103
99
|
return make_column_literal(bind[identifier])
|
|
104
100
|
terms = identifier.split(".")
|
|
@@ -110,7 +110,7 @@ def is_dataset_field(s: str) -> TypeGuard[DatasetFieldName]:
|
|
|
110
110
|
class QueryTreeBase(pydantic.BaseModel):
|
|
111
111
|
"""Base class for all non-primitive types in a query tree."""
|
|
112
112
|
|
|
113
|
-
model_config = pydantic.ConfigDict(frozen=True,
|
|
113
|
+
model_config = pydantic.ConfigDict(frozen=True, strict=True)
|
|
114
114
|
|
|
115
115
|
|
|
116
116
|
class ColumnExpressionBase(QueryTreeBase, ABC):
|
|
@@ -29,6 +29,8 @@ from typing import Annotated
|
|
|
29
29
|
|
|
30
30
|
from fastapi import Depends, Header, HTTPException
|
|
31
31
|
from safir.dependencies.gafaelfawr import auth_delegated_token_dependency
|
|
32
|
+
from safir.dependencies.logger import logger_dependency as safir_logger_dependency
|
|
33
|
+
from structlog.stdlib import BoundLogger
|
|
32
34
|
|
|
33
35
|
from lsst.daf.butler import LabeledButlerFactory
|
|
34
36
|
|
|
@@ -117,6 +119,31 @@ async def repository_authorization_dependency(
|
|
|
117
119
|
)
|
|
118
120
|
|
|
119
121
|
|
|
122
|
+
async def logger_dependency(
|
|
123
|
+
logger: Annotated[BoundLogger, Depends(safir_logger_dependency)],
|
|
124
|
+
repository: str,
|
|
125
|
+
user_name: Annotated[str | None, Depends(user_name_dependency)],
|
|
126
|
+
x_auth_request_service: Annotated[str | None, Header()] = None,
|
|
127
|
+
) -> BoundLogger:
|
|
128
|
+
"""Return a logger with additional bound context information.
|
|
129
|
+
|
|
130
|
+
Parameters
|
|
131
|
+
----------
|
|
132
|
+
logger : `structlog.stdlib.BoundLogger`
|
|
133
|
+
Logger provided by Safir.
|
|
134
|
+
repository : `str`
|
|
135
|
+
Butler repository that is being accessed.
|
|
136
|
+
user_name : `str` or `None`
|
|
137
|
+
Name of the user accessing the repository, from Gafaelfawr headers.
|
|
138
|
+
x_auth_request_service : `str` or `None`
|
|
139
|
+
Name of the service being used to access the repository, from
|
|
140
|
+
Gafaelfawr headers.
|
|
141
|
+
"""
|
|
142
|
+
return logger.bind(
|
|
143
|
+
butler_repo=repository, requester={"username": user_name, "service": x_auth_request_service}
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
|
|
120
147
|
async def factory_dependency(
|
|
121
148
|
repository: str,
|
|
122
149
|
butler_factory: Annotated[LabeledButlerFactory, Depends(butler_factory_dependency)],
|
|
@@ -30,10 +30,11 @@ from __future__ import annotations
|
|
|
30
30
|
__all__ = ()
|
|
31
31
|
|
|
32
32
|
import uuid
|
|
33
|
-
from typing import Any
|
|
33
|
+
from typing import Annotated, Any
|
|
34
34
|
|
|
35
35
|
from fastapi import APIRouter, Depends, HTTPException, Request
|
|
36
36
|
from fastapi.responses import RedirectResponse
|
|
37
|
+
from structlog.stdlib import BoundLogger
|
|
37
38
|
|
|
38
39
|
from ...._butler import Butler
|
|
39
40
|
from ...._collection_type import CollectionType
|
|
@@ -64,7 +65,7 @@ from ...server_models import (
|
|
|
64
65
|
QueryDatasetTypesResponseModel,
|
|
65
66
|
)
|
|
66
67
|
from .._config import load_config
|
|
67
|
-
from .._dependencies import factory_dependency
|
|
68
|
+
from .._dependencies import factory_dependency, logger_dependency
|
|
68
69
|
from .._factory import Factory
|
|
69
70
|
from ._file_info import get_file_info_payload
|
|
70
71
|
from ._utils import generate_file_download_uri, set_default_data_id
|
|
@@ -184,12 +185,14 @@ def expand_data_id(
|
|
|
184
185
|
)
|
|
185
186
|
def get_file(
|
|
186
187
|
dataset_id: uuid.UUID,
|
|
188
|
+
logger: Annotated[BoundLogger, Depends(logger_dependency)],
|
|
187
189
|
factory: Factory = Depends(factory_dependency),
|
|
188
190
|
) -> GetFileResponseModel:
|
|
189
191
|
butler = factory.create_butler()
|
|
190
192
|
ref = butler.get_dataset(dataset_id, datastore_records=True)
|
|
191
193
|
if ref is None:
|
|
192
194
|
raise DatasetNotFoundError(f"Dataset ID {dataset_id} not found")
|
|
195
|
+
_log_file_access(logger, ref, "uuid")
|
|
193
196
|
return _get_file_info_response(butler, ref)
|
|
194
197
|
|
|
195
198
|
|
|
@@ -200,6 +203,7 @@ def get_file(
|
|
|
200
203
|
)
|
|
201
204
|
def get_file_by_data_id(
|
|
202
205
|
request: GetFileByDataIdRequestModel,
|
|
206
|
+
logger: Annotated[BoundLogger, Depends(logger_dependency)],
|
|
203
207
|
factory: Factory = Depends(factory_dependency),
|
|
204
208
|
) -> GetFileResponseModel:
|
|
205
209
|
butler = factory.create_butler()
|
|
@@ -211,6 +215,7 @@ def get_file_by_data_id(
|
|
|
211
215
|
datastore_records=True,
|
|
212
216
|
timespan=request.timespan,
|
|
213
217
|
)
|
|
218
|
+
_log_file_access(logger, ref, "data-id")
|
|
214
219
|
return _get_file_info_response(butler, ref)
|
|
215
220
|
|
|
216
221
|
|
|
@@ -220,12 +225,21 @@ def _get_file_info_response(butler: Butler, ref: DatasetRef) -> GetFileResponseM
|
|
|
220
225
|
)
|
|
221
226
|
|
|
222
227
|
|
|
228
|
+
def _log_file_access(logger: BoundLogger, ref: DatasetRef, access_method: str) -> None:
|
|
229
|
+
logger.info(
|
|
230
|
+
"file-access",
|
|
231
|
+
dataset={"uuid": str(ref.id), "type": ref.datasetType.name, "data_id": dict(ref.dataId.required)},
|
|
232
|
+
file_access_endpoint=access_method,
|
|
233
|
+
)
|
|
234
|
+
|
|
235
|
+
|
|
223
236
|
@external_router.get(
|
|
224
237
|
"/v1/dataset/{dataset_id}/download",
|
|
225
238
|
summary="Return an HTTP redirect to a location where you can download the artifact file for the dataset.",
|
|
226
239
|
)
|
|
227
240
|
def redirect_to_dataset_download(
|
|
228
241
|
dataset_id: uuid.UUID,
|
|
242
|
+
logger: Annotated[BoundLogger, Depends(logger_dependency)],
|
|
229
243
|
component: str | None = None,
|
|
230
244
|
factory: Factory = Depends(factory_dependency),
|
|
231
245
|
) -> RedirectResponse:
|
|
@@ -245,6 +259,7 @@ def redirect_to_dataset_download(
|
|
|
245
259
|
# files, and you must specify the component to pick which one you want
|
|
246
260
|
# to download.
|
|
247
261
|
if info.datastoreRecords.component == component:
|
|
262
|
+
_log_file_access(logger, ref, "uuid-redirect")
|
|
248
263
|
return RedirectResponse(status_code=307, url=str(info.url))
|
|
249
264
|
|
|
250
265
|
found_components = [info.datastoreRecords.component for info in payload.file_info]
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/tests/utils.py
RENAMED
|
@@ -46,6 +46,7 @@ from lsst.resources import ResourcePathExpression
|
|
|
46
46
|
from .. import Butler, ButlerConfig, Config, DatasetRef, StorageClassFactory, Timespan
|
|
47
47
|
from .._collection_type import CollectionType
|
|
48
48
|
from ..datastore import NullDatastore
|
|
49
|
+
from ..dimensions import DimensionConfig
|
|
49
50
|
from ..direct_butler import DirectButler
|
|
50
51
|
from ..registry.sql_registry import RegistryConfig, SqlRegistry
|
|
51
52
|
from ..tests import MetricsExample, addDatasetType
|
|
@@ -130,7 +131,9 @@ def safeTestTempDir(default_base: str) -> Iterator[str]:
|
|
|
130
131
|
|
|
131
132
|
|
|
132
133
|
def create_populated_sqlite_registry(
|
|
133
|
-
*args: ResourcePathExpression,
|
|
134
|
+
*args: ResourcePathExpression,
|
|
135
|
+
registry_config: RegistryConfig | None = None,
|
|
136
|
+
dimension_config: DimensionConfig | None = None,
|
|
134
137
|
) -> Butler:
|
|
135
138
|
"""Create an in-memory registry-only sqlite butler and populate it.
|
|
136
139
|
|
|
@@ -141,6 +144,8 @@ def create_populated_sqlite_registry(
|
|
|
141
144
|
registry_config : ``RegistryConfig``, optional
|
|
142
145
|
Registry configuration to use as the basis for the Butler
|
|
143
146
|
configuration.
|
|
147
|
+
dimension_config : ``DimensionConfig``, optional
|
|
148
|
+
Dimension universe configuration.
|
|
144
149
|
|
|
145
150
|
Returns
|
|
146
151
|
-------
|
|
@@ -151,7 +156,7 @@ def create_populated_sqlite_registry(
|
|
|
151
156
|
if registry_config is not None:
|
|
152
157
|
config["registry"] = registry_config
|
|
153
158
|
config[".registry.db"] = "sqlite://"
|
|
154
|
-
registry = SqlRegistry.createFromConfig(config["registry"])
|
|
159
|
+
registry = SqlRegistry.createFromConfig(config["registry"], dimension_config)
|
|
155
160
|
butler = DirectButler(
|
|
156
161
|
config=config,
|
|
157
162
|
registry=registry,
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: lsst-daf-butler
|
|
3
|
-
Version: 29.2025.
|
|
3
|
+
Version: 29.2025.4000
|
|
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
|
-
License: BSD
|
|
6
|
+
License-Expression: BSD-3-Clause OR GPL-3.0-or-later
|
|
7
7
|
Project-URL: Homepage, https://github.com/lsst/daf_butler
|
|
8
8
|
Keywords: lsst
|
|
9
9
|
Classifier: Intended Audience :: Science/Research
|
|
10
|
-
Classifier: License :: OSI Approved :: BSD License
|
|
11
10
|
Classifier: Operating System :: OS Independent
|
|
12
11
|
Classifier: Programming Language :: Python :: 3
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -988,6 +988,30 @@ class DatastoreTests(DatastoreTestsBase):
|
|
|
988
988
|
data = datastore2.get(refs[2])
|
|
989
989
|
self.assertIsNotNone(data)
|
|
990
990
|
|
|
991
|
+
def testExportPredictedRecords(self):
|
|
992
|
+
if self.isEphemeral:
|
|
993
|
+
raise unittest.SkipTest("in-memory datastore does not support record export/import")
|
|
994
|
+
sc = self.storageClassFactory.getStorageClass("ThingOne")
|
|
995
|
+
dimensions = self.universe.conform(("visit", "physical_filter"))
|
|
996
|
+
dataId = {
|
|
997
|
+
"instrument": "dummy",
|
|
998
|
+
"visit": 52,
|
|
999
|
+
"physical_filter": "V",
|
|
1000
|
+
"band": "v",
|
|
1001
|
+
"day_obs": 20250101,
|
|
1002
|
+
}
|
|
1003
|
+
ref = self.makeDatasetRef("metric", dimensions, sc, dataId)
|
|
1004
|
+
|
|
1005
|
+
datastore = self.makeDatastore("test_datastore")
|
|
1006
|
+
names = {n for n in datastore.names if not n.startswith("InMemory")}
|
|
1007
|
+
records = datastore.export_predicted_records([ref])
|
|
1008
|
+
|
|
1009
|
+
# Expect predicted records from all datastores.
|
|
1010
|
+
self.assertEqual(set(records.keys()), names)
|
|
1011
|
+
|
|
1012
|
+
for record_data in records.values():
|
|
1013
|
+
self.assertEqual(len(record_data.records), 1)
|
|
1014
|
+
|
|
991
1015
|
def testExport(self) -> None:
|
|
992
1016
|
datastore, refs = self._populate_export_datastore("test_datastore")
|
|
993
1017
|
|
|
@@ -1414,6 +1438,7 @@ class ChainedDatastoreMemoryTestCase(InMemoryDatastoreTestCase):
|
|
|
1414
1438
|
|
|
1415
1439
|
configFile = os.path.join(TESTDIR, "config/basic/chainedDatastore2.yaml")
|
|
1416
1440
|
validationCanFail = False
|
|
1441
|
+
isEphemeral = True
|
|
1417
1442
|
|
|
1418
1443
|
|
|
1419
1444
|
class DatastoreConstraintsTests(DatastoreTestsBase):
|
|
@@ -2124,6 +2149,8 @@ class NullDatastoreTestCase(DatasetTestHelper, unittest.TestCase):
|
|
|
2124
2149
|
null.import_records({})
|
|
2125
2150
|
with self.assertRaises(NotImplementedError):
|
|
2126
2151
|
null.export_records([])
|
|
2152
|
+
with self.assertRaises(NotImplementedError):
|
|
2153
|
+
null.export_predicted_records([])
|
|
2127
2154
|
with self.assertRaises(NotImplementedError):
|
|
2128
2155
|
null.export([ref])
|
|
2129
2156
|
with self.assertRaises(NotImplementedError):
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/tests/test_quantumBackedButler.py
RENAMED
|
@@ -416,6 +416,19 @@ class QuantumBackedButlerTestCase(unittest.TestCase):
|
|
|
416
416
|
for dataset_data in datastore_records.records[class_name].values():
|
|
417
417
|
self.assertEqual(set(dataset_data), {table_name})
|
|
418
418
|
|
|
419
|
+
def test_export_predicted_datastore_records(self) -> None:
|
|
420
|
+
"""Test for export_predicted_datastore_records method"""
|
|
421
|
+
quantum = self.make_quantum()
|
|
422
|
+
qbb = QuantumBackedButler.initialize(
|
|
423
|
+
config=self.config, quantum=quantum, dimensions=self.universe, dataset_types=self.dataset_types
|
|
424
|
+
)
|
|
425
|
+
|
|
426
|
+
records = qbb.export_predicted_datastore_records(self.output_refs)
|
|
427
|
+
self.assertEqual(len(records["FileDatastore@<butlerRoot>/datastore"].records), len(self.output_refs))
|
|
428
|
+
|
|
429
|
+
with self.assertRaises(ValueError):
|
|
430
|
+
qbb.export_predicted_datastore_records(self.missing_refs)
|
|
431
|
+
|
|
419
432
|
def test_collect_and_transfer(self) -> None:
|
|
420
433
|
"""Test for collect_and_transfer method"""
|
|
421
434
|
quantum1 = self.make_quantum(1)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/CHANGES.rst
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/configuring.rst
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/datastores.rst
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/dimensions.rst
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/formatters.rst
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/organizing.rst
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/queries.rst
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/doc/lsst.daf.butler/use-in-tests.rst
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/__init__.py
RENAMED
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_butler.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_column_tags.py
RENAMED
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_config.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_dataset_ref.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{lsst_daf_butler-29.2025.3800 → lsst_daf_butler-29.2025.4000}/python/lsst/daf/butler/_formatter.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|