lsst-daf-butler 29.2025.4800__tar.gz → 30.0.0rc1__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.
Files changed (437) hide show
  1. {lsst_daf_butler-29.2025.4800/python/lsst_daf_butler.egg-info → lsst_daf_butler-30.0.0rc1}/PKG-INFO +1 -1
  2. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_butler.py +2 -23
  3. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_limited_butler.py +29 -4
  4. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/formatters/parquet.py +30 -18
  5. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/logging.py +17 -7
  6. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/_pruneDatasets.py +2 -1
  7. lsst_daf_butler-30.0.0rc1/python/lsst/daf/butler/version.py +2 -0
  8. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1/python/lsst_daf_butler.egg-info}/PKG-INFO +1 -1
  9. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdPruneDatasets.py +62 -3
  10. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliUtilSplitKv.py +4 -2
  11. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_logFormatter.py +48 -0
  12. lsst_daf_butler-29.2025.4800/python/lsst/daf/butler/version.py +0 -2
  13. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/COPYRIGHT +0 -0
  14. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/LICENSE +0 -0
  15. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/MANIFEST.in +0 -0
  16. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/README.md +0 -0
  17. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/bsd_license.txt +0 -0
  18. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/doc/lsst.daf.butler/CHANGES.rst +0 -0
  19. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/doc/lsst.daf.butler/concreteStorageClasses.rst +0 -0
  20. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/doc/lsst.daf.butler/configuring.rst +0 -0
  21. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/doc/lsst.daf.butler/datastores.rst +0 -0
  22. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/doc/lsst.daf.butler/dimensions.rst +0 -0
  23. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/doc/lsst.daf.butler/formatters.rst +0 -0
  24. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/doc/lsst.daf.butler/index.rst +0 -0
  25. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/doc/lsst.daf.butler/organizing.rst +0 -0
  26. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/doc/lsst.daf.butler/queries.rst +0 -0
  27. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/doc/lsst.daf.butler/use-in-tests.rst +0 -0
  28. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/doc/lsst.daf.butler/writing-subcommands.rst +0 -0
  29. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/gpl-v3.0.txt +0 -0
  30. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/pyproject.toml +0 -0
  31. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/__init__.py +0 -0
  32. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/__init__.py +0 -0
  33. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/__init__.py +0 -0
  34. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_butler_collections.py +0 -0
  35. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_butler_config.py +0 -0
  36. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_butler_instance_options.py +0 -0
  37. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_butler_metrics.py +0 -0
  38. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_butler_repo_index.py +0 -0
  39. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_collection_type.py +0 -0
  40. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_config.py +0 -0
  41. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_config_support.py +0 -0
  42. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_dataset_association.py +0 -0
  43. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_dataset_existence.py +0 -0
  44. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_dataset_provenance.py +0 -0
  45. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_dataset_ref.py +0 -0
  46. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_dataset_type.py +0 -0
  47. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_deferredDatasetHandle.py +0 -0
  48. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_exceptions.py +0 -0
  49. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_exceptions_legacy.py +0 -0
  50. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_file_dataset.py +0 -0
  51. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_file_descriptor.py +0 -0
  52. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_formatter.py +0 -0
  53. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_labeled_butler_factory.py +0 -0
  54. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_location.py +0 -0
  55. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_named.py +0 -0
  56. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_quantum.py +0 -0
  57. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_quantum_backed.py +0 -0
  58. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_query_all_datasets.py +0 -0
  59. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_registry_shim.py +0 -0
  60. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_rubin/__init__.py +0 -0
  61. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_rubin/file_datasets.py +0 -0
  62. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_standalone_datastore.py +0 -0
  63. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_storage_class.py +0 -0
  64. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_storage_class_delegate.py +0 -0
  65. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_timespan.py +0 -0
  66. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_topology.py +0 -0
  67. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_utilities/__init__.py +0 -0
  68. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_utilities/locked_object.py +0 -0
  69. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_utilities/named_locks.py +0 -0
  70. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_utilities/thread_safe_cache.py +0 -0
  71. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/_uuid.py +0 -0
  72. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/arrow_utils.py +0 -0
  73. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/cli/__init__.py +0 -0
  74. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/cli/butler.py +0 -0
  75. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/cli/cliLog.py +0 -0
  76. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/cli/cmd/__init__.py +0 -0
  77. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/cli/cmd/_remove_collections.py +0 -0
  78. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/cli/cmd/_remove_runs.py +0 -0
  79. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/cli/cmd/commands.py +0 -0
  80. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/cli/opt/__init__.py +0 -0
  81. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/cli/opt/arguments.py +0 -0
  82. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/cli/opt/optionGroups.py +0 -0
  83. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/cli/opt/options.py +0 -0
  84. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/cli/progress.py +0 -0
  85. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/cli/utils.py +0 -0
  86. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/column_spec.py +0 -0
  87. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/datastore.yaml +0 -0
  88. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/datastores/composites.yaml +0 -0
  89. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/datastores/fileDatastore.yaml +0 -0
  90. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/datastores/formatters.yaml +0 -0
  91. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/datastores/writeRecipes.yaml +0 -0
  92. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/dimensions.yaml +0 -0
  93. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe0.yaml +0 -0
  94. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe1.yaml +0 -0
  95. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe2.yaml +0 -0
  96. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe3.yaml +0 -0
  97. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe4.yaml +0 -0
  98. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe5.yaml +0 -0
  99. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe6.yaml +0 -0
  100. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe7.yaml +0 -0
  101. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/registry.yaml +0 -0
  102. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/repo_transfer_formats.yaml +0 -0
  103. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/configs/storageClasses.yaml +0 -0
  104. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastore/__init__.py +0 -0
  105. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastore/_datastore.py +0 -0
  106. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastore/_transfer.py +0 -0
  107. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastore/cache_manager.py +0 -0
  108. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastore/composites.py +0 -0
  109. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastore/constraints.py +0 -0
  110. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastore/file_templates.py +0 -0
  111. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastore/generic_base.py +0 -0
  112. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastore/record_data.py +0 -0
  113. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastore/stored_file_info.py +0 -0
  114. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastores/__init__.py +0 -0
  115. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastores/chainedDatastore.py +0 -0
  116. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastores/fileDatastore.py +0 -0
  117. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastores/file_datastore/__init__.py +0 -0
  118. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastores/file_datastore/get.py +0 -0
  119. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py +0 -0
  120. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastores/file_datastore/transfer.py +0 -0
  121. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/datastores/inMemoryDatastore.py +0 -0
  122. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/ddl.py +0 -0
  123. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/delegates/__init__.py +0 -0
  124. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/delegates/arrowtable.py +0 -0
  125. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/__init__.py +0 -0
  126. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_config.py +0 -0
  127. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_coordinate.py +0 -0
  128. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py +0 -0
  129. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_database.py +0 -0
  130. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_elements.py +0 -0
  131. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_governor.py +0 -0
  132. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_group.py +0 -0
  133. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_packer.py +0 -0
  134. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_record_set.py +0 -0
  135. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_record_table.py +0 -0
  136. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_records.py +0 -0
  137. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_schema.py +0 -0
  138. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_skypix.py +0 -0
  139. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/_universe.py +0 -0
  140. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/construction.py +0 -0
  141. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/dimensions/record_cache.py +0 -0
  142. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/direct_butler/__init__.py +0 -0
  143. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/direct_butler/_direct_butler.py +0 -0
  144. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/direct_butler/_direct_butler_collections.py +0 -0
  145. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/direct_query_driver/__init__.py +0 -0
  146. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/direct_query_driver/_driver.py +0 -0
  147. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/direct_query_driver/_postprocessing.py +0 -0
  148. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/direct_query_driver/_query_analysis.py +0 -0
  149. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/direct_query_driver/_query_builder.py +0 -0
  150. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/direct_query_driver/_result_page_converter.py +0 -0
  151. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/direct_query_driver/_sql_builders.py +0 -0
  152. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py +0 -0
  153. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/formatters/__init__.py +0 -0
  154. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/formatters/astropyTable.py +0 -0
  155. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/formatters/file.py +0 -0
  156. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/formatters/json.py +0 -0
  157. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/formatters/logs.py +0 -0
  158. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/formatters/matplotlib.py +0 -0
  159. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/formatters/packages.py +0 -0
  160. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/formatters/pickle.py +0 -0
  161. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/formatters/typeless.py +0 -0
  162. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/formatters/yaml.py +0 -0
  163. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/json.py +0 -0
  164. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/mapping_factory.py +0 -0
  165. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/name_shrinker.py +0 -0
  166. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/nonempty_mapping.py +0 -0
  167. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/persistence_context.py +0 -0
  168. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/progress.py +0 -0
  169. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/py.typed +0 -0
  170. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/pydantic_utils.py +0 -0
  171. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/__init__.py +0 -0
  172. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/_base.py +0 -0
  173. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/_data_coordinate_query_results.py +0 -0
  174. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/_dataset_query_results.py +0 -0
  175. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/_dimension_record_query_results.py +0 -0
  176. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/_expression_strings.py +0 -0
  177. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/_general_query_results.py +0 -0
  178. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/_identifiers.py +0 -0
  179. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/_query.py +0 -0
  180. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/convert_args.py +0 -0
  181. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/driver.py +0 -0
  182. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/expression_factory.py +0 -0
  183. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/expressions/__init__.py +0 -0
  184. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/expressions/categorize.py +0 -0
  185. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/expressions/parser/__init__.py +0 -0
  186. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/expressions/parser/exprTree.py +0 -0
  187. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/expressions/parser/parser.py +0 -0
  188. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/expressions/parser/parserLex.py +0 -0
  189. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/expressions/parser/parserYacc.py +0 -0
  190. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/expressions/parser/ply/__init__.py +0 -0
  191. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/expressions/parser/ply/lex.py +0 -0
  192. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/expressions/parser/ply/yacc.py +0 -0
  193. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/expressions/parser/treeVisitor.py +0 -0
  194. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/overlaps.py +0 -0
  195. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/predicate_constraints_summary.py +0 -0
  196. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/result_specs.py +0 -0
  197. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/tree/__init__.py +0 -0
  198. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/tree/_base.py +0 -0
  199. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/tree/_column_expression.py +0 -0
  200. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/tree/_column_literal.py +0 -0
  201. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/tree/_column_reference.py +0 -0
  202. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/tree/_column_set.py +0 -0
  203. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/tree/_predicate.py +0 -0
  204. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/tree/_query_tree.py +0 -0
  205. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/queries/visitors.py +0 -0
  206. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/__init__.py +0 -0
  207. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/_caching_context.py +0 -0
  208. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/_collection_record_cache.py +0 -0
  209. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/_collection_summary.py +0 -0
  210. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/_collection_summary_cache.py +0 -0
  211. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/_config.py +0 -0
  212. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/_defaults.py +0 -0
  213. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/_exceptions.py +0 -0
  214. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/_registry.py +0 -0
  215. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/_registry_base.py +0 -0
  216. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/_registry_factory.py +0 -0
  217. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/attributes.py +0 -0
  218. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/bridge/__init__.py +0 -0
  219. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/bridge/ephemeral.py +0 -0
  220. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/bridge/monolithic.py +0 -0
  221. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/collections/__init__.py +0 -0
  222. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/collections/_base.py +0 -0
  223. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/collections/nameKey.py +0 -0
  224. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/collections/synthIntKey.py +0 -0
  225. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/connectionString.py +0 -0
  226. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/databases/__init__.py +0 -0
  227. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/databases/postgresql.py +0 -0
  228. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/databases/sqlite.py +0 -0
  229. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/datasets/__init__.py +0 -0
  230. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/datasets/byDimensions/__init__.py +0 -0
  231. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py +0 -0
  232. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py +0 -0
  233. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py +0 -0
  234. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/datasets/byDimensions/tables.py +0 -0
  235. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/dimensions/__init__.py +0 -0
  236. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/dimensions/static.py +0 -0
  237. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/interfaces/__init__.py +0 -0
  238. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/interfaces/_attributes.py +0 -0
  239. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/interfaces/_bridge.py +0 -0
  240. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/interfaces/_collections.py +0 -0
  241. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/interfaces/_database.py +0 -0
  242. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/interfaces/_database_explain.py +0 -0
  243. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/interfaces/_datasets.py +0 -0
  244. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/interfaces/_dimensions.py +0 -0
  245. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/interfaces/_obscore.py +0 -0
  246. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/interfaces/_opaque.py +0 -0
  247. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/interfaces/_versioning.py +0 -0
  248. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/managers.py +0 -0
  249. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/nameShrinker.py +0 -0
  250. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/obscore/__init__.py +0 -0
  251. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/obscore/_config.py +0 -0
  252. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/obscore/_manager.py +0 -0
  253. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/obscore/_records.py +0 -0
  254. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/obscore/_schema.py +0 -0
  255. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/obscore/_spatial.py +0 -0
  256. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/obscore/default_spatial.py +0 -0
  257. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/obscore/pgsphere.py +0 -0
  258. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/opaque.py +0 -0
  259. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/queries/__init__.py +0 -0
  260. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/queries/_query_common.py +0 -0
  261. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/queries/_query_data_coordinates.py +0 -0
  262. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/queries/_query_datasets.py +0 -0
  263. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/queries/_query_dimension_records.py +0 -0
  264. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/queries/_results.py +0 -0
  265. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/sql_registry.py +0 -0
  266. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/tests/__init__.py +0 -0
  267. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/tests/_database.py +0 -0
  268. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/tests/_registry.py +0 -0
  269. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/versions.py +0 -0
  270. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/registry/wildcards.py +0 -0
  271. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/__init__.py +0 -0
  272. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_collection_args.py +0 -0
  273. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_config.py +0 -0
  274. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_defaults.py +0 -0
  275. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_errors.py +0 -0
  276. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_factory.py +0 -0
  277. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_get.py +0 -0
  278. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_http_connection.py +0 -0
  279. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_query_driver.py +0 -0
  280. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_query_results.py +0 -0
  281. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_ref_utils.py +0 -0
  282. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_registry.py +0 -0
  283. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_remote_butler.py +0 -0
  284. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_remote_butler_collections.py +0 -0
  285. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/_remote_file_transfer_source.py +0 -0
  286. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/authentication/__init__.py +0 -0
  287. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/authentication/cadc.py +0 -0
  288. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/authentication/interface.py +0 -0
  289. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/authentication/rubin.py +0 -0
  290. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/registry/__init__.py +0 -0
  291. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/__init__.py +0 -0
  292. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/_config.py +0 -0
  293. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/_dependencies.py +0 -0
  294. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/_factory.py +0 -0
  295. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py +0 -0
  296. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/_server.py +0 -0
  297. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/_telemetry.py +0 -0
  298. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/handlers/_external.py +0 -0
  299. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/handlers/_external_query.py +0 -0
  300. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/handlers/_file_info.py +0 -0
  301. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/handlers/_internal.py +0 -0
  302. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/handlers/_query_limits.py +0 -0
  303. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/handlers/_query_serialization.py +0 -0
  304. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/handlers/_query_streaming.py +0 -0
  305. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server/handlers/_utils.py +0 -0
  306. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/remote_butler/server_models.py +0 -0
  307. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/repo_relocation.py +0 -0
  308. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/__init__.py +0 -0
  309. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/_associate.py +0 -0
  310. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/butlerImport.py +0 -0
  311. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/certifyCalibrations.py +0 -0
  312. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/collectionChain.py +0 -0
  313. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/configDump.py +0 -0
  314. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/configValidate.py +0 -0
  315. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/createRepo.py +0 -0
  316. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/exportCalibs.py +0 -0
  317. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/ingest_files.py +0 -0
  318. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/ingest_zip.py +0 -0
  319. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/queryCollections.py +0 -0
  320. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/queryDataIds.py +0 -0
  321. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/queryDatasetTypes.py +0 -0
  322. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/queryDatasets.py +0 -0
  323. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/queryDimensionRecords.py +0 -0
  324. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/register_dataset_type.py +0 -0
  325. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/removeCollections.py +0 -0
  326. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/removeDatasetType.py +0 -0
  327. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/removeRuns.py +0 -0
  328. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/retrieveArtifacts.py +0 -0
  329. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/script/transferDatasets.py +0 -0
  330. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/__init__.py +0 -0
  331. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/_datasetsHelper.py +0 -0
  332. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/_dummyRegistry.py +0 -0
  333. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/_examplePythonTypes.py +0 -0
  334. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/_testRepo.py +0 -0
  335. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/butler_queries.py +0 -0
  336. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/cliCmdTestBase.py +0 -0
  337. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/cliLogTestBase.py +0 -0
  338. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/deferredFormatter.py +0 -0
  339. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/dict_convertible_model.py +0 -0
  340. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/hybrid_butler.py +0 -0
  341. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/hybrid_butler_collections.py +0 -0
  342. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/hybrid_butler_registry.py +0 -0
  343. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/postgresql.py +0 -0
  344. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/registry_data/__init__.py +0 -0
  345. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/registry_data/base.yaml +0 -0
  346. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset-skymap.yaml +0 -0
  347. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/registry_data/ci_hsc-subset.yaml +0 -0
  348. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/registry_data/datasets.yaml +0 -0
  349. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/registry_data/hsc-rc2-subset-v0.yaml +0 -0
  350. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/registry_data/spatial.py +0 -0
  351. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/registry_data/spatial.yaml +0 -0
  352. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/server.py +0 -0
  353. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/server_available.py +0 -0
  354. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/server_utils.py +0 -0
  355. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/testFormatters.py +0 -0
  356. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/tests/utils.py +0 -0
  357. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/time_utils.py +0 -0
  358. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/timespan_database_representation.py +0 -0
  359. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/transfers/__init__.py +0 -0
  360. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/transfers/_context.py +0 -0
  361. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/transfers/_interfaces.py +0 -0
  362. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/transfers/_yaml.py +0 -0
  363. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst/daf/butler/utils.py +0 -0
  364. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst_daf_butler.egg-info/SOURCES.txt +0 -0
  365. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst_daf_butler.egg-info/dependency_links.txt +0 -0
  366. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst_daf_butler.egg-info/entry_points.txt +0 -0
  367. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst_daf_butler.egg-info/requires.txt +0 -0
  368. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst_daf_butler.egg-info/top_level.txt +0 -0
  369. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/python/lsst_daf_butler.egg-info/zip-safe +0 -0
  370. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/setup.cfg +0 -0
  371. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_astropyTableFormatter.py +0 -0
  372. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_authentication.py +0 -0
  373. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_butler.py +0 -0
  374. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_butler_factory.py +0 -0
  375. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdAssociate.py +0 -0
  376. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdConfigDump.py +0 -0
  377. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdConfigValidate.py +0 -0
  378. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdCreate.py +0 -0
  379. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdImport.py +0 -0
  380. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdIngestFiles.py +0 -0
  381. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdQueryCollections.py +0 -0
  382. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdQueryDataIds.py +0 -0
  383. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdQueryDatasetTypes.py +0 -0
  384. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdQueryDatasets.py +0 -0
  385. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdQueryDimensionRecords.py +0 -0
  386. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdRemoveCollections.py +0 -0
  387. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdRemoveRuns.py +0 -0
  388. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliCmdRetrieveArtifacts.py +0 -0
  389. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliLog.py +0 -0
  390. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliPluginLoader.py +0 -0
  391. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliUtilSplitCommas.py +0 -0
  392. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliUtilToUpper.py +0 -0
  393. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_cliUtils.py +0 -0
  394. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_column_spec.py +0 -0
  395. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_composites.py +0 -0
  396. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_config.py +0 -0
  397. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_connectionString.py +0 -0
  398. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_constraints.py +0 -0
  399. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_datasets.py +0 -0
  400. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_datastore.py +0 -0
  401. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_ddl.py +0 -0
  402. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_dimension_record_containers.py +0 -0
  403. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_dimensions.py +0 -0
  404. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_exprParserLex.py +0 -0
  405. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_exprParserYacc.py +0 -0
  406. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_formatter.py +0 -0
  407. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_gafaelfawr.py +0 -0
  408. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_location.py +0 -0
  409. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_logging.py +0 -0
  410. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_matplotlibFormatter.py +0 -0
  411. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_nonempty_mapping.py +0 -0
  412. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_obscore.py +0 -0
  413. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_packages.py +0 -0
  414. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_parquet.py +0 -0
  415. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_postgresql.py +0 -0
  416. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_progress.py +0 -0
  417. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_pydantic_utils.py +0 -0
  418. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_quantum.py +0 -0
  419. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_quantumBackedButler.py +0 -0
  420. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_query_direct_postgresql.py +0 -0
  421. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_query_direct_sqlite.py +0 -0
  422. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_query_interface.py +0 -0
  423. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_query_remote.py +0 -0
  424. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_query_utilities.py +0 -0
  425. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_remote_butler.py +0 -0
  426. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_server.py +0 -0
  427. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_simpleButler.py +0 -0
  428. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_sqlite.py +0 -0
  429. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_storageClass.py +0 -0
  430. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_templates.py +0 -0
  431. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_testRepo.py +0 -0
  432. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_thread_utils.py +0 -0
  433. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_time_utils.py +0 -0
  434. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_timespan.py +0 -0
  435. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_utils.py +0 -0
  436. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_uuid.py +0 -0
  437. {lsst_daf_butler-29.2025.4800 → lsst_daf_butler-30.0.0rc1}/tests/test_versioning.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-daf-butler
3
- Version: 29.2025.4800
3
+ Version: 30.0.0rc1
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-Expression: BSD-3-Clause OR GPL-3.0-or-later
@@ -36,7 +36,7 @@ from abc import abstractmethod
36
36
  from collections.abc import Collection, Iterable, Iterator, Mapping, Sequence
37
37
  from contextlib import AbstractContextManager
38
38
  from types import EllipsisType
39
- from typing import TYPE_CHECKING, Any, Literal, Self, TextIO
39
+ from typing import TYPE_CHECKING, Any, TextIO
40
40
 
41
41
  from lsst.resources import ResourcePath, ResourcePathExpression
42
42
  from lsst.utils import doImportType
@@ -94,7 +94,7 @@ class _DeprecatedDefault:
94
94
  """Default value for a deprecated parameter."""
95
95
 
96
96
 
97
- class Butler(LimitedButler, AbstractContextManager): # numpydoc ignore=PR02
97
+ class Butler(LimitedButler): # numpydoc ignore=PR02
98
98
  """Interface for data butler and factory for Butler instances.
99
99
 
100
100
  Parameters
@@ -358,16 +358,6 @@ class Butler(LimitedButler, AbstractContextManager): # numpydoc ignore=PR02
358
358
  case _:
359
359
  raise TypeError(f"Unknown Butler type '{butler_type}'")
360
360
 
361
- def __enter__(self) -> Self:
362
- return self
363
-
364
- def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> Literal[False]:
365
- try:
366
- self.close()
367
- except Exception:
368
- _LOG.exception("An exception occured during Butler.close()")
369
- return False
370
-
371
361
  @staticmethod
372
362
  def makeRepo(
373
363
  root: ResourcePathExpression,
@@ -2236,15 +2226,4 @@ class Butler(LimitedButler, AbstractContextManager): # numpydoc ignore=PR02
2236
2226
 
2237
2227
  @abstractmethod
2238
2228
  def close(self) -> None:
2239
- """Release all resources associated with this Butler instance. The
2240
- instance may no longer be used after this is called.
2241
-
2242
- Notes
2243
- -----
2244
- Instead of calling ``close()``directly, you can use the Butler object
2245
- as a context manager. For example::
2246
- with Butler(...) as butler:
2247
- butler.get(...)
2248
- # butler is closed after exiting the block.
2249
- """
2250
2229
  raise NotImplementedError()
@@ -30,10 +30,10 @@ from __future__ import annotations
30
30
  __all__ = ("LimitedButler",)
31
31
 
32
32
  import logging
33
- from abc import ABC, abstractmethod
33
+ from abc import abstractmethod
34
34
  from collections.abc import Iterable, Iterator
35
- from contextlib import contextmanager
36
- from typing import Any, ClassVar
35
+ from contextlib import AbstractContextManager, contextmanager
36
+ from typing import Any, ClassVar, Literal, Self
37
37
 
38
38
  from lsst.resources import ResourcePath
39
39
 
@@ -48,7 +48,7 @@ from .dimensions import DimensionUniverse
48
48
  log = logging.getLogger(__name__)
49
49
 
50
50
 
51
- class LimitedButler(ABC):
51
+ class LimitedButler(AbstractContextManager):
52
52
  """A minimal butler interface that is sufficient to back
53
53
  `~lsst.pipe.base.PipelineTask` execution.
54
54
  """
@@ -100,6 +100,31 @@ class LimitedButler(ABC):
100
100
  """
101
101
  raise NotImplementedError()
102
102
 
103
+ def __enter__(self) -> Self:
104
+ return self
105
+
106
+ def __exit__(self, exc_type: Any, exc_val: Any, exc_tb: Any) -> Literal[False]:
107
+ try:
108
+ self.close()
109
+ except Exception:
110
+ log.exception("An exception occurred during Butler.close()")
111
+ return False
112
+
113
+ def close(self) -> None:
114
+ """Release all resources associated with this Butler instance. The
115
+ instance may no longer be used after this is called.
116
+
117
+ Notes
118
+ -----
119
+ Instead of calling ``close()`` directly, you can use the Butler object
120
+ as a context manager. For example::
121
+
122
+ with Butler(...) as butler:
123
+ butler.get(...)
124
+ # butler is closed after exiting the block.
125
+ """
126
+ pass
127
+
103
128
  def get(
104
129
  self,
105
130
  ref: DatasetRef,
@@ -49,13 +49,14 @@ __all__ = (
49
49
  )
50
50
 
51
51
  import collections.abc
52
+ import contextlib
52
53
  import itertools
53
54
  import json
54
55
  import logging
55
56
  import re
56
- from collections.abc import Iterable, Sequence
57
+ from collections.abc import Generator, Iterable, Sequence
57
58
  from fnmatch import fnmatchcase
58
- from typing import TYPE_CHECKING, Any, cast
59
+ from typing import IO, TYPE_CHECKING, Any, cast
59
60
 
60
61
  import pyarrow as pa
61
62
  import pyarrow.parquet as pq
@@ -84,6 +85,16 @@ TARGET_ROW_GROUP_BYTES = 1_000_000_000
84
85
  ASTROPY_PANDAS_INDEX_KEY = "lsst::arrow::astropy_pandas_index"
85
86
 
86
87
 
88
+ @contextlib.contextmanager
89
+ def generic_open(path: str, fs: AbstractFileSystem | None) -> Generator[IO]:
90
+ if fs is None:
91
+ with open(path, "rb") as fh:
92
+ yield fh
93
+ else:
94
+ with fs.open(path) as fh:
95
+ yield fh
96
+
97
+
87
98
  class ParquetFormatter(FormatterV2):
88
99
  """Interface for reading and writing Arrow Table objects to and from
89
100
  Parquet files.
@@ -120,7 +131,8 @@ class ParquetFormatter(FormatterV2):
120
131
  component: str | None = None,
121
132
  expected_size: int = -1,
122
133
  ) -> Any:
123
- schema = pq.read_schema(path, filesystem=fs)
134
+ with generic_open(path, fs) as handle:
135
+ schema = pq.read_schema(handle)
124
136
 
125
137
  schema_names = ["ArrowSchema", "DataFrameSchema", "ArrowAstropySchema", "ArrowNumpySchema"]
126
138
 
@@ -133,13 +145,13 @@ class ParquetFormatter(FormatterV2):
133
145
  if b"lsst::arrow::rowcount" in schema.metadata:
134
146
  return int(schema.metadata[b"lsst::arrow::rowcount"])
135
147
 
136
- temp_table = pq.read_table(
137
- path,
138
- filesystem=fs,
139
- columns=[schema.names[0]],
140
- use_threads=False,
141
- use_pandas_metadata=False,
142
- )
148
+ with generic_open(path, fs) as handle:
149
+ temp_table = pq.read_table(
150
+ handle,
151
+ columns=[schema.names[0]],
152
+ use_threads=False,
153
+ use_pandas_metadata=False,
154
+ )
143
155
 
144
156
  return len(temp_table[schema.names[0]])
145
157
 
@@ -148,7 +160,7 @@ class ParquetFormatter(FormatterV2):
148
160
  par_columns = self.file_descriptor.parameters.pop("columns", None)
149
161
  if par_columns:
150
162
  has_pandas_multi_index = False
151
- if b"pandas" in schema.metadata:
163
+ if schema.metadata and b"pandas" in schema.metadata:
152
164
  md = json.loads(schema.metadata[b"pandas"])
153
165
  if len(md["column_indexes"]) > 1:
154
166
  has_pandas_multi_index = True
@@ -184,13 +196,13 @@ class ParquetFormatter(FormatterV2):
184
196
  )
185
197
 
186
198
  metadata = schema.metadata if schema.metadata is not None else {}
187
- arrow_table = pq.read_table(
188
- path,
189
- filesystem=fs,
190
- columns=par_columns,
191
- use_threads=False,
192
- use_pandas_metadata=(b"pandas" in metadata),
193
- )
199
+ with generic_open(path, fs) as handle:
200
+ arrow_table = pq.read_table(
201
+ handle,
202
+ columns=par_columns,
203
+ use_threads=False,
204
+ use_pandas_metadata=(b"pandas" in metadata),
205
+ )
194
206
 
195
207
  return arrow_table
196
208
 
@@ -537,6 +537,9 @@ class ButlerLogRecords(MutableSequence[ButlerLogRecord]):
537
537
  if cls._generic_startswith(startdata, "["):
538
538
  # This is a JSON array of records.
539
539
  return _ButlerLogRecordsModelV1
540
+ elif cls._generic_startswith(startdata, cls.STREAMING_EXTRA_DELIMITER):
541
+ # This is an empty log file with a log record per line format.
542
+ return None
540
543
  elif not cls._generic_startswith(startdata, "{"):
541
544
  # Limit the length of string reported in error message in case
542
545
  # this is an enormous file.
@@ -570,9 +573,12 @@ class ButlerLogRecords(MutableSequence[ButlerLogRecord]):
570
573
  """
571
574
  first_line = stream.readline()
572
575
 
576
+ empty_stream = False
573
577
  if not first_line:
574
578
  # Empty file, return zero records.
575
579
  return cls.from_records([])
580
+ elif cls._generic_startswith(first_line, cls.STREAMING_EXTRA_DELIMITER):
581
+ empty_stream = True
576
582
 
577
583
  model_type = cls._detect_model(first_line)
578
584
 
@@ -583,13 +589,17 @@ class ButlerLogRecords(MutableSequence[ButlerLogRecord]):
583
589
  return model_type.model_validate_json(all).wrap(cls)
584
590
 
585
591
  # A stream of records with one record per line.
586
- records = [ButlerLogRecord.model_validate_json(first_line)]
587
- for line in stream:
588
- line = line.rstrip()
589
- if cls._generic_startswith(line, "###EXTRA###"):
590
- break
591
- elif line: # skip blank lines
592
- records.append(ButlerLogRecord.model_validate_json(line))
592
+ if not empty_stream:
593
+ records = [ButlerLogRecord.model_validate_json(first_line)]
594
+ for line in stream:
595
+ line = line.rstrip()
596
+ if cls._generic_startswith(line, cls.STREAMING_EXTRA_DELIMITER):
597
+ break
598
+ elif line: # skip blank lines
599
+ records.append(ButlerLogRecord.model_validate_json(line))
600
+ else:
601
+ # No records but might have extra metadata.
602
+ records = []
593
603
  extra_data = stream.read()
594
604
  if extra_data:
595
605
  extra = pydantic_core.from_json(extra_data)
@@ -243,6 +243,7 @@ def pruneDatasets(
243
243
  find_first=not find_all,
244
244
  show_uri=False,
245
245
  )
246
+ dataset_refs = list(itertools.chain.from_iterable(datasets_found.getDatasets()))
246
247
 
247
248
  result = PruneDatasetsResult(list(datasets_found.getTables()))
248
249
 
@@ -258,7 +259,7 @@ def pruneDatasets(
258
259
  def doPruneDatasets() -> PruneDatasetsResult:
259
260
  with Butler.from_config(repo, writeable=True) as butler:
260
261
  butler.pruneDatasets(
261
- refs=list(itertools.chain(*datasets_found.getDatasets())),
262
+ refs=dataset_refs,
262
263
  disassociate=disassociate,
263
264
  tags=disassociate_tags or (),
264
265
  purge=purge,
@@ -0,0 +1,2 @@
1
+ __all__ = ["__version__"]
2
+ __version__ = "30.0.0rc1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-daf-butler
3
- Version: 29.2025.4800
3
+ Version: 30.0.0rc1
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-Expression: BSD-3-Clause OR GPL-3.0-or-later
@@ -27,6 +27,7 @@
27
27
 
28
28
  """Unit tests for daf_butler CLI prune-datasets subcommand."""
29
29
 
30
+ import os
30
31
  import unittest
31
32
  from itertools import chain
32
33
  from unittest.mock import ANY, patch
@@ -36,7 +37,7 @@ from astropy.table import Table
36
37
  # Tests require the SqlRegistry
37
38
  import lsst.daf.butler.registry.sql_registry
38
39
  import lsst.daf.butler.script
39
- from lsst.daf.butler import CollectionInfo, CollectionType
40
+ from lsst.daf.butler import Butler, CollectionInfo, CollectionType
40
41
  from lsst.daf.butler.cli.butler import cli as butlerCli
41
42
  from lsst.daf.butler.cli.cmd.commands import (
42
43
  pruneDatasets_askContinueMsg,
@@ -57,7 +58,14 @@ from lsst.daf.butler.cli.cmd.commands import (
57
58
  from lsst.daf.butler.cli.utils import LogCliRunner, astropyTablesToStr, clickResultMsg
58
59
  from lsst.daf.butler.direct_butler import DirectButler
59
60
  from lsst.daf.butler.script import QueryDatasets
61
+ from lsst.daf.butler.tests.utils import (
62
+ ButlerTestHelper,
63
+ MetricTestRepo,
64
+ makeTestTempDir,
65
+ removeTestTempDir,
66
+ )
60
67
 
68
+ TESTDIR = os.path.abspath(os.path.dirname(__file__))
61
69
  doFindTables = True
62
70
 
63
71
 
@@ -211,8 +219,6 @@ class PruneDatasetsTestCase(unittest.TestCase):
211
219
  # QueryDatasets.getDatasets also does not get called.
212
220
  if exPruneDatasetsCallArgs:
213
221
  mockQueryDatasets_getDatasets.assert_called_once()
214
- else:
215
- mockQueryDatasets_getDatasets.assert_not_called()
216
222
  if exGetTablesCalled:
217
223
  mockQueryDatasets_getTables.assert_called_once()
218
224
  else:
@@ -520,5 +526,58 @@ class PruneDatasetsTestCase(unittest.TestCase):
520
526
  )
521
527
 
522
528
 
529
+ class QueryDatasetsCLITest(unittest.TestCase, ButlerTestHelper):
530
+ """Test that the command works when run as a script."""
531
+
532
+ def setUp(self):
533
+ self.root = makeTestTempDir(TESTDIR)
534
+ self.testRepo = MetricTestRepo(
535
+ self.root, configFile=os.path.join(TESTDIR, "config/basic/butler.yaml")
536
+ )
537
+ self.enterContext(self.testRepo.butler)
538
+ self.runner = LogCliRunner()
539
+
540
+ def tearDown(self):
541
+ removeTestTempDir(self.root)
542
+
543
+ def test_no_confirm(self):
544
+ """Test that prune-datasets can execute with --no-confirm."""
545
+ result = self.runner.invoke(
546
+ butlerCli,
547
+ [
548
+ "prune-datasets",
549
+ "--no-confirm",
550
+ self.root,
551
+ "--purge",
552
+ "ingest/run",
553
+ "--where",
554
+ "instrument='DummyCamComp' and visit=423",
555
+ ],
556
+ )
557
+ self.assertEqual(result.exit_code, 0, clickResultMsg(result))
558
+ with Butler(self.root) as butler:
559
+ self.assertIsNone(butler.get_dataset(self.testRepo.ref1.id))
560
+ self.assertIsNotNone(butler.get_dataset(self.testRepo.ref2.id))
561
+
562
+ def test_confirm(self):
563
+ """Test that prune-datasets can execute with the default --confirm."""
564
+ result = self.runner.invoke(
565
+ butlerCli,
566
+ [
567
+ "prune-datasets",
568
+ self.root,
569
+ "--purge",
570
+ "ingest/run",
571
+ "--where",
572
+ "instrument='DummyCamComp' and visit=423",
573
+ ],
574
+ input="y\n",
575
+ )
576
+ self.assertEqual(result.exit_code, 0, clickResultMsg(result))
577
+ with Butler(self.root) as butler:
578
+ self.assertIsNone(butler.get_dataset(self.testRepo.ref1.id))
579
+ self.assertIsNotNone(butler.get_dataset(self.testRepo.ref2.id))
580
+
581
+
523
582
  if __name__ == "__main__":
524
583
  unittest.main()
@@ -176,10 +176,12 @@ class SplitKvCmdTestCase(unittest.TestCase):
176
176
  # double separator "==" should fail:
177
177
  result = self.runner.invoke(cli, ["--value", "first==1"])
178
178
  self.assertEqual(result.exit_code, 1)
179
+ # Check first 137 characters because python 3.14 adds more information
180
+ # to the error message.
179
181
  self.assertEqual(
180
- result.output,
182
+ result.output[:137],
181
183
  "Error: Could not parse key-value pair 'first==1' using separator '=', with "
182
- "multiple values allowed: too many values to unpack (expected 2)\n",
184
+ "multiple values allowed: too many values to unpack (expected 2",
183
185
  )
184
186
 
185
187
  def test_choice(self):
@@ -106,6 +106,24 @@ class ButlerLogRecordsFormatterTestCase(unittest.TestCase):
106
106
  self.assertEqual(records, handler.records)
107
107
  self.assertEqual(len(records), 2)
108
108
 
109
+ def testButlerLogRecordsFormatterEmptyExtra(self):
110
+ """Test that we can store extra information even with no log
111
+ records written.
112
+ """
113
+ handler = ButlerLogRecordHandler()
114
+
115
+ log = logging.getLogger(self.id())
116
+ log.setLevel(logging.INFO)
117
+ log.addHandler(handler)
118
+
119
+ extra_data = {"extra1": 1, "extra2": 2}
120
+ handler.records.extra = extra_data
121
+ ref = self.butler.put(handler.records, self.datasetType)
122
+ records = self.butler.get(ref)
123
+
124
+ self.assertEqual(records, handler.records)
125
+ self.assertEqual(len(records), 0)
126
+
109
127
  @unittest.skipIf(
110
128
  sys.version_info < (3, 12, 0),
111
129
  "This test requires NamedTemporaryFile behavior not available in older Python versions.",
@@ -205,6 +223,36 @@ class ButlerLogRecordsFormatterTestCase(unittest.TestCase):
205
223
  self.assertEqual(len(records), 2)
206
224
  self.assertEqual(records.extra, extra_data)
207
225
 
226
+ @unittest.skipIf(
227
+ sys.version_info < (3, 12, 0),
228
+ "This test requires NamedTemporaryFile behavior not available in older Python versions.",
229
+ )
230
+ def testJsonLogRecordsFormatterExtraEmpty(self):
231
+ """Test that externally created JSON format stream files work with
232
+ extra JSON data appended even if no log messages written.
233
+ """
234
+ log = logging.getLogger(self.id())
235
+ log.setLevel(logging.INFO)
236
+
237
+ with tempfile.NamedTemporaryFile(mode="w", suffix=".json", prefix="butler-log-") as tmp:
238
+ handler = FileHandler(tmp.name)
239
+ handler.setFormatter(JsonLogFormatter())
240
+ log.addHandler(handler)
241
+
242
+ handler.close()
243
+ extra_data = {"extra1": 1, "extra2": 2}
244
+ with open(tmp.name, "a") as stream:
245
+ ButlerLogRecords.write_streaming_extra(stream, json.dumps(extra_data))
246
+
247
+ # Now ingest the file.
248
+ ref = DatasetRef(self.datasetType, dataId={}, run=self.run)
249
+ dataset = FileDataset(path=tmp.name, refs=ref)
250
+ self.butler.ingest(dataset, transfer="move")
251
+
252
+ records: ButlerLogRecords = self.butler.get(ref)
253
+ self.assertEqual(len(records), 0)
254
+ self.assertEqual(records.extra, extra_data)
255
+
208
256
 
209
257
  if __name__ == "__main__":
210
258
  unittest.main()
@@ -1,2 +0,0 @@
1
- __all__ = ["__version__"]
2
- __version__ = "29.2025.4800"