LbAPLocal 0.10.2__tar.gz → 0.12.0__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.10.2 → lbaplocal-0.12.0}/PKG-INFO +4 -3
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/pyproject.toml +6 -2
- lbaplocal-0.12.0/src/LbAPLocal/cli/cvmfs.py +37 -0
- lbaplocal-0.12.0/src/LbAPLocal/cli/decfile_lexer.py +131 -0
- lbaplocal-0.12.0/src/LbAPLocal/cli/generate.py +531 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/cli/main.py +400 -88
- lbaplocal-0.12.0/src/LbAPLocal/cli/mc_lookup.py +338 -0
- lbaplocal-0.12.0/src/LbAPLocal/cli/mc_wizard.py +487 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/cli/wizards.py +150 -66
- lbaplocal-0.12.0/src/LbAPLocal/cwl/app_runner.py +507 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/cwl/generate_replica_map.py +142 -95
- lbaplocal-0.12.0/src/LbAPLocal/cwl/quickjs_engine.py +111 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/cwl/rewrite.py +57 -25
- lbaplocal-0.12.0/src/LbAPLocal/cwl/runner.py +139 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/handlers/mc_request.py +9 -4
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/job_slice.py +8 -4
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal.egg-info/PKG-INFO +4 -3
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal.egg-info/SOURCES.txt +16 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal.egg-info/entry_points.txt +2 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal.egg-info/requires.txt +3 -2
- lbaplocal-0.12.0/src/LbAPLocal.egg-info/scm_file_list.json +156 -0
- lbaplocal-0.12.0/src/LbAPLocal.egg-info/scm_version.json +8 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/conftest.py +78 -73
- lbaplocal-0.12.0/tests/test_app_runner.py +101 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/test_cwl_cli.py +132 -26
- lbaplocal-0.12.0/tests/test_cwl_runner.py +240 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/test_execute.py +72 -1
- lbaplocal-0.12.0/tests/test_generate.py +467 -0
- lbaplocal-0.12.0/tests/test_get_mc.py +78 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/test_handlers.py +31 -2
- lbaplocal-0.12.0/tests/test_input_resolution.py +205 -0
- lbaplocal-0.12.0/tests/test_mc_lookup.py +142 -0
- lbaplocal-0.12.0/tests/test_no_dirac_cwl.py +45 -0
- lbaplocal-0.12.0/tests/test_quickjs_engine.py +117 -0
- lbaplocal-0.10.2/src/LbAPLocal/cli/generate.py +0 -328
- lbaplocal-0.10.2/tests/test_generate.py +0 -129
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/.coveragerc +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/.gitattributes +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/.gitignore +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/.gitlab-ci.yml +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/.pre-commit-config.yaml +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/CONTRIBUTING.md +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/LICENSE +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/README.md +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/example.json +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/setup.cfg +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/__init__.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/cli/__init__.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/cli/legacy.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/cli/textual_ui.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/cwl/__init__.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/handlers/__init__.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/handlers/anaprod.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/log_parsing.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/models.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/testing.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal/utils.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal.egg-info/dependency_links.txt +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/src/LbAPLocal.egg-info/top_level.txt +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/capture_fixtures.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/cassettes/test_execute/test_run_test[2016_MagDown_PromptMC_D02KK-2444].yaml +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/cassettes/test_execute/test_run_test[2016_MagDown_PromptMC_D02KK_noautoconf-2444].yaml +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/cassettes/test_execute/test_run_test[2016_MagUp_PromptMC_D02KK-2393].yaml +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/cassettes/test_execute/test_run_test[2016_MagUp_PromptMC_D02KK_noautoconf-2393].yaml +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/.gitignore +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/.gitlab-ci.yml +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/AnalysisProductions.xenv +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/Bc2Bspi2JpsiPhi.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/Bd2JpsiKstar.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/Bd2JpsiKstar_stripping.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2DsPi.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2JpsiPhi.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2JpsiPhi_Prompt.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2JpsiPhi_Prompt_PVMixer.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2JpsiPhi_Swave.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/Bu2JpsiKplus.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/Bu2JpsiKplus_stripping.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/LbJpsipK.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/README.md +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/helpers/__init__.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/helpers/stripping.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/helpers/tuple_maker.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/info.yaml +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/BsToJpsiPhi/sequence_setup.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/COPYING +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/RDs/README.md +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/RDs/Run1_Signal.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/RDs/Run2_Signal.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/RDs/helpers/__init__.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/RDs/helpers/signal_tuple_maker.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/RDs/info.yaml +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/README.md +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/__init__.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/2011_datatype.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/2012_datatype.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/2015_datatype.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/2016_datatype.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/2017_datatype.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/2018_datatype.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/B0ToK0ee.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/B0ToK0mumu.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/BpToKee.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/BpToKmumu.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/LbToL0ee.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/LbToL0eeSS.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/LbToL0emu.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/LbToL0emuSS.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/LbToL0mumu.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/LbToL0mumuSS.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/README.md +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/__init__.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/general_options.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/helpers/MC_tuple_maker.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/helpers/__init__.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/helpers/decay_descriptors.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/helpers/locations.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/helpers/related_info.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/helpers/stripping.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/helpers/tags.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/helpers/tuple_maker.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/info.yaml +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_general_options_DST.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_general_options_FDST.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_general_options_FMDST.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_general_options_MDST.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2JpsiKs_ee.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2JpsiKs_mm.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2Ksee.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2Ksmm.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2PsiKs_ee.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2PsiKs_mm.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bu2JpsiK_ee.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bu2JpsiK_mm.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2JpsiL_ee.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2JpsiL_mm.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2Lee.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2Lem.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2Lmm.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2PsiL_ee.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2PsiL_mm.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/sequence_setup.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/cbtesting/stripping_seq.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/executabletests/2016_MagDown_PromptMC_D02KK_autoconf.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/executabletests/2016_MagUp_PromptMC_D02KK_autoconf.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/executabletests/info.yaml +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/data-pkg-repo/executabletests/ntuple_options.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/example-logs/error-failed-to-read-file.log +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/example-logs/error-illegal-instruction.log +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/example-logs/error-missing-shared-library.log +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/example-logs/error-platform-unsupported.log +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/example-logs/error-related-info-missing.log +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/example-logs/good-DaVinci_00110296_00000038_1.log +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/example-logs/good-DaVinci_00110296_00000194_1.log +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/data/example-logs/good-Gauss_00104988_00000011_1.log +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/fixture_loader.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/fixtures/executabletests/2016_MagDown_PromptMC_D02KK/query_result.json +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/fixtures/executabletests/2016_MagUp_PromptMC_D02KK/query_result.json +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/fixtures/executabletests/manifest.yaml +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/reslice_fixture.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/test-input-dst/00070767_00000711_7.AllStreams_slice.dst +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/test-input-dst/00070793_00000685_7.AllStreams_slice.dst +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/test_cli.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/test_local_datapkg.py +0 -0
- {lbaplocal-0.10.2 → lbaplocal-0.12.0}/tests/test_log_parse.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: LbAPLocal
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.12.0
|
|
4
4
|
Summary: Tool to locally run tests for AnalysisProductions
|
|
5
5
|
Author: LHCb
|
|
6
6
|
Project-URL: Homepage, https://gitlab.cern.ch/lhcb-dpa/analysis-productions/lbaplocal
|
|
@@ -13,9 +13,10 @@ Classifier: Programming Language :: Python :: 3
|
|
|
13
13
|
Requires-Python: >=3.12
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
15
|
License-File: LICENSE
|
|
16
|
-
Requires-Dist: LbAPCommon>=0.
|
|
16
|
+
Requires-Dist: LbAPCommon>=0.19.0
|
|
17
17
|
Requires-Dist: LbProdRun>1.12.2
|
|
18
|
-
Requires-Dist:
|
|
18
|
+
Requires-Dist: cwltool>=3.1.20260108
|
|
19
|
+
Requires-Dist: cwl-utils>=0.41
|
|
19
20
|
Requires-Dist: LbDiracWrappers
|
|
20
21
|
Requires-Dist: LbEnv
|
|
21
22
|
Requires-Dist: apd>=0.6.0
|
|
@@ -19,9 +19,11 @@ classifiers = [
|
|
|
19
19
|
]
|
|
20
20
|
requires-python = ">=3.12"
|
|
21
21
|
dependencies = [
|
|
22
|
-
"LbAPCommon>=0.
|
|
22
|
+
"LbAPCommon>=0.19.0",
|
|
23
23
|
"LbProdRun>1.12.2",
|
|
24
|
-
|
|
24
|
+
# floor = oldest verified build that routes JS eval through cwl-utils (set_js_engine)
|
|
25
|
+
"cwltool>=3.1.20260108",
|
|
26
|
+
"cwl-utils>=0.41",
|
|
25
27
|
"LbDiracWrappers",
|
|
26
28
|
"LbEnv",
|
|
27
29
|
"apd>=0.6.0",
|
|
@@ -57,6 +59,8 @@ testing = [
|
|
|
57
59
|
[project.scripts]
|
|
58
60
|
lb-ap = "LbAPLocal.cli.main:app"
|
|
59
61
|
lb-ap-legacy = "LbAPLocal.cli.legacy:main"
|
|
62
|
+
lb-ap-run-app = "LbAPLocal.cwl.app_runner:main"
|
|
63
|
+
lb-ap-cwl-run = "LbAPLocal.cwl.runner:app"
|
|
60
64
|
|
|
61
65
|
[tool.black]
|
|
62
66
|
exclude = '''
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
# (c) Copyright 2026 CERN for the benefit of the LHCb Collaboration #
|
|
3
|
+
# #
|
|
4
|
+
# This software is distributed under the terms of the GNU General Public #
|
|
5
|
+
# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". #
|
|
6
|
+
# #
|
|
7
|
+
# In applying this licence, CERN does not waive the privileges and immunities #
|
|
8
|
+
# granted to it by virtue of its status as an Intergovernmental Organization #
|
|
9
|
+
# or submit itself to any jurisdiction. #
|
|
10
|
+
###############################################################################
|
|
11
|
+
"""Helpers for locating versioned LHCb packages on CVMFS."""
|
|
12
|
+
|
|
13
|
+
import re
|
|
14
|
+
from fnmatch import fnmatch
|
|
15
|
+
from pathlib import Path
|
|
16
|
+
|
|
17
|
+
# Matches LHCb version directories like ``v32r48`` or ``v26r4p1``.
|
|
18
|
+
VERSION_PATTERN = re.compile(r"v(\d+)r(\d+)(?:p(\d+))?")
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def latest_available(path: Path, pattern: str = "v*") -> str:
|
|
22
|
+
"""Return the highest-numbered version directory under ``path``.
|
|
23
|
+
|
|
24
|
+
Only directories whose names match ``VERSION_PATTERN`` and the glob
|
|
25
|
+
``pattern`` are considered.
|
|
26
|
+
"""
|
|
27
|
+
matches = {}
|
|
28
|
+
for version_path in path.iterdir():
|
|
29
|
+
if not version_path.is_dir():
|
|
30
|
+
continue
|
|
31
|
+
version = version_path.name
|
|
32
|
+
if match := VERSION_PATTERN.fullmatch(version):
|
|
33
|
+
if not fnmatch(version, pattern):
|
|
34
|
+
continue
|
|
35
|
+
version_segments = tuple(0 if x is None else int(x) for x in match.groups())
|
|
36
|
+
matches[version_segments] = version
|
|
37
|
+
return max(matches.items())[1]
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
# (c) Copyright 2026 CERN for the benefit of the LHCb Collaboration #
|
|
3
|
+
# #
|
|
4
|
+
# This software is distributed under the terms of the GNU General Public #
|
|
5
|
+
# Licence version 3 (GPL Version 3), copied verbatim in the file "COPYING". #
|
|
6
|
+
# #
|
|
7
|
+
# In applying this licence, CERN does not waive the privileges and immunities #
|
|
8
|
+
# granted to it by virtue of its status as an Intergovernmental Organization #
|
|
9
|
+
# or submit itself to any jurisdiction. #
|
|
10
|
+
###############################################################################
|
|
11
|
+
"""A small Pygments lexer for EvtGen ``.dec`` decay files.
|
|
12
|
+
|
|
13
|
+
Used to syntax-highlight the decay-file preview in the ``lb-ap generate`` wizard.
|
|
14
|
+
It highlights:
|
|
15
|
+
|
|
16
|
+
* the structured ``# Key: value`` header (NickName, Descriptor, ...),
|
|
17
|
+
* EvtGen keywords (``Alias``, ``Decay``, ``Enddecay``, ``CDecay``, ...),
|
|
18
|
+
* decay models and numeric branching fractions, and
|
|
19
|
+
* embedded Python inside ``# InsertPythonCode: ... # EndInsertPythonCode``
|
|
20
|
+
blocks (the code lines are ``#``-commented in the file; we strip the leading
|
|
21
|
+
``#`` and lex the remainder as real Python).
|
|
22
|
+
"""
|
|
23
|
+
|
|
24
|
+
import re
|
|
25
|
+
|
|
26
|
+
from pygments.lexer import Lexer, RegexLexer, bygroups
|
|
27
|
+
from pygments.lexers.python import PythonLexer
|
|
28
|
+
from pygments.token import (
|
|
29
|
+
Comment,
|
|
30
|
+
Keyword,
|
|
31
|
+
Name,
|
|
32
|
+
Number,
|
|
33
|
+
Operator,
|
|
34
|
+
Text,
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
# Keywords that introduce statements in a decay file.
|
|
38
|
+
_KEYWORDS = (
|
|
39
|
+
"Alias",
|
|
40
|
+
"ChargeConj",
|
|
41
|
+
"Decay",
|
|
42
|
+
"Enddecay",
|
|
43
|
+
"CDecay",
|
|
44
|
+
"Define",
|
|
45
|
+
"Particle",
|
|
46
|
+
"ModelAlias",
|
|
47
|
+
"JetSetPar",
|
|
48
|
+
"SetLineshapePW",
|
|
49
|
+
"ChangeMassMin",
|
|
50
|
+
"ChangeMassMax",
|
|
51
|
+
"End",
|
|
52
|
+
)
|
|
53
|
+
|
|
54
|
+
_PYCODE_START = re.compile(r"^#+\s*InsertPythonCode\b")
|
|
55
|
+
_PYCODE_END = re.compile(r"^#+\s*EndInsertPythonCode\b")
|
|
56
|
+
# A python-code line in the block: leading whitespace + "#" + optional space,
|
|
57
|
+
# then the actual code.
|
|
58
|
+
_PY_PREFIX = re.compile(r"(\s*#\s?)(.*)$")
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
class _DecBaseLexer(RegexLexer):
|
|
62
|
+
"""The non-Python token rules for ``.dec`` files."""
|
|
63
|
+
|
|
64
|
+
name = "DecFileBase"
|
|
65
|
+
|
|
66
|
+
tokens = {
|
|
67
|
+
"root": [
|
|
68
|
+
# Header metadata lines: "# NickName: value"
|
|
69
|
+
(
|
|
70
|
+
r"^(#\s*)([A-Za-z][\w ]*?)(:)(.*)$",
|
|
71
|
+
bygroups(Comment, Name.Attribute, Operator, Comment),
|
|
72
|
+
),
|
|
73
|
+
# Plain comments
|
|
74
|
+
(r"#.*$", Comment),
|
|
75
|
+
# Statement keywords
|
|
76
|
+
(r"\b(?:%s)\b" % "|".join(_KEYWORDS), Keyword),
|
|
77
|
+
# Branching fractions / numbers
|
|
78
|
+
(r"[-+]?\d+\.\d+(?:[eE][-+]?\d+)?", Number.Float),
|
|
79
|
+
(r"[-+]?\d+", Number.Integer),
|
|
80
|
+
# Decay arrows / operators
|
|
81
|
+
(r"->|,", Operator),
|
|
82
|
+
# Particle names (incl. the usual EvtGen punctuation)
|
|
83
|
+
(r"[A-Za-z][\w*+\-/'~()]*", Name),
|
|
84
|
+
(r"\s+", Text),
|
|
85
|
+
(r".", Text),
|
|
86
|
+
],
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
class DecFileLexer(Lexer):
|
|
91
|
+
"""Highlight ``.dec`` files, delegating embedded Python to ``PythonLexer``."""
|
|
92
|
+
|
|
93
|
+
name = "DecFile"
|
|
94
|
+
aliases = ["dec", "decfile"]
|
|
95
|
+
filenames = ["*.dec"]
|
|
96
|
+
|
|
97
|
+
def __init__(self, **options):
|
|
98
|
+
super().__init__(**options)
|
|
99
|
+
self._base = _DecBaseLexer(**options)
|
|
100
|
+
self._python = PythonLexer(**options)
|
|
101
|
+
|
|
102
|
+
def get_tokens_unprocessed(self, text):
|
|
103
|
+
pos = 0
|
|
104
|
+
in_python = False
|
|
105
|
+
for line in text.splitlines(keepends=True):
|
|
106
|
+
newline = "\n" if line.endswith("\n") else ""
|
|
107
|
+
body = line[: -len(newline)] if newline else line
|
|
108
|
+
stripped = body.strip()
|
|
109
|
+
|
|
110
|
+
if not in_python and _PYCODE_START.match(stripped):
|
|
111
|
+
yield from self._emit(self._base, line, pos)
|
|
112
|
+
in_python = True
|
|
113
|
+
elif in_python and _PYCODE_END.match(stripped):
|
|
114
|
+
yield from self._emit(self._base, line, pos)
|
|
115
|
+
in_python = False
|
|
116
|
+
elif in_python and (match := _PY_PREFIX.match(body)):
|
|
117
|
+
prefix, code = match.group(1), match.group(2)
|
|
118
|
+
# The "# " comment prefix, then the code lexed as real Python.
|
|
119
|
+
yield pos, Comment, prefix
|
|
120
|
+
yield from self._emit(self._python, code, pos + len(prefix))
|
|
121
|
+
if newline:
|
|
122
|
+
yield pos + len(prefix) + len(code), Text, newline
|
|
123
|
+
else:
|
|
124
|
+
yield from self._emit(self._base, line, pos)
|
|
125
|
+
|
|
126
|
+
pos += len(line)
|
|
127
|
+
|
|
128
|
+
@staticmethod
|
|
129
|
+
def _emit(lexer, chunk, offset):
|
|
130
|
+
for index, token, value in lexer.get_tokens_unprocessed(chunk):
|
|
131
|
+
yield offset + index, token, value
|