LbAPLocal 0.9.8__tar.gz → 0.9.10__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.
- lbaplocal-0.9.10/PKG-INFO +163 -0
- lbaplocal-0.9.10/README.md +126 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/pyproject.toml +3 -1
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal/cli/main.py +230 -30
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal/cwl/generate_replica_map.py +35 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal/job_slice.py +68 -2
- lbaplocal-0.9.10/src/LbAPLocal/log_parsing.py +333 -0
- lbaplocal-0.9.10/src/LbAPLocal.egg-info/PKG-INFO +163 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal.egg-info/requires.txt +0 -1
- lbaplocal-0.9.10/tests/test_log_parse.py +91 -0
- lbaplocal-0.9.8/PKG-INFO +0 -207
- lbaplocal-0.9.8/README.md +0 -169
- lbaplocal-0.9.8/src/LbAPLocal/log_parsing.py +0 -84
- lbaplocal-0.9.8/src/LbAPLocal.egg-info/PKG-INFO +0 -207
- lbaplocal-0.9.8/tests/test_log_parse.py +0 -33
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/.coveragerc +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/.gitattributes +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/.gitignore +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/.gitlab-ci.yml +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/.pre-commit-config.yaml +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/CONTRIBUTING.md +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/LICENSE +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/example.json +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/setup.cfg +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal/__init__.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal/cli/__init__.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal/cli/legacy.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal/cli/textual_ui.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal/cli/wizards.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal/cwl/__init__.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal/cwl/rewrite.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal/testing.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal/utils.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal.egg-info/SOURCES.txt +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal.egg-info/dependency_links.txt +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal.egg-info/entry_points.txt +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/src/LbAPLocal.egg-info/top_level.txt +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/capture_fixtures.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/cassettes/test_execute/test_run_test[2016_MagDown_PromptMC_D02KK-2444].yaml +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/cassettes/test_execute/test_run_test[2016_MagDown_PromptMC_D02KK_noautoconf-2444].yaml +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/cassettes/test_execute/test_run_test[2016_MagUp_PromptMC_D02KK-2393].yaml +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/cassettes/test_execute/test_run_test[2016_MagUp_PromptMC_D02KK_noautoconf-2393].yaml +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/conftest.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/.gitignore +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/.gitlab-ci.yml +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/AnalysisProductions.xenv +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/Bc2Bspi2JpsiPhi.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/Bd2JpsiKstar.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/Bd2JpsiKstar_stripping.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2DsPi.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2JpsiPhi.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2JpsiPhi_Prompt.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2JpsiPhi_Prompt_PVMixer.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2JpsiPhi_Swave.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/Bu2JpsiKplus.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/Bu2JpsiKplus_stripping.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/LbJpsipK.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/README.md +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/helpers/__init__.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/helpers/stripping.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/helpers/tuple_maker.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/info.yaml +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/BsToJpsiPhi/sequence_setup.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/COPYING +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/RDs/README.md +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/RDs/Run1_Signal.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/RDs/Run2_Signal.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/RDs/helpers/__init__.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/RDs/helpers/signal_tuple_maker.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/RDs/info.yaml +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/README.md +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/__init__.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/2011_datatype.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/2012_datatype.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/2015_datatype.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/2016_datatype.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/2017_datatype.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/2018_datatype.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/B0ToK0ee.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/B0ToK0mumu.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/BpToKee.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/BpToKmumu.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/LbToL0ee.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/LbToL0eeSS.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/LbToL0emu.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/LbToL0emuSS.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/LbToL0mumu.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/LbToL0mumuSS.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/README.md +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/__init__.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/general_options.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/helpers/MC_tuple_maker.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/helpers/__init__.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/helpers/decay_descriptors.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/helpers/locations.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/helpers/related_info.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/helpers/stripping.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/helpers/tags.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/helpers/tuple_maker.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/info.yaml +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_general_options_DST.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_general_options_FDST.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_general_options_FMDST.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_general_options_MDST.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2JpsiKs_ee.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2JpsiKs_mm.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2Ksee.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2Ksmm.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2PsiKs_ee.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2PsiKs_mm.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bu2JpsiK_ee.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bu2JpsiK_mm.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2JpsiL_ee.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2JpsiL_mm.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2Lee.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2Lem.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2Lmm.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2PsiL_ee.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2PsiL_mm.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/sequence_setup.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/cbtesting/stripping_seq.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/executabletests/2016_MagDown_PromptMC_D02KK_autoconf.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/executabletests/2016_MagUp_PromptMC_D02KK_autoconf.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/executabletests/info.yaml +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/data-pkg-repo/executabletests/ntuple_options.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/example-logs/error-failed-to-read-file.log +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/example-logs/error-illegal-instruction.log +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/example-logs/error-missing-shared-library.log +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/example-logs/error-platform-unsupported.log +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/example-logs/error-related-info-missing.log +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/example-logs/good-DaVinci_00110296_00000038_1.log +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/example-logs/good-DaVinci_00110296_00000194_1.log +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/data/example-logs/good-Gauss_00104988_00000011_1.log +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/fixture_loader.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/fixtures/executabletests/2016_MagDown_PromptMC_D02KK/query_result.json +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/fixtures/executabletests/2016_MagUp_PromptMC_D02KK/query_result.json +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/fixtures/executabletests/manifest.yaml +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/reslice_fixture.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/test-input-dst/00070767_00000711_7.AllStreams_slice.dst +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/test-input-dst/00070793_00000685_7.AllStreams_slice.dst +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/test_cli.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/test_cwl_cli.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/test_execute.py +0 -0
- {lbaplocal-0.9.8 → lbaplocal-0.9.10}/tests/test_local_datapkg.py +0 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: LbAPLocal
|
|
3
|
+
Version: 0.9.10
|
|
4
|
+
Summary: Tool to locally run tests for AnalysisProductions
|
|
5
|
+
Author: LHCb
|
|
6
|
+
Project-URL: Homepage, https://gitlab.cern.ch/lhcb-dpa/analysis-productions/lbaplocal
|
|
7
|
+
Project-URL: Bug Reports, https://gitlab.cern.ch/lhcb-dpa/analysis-productions/lbaplocal/-/issues
|
|
8
|
+
Project-URL: Source, https://gitlab.cern.ch/lhcb-dpa/analysis-productions/lbaplocal
|
|
9
|
+
Keywords: LHCb AnalysisProductions DIRAC
|
|
10
|
+
Classifier: Development Status :: 4 - Beta
|
|
11
|
+
Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Requires-Python: >=3.12
|
|
14
|
+
Description-Content-Type: text/markdown
|
|
15
|
+
License-File: LICENSE
|
|
16
|
+
Requires-Dist: LbAPCommon>=0.15.10
|
|
17
|
+
Requires-Dist: LbProdRun>1.12.2
|
|
18
|
+
Requires-Dist: dirac-cwl>=1.1.3
|
|
19
|
+
Requires-Dist: LbDiracWrappers
|
|
20
|
+
Requires-Dist: LbEnv
|
|
21
|
+
Requires-Dist: apd>=0.6.0
|
|
22
|
+
Requires-Dist: click
|
|
23
|
+
Requires-Dist: mplhep
|
|
24
|
+
Requires-Dist: requests
|
|
25
|
+
Requires-Dist: setuptools
|
|
26
|
+
Requires-Dist: packaging
|
|
27
|
+
Requires-Dist: typer
|
|
28
|
+
Requires-Dist: rich
|
|
29
|
+
Requires-Dist: textual
|
|
30
|
+
Provides-Extra: testing
|
|
31
|
+
Requires-Dist: pytest; extra == "testing"
|
|
32
|
+
Requires-Dist: pytest-cov; extra == "testing"
|
|
33
|
+
Requires-Dist: pytest-mock; extra == "testing"
|
|
34
|
+
Requires-Dist: pytest-recording; extra == "testing"
|
|
35
|
+
Requires-Dist: pytest-timeout; extra == "testing"
|
|
36
|
+
Dynamic: license-file
|
|
37
|
+
|
|
38
|
+
# LbAPLocal
|
|
39
|
+
|
|
40
|
+
LbAPLocal is the Python library and CLI for running offline tests for the LHCb AnalysisProductions framework.
|
|
41
|
+
|
|
42
|
+
## Installation
|
|
43
|
+
|
|
44
|
+
LbAPLocal is installed by default with the LHCb environment on lxplus. For users on external clusters, source the LHCb environment from CVMFS:
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
source /cvmfs/lhcb.cern.ch/lib/LbEnv
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Usage
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
Usage: lb-ap [OPTIONS] COMMAND [ARGS]...
|
|
54
|
+
|
|
55
|
+
CLI for LHCb AnalysisProductions
|
|
56
|
+
|
|
57
|
+
Options:
|
|
58
|
+
-C, --change-dir PATH Change to this directory before running
|
|
59
|
+
-b, --branch TEXT Branch or tag to use
|
|
60
|
+
-v, --verbose Enable verbose output
|
|
61
|
+
--version Show version and exit
|
|
62
|
+
--help Show this message and exit
|
|
63
|
+
|
|
64
|
+
Commands:
|
|
65
|
+
versions List available tags of the Analysis Productions repository
|
|
66
|
+
clone Clone the AnalysisProductions repository
|
|
67
|
+
checkout Check out a branch or tag
|
|
68
|
+
list List available productions and jobs
|
|
69
|
+
test Test a job using CWL workflow
|
|
70
|
+
parse-log Analyse a Gaudi log file and show a summary with advice
|
|
71
|
+
make-reproducer Create a minimal reproducer from a failed grid job
|
|
72
|
+
cwl CWL-based workflow commands (generate, run, validate, test)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Testing a job
|
|
76
|
+
|
|
77
|
+
The primary command. Generates a CWL workflow from the production configuration and executes it locally:
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
lb-ap test MyAnalysis My2016MagDownJob
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Key options:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
lb-ap test MyAnalysis MyJob -i /path/to/input.dst # Use a specific input file
|
|
87
|
+
lb-ap test MyAnalysis MyJob -n 100 # Slice input to 100 events
|
|
88
|
+
lb-ap test MyAnalysis MyJob --n-lfns 5 # Test with 5 input LFNs
|
|
89
|
+
lb-ap test MyAnalysis MyJob --pick-smallest-lfn # Use smallest LFN for speed
|
|
90
|
+
lb-ap test MyAnalysis MyJob --download # Download input files locally
|
|
91
|
+
lb-ap test MyAnalysis MyJob --pretty # Real-time TUI monitoring
|
|
92
|
+
lb-ap test MyAnalysis MyJob --dry-run # Validate without executing
|
|
93
|
+
lb-ap test MyAnalysis MyJob -o ./output # Custom output directory
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
If arguments are omitted, an interactive wizard guides you through the setup.
|
|
97
|
+
|
|
98
|
+
The `-n <N>` flag slices the input file to N events using `GaudiConf.mergeDST:dst` (remote read, local write). After slicing, a reuse hint is printed so subsequent runs can skip the slicing step by passing the sliced file with `-i`.
|
|
99
|
+
|
|
100
|
+
### Custom input files
|
|
101
|
+
|
|
102
|
+
When testing a job that depends on another job, pass the upstream output with `-i`:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
lb-ap test MyAnalysis MyDownstreamJob -i /path/to/upstream_output.dst
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
The input can be a local file path or an LFN (`LFN:/lhcb/...`).
|
|
109
|
+
|
|
110
|
+
### Analysing log files
|
|
111
|
+
|
|
112
|
+
Parse a Gaudi log file for FATAL, ERROR, and WARNING messages with contextual advice:
|
|
113
|
+
|
|
114
|
+
```bash
|
|
115
|
+
lb-ap parse-log DaVinci_00012345_00006789_1.log
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
Log analysis is also integrated into `lb-ap test` — after a test completes (success or failure), any Gaudi log files in the output are automatically analysed and a summary is displayed.
|
|
119
|
+
|
|
120
|
+
### Listing productions and jobs
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
lb-ap list # List available productions
|
|
124
|
+
lb-ap list MyAnalysis # List jobs in a production
|
|
125
|
+
lb-ap list --tree # Tree view of all productions and jobs
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### Repository management
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
lb-ap clone --protocol ssh # Clone AnalysisProductions
|
|
132
|
+
lb-ap checkout v1r4315 # Check out a version
|
|
133
|
+
lb-ap versions MyAnalysis # List available versions
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Creating a minimal reproducer
|
|
137
|
+
|
|
138
|
+
From a failed grid job, create a self-contained reproducer package:
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
lb-ap make-reproducer 12345678 # From DIRAC job ID
|
|
142
|
+
lb-ap make-reproducer --job-dir ./downloaded_job_dir # From local job directory
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Development
|
|
146
|
+
|
|
147
|
+
**Platform:** pixi targets `linux-64` only (requires CERN CVMFS and DIRAC).
|
|
148
|
+
|
|
149
|
+
```bash
|
|
150
|
+
# On linux-64 (lxplus or CI):
|
|
151
|
+
pixi install
|
|
152
|
+
pixi run pytest # Run tests
|
|
153
|
+
pixi run lb-ap # Run the CLI
|
|
154
|
+
|
|
155
|
+
# Linting (any platform):
|
|
156
|
+
ruff check src/ tests/ # Lint
|
|
157
|
+
ruff check --fix src/ # Auto-fix
|
|
158
|
+
ruff format src/ tests/ # Format
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
## Legacy CLI
|
|
162
|
+
|
|
163
|
+
The original Click-based CLI is still available as `lb-ap-legacy` for backward compatibility but is deprecated.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# LbAPLocal
|
|
2
|
+
|
|
3
|
+
LbAPLocal is the Python library and CLI for running offline tests for the LHCb AnalysisProductions framework.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
LbAPLocal is installed by default with the LHCb environment on lxplus. For users on external clusters, source the LHCb environment from CVMFS:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
source /cvmfs/lhcb.cern.ch/lib/LbEnv
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
```
|
|
16
|
+
Usage: lb-ap [OPTIONS] COMMAND [ARGS]...
|
|
17
|
+
|
|
18
|
+
CLI for LHCb AnalysisProductions
|
|
19
|
+
|
|
20
|
+
Options:
|
|
21
|
+
-C, --change-dir PATH Change to this directory before running
|
|
22
|
+
-b, --branch TEXT Branch or tag to use
|
|
23
|
+
-v, --verbose Enable verbose output
|
|
24
|
+
--version Show version and exit
|
|
25
|
+
--help Show this message and exit
|
|
26
|
+
|
|
27
|
+
Commands:
|
|
28
|
+
versions List available tags of the Analysis Productions repository
|
|
29
|
+
clone Clone the AnalysisProductions repository
|
|
30
|
+
checkout Check out a branch or tag
|
|
31
|
+
list List available productions and jobs
|
|
32
|
+
test Test a job using CWL workflow
|
|
33
|
+
parse-log Analyse a Gaudi log file and show a summary with advice
|
|
34
|
+
make-reproducer Create a minimal reproducer from a failed grid job
|
|
35
|
+
cwl CWL-based workflow commands (generate, run, validate, test)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Testing a job
|
|
39
|
+
|
|
40
|
+
The primary command. Generates a CWL workflow from the production configuration and executes it locally:
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
lb-ap test MyAnalysis My2016MagDownJob
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Key options:
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
lb-ap test MyAnalysis MyJob -i /path/to/input.dst # Use a specific input file
|
|
50
|
+
lb-ap test MyAnalysis MyJob -n 100 # Slice input to 100 events
|
|
51
|
+
lb-ap test MyAnalysis MyJob --n-lfns 5 # Test with 5 input LFNs
|
|
52
|
+
lb-ap test MyAnalysis MyJob --pick-smallest-lfn # Use smallest LFN for speed
|
|
53
|
+
lb-ap test MyAnalysis MyJob --download # Download input files locally
|
|
54
|
+
lb-ap test MyAnalysis MyJob --pretty # Real-time TUI monitoring
|
|
55
|
+
lb-ap test MyAnalysis MyJob --dry-run # Validate without executing
|
|
56
|
+
lb-ap test MyAnalysis MyJob -o ./output # Custom output directory
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
If arguments are omitted, an interactive wizard guides you through the setup.
|
|
60
|
+
|
|
61
|
+
The `-n <N>` flag slices the input file to N events using `GaudiConf.mergeDST:dst` (remote read, local write). After slicing, a reuse hint is printed so subsequent runs can skip the slicing step by passing the sliced file with `-i`.
|
|
62
|
+
|
|
63
|
+
### Custom input files
|
|
64
|
+
|
|
65
|
+
When testing a job that depends on another job, pass the upstream output with `-i`:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
lb-ap test MyAnalysis MyDownstreamJob -i /path/to/upstream_output.dst
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
The input can be a local file path or an LFN (`LFN:/lhcb/...`).
|
|
72
|
+
|
|
73
|
+
### Analysing log files
|
|
74
|
+
|
|
75
|
+
Parse a Gaudi log file for FATAL, ERROR, and WARNING messages with contextual advice:
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
lb-ap parse-log DaVinci_00012345_00006789_1.log
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
Log analysis is also integrated into `lb-ap test` — after a test completes (success or failure), any Gaudi log files in the output are automatically analysed and a summary is displayed.
|
|
82
|
+
|
|
83
|
+
### Listing productions and jobs
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
lb-ap list # List available productions
|
|
87
|
+
lb-ap list MyAnalysis # List jobs in a production
|
|
88
|
+
lb-ap list --tree # Tree view of all productions and jobs
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Repository management
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
lb-ap clone --protocol ssh # Clone AnalysisProductions
|
|
95
|
+
lb-ap checkout v1r4315 # Check out a version
|
|
96
|
+
lb-ap versions MyAnalysis # List available versions
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Creating a minimal reproducer
|
|
100
|
+
|
|
101
|
+
From a failed grid job, create a self-contained reproducer package:
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
lb-ap make-reproducer 12345678 # From DIRAC job ID
|
|
105
|
+
lb-ap make-reproducer --job-dir ./downloaded_job_dir # From local job directory
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Development
|
|
109
|
+
|
|
110
|
+
**Platform:** pixi targets `linux-64` only (requires CERN CVMFS and DIRAC).
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# On linux-64 (lxplus or CI):
|
|
114
|
+
pixi install
|
|
115
|
+
pixi run pytest # Run tests
|
|
116
|
+
pixi run lb-ap # Run the CLI
|
|
117
|
+
|
|
118
|
+
# Linting (any platform):
|
|
119
|
+
ruff check src/ tests/ # Lint
|
|
120
|
+
ruff check --fix src/ # Auto-fix
|
|
121
|
+
ruff format src/ tests/ # Format
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
## Legacy CLI
|
|
125
|
+
|
|
126
|
+
The original Click-based CLI is still available as `lb-ap-legacy` for backward compatibility but is deprecated.
|
|
@@ -26,7 +26,6 @@ dependencies = [
|
|
|
26
26
|
"LbEnv",
|
|
27
27
|
"apd>=0.6.0",
|
|
28
28
|
"click",
|
|
29
|
-
"consolemd",
|
|
30
29
|
"mplhep",
|
|
31
30
|
"requests",
|
|
32
31
|
"setuptools",
|
|
@@ -119,11 +118,14 @@ pytest-cov = "*"
|
|
|
119
118
|
pytest-mock = "*"
|
|
120
119
|
pytest-recording = "*"
|
|
121
120
|
pytest-timeout = "*"
|
|
121
|
+
pre-commit = "*"
|
|
122
122
|
quickjs = "*"
|
|
123
123
|
|
|
124
124
|
[tool.pixi.feature.testing.tasks]
|
|
125
125
|
pytest = "pytest"
|
|
126
126
|
test = "pytest"
|
|
127
|
+
lint = "pre-commit run --all-files"
|
|
128
|
+
pre-commit-install = "pre-commit install"
|
|
127
129
|
|
|
128
130
|
[tool.pixi.tasks]
|
|
129
131
|
lb-ap = "lb-ap"
|