lsst-daf-butler 29.0.1rc1__tar.gz → 29.1.0rc2__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 (436) hide show
  1. {lsst_daf_butler-29.0.1rc1/python/lsst_daf_butler.egg-info → lsst_daf_butler-29.1.0rc2}/PKG-INFO +1 -1
  2. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/doc/lsst.daf.butler/CHANGES.rst +16 -16
  3. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/doc/lsst.daf.butler/queries.rst +28 -8
  4. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/pyproject.toml +1 -1
  5. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/__init__.py +1 -0
  6. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_butler.py +57 -10
  7. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_butler_collections.py +4 -0
  8. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_butler_instance_options.py +3 -0
  9. lsst_daf_butler-29.1.0rc2/python/lsst/daf/butler/_butler_metrics.py +117 -0
  10. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_config.py +1 -1
  11. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_dataset_ref.py +99 -16
  12. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_file_dataset.py +78 -3
  13. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_limited_butler.py +34 -2
  14. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_quantum_backed.py +23 -4
  15. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/arrow_utils.py +7 -9
  16. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/cli/butler.py +1 -1
  17. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/cli/cmd/_remove_runs.py +2 -0
  18. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/cli/cmd/commands.py +25 -1
  19. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/cli/utils.py +32 -4
  20. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/column_spec.py +77 -34
  21. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/datastores/formatters.yaml +1 -0
  22. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/storageClasses.yaml +2 -0
  23. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastore/_datastore.py +30 -4
  24. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastore/generic_base.py +2 -2
  25. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastores/chainedDatastore.py +63 -92
  26. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastores/fileDatastore.py +371 -97
  27. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastores/inMemoryDatastore.py +33 -5
  28. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/_coordinate.py +4 -15
  29. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/_group.py +15 -5
  30. lsst_daf_butler-29.1.0rc2/python/lsst/daf/butler/dimensions/_record_set.py +950 -0
  31. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/_record_table.py +1 -1
  32. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/_records.py +127 -6
  33. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/_universe.py +12 -8
  34. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/record_cache.py +1 -2
  35. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/direct_butler/_direct_butler.py +406 -225
  36. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/direct_query_driver/_driver.py +30 -11
  37. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/direct_query_driver/_query_builder.py +74 -17
  38. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/direct_query_driver/_sql_column_visitor.py +28 -1
  39. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/pydantic_utils.py +26 -0
  40. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/_expression_strings.py +24 -0
  41. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/_identifiers.py +4 -1
  42. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/_query.py +48 -1
  43. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/expression_factory.py +16 -0
  44. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/overlaps.py +1 -1
  45. lsst_daf_butler-29.0.1rc1/python/lsst/daf/butler/direct_query_driver/_predicate_constraints_summary.py → lsst_daf_butler-29.1.0rc2/python/lsst/daf/butler/queries/predicate_constraints_summary.py +2 -2
  46. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/tree/_column_expression.py +39 -0
  47. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/tree/_column_set.py +1 -1
  48. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/tree/_predicate.py +19 -9
  49. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/bridge/ephemeral.py +16 -6
  50. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/bridge/monolithic.py +78 -37
  51. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/collections/_base.py +23 -6
  52. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/connectionString.py +5 -10
  53. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/databases/postgresql.py +50 -0
  54. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/databases/sqlite.py +46 -0
  55. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/datasets/byDimensions/_manager.py +77 -64
  56. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/datasets/byDimensions/summaries.py +4 -4
  57. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/dimensions/static.py +20 -8
  58. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/interfaces/_bridge.py +13 -1
  59. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/interfaces/_database.py +21 -0
  60. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/interfaces/_datasets.py +4 -16
  61. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/interfaces/_dimensions.py +7 -2
  62. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/_predicate.py +35 -19
  63. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/check.py +29 -10
  64. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/normalForm.py +15 -0
  65. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/parser/exprTree.py +136 -23
  66. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/parser/parserLex.py +10 -1
  67. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/parser/parserYacc.py +47 -24
  68. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/parser/treeVisitor.py +49 -10
  69. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/sql_registry.py +17 -45
  70. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/tests/_registry.py +60 -32
  71. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/_http_connection.py +15 -3
  72. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/_query_driver.py +5 -7
  73. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/_registry.py +3 -2
  74. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/_remote_butler.py +50 -27
  75. lsst_daf_butler-29.1.0rc2/python/lsst/daf/butler/remote_butler/server/_config.py +109 -0
  76. lsst_daf_butler-29.1.0rc2/python/lsst/daf/butler/remote_butler/server/_dependencies.py +124 -0
  77. lsst_daf_butler-29.1.0rc2/python/lsst/daf/butler/remote_butler/server/_gafaelfawr.py +125 -0
  78. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/server/_server.py +11 -4
  79. lsst_daf_butler-29.1.0rc2/python/lsst/daf/butler/remote_butler/server/_telemetry.py +105 -0
  80. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/server/handlers/_external.py +10 -2
  81. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/server/handlers/_query_serialization.py +5 -7
  82. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/server/handlers/_query_streaming.py +7 -3
  83. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/ingest_zip.py +13 -1
  84. lsst_daf_butler-29.1.0rc2/python/lsst/daf/butler/script/queryCollections.py +378 -0
  85. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/removeRuns.py +2 -5
  86. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/retrieveArtifacts.py +1 -0
  87. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/transferDatasets.py +5 -0
  88. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/butler_queries.py +236 -23
  89. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/cliCmdTestBase.py +1 -1
  90. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/hybrid_butler.py +37 -8
  91. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/hybrid_butler_registry.py +15 -2
  92. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/server.py +28 -3
  93. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/version.py +1 -1
  94. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2/python/lsst_daf_butler.egg-info}/PKG-INFO +1 -1
  95. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst_daf_butler.egg-info/SOURCES.txt +6 -1
  96. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_butler.py +197 -31
  97. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdQueryCollections.py +124 -1
  98. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliPluginLoader.py +1 -1
  99. lsst_daf_butler-29.1.0rc2/tests/test_column_spec.py +95 -0
  100. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_config.py +3 -3
  101. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_connectionString.py +4 -13
  102. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_datasets.py +45 -0
  103. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_datastore.py +37 -0
  104. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_dimension_record_containers.py +121 -6
  105. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_dimensions.py +10 -0
  106. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_exprParserLex.py +23 -0
  107. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_exprParserYacc.py +137 -10
  108. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_expressions.py +12 -5
  109. lsst_daf_butler-29.1.0rc2/tests/test_gafaelfawr.py +104 -0
  110. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_normalFormExpression.py +21 -1
  111. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_pydantic_utils.py +22 -1
  112. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_quantumBackedButler.py +18 -3
  113. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_query_interface.py +39 -3
  114. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_query_utilities.py +1 -1
  115. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_remote_butler.py +5 -0
  116. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_server.py +41 -6
  117. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_simpleButler.py +19 -1
  118. lsst_daf_butler-29.0.1rc1/python/lsst/daf/butler/dimensions/_record_set.py +0 -485
  119. lsst_daf_butler-29.0.1rc1/python/lsst/daf/butler/remote_butler/server/_config.py +0 -54
  120. lsst_daf_butler-29.0.1rc1/python/lsst/daf/butler/remote_butler/server/_dependencies.py +0 -59
  121. lsst_daf_butler-29.0.1rc1/python/lsst/daf/butler/script/queryCollections.py +0 -222
  122. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/COPYRIGHT +0 -0
  123. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/LICENSE +0 -0
  124. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/MANIFEST.in +0 -0
  125. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/README.md +0 -0
  126. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/bsd_license.txt +0 -0
  127. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/doc/lsst.daf.butler/concreteStorageClasses.rst +0 -0
  128. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/doc/lsst.daf.butler/configuring.rst +0 -0
  129. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/doc/lsst.daf.butler/datastores.rst +0 -0
  130. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/doc/lsst.daf.butler/dimensions.rst +0 -0
  131. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/doc/lsst.daf.butler/formatters.rst +0 -0
  132. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/doc/lsst.daf.butler/index.rst +0 -0
  133. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/doc/lsst.daf.butler/organizing.rst +0 -0
  134. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/doc/lsst.daf.butler/use-in-tests.rst +0 -0
  135. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/doc/lsst.daf.butler/writing-subcommands.rst +0 -0
  136. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/gpl-v3.0.txt +0 -0
  137. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/__init__.py +0 -0
  138. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/__init__.py +0 -0
  139. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_butler_config.py +0 -0
  140. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_butler_repo_index.py +0 -0
  141. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_collection_type.py +0 -0
  142. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_column_categorization.py +0 -0
  143. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_column_tags.py +0 -0
  144. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_column_type_info.py +0 -0
  145. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_config_support.py +0 -0
  146. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_dataset_association.py +0 -0
  147. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_dataset_existence.py +0 -0
  148. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_dataset_provenance.py +0 -0
  149. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_dataset_type.py +0 -0
  150. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_deferredDatasetHandle.py +0 -0
  151. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_exceptions.py +0 -0
  152. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_exceptions_legacy.py +0 -0
  153. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_file_descriptor.py +0 -0
  154. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_formatter.py +0 -0
  155. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_labeled_butler_factory.py +0 -0
  156. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_location.py +0 -0
  157. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_named.py +0 -0
  158. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_quantum.py +0 -0
  159. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_query_all_datasets.py +0 -0
  160. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_registry_shim.py +0 -0
  161. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_storage_class.py +0 -0
  162. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_storage_class_delegate.py +0 -0
  163. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_timespan.py +0 -0
  164. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_topology.py +0 -0
  165. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_utilities/__init__.py +0 -0
  166. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_utilities/locked_object.py +0 -0
  167. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_utilities/named_locks.py +0 -0
  168. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/_utilities/thread_safe_cache.py +0 -0
  169. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/cli/__init__.py +0 -0
  170. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/cli/cliLog.py +0 -0
  171. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/cli/cmd/__init__.py +0 -0
  172. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/cli/cmd/_remove_collections.py +0 -0
  173. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/cli/opt/__init__.py +0 -0
  174. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/cli/opt/arguments.py +0 -0
  175. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/cli/opt/optionGroups.py +0 -0
  176. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/cli/opt/options.py +0 -0
  177. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/cli/progress.py +0 -0
  178. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/datastore.yaml +0 -0
  179. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/datastores/composites.yaml +0 -0
  180. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/datastores/fileDatastore.yaml +0 -0
  181. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/datastores/writeRecipes.yaml +0 -0
  182. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/dimensions.yaml +0 -0
  183. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe0.yaml +0 -0
  184. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe1.yaml +0 -0
  185. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe2.yaml +0 -0
  186. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe3.yaml +0 -0
  187. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe4.yaml +0 -0
  188. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe5.yaml +0 -0
  189. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe6.yaml +0 -0
  190. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/old_dimensions/daf_butler_universe7.yaml +0 -0
  191. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/registry.yaml +0 -0
  192. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/configs/repo_transfer_formats.yaml +0 -0
  193. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastore/__init__.py +0 -0
  194. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastore/cache_manager.py +0 -0
  195. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastore/composites.py +0 -0
  196. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastore/constraints.py +0 -0
  197. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastore/file_templates.py +0 -0
  198. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastore/record_data.py +0 -0
  199. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastore/stored_file_info.py +0 -0
  200. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastores/__init__.py +0 -0
  201. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastores/fileDatastoreClient.py +0 -0
  202. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastores/file_datastore/__init__.py +0 -0
  203. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastores/file_datastore/get.py +0 -0
  204. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/datastores/file_datastore/retrieve_artifacts.py +0 -0
  205. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/ddl.py +0 -0
  206. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/delegates/__init__.py +0 -0
  207. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/delegates/arrowtable.py +0 -0
  208. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/__init__.py +0 -0
  209. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/_config.py +0 -0
  210. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/_data_coordinate_iterable.py +0 -0
  211. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/_database.py +0 -0
  212. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/_elements.py +0 -0
  213. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/_governor.py +0 -0
  214. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/_packer.py +0 -0
  215. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/_schema.py +0 -0
  216. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/_skypix.py +0 -0
  217. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/dimensions/construction.py +0 -0
  218. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/direct_butler/__init__.py +0 -0
  219. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/direct_butler/_direct_butler_collections.py +0 -0
  220. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/direct_query_driver/__init__.py +0 -0
  221. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/direct_query_driver/_postprocessing.py +0 -0
  222. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/direct_query_driver/_query_analysis.py +0 -0
  223. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/direct_query_driver/_result_page_converter.py +0 -0
  224. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/direct_query_driver/_sql_builders.py +0 -0
  225. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/formatters/__init__.py +0 -0
  226. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/formatters/astropyTable.py +0 -0
  227. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/formatters/file.py +0 -0
  228. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/formatters/json.py +0 -0
  229. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/formatters/logs.py +0 -0
  230. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/formatters/matplotlib.py +0 -0
  231. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/formatters/packages.py +0 -0
  232. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/formatters/parquet.py +0 -0
  233. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/formatters/pickle.py +0 -0
  234. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/formatters/typeless.py +0 -0
  235. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/formatters/yaml.py +0 -0
  236. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/json.py +0 -0
  237. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/logging.py +0 -0
  238. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/mapping_factory.py +0 -0
  239. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/name_shrinker.py +0 -0
  240. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/nonempty_mapping.py +0 -0
  241. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/persistence_context.py +0 -0
  242. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/progress.py +0 -0
  243. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/py.typed +0 -0
  244. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/__init__.py +0 -0
  245. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/_base.py +0 -0
  246. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/_data_coordinate_query_results.py +0 -0
  247. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/_dataset_query_results.py +0 -0
  248. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/_dimension_record_query_results.py +0 -0
  249. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/_general_query_results.py +0 -0
  250. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/convert_args.py +0 -0
  251. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/driver.py +0 -0
  252. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/result_specs.py +0 -0
  253. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/tree/__init__.py +0 -0
  254. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/tree/_base.py +0 -0
  255. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/tree/_column_literal.py +0 -0
  256. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/tree/_column_reference.py +0 -0
  257. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/tree/_query_tree.py +0 -0
  258. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/queries/visitors.py +0 -0
  259. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/__init__.py +0 -0
  260. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/_caching_context.py +0 -0
  261. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/_collection_record_cache.py +0 -0
  262. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/_collection_summary.py +0 -0
  263. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/_collection_summary_cache.py +0 -0
  264. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/_config.py +0 -0
  265. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/_defaults.py +0 -0
  266. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/_exceptions.py +0 -0
  267. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/_registry.py +0 -0
  268. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/_registry_factory.py +0 -0
  269. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/attributes.py +0 -0
  270. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/bridge/__init__.py +0 -0
  271. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/collections/__init__.py +0 -0
  272. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/collections/nameKey.py +0 -0
  273. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/collections/synthIntKey.py +0 -0
  274. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/databases/__init__.py +0 -0
  275. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/datasets/__init__.py +0 -0
  276. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/datasets/byDimensions/__init__.py +0 -0
  277. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/datasets/byDimensions/_dataset_type_cache.py +0 -0
  278. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/datasets/byDimensions/tables.py +0 -0
  279. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/dimensions/__init__.py +0 -0
  280. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/interfaces/__init__.py +0 -0
  281. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/interfaces/_attributes.py +0 -0
  282. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/interfaces/_collections.py +0 -0
  283. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/interfaces/_database_explain.py +0 -0
  284. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/interfaces/_obscore.py +0 -0
  285. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/interfaces/_opaque.py +0 -0
  286. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/interfaces/_versioning.py +0 -0
  287. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/managers.py +0 -0
  288. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/nameShrinker.py +0 -0
  289. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/obscore/__init__.py +0 -0
  290. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/obscore/_config.py +0 -0
  291. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/obscore/_manager.py +0 -0
  292. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/obscore/_records.py +0 -0
  293. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/obscore/_schema.py +0 -0
  294. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/obscore/_spatial.py +0 -0
  295. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/obscore/default_spatial.py +0 -0
  296. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/obscore/pgsphere.py +0 -0
  297. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/opaque.py +0 -0
  298. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/__init__.py +0 -0
  299. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/_builder.py +0 -0
  300. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/_query.py +0 -0
  301. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/_query_backend.py +0 -0
  302. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/_query_context.py +0 -0
  303. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/_readers.py +0 -0
  304. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/_results.py +0 -0
  305. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/_sql_query_backend.py +0 -0
  306. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/_sql_query_context.py +0 -0
  307. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/_structs.py +0 -0
  308. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/butler_sql_engine.py +0 -0
  309. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/__init__.py +0 -0
  310. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/categorize.py +0 -0
  311. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/parser/__init__.py +0 -0
  312. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/parser/parser.py +0 -0
  313. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/__init__.py +0 -0
  314. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/lex.py +0 -0
  315. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/expressions/parser/ply/yacc.py +0 -0
  316. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/queries/find_first_dataset.py +0 -0
  317. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/tests/__init__.py +0 -0
  318. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/tests/_database.py +0 -0
  319. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/versions.py +0 -0
  320. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/registry/wildcards.py +0 -0
  321. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/__init__.py +0 -0
  322. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/_authentication.py +0 -0
  323. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/_collection_args.py +0 -0
  324. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/_config.py +0 -0
  325. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/_defaults.py +0 -0
  326. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/_errors.py +0 -0
  327. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/_factory.py +0 -0
  328. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/_query_results.py +0 -0
  329. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/_ref_utils.py +0 -0
  330. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/_remote_butler_collections.py +0 -0
  331. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/registry/__init__.py +0 -0
  332. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/registry/_query_common.py +0 -0
  333. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/registry/_query_data_coordinates.py +0 -0
  334. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/registry/_query_datasets.py +0 -0
  335. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/registry/_query_dimension_records.py +0 -0
  336. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/server/__init__.py +0 -0
  337. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/server/_factory.py +0 -0
  338. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/server/handlers/_external_query.py +0 -0
  339. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/server/handlers/_internal.py +0 -0
  340. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/server/handlers/_utils.py +0 -0
  341. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/remote_butler/server_models.py +0 -0
  342. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/repo_relocation.py +0 -0
  343. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/__init__.py +0 -0
  344. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/_associate.py +0 -0
  345. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/_pruneDatasets.py +0 -0
  346. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/butlerImport.py +0 -0
  347. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/certifyCalibrations.py +0 -0
  348. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/collectionChain.py +0 -0
  349. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/configDump.py +0 -0
  350. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/configValidate.py +0 -0
  351. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/createRepo.py +0 -0
  352. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/exportCalibs.py +0 -0
  353. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/ingest_files.py +0 -0
  354. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/queryDataIds.py +0 -0
  355. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/queryDatasetTypes.py +0 -0
  356. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/queryDatasets.py +0 -0
  357. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/queryDimensionRecords.py +0 -0
  358. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/register_dataset_type.py +0 -0
  359. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/removeCollections.py +0 -0
  360. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/script/removeDatasetType.py +0 -0
  361. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/__init__.py +0 -0
  362. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/_datasetsHelper.py +0 -0
  363. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/_dummyRegistry.py +0 -0
  364. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/_examplePythonTypes.py +0 -0
  365. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/_testRepo.py +0 -0
  366. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/cliLogTestBase.py +0 -0
  367. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/deferredFormatter.py +0 -0
  368. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/dict_convertible_model.py +0 -0
  369. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/hybrid_butler_collections.py +0 -0
  370. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/postgresql.py +0 -0
  371. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/server_utils.py +0 -0
  372. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/testFormatters.py +0 -0
  373. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/tests/utils.py +0 -0
  374. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/time_utils.py +0 -0
  375. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/timespan_database_representation.py +0 -0
  376. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/transfers/__init__.py +0 -0
  377. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/transfers/_context.py +0 -0
  378. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/transfers/_interfaces.py +0 -0
  379. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/transfers/_yaml.py +0 -0
  380. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst/daf/butler/utils.py +0 -0
  381. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst_daf_butler.egg-info/dependency_links.txt +0 -0
  382. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst_daf_butler.egg-info/entry_points.txt +0 -0
  383. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst_daf_butler.egg-info/requires.txt +0 -0
  384. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst_daf_butler.egg-info/top_level.txt +0 -0
  385. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/python/lsst_daf_butler.egg-info/zip-safe +0 -0
  386. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/setup.cfg +0 -0
  387. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_astropyTableFormatter.py +0 -0
  388. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_authentication.py +0 -0
  389. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_butler_factory.py +0 -0
  390. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdAssociate.py +0 -0
  391. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdConfigDump.py +0 -0
  392. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdConfigValidate.py +0 -0
  393. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdCreate.py +0 -0
  394. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdImport.py +0 -0
  395. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdIngestFiles.py +0 -0
  396. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdPruneDatasets.py +0 -0
  397. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdQueryDataIds.py +0 -0
  398. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdQueryDatasetTypes.py +0 -0
  399. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdQueryDatasets.py +0 -0
  400. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdQueryDimensionRecords.py +0 -0
  401. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdRemoveCollections.py +0 -0
  402. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdRemoveRuns.py +0 -0
  403. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliCmdRetrieveArtifacts.py +0 -0
  404. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliLog.py +0 -0
  405. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliUtilSplitCommas.py +0 -0
  406. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliUtilSplitKv.py +0 -0
  407. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliUtilToUpper.py +0 -0
  408. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_cliUtils.py +0 -0
  409. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_composites.py +0 -0
  410. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_constraints.py +0 -0
  411. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_ddl.py +0 -0
  412. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_formatter.py +0 -0
  413. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_location.py +0 -0
  414. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_logFormatter.py +0 -0
  415. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_logging.py +0 -0
  416. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_matplotlibFormatter.py +0 -0
  417. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_nonempty_mapping.py +0 -0
  418. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_obscore.py +0 -0
  419. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_packages.py +0 -0
  420. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_parquet.py +0 -0
  421. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_postgresql.py +0 -0
  422. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_progress.py +0 -0
  423. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_quantum.py +0 -0
  424. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_query_direct_postgresql.py +0 -0
  425. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_query_direct_sqlite.py +0 -0
  426. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_query_relations.py +0 -0
  427. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_query_remote.py +0 -0
  428. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_sqlite.py +0 -0
  429. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_storageClass.py +0 -0
  430. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_templates.py +0 -0
  431. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_testRepo.py +0 -0
  432. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_thread_utils.py +0 -0
  433. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_time_utils.py +0 -0
  434. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_timespan.py +0 -0
  435. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/tests/test_utils.py +0 -0
  436. {lsst_daf_butler-29.0.1rc1 → lsst_daf_butler-29.1.0rc2}/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.0.1rc1
3
+ Version: 29.1.0rc2
4
4
  Summary: An abstraction layer for reading and writing astronomical data to datastores.
5
5
  Author-email: Rubin Observatory Data Management <dm-admin@lists.lsst.org>
6
6
  License: BSD 3-Clause License
@@ -1,5 +1,5 @@
1
- Butler v29.0.0 2025-03-25
2
- =========================
1
+ Butler v29.0.0 (2025-03-25)
2
+ ===========================
3
3
 
4
4
  New Features
5
5
  ------------
@@ -66,8 +66,8 @@ Other Changes and Additions
66
66
  This is important for butler repositories containing data from multiple instruments and facilities. (`DM-46914 <https://rubinobs.atlassian.net/browse/DM-46914>`_)
67
67
 
68
68
 
69
- Butler v28.0.0 2024-11-20
70
- =========================
69
+ Butler v28.0.0 (2024-11-20)
70
+ ===========================
71
71
 
72
72
  New Features
73
73
  ------------
@@ -203,8 +203,8 @@ An API Removal or Deprecation
203
203
  Using ``Butler.collections`` to get the list of default collections is now deprecated. Use ``Butler.collections.defaults`` instead. (`DM-46599 <https://rubinobs.atlassian.net/browse/DM-46599>`_)
204
204
 
205
205
 
206
- Butler 27.0.0 2024-05-28
207
- ========================
206
+ Butler 27.0.0 (2024-05-28)
207
+ ==========================
208
208
 
209
209
  Now supports Python 3.12.
210
210
 
@@ -364,8 +364,8 @@ An API Removal or Deprecation
364
364
  * Removed the ``reconsitutedDimension`` parameter from ``Quantum.from_simple``. (`DM-40150 <https://rubinobs.atlassian.net/browse/DM-40150>`_)
365
365
 
366
366
 
367
- Butler v26.0.0 2023-09-22
368
- =========================
367
+ Butler v26.0.0 (2023-09-22)
368
+ ===========================
369
369
 
370
370
  Now supports Python 3.11.
371
371
 
@@ -543,8 +543,8 @@ An API Removal or Deprecation
543
543
  - ``lsst.daf.butler.registry.DbAuth`` class has been moved to the ``lsst-utils`` package and can be imported from the ``lsst.utils.db_auth`` module. (`DM-40462 <https://rubinobs.atlassian.net/browse/DM-40462>`_)
544
544
 
545
545
 
546
- Butler v25.0.0 2023-02-27
547
- =========================
546
+ Butler v25.0.0 (2023-02-27)
547
+ ===========================
548
548
 
549
549
  This is the last release that can access data repositories using integer dataset IDs.
550
550
  Please either recreate these repositories or convert them to use UUIDs using `the butler migrate tooling <https://github.com/lsst-dm/daf_butler_migrate>`_.
@@ -638,8 +638,8 @@ An API Removal or Deprecation
638
638
  - Removed deprecated filterLabel exposure component access. (`DM-27811 <https://rubinobs.atlassian.net/browse/DM-27811>`_)
639
639
 
640
640
 
641
- Butler v24.0.0 2022-08-26
642
- =========================
641
+ Butler v24.0.0 (2022-08-26)
642
+ ===========================
643
643
 
644
644
  New Features
645
645
  ------------
@@ -763,8 +763,8 @@ An API Removal or Deprecation
763
763
  It functions identically to the ``filterLabel`` component, which has been deprecated. (`DM-27177 <https://rubinobs.atlassian.net/browse/DM-27177>`_)
764
764
 
765
765
 
766
- Butler v23.0.0 2021-12-10
767
- =========================
766
+ Butler v23.0.0 (2021-12-10)
767
+ ===========================
768
768
 
769
769
  New Features
770
770
  ------------
@@ -865,8 +865,8 @@ Other Changes and Additions
865
865
  - Add ``split`` transfer mode that can be used when some files are inside the datastore and some files are outside the datastore.
866
866
  This is equivalent to using `None` and ``direct`` mode dynamically. (`DM-31251 <https://rubinobs.atlassian.net/browse/DM-31251>`_)
867
867
 
868
- Butler v22.0 2021-04-01
869
- =======================
868
+ Butler v22.0 (2021-04-01)
869
+ =========================
870
870
 
871
871
  New Features
872
872
  ------------
@@ -136,6 +136,16 @@ Time literals
136
136
  time scale. For detailed description of supported time specification
137
137
  check section :ref:`time-literals-syntax`.
138
138
 
139
+ UUID literals
140
+ UUID values are produced by ``UUID()`` function which accepts a string
141
+ representation of the UUID. The string can have any format acceptable
142
+ by Python ``uuid.UUID()`` method.
143
+
144
+ Examples:
145
+
146
+ - ``UUID('12345678-1234-5678-1234-567812345678')``
147
+ - ``UUID('12345678123456781234567812345678')``
148
+
139
149
  Range literals
140
150
  This sort of literal is allowed inside ``IN`` expressions only. It consists
141
151
  of two integer literals separated by double dots and optionally followed by
@@ -167,6 +177,8 @@ filter query results based on that property of datasets.
167
177
 
168
178
  Registry methods accepting user expressions also accept a ``bind`` parameter, which is a mapping from identifier name to its corresponding value.
169
179
  Identifiers appearing in user expressions will be replaced with the corresponding value from this mapping.
180
+ Bind identifiers in expressions are specified with a preceding colon (e.g. ``:id``).
181
+ The legacy format where bind identifiers can be specified without a colon is still supported, but discouraged, and will be deprecated and removed in the future.
170
182
  Using the ``bind`` parameter is encouraged when possible to simplify rendering of the query strings.
171
183
  A partial example of comparing two approaches, without and with ``bind``:
172
184
 
@@ -186,7 +198,7 @@ A partial example of comparing two approaches, without and with ``bind``:
186
198
  # Same functionality using bind parameter
187
199
  result = butler.query_datasets(
188
200
  dataset_type,
189
- where="instrument = instrument_name AND visit = visit_id",
201
+ where="instrument = :instrument_name AND visit = :visit_id",
190
202
  bind={"instrument_name": instrument_name, "visit_id": visit_id},
191
203
  )
192
204
 
@@ -201,7 +213,7 @@ An example of this feature:
201
213
  visit_ids = (12345, 12346, 12350)
202
214
  result = butler.query_datasets(
203
215
  dataset_type,
204
- where="instrument = instrument_name AND visit IN (visit_ids)",
216
+ where="instrument = :instrument_name AND visit IN (:visit_ids)",
205
217
  bind={"instrument_name": instrument_name, "visit_ids": visit_ids},
206
218
  )
207
219
 
@@ -227,7 +239,7 @@ Comparison operators
227
239
 
228
240
  Language supports set of regular comparison operators: ``=``, ``!=``, ``<``,
229
241
  ``<=``, ``>``, ``>=``. This can be used on operands that evaluate to a numeric
230
- values or timestamps.
242
+ values, timestamps, or strings.
231
243
 
232
244
  .. note :: The equality comparison operator is a single ``=`` like in SQL, not
233
245
  double ``==`` like in Python or C++.
@@ -270,7 +282,7 @@ as are these:
270
282
 
271
283
  Another usage of ``IN`` operator is for checking whether a timestamp or a time
272
284
  range is contained wholly in other time range. Time range in this case can be
273
- specified as a tuple of two time literals or identifers each representing a
285
+ specified as a tuple of two time literals or identifiers each representing a
274
286
  timestamp, or as a single identifier representing a time range. In case a
275
287
  single identifier appears on the right side of ``IN`` it has to be enclosed
276
288
  in parentheses.
@@ -350,11 +362,17 @@ Function call
350
362
  Function call syntax is similar to other languages, expression for call
351
363
  consists of an identifier followed by zero or more comma-separated arguments
352
364
  enclosed in parentheses (e.g. ``func(1, 2, 3)``). An argument to a function
353
- can be any expression.
365
+ can be any expression. Names of the functions are not case-sensitive.
366
+
367
+ Presently the following functions are implemented in the query language:
354
368
 
355
- Presently there only one construct that uses this syntax, ``POINT(ra, dec)``
356
- is function which declares (or returns) sky coordinates similarly to ADQL
357
- syntax. Name of the ``POINT`` function is not case-sensitive.
369
+ - ``POINT(ra, dec)`` - function which declares (or returns) sky coordinates
370
+ similarly to ADQL syntax.
371
+ - ``GLOB(expression, pattern)`` - performs case-sensitive match of a string
372
+ ``expression`` against ``pattern``. Pattern can include ``*`` and ``?``
373
+ meta-characters, matching any number of characters or a single character
374
+ respectfully. All other characters in pattern are matched literally, and
375
+ whole expression string has to match for ``GLOB()`` to return ``True``.
358
376
 
359
377
 
360
378
  .. _time-literals-syntax:
@@ -434,6 +452,8 @@ Few examples of valid expressions using some of the constructs:
434
452
 
435
453
  ingest_date < T'2020-11-06 21:10:00'
436
454
 
455
+ flat.dataset_id = UUID('e15ab039-bc8b-4135-87c5-90902a7c0b22')
456
+
437
457
 
438
458
  .. _daf_butler_query_ordering:
439
459
 
@@ -91,7 +91,7 @@ butler = "lsst.daf.butler.cli.butler:main"
91
91
  package_dir = "python"
92
92
  filename = "doc/lsst.daf.butler/CHANGES.rst"
93
93
  directory = "doc/changes"
94
- title_format = "Butler {version} {project_date}"
94
+ title_format = "Butler {version} ({project_date})"
95
95
  issue_format = "`{issue} <https://rubinobs.atlassian.net/browse/{issue}>`_"
96
96
 
97
97
  [[tool.towncrier.type]]
@@ -38,6 +38,7 @@ from . import ddl, time_utils
38
38
  from ._butler import *
39
39
  from ._butler_collections import *
40
40
  from ._butler_config import *
41
+ from ._butler_metrics import *
41
42
  from ._butler_repo_index import *
42
43
  from ._collection_type import CollectionType
43
44
  from ._column_categorization import *
@@ -46,6 +46,7 @@ from lsst.utils.logging import getLogger
46
46
  from ._butler_collections import ButlerCollections
47
47
  from ._butler_config import ButlerConfig, ButlerType
48
48
  from ._butler_instance_options import ButlerInstanceOptions
49
+ from ._butler_metrics import ButlerMetrics
49
50
  from ._butler_repo_index import ButlerRepoIndex
50
51
  from ._config import Config, ConfigSubset
51
52
  from ._exceptions import EmptyQueryResultError, InvalidQueryError
@@ -89,6 +90,10 @@ class SpecificButlerDataset:
89
90
  dataset: DatasetRef | None
90
91
 
91
92
 
93
+ class _DeprecatedDefault:
94
+ """Default value for a deprecated parameter."""
95
+
96
+
92
97
  class Butler(LimitedButler): # numpydoc ignore=PR02
93
98
  """Interface for data butler and factory for Butler instances.
94
99
 
@@ -154,6 +159,7 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
154
159
  writeable: bool | None = None,
155
160
  inferDefaults: bool = True,
156
161
  without_datastore: bool = False,
162
+ metrics: ButlerMetrics | None = None,
157
163
  **kwargs: Any,
158
164
  ) -> Butler:
159
165
  if cls is Butler:
@@ -165,6 +171,7 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
165
171
  writeable=writeable,
166
172
  inferDefaults=inferDefaults,
167
173
  without_datastore=without_datastore,
174
+ metrics=metrics,
168
175
  **kwargs,
169
176
  )
170
177
 
@@ -183,6 +190,7 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
183
190
  writeable: bool | None = None,
184
191
  inferDefaults: bool = True,
185
192
  without_datastore: bool = False,
193
+ metrics: ButlerMetrics | None = None,
186
194
  **kwargs: Any,
187
195
  ) -> Butler:
188
196
  """Create butler instance from configuration.
@@ -230,6 +238,8 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
230
238
  without_datastore : `bool`, optional
231
239
  If `True` do not attach a datastore to this butler. Any attempts
232
240
  to use a datastore will fail.
241
+ metrics : `ButlerMetrics` or `None`, optional
242
+ Metrics object to record butler usage statistics.
233
243
  **kwargs : `Any`
234
244
  Default data ID key-value pairs. These may only identify
235
245
  "governor" dimensions like ``instrument`` and ``skymap``.
@@ -300,6 +310,7 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
300
310
  # passing the "butler" parameter to its constructor. This has
301
311
  # been moved out of the constructor into Butler.clone().
302
312
  butler = kwargs.pop("butler", None)
313
+ metrics = metrics if metrics is not None else ButlerMetrics()
303
314
  if butler is not None:
304
315
  if not isinstance(butler, Butler):
305
316
  raise TypeError("'butler' parameter must be a Butler instance")
@@ -307,10 +318,17 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
307
318
  raise TypeError(
308
319
  "Cannot pass 'config', 'searchPaths', or 'writeable' arguments with 'butler' argument."
309
320
  )
310
- return butler.clone(collections=collections, run=run, inferDefaults=inferDefaults, dataId=kwargs)
321
+ return butler.clone(
322
+ collections=collections, run=run, inferDefaults=inferDefaults, metrics=metrics, dataId=kwargs
323
+ )
311
324
 
312
325
  options = ButlerInstanceOptions(
313
- collections=collections, run=run, writeable=writeable, inferDefaults=inferDefaults, kwargs=kwargs
326
+ collections=collections,
327
+ run=run,
328
+ writeable=writeable,
329
+ inferDefaults=inferDefaults,
330
+ metrics=metrics,
331
+ kwargs=kwargs,
314
332
  )
315
333
 
316
334
  # Load the Butler configuration. This may involve searching the
@@ -1274,7 +1292,13 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
1274
1292
  raise NotImplementedError()
1275
1293
 
1276
1294
  @abstractmethod
1277
- def removeRuns(self, names: Iterable[str], unstore: bool = True) -> None:
1295
+ def removeRuns(
1296
+ self,
1297
+ names: Iterable[str],
1298
+ unstore: bool | type[_DeprecatedDefault] = _DeprecatedDefault,
1299
+ *,
1300
+ unlink_from_chains: bool = False,
1301
+ ) -> None:
1278
1302
  """Remove one or more `~CollectionType.RUN` collections and the
1279
1303
  datasets within them.
1280
1304
 
@@ -1287,7 +1311,13 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
1287
1311
  they are present, and attempt to rollback the registry deletions if
1288
1312
  datastore deletions fail (which may not always be possible). If
1289
1313
  `False`, datastore records for these datasets are still removed,
1290
- but any artifacts (e.g. files) will not be.
1314
+ but any artifacts (e.g. files) will not be. This parameter is now
1315
+ deprecated and no longer has any effect. Files are always deleted
1316
+ from datastores unless they were ingested using full URIs.
1317
+ unlink_from_chains : `bool`, optional
1318
+ If `True` remove the RUN collection from any chains prior to
1319
+ removing the RUN. If `False` the removal will fail if any chains
1320
+ still refer to the RUN.
1291
1321
 
1292
1322
  Raises
1293
1323
  ------
@@ -1360,7 +1390,14 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
1360
1390
  raise NotImplementedError()
1361
1391
 
1362
1392
  @abstractmethod
1363
- def ingest_zip(self, zip_file: ResourcePathExpression, transfer: str = "auto") -> None:
1393
+ def ingest_zip(
1394
+ self,
1395
+ zip_file: ResourcePathExpression,
1396
+ transfer: str = "auto",
1397
+ *,
1398
+ transfer_dimensions: bool = False,
1399
+ dry_run: bool = False,
1400
+ ) -> None:
1364
1401
  """Ingest a Zip file into this butler.
1365
1402
 
1366
1403
  The Zip file must have been created by `retrieve_artifacts_zip`.
@@ -1371,10 +1408,17 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
1371
1408
  Path to the Zip file.
1372
1409
  transfer : `str`, optional
1373
1410
  Method to use to transfer the Zip into the datastore.
1411
+ transfer_dimensions : `bool`, optional
1412
+ If `True`, dimension record data associated with the new datasets
1413
+ will be transferred from the Zip file, if present.
1414
+ dry_run : `bool`, optional
1415
+ If `True` the ingest will be processed without any modifications
1416
+ made to the target butler and as if the target butler did not
1417
+ have any of the datasets.
1374
1418
 
1375
1419
  Notes
1376
1420
  -----
1377
- Run collections are created as needed.
1421
+ Run collections and dataset types are created as needed.
1378
1422
  """
1379
1423
  raise NotImplementedError()
1380
1424
 
@@ -1741,8 +1785,8 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
1741
1785
  warn_limit = True
1742
1786
  with self.query() as query:
1743
1787
  result = (
1744
- query.where(data_id, where, bind=bind, **kwargs)
1745
- .data_ids(dimensions)
1788
+ query.data_ids(dimensions)
1789
+ .where(data_id, where, bind=bind, **kwargs)
1746
1790
  .order_by(*ensure_iterable(order_by))
1747
1791
  .limit(query_limit)
1748
1792
  )
@@ -1979,8 +2023,8 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
1979
2023
  warn_limit = True
1980
2024
  with self.query() as query:
1981
2025
  result = (
1982
- query.where(data_id, where, bind=bind, **kwargs)
1983
- .dimension_records(element)
2026
+ query.dimension_records(element)
2027
+ .where(data_id, where, bind=bind, **kwargs)
1984
2028
  .order_by(*ensure_iterable(order_by))
1985
2029
  .limit(query_limit)
1986
2030
  )
@@ -2123,6 +2167,7 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
2123
2167
  run: str | None | EllipsisType = ...,
2124
2168
  inferDefaults: bool | EllipsisType = ...,
2125
2169
  dataId: dict[str, str] | EllipsisType = ...,
2170
+ metrics: ButlerMetrics | None = None,
2126
2171
  ) -> Butler:
2127
2172
  """Return a new Butler instance connected to the same repository
2128
2173
  as this one, optionally overriding ``collections``, ``run``,
@@ -2142,5 +2187,7 @@ class Butler(LimitedButler): # numpydoc ignore=PR02
2142
2187
  dataId : `str`
2143
2188
  Same as ``kwargs`` passed to the constructor. If omitted, copies
2144
2189
  values from original object.
2190
+ metrics : `ButlerMetrics` or `None`, optional
2191
+ Metrics object to record butler statistics.
2145
2192
  """
2146
2193
  raise NotImplementedError()
@@ -108,6 +108,10 @@ class ButlerCollections(ABC, Sequence):
108
108
  """Collection defaults associated with this butler."""
109
109
  raise NotImplementedError("Defaults must be implemented by a subclass")
110
110
 
111
+ def __str__(self) -> str:
112
+ """Return string representation."""
113
+ return f"{self.__class__.__name__}(defaults={self.defaults})"
114
+
111
115
  @abstractmethod
112
116
  def extend_chain(self, parent_collection_name: str, child_collection_names: str | Iterable[str]) -> None:
113
117
  """Add children to the end of a CHAINED collection.
@@ -30,6 +30,8 @@ __all__ = ("ButlerInstanceOptions",)
30
30
  import dataclasses
31
31
  from typing import Any
32
32
 
33
+ from ._butler_metrics import ButlerMetrics
34
+
33
35
 
34
36
  @dataclasses.dataclass(frozen=True)
35
37
  class ButlerInstanceOptions:
@@ -43,4 +45,5 @@ class ButlerInstanceOptions:
43
45
  run: str | None = None
44
46
  writeable: bool | None = None
45
47
  inferDefaults: bool = True
48
+ metrics: ButlerMetrics = dataclasses.field(default_factory=ButlerMetrics)
46
49
  kwargs: dict[str, Any] = dataclasses.field(default_factory=dict)
@@ -0,0 +1,117 @@
1
+ # This file is part of daf_butler.
2
+ #
3
+ # Developed for the LSST Data Management System.
4
+ # This product includes software developed by the LSST Project
5
+ # (http://www.lsst.org).
6
+ # See the COPYRIGHT file at the top-level directory of this distribution
7
+ # for details of code ownership.
8
+ #
9
+ # This software is dual licensed under the GNU General Public License and also
10
+ # under a 3-clause BSD license. Recipients may choose which of these licenses
11
+ # to use; please see the files gpl-3.0.txt and/or bsd_license.txt,
12
+ # respectively. If you choose the GPL option then the following text applies
13
+ # (but note that there is still no warranty even if you opt for BSD instead):
14
+ #
15
+ # This program is free software: you can redistribute it and/or modify
16
+ # it under the terms of the GNU General Public License as published by
17
+ # the Free Software Foundation, either version 3 of the License, or
18
+ # (at your option) any later version.
19
+ #
20
+ # This program is distributed in the hope that it will be useful,
21
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
22
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23
+ # GNU General Public License for more details.
24
+ #
25
+ # You should have received a copy of the GNU General Public License
26
+ # along with this program. If not, see <http://www.gnu.org/licenses/>.
27
+
28
+ from __future__ import annotations
29
+
30
+ from collections.abc import Callable, Iterator
31
+ from contextlib import contextmanager
32
+
33
+ from pydantic import BaseModel
34
+
35
+ from lsst.utils.logging import LsstLoggers
36
+ from lsst.utils.timer import time_this
37
+
38
+
39
+ class ButlerMetrics(BaseModel):
40
+ """Metrics collected during Butler operations."""
41
+
42
+ time_in_put: float = 0.0
43
+ """Wall-clock time, in seconds, spent in put()."""
44
+
45
+ time_in_get: float = 0.0
46
+ """Wall-clock time, in seconds, spent in get()."""
47
+
48
+ n_get: int = 0
49
+ """Number of datasets retrieved with get()."""
50
+
51
+ n_put: int = 0
52
+ """Number of datasets stored with put()."""
53
+
54
+ def reset(self) -> None:
55
+ """Reset all metrics."""
56
+ self.time_in_put = 0.0
57
+ self.time_in_get = 0.0
58
+ self.n_get = 0
59
+ self.n_put = 0
60
+
61
+ def increment_get(self, duration: float) -> None:
62
+ """Increment time for get().
63
+
64
+ Parameters
65
+ ----------
66
+ duration : `float`
67
+ Duration to add to the get() statistics.
68
+ """
69
+ self.time_in_get += duration
70
+ self.n_get += 1
71
+
72
+ def increment_put(self, duration: float) -> None:
73
+ """Increment time for put().
74
+
75
+ Parameters
76
+ ----------
77
+ duration : `float`
78
+ Duration to add to the put() statistics.
79
+ """
80
+ self.time_in_put += duration
81
+ self.n_put += 1
82
+
83
+ @contextmanager
84
+ def _timer(
85
+ self, handler: Callable[[float], None], log: LsstLoggers | None = None, msg: str | None = None
86
+ ) -> Iterator[None]:
87
+ with time_this(log=log, msg=msg) as timer:
88
+ yield
89
+ handler(timer.duration)
90
+
91
+ @contextmanager
92
+ def instrument_get(self, log: LsstLoggers | None = None, msg: str | None = None) -> Iterator[None]:
93
+ """Run code and increment get statistics.
94
+
95
+ Parameters
96
+ ----------
97
+ log : `logging.Logger` or `None`
98
+ Logger to use for any timing information.
99
+ msg : `str` or `None`
100
+ Any message to be included in log output.
101
+ """
102
+ with self._timer(self.increment_get, log=log, msg=msg):
103
+ yield
104
+
105
+ @contextmanager
106
+ def instrument_put(self, log: LsstLoggers | None = None, msg: str | None = None) -> Iterator[None]:
107
+ """Run code and increment put statistics.
108
+
109
+ Parameters
110
+ ----------
111
+ log : `logging.Logger` or `None`
112
+ Logger to use for any timing information.
113
+ msg : `str` or `None`
114
+ Any message to be included in log output.
115
+ """
116
+ with self._timer(self.increment_put, log=log, msg=msg):
117
+ yield
@@ -1254,7 +1254,7 @@ class ConfigSubset(Config):
1254
1254
 
1255
1255
  Global defaults, at lowest priority, are found in the ``config``
1256
1256
  directory of the butler source tree. Additional defaults can be
1257
- defined using the environment variable ``$DAF_BUTLER_CONFIG_PATHS``
1257
+ defined using the environment variable ``$DAF_BUTLER_CONFIG_PATH``
1258
1258
  which is a PATH-like variable where paths at the front of the list
1259
1259
  have priority over those later.
1260
1260