lsst-pipe-base 30.2025.5100__tar.gz → 30.2025.5200__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 (184) hide show
  1. {lsst_pipe_base-30.2025.5100/python/lsst_pipe_base.egg-info → lsst_pipe_base-30.2025.5200}/PKG-INFO +1 -1
  2. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/log_capture.py +31 -75
  3. lsst_pipe_base-30.2025.5200/python/lsst/pipe/base/version.py +2 -0
  4. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200/python/lsst_pipe_base.egg-info}/PKG-INFO +1 -1
  5. lsst_pipe_base-30.2025.5100/python/lsst/pipe/base/version.py +0 -2
  6. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/COPYRIGHT +0 -0
  7. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/LICENSE +0 -0
  8. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/MANIFEST.in +0 -0
  9. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/README.md +0 -0
  10. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/bsd_license.txt +0 -0
  11. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/doc/lsst.pipe.base/CHANGES.rst +0 -0
  12. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/doc/lsst.pipe.base/creating-a-pipeline.rst +0 -0
  13. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/doc/lsst.pipe.base/creating-a-pipelinetask.rst +0 -0
  14. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/doc/lsst.pipe.base/creating-a-task.rst +0 -0
  15. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/doc/lsst.pipe.base/index.rst +0 -0
  16. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/doc/lsst.pipe.base/task-framework-overview.rst +0 -0
  17. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/doc/lsst.pipe.base/task-retargeting-howto.rst +0 -0
  18. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/doc/lsst.pipe.base/testing-a-pipeline-task.rst +0 -0
  19. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/doc/lsst.pipe.base/testing-pipelines-with-mocks.rst +0 -0
  20. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/doc/lsst.pipe.base/working-with-pipeline-graphs.rst +0 -0
  21. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/gpl-v3.0.txt +0 -0
  22. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/pyproject.toml +0 -0
  23. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/__init__.py +0 -0
  24. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/__init__.py +0 -0
  25. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/__init__.py +0 -0
  26. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/_datasetQueryConstraints.py +0 -0
  27. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/_dataset_handle.py +0 -0
  28. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/_instrument.py +0 -0
  29. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/_observation_dimension_packer.py +0 -0
  30. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/_quantumContext.py +0 -0
  31. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/_status.py +0 -0
  32. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/_task_metadata.py +0 -0
  33. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/all_dimensions_quantum_graph_builder.py +0 -0
  34. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/automatic_connection_constants.py +0 -0
  35. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/caching_limited_butler.py +0 -0
  36. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/cli/__init__.py +0 -0
  37. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/cli/_get_cli_subcommands.py +0 -0
  38. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/cli/cmd/__init__.py +0 -0
  39. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/cli/cmd/commands.py +0 -0
  40. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/cli/opt/__init__.py +0 -0
  41. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/cli/opt/arguments.py +0 -0
  42. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/cli/opt/options.py +0 -0
  43. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/config.py +0 -0
  44. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/configOverrides.py +0 -0
  45. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/connectionTypes.py +0 -0
  46. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/connections.py +0 -0
  47. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/dot_tools.py +0 -0
  48. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/exec_fixup_data_id.py +0 -0
  49. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/execution_graph_fixup.py +0 -0
  50. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/execution_reports.py +0 -0
  51. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/formatters/__init__.py +0 -0
  52. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/formatters/pexConfig.py +0 -0
  53. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/graph/__init__.py +0 -0
  54. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/graph/_implDetails.py +0 -0
  55. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/graph/_loadHelpers.py +0 -0
  56. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/graph/_versionDeserializers.py +0 -0
  57. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/graph/graph.py +0 -0
  58. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/graph/graphSummary.py +0 -0
  59. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/graph/quantumNode.py +0 -0
  60. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/graph_walker.py +0 -0
  61. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/mermaid_tools.py +0 -0
  62. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/mp_graph_executor.py +0 -0
  63. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline.py +0 -0
  64. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipelineIR.py +0 -0
  65. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipelineTask.py +0 -0
  66. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/__init__.py +0 -0
  67. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/__main__.py +0 -0
  68. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/_dataset_types.py +0 -0
  69. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/_edges.py +0 -0
  70. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/_exceptions.py +0 -0
  71. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/_mapping_views.py +0 -0
  72. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/_nodes.py +0 -0
  73. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/_pipeline_graph.py +0 -0
  74. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/_task_subsets.py +0 -0
  75. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/_tasks.py +0 -0
  76. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/expressions.py +0 -0
  77. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/io.py +0 -0
  78. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/visualization/__init__.py +0 -0
  79. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/visualization/_dot.py +0 -0
  80. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/visualization/_formatting.py +0 -0
  81. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/visualization/_layout.py +0 -0
  82. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/visualization/_merge.py +0 -0
  83. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/visualization/_mermaid.py +0 -0
  84. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/visualization/_options.py +0 -0
  85. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/visualization/_printer.py +0 -0
  86. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/visualization/_show.py +0 -0
  87. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/pipeline_graph/visualization/_status_annotator.py +0 -0
  88. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/prerequisite_helpers.py +0 -0
  89. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/py.typed +0 -0
  90. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/__init__.py +0 -0
  91. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/_common.py +0 -0
  92. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/_multiblock.py +0 -0
  93. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/_predicted.py +0 -0
  94. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/_provenance.py +0 -0
  95. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/aggregator/__init__.py +0 -0
  96. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/aggregator/_communicators.py +0 -0
  97. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/aggregator/_config.py +0 -0
  98. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/aggregator/_ingester.py +0 -0
  99. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/aggregator/_progress.py +0 -0
  100. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/aggregator/_scanner.py +0 -0
  101. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/aggregator/_structs.py +0 -0
  102. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/aggregator/_supervisor.py +0 -0
  103. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/aggregator/_writer.py +0 -0
  104. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph/visualization.py +0 -0
  105. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph_builder.py +0 -0
  106. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph_executor.py +0 -0
  107. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_graph_skeleton.py +0 -0
  108. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_provenance_graph.py +0 -0
  109. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/quantum_reports.py +0 -0
  110. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/resource_usage.py +0 -0
  111. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/script/__init__.py +0 -0
  112. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/script/register_instrument.py +0 -0
  113. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/script/retrieve_artifacts_for_quanta.py +0 -0
  114. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/script/transfer_from_graph.py +0 -0
  115. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/script/utils.py +0 -0
  116. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/script/zip_from_graph.py +0 -0
  117. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/separable_pipeline_executor.py +0 -0
  118. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/simple_pipeline_executor.py +0 -0
  119. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/single_quantum_executor.py +0 -0
  120. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/struct.py +0 -0
  121. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/task.py +0 -0
  122. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/taskFactory.py +0 -0
  123. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/testUtils.py +0 -0
  124. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/tests/__init__.py +0 -0
  125. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/tests/in_memory_limited_butler.py +0 -0
  126. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/tests/mocks/__init__.py +0 -0
  127. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/tests/mocks/_data_id_match.py +0 -0
  128. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/tests/mocks/_pipeline_task.py +0 -0
  129. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/tests/mocks/_repo.py +0 -0
  130. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/tests/mocks/_storage_class.py +0 -0
  131. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/tests/no_dimensions.py +0 -0
  132. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/tests/pipelineStepTester.py +0 -0
  133. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/tests/simpleQGraph.py +0 -0
  134. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/tests/util.py +0 -0
  135. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst/pipe/base/utils.py +0 -0
  136. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst_pipe_base.egg-info/SOURCES.txt +0 -0
  137. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst_pipe_base.egg-info/dependency_links.txt +0 -0
  138. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst_pipe_base.egg-info/entry_points.txt +0 -0
  139. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst_pipe_base.egg-info/requires.txt +0 -0
  140. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst_pipe_base.egg-info/top_level.txt +0 -0
  141. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/python/lsst_pipe_base.egg-info/zip-safe +0 -0
  142. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/setup.cfg +0 -0
  143. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_adjust_all_quanta.py +0 -0
  144. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_aggregator.py +0 -0
  145. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_caching_limited_butler.py +0 -0
  146. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_cliCmdRegisterInstrument.py +0 -0
  147. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_configOverrides.py +0 -0
  148. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_config_formatter.py +0 -0
  149. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_connections.py +0 -0
  150. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_dataid_match.py +0 -0
  151. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_dataset_handle.py +0 -0
  152. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_deferredDatasetRef.py +0 -0
  153. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_dot_tools.py +0 -0
  154. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_dynamic_connections.py +0 -0
  155. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_execution_reports.py +0 -0
  156. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_execution_storage_class_conversion.py +0 -0
  157. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_graphBuilder.py +0 -0
  158. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_graph_walker.py +0 -0
  159. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_init_output_run.py +0 -0
  160. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_instrument.py +0 -0
  161. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_mermaid.py +0 -0
  162. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_mp_graph_executor.py +0 -0
  163. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_pipeline.py +0 -0
  164. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_pipelineIR.py +0 -0
  165. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_pipelineLoadSubset.py +0 -0
  166. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_pipelineTask.py +0 -0
  167. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_pipeline_graph.py +0 -0
  168. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_pipeline_graph_expressions.py +0 -0
  169. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_predicted_qg.py +0 -0
  170. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_qg_builder_dimensions.py +0 -0
  171. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_quantumGraph.py +0 -0
  172. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_quantum_provenance_graph.py +0 -0
  173. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_quantum_reports.py +0 -0
  174. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_quantum_success_caveats.py +0 -0
  175. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_script_utils.py +0 -0
  176. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_separable_pipeline_executor.py +0 -0
  177. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_simple_pipeline_executor.py +0 -0
  178. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_single_quantum_executor.py +0 -0
  179. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_struct.py +0 -0
  180. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_task.py +0 -0
  181. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_task_factory.py +0 -0
  182. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_taskmetadata.py +0 -0
  183. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_testUtils.py +0 -0
  184. {lsst_pipe_base-30.2025.5100 → lsst_pipe_base-30.2025.5200}/tests/test_utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-pipe-base
3
- Version: 30.2025.5100
3
+ Version: 30.2025.5200
4
4
  Summary: Pipeline infrastructure for the Rubin Science Pipelines.
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
@@ -31,17 +31,15 @@ __all__ = ["LogCapture"]
31
31
 
32
32
  import dataclasses
33
33
  import logging
34
- import os
35
- import shutil
36
- import tempfile
37
34
  import uuid
38
35
  from collections.abc import Iterator
39
- from contextlib import contextmanager, suppress
36
+ from contextlib import contextmanager
40
37
  from logging import FileHandler
41
38
 
42
39
  import pydantic
43
40
 
44
- from lsst.daf.butler import Butler, FileDataset, LimitedButler, Quantum
41
+ from lsst.daf.butler import Butler, LimitedButler, Quantum
42
+ from lsst.daf.butler._rubin.temporary_for_ingest import TemporaryForIngest
45
43
  from lsst.daf.butler.logging import (
46
44
  ButlerLogRecord,
47
45
  ButlerLogRecordHandler,
@@ -205,41 +203,37 @@ class LogCapture:
205
203
 
206
204
  # Add a handler to the root logger to capture execution log output.
207
205
  if log_dataset_name is not None:
206
+ try:
207
+ [ref] = quantum.outputs[log_dataset_name]
208
+ except LookupError as exc:
209
+ raise InvalidQuantumError(
210
+ f"Quantum outputs is missing log output dataset type {log_dataset_name};"
211
+ " this could happen due to inconsistent options between QuantumGraph generation"
212
+ " and execution"
213
+ ) from exc
208
214
  # Either accumulate into ButlerLogRecords or stream JSON records to
209
215
  # file and ingest that (ingest is possible only with full butler).
210
216
  if self.stream_json_logs and self.full_butler is not None:
211
- # Create the log file in a temporary directory rather than
212
- # creating a temporary file. This is necessary because
213
- # temporary files are created with restrictive permissions
214
- # and during file ingest these permissions persist in the
215
- # datastore. Using a temp directory allows us to create
216
- # a file with umask default permissions.
217
- tmpdir = tempfile.mkdtemp(prefix="butler-temp-logs-")
218
-
219
- # Construct a file to receive the log records and "touch" it.
220
- log_file = os.path.join(tmpdir, f"butler-log-{task_node.label}.json")
221
- with open(log_file, "w"):
222
- pass
223
- log_handler_file = FileHandler(log_file)
224
- log_handler_file.setFormatter(JsonLogFormatter())
225
- logging.getLogger().addHandler(log_handler_file)
226
-
227
- try:
228
- with ButlerMDC.set_mdc(mdc):
229
- yield ctx
230
- finally:
231
- # Ensure that the logs are stored in butler.
232
- logging.getLogger().removeHandler(log_handler_file)
233
- log_handler_file.close()
234
- if ctx.extra:
235
- with open(log_file, "a") as log_stream:
236
- ButlerLogRecords.write_streaming_extra(
237
- log_stream,
238
- ctx.extra.model_dump_json(exclude_unset=True, exclude_defaults=True),
239
- )
240
- if ctx.store:
241
- self._ingest_log_records(quantum, log_dataset_name, log_file)
242
- shutil.rmtree(tmpdir, ignore_errors=True)
217
+ with TemporaryForIngest(self.full_butler, ref) as temporary:
218
+ log_handler_file = FileHandler(temporary.ospath)
219
+ log_handler_file.setFormatter(JsonLogFormatter())
220
+ logging.getLogger().addHandler(log_handler_file)
221
+
222
+ try:
223
+ with ButlerMDC.set_mdc(mdc):
224
+ yield ctx
225
+ finally:
226
+ # Ensure that the logs are stored in butler.
227
+ logging.getLogger().removeHandler(log_handler_file)
228
+ log_handler_file.close()
229
+ if ctx.extra:
230
+ with open(temporary.ospath, "a") as log_stream:
231
+ ButlerLogRecords.write_streaming_extra(
232
+ log_stream,
233
+ ctx.extra.model_dump_json(exclude_unset=True, exclude_defaults=True),
234
+ )
235
+ if ctx.store:
236
+ temporary.ingest()
243
237
 
244
238
  else:
245
239
  log_handler_memory = ButlerLogRecordHandler()
@@ -281,41 +275,3 @@ class LogCapture:
281
275
  ) from exc
282
276
 
283
277
  self.butler.put(log_handler.records, ref)
284
-
285
- def _ingest_log_records(self, quantum: Quantum, dataset_type: str, filename: str) -> None:
286
- # If we are logging to an external file we must always try to
287
- # close it.
288
- assert self.full_butler is not None, "Expected to have full butler for ingest"
289
- ingested = False
290
- try:
291
- # DatasetRef has to be in the Quantum outputs, can lookup by name.
292
- try:
293
- [ref] = quantum.outputs[dataset_type]
294
- except LookupError as exc:
295
- raise InvalidQuantumError(
296
- f"Quantum outputs is missing log output dataset type {dataset_type};"
297
- " this could happen due to inconsistent options between QuantumGraph generation"
298
- " and execution"
299
- ) from exc
300
-
301
- # Need to ingest this file directly into butler.
302
- dataset = FileDataset(path=filename, refs=ref)
303
- try:
304
- self.full_butler.ingest(dataset, transfer="move")
305
- ingested = True
306
- except NotImplementedError:
307
- # Some datastores can't receive files (e.g. in-memory datastore
308
- # when testing), we store empty list for those just to have a
309
- # dataset. Alternative is to read the file as a
310
- # ButlerLogRecords object and put it.
311
- _LOG.info(
312
- "Log records could not be stored in this butler because the"
313
- " datastore can not ingest files, empty record list is stored instead."
314
- )
315
- records = ButlerLogRecords.from_records([])
316
- self.full_butler.put(records, ref)
317
- finally:
318
- # remove file if it is not ingested
319
- if not ingested:
320
- with suppress(OSError):
321
- os.remove(filename)
@@ -0,0 +1,2 @@
1
+ __all__ = ["__version__"]
2
+ __version__ = "30.2025.5200"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: lsst-pipe-base
3
- Version: 30.2025.5100
3
+ Version: 30.2025.5200
4
4
  Summary: Pipeline infrastructure for the Rubin Science Pipelines.
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
@@ -1,2 +0,0 @@
1
- __all__ = ["__version__"]
2
- __version__ = "30.2025.5100"