LbAPLocal 0.10.1__tar.gz → 0.10.2__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 (146) hide show
  1. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/PKG-INFO +1 -1
  2. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/cli/main.py +36 -0
  3. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/cli/wizards.py +3 -5
  4. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal.egg-info/PKG-INFO +1 -1
  5. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/.coveragerc +0 -0
  6. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/.gitattributes +0 -0
  7. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/.gitignore +0 -0
  8. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/.gitlab-ci.yml +0 -0
  9. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/.pre-commit-config.yaml +0 -0
  10. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/CONTRIBUTING.md +0 -0
  11. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/LICENSE +0 -0
  12. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/README.md +0 -0
  13. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/example.json +0 -0
  14. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/pyproject.toml +2 -2
  15. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/setup.cfg +0 -0
  16. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/__init__.py +0 -0
  17. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/cli/__init__.py +0 -0
  18. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/cli/generate.py +0 -0
  19. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/cli/legacy.py +0 -0
  20. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/cli/textual_ui.py +0 -0
  21. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/cwl/__init__.py +0 -0
  22. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/cwl/generate_replica_map.py +0 -0
  23. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/cwl/rewrite.py +0 -0
  24. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/handlers/__init__.py +0 -0
  25. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/handlers/anaprod.py +0 -0
  26. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/handlers/mc_request.py +0 -0
  27. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/job_slice.py +0 -0
  28. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/log_parsing.py +0 -0
  29. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/models.py +0 -0
  30. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/testing.py +0 -0
  31. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal/utils.py +0 -0
  32. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal.egg-info/SOURCES.txt +0 -0
  33. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal.egg-info/dependency_links.txt +0 -0
  34. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal.egg-info/entry_points.txt +0 -0
  35. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal.egg-info/requires.txt +0 -0
  36. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/src/LbAPLocal.egg-info/top_level.txt +0 -0
  37. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/capture_fixtures.py +0 -0
  38. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/cassettes/test_execute/test_run_test[2016_MagDown_PromptMC_D02KK-2444].yaml +0 -0
  39. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/cassettes/test_execute/test_run_test[2016_MagDown_PromptMC_D02KK_noautoconf-2444].yaml +0 -0
  40. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/cassettes/test_execute/test_run_test[2016_MagUp_PromptMC_D02KK-2393].yaml +0 -0
  41. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/cassettes/test_execute/test_run_test[2016_MagUp_PromptMC_D02KK_noautoconf-2393].yaml +0 -0
  42. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/conftest.py +0 -0
  43. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/.gitignore +0 -0
  44. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/.gitlab-ci.yml +0 -0
  45. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/AnalysisProductions.xenv +0 -0
  46. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/Bc2Bspi2JpsiPhi.py +0 -0
  47. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/Bd2JpsiKstar.py +0 -0
  48. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/Bd2JpsiKstar_stripping.py +0 -0
  49. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2DsPi.py +0 -0
  50. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2JpsiPhi.py +0 -0
  51. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2JpsiPhi_Prompt.py +0 -0
  52. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2JpsiPhi_Prompt_PVMixer.py +0 -0
  53. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/Bs2JpsiPhi_Swave.py +0 -0
  54. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/Bu2JpsiKplus.py +0 -0
  55. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/Bu2JpsiKplus_stripping.py +0 -0
  56. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/LbJpsipK.py +0 -0
  57. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/README.md +0 -0
  58. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/helpers/__init__.py +0 -0
  59. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/helpers/stripping.py +0 -0
  60. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/helpers/tuple_maker.py +0 -0
  61. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/info.yaml +0 -0
  62. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/BsToJpsiPhi/sequence_setup.py +0 -0
  63. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/COPYING +0 -0
  64. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/RDs/README.md +0 -0
  65. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/RDs/Run1_Signal.py +0 -0
  66. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/RDs/Run2_Signal.py +0 -0
  67. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/RDs/helpers/__init__.py +0 -0
  68. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/RDs/helpers/signal_tuple_maker.py +0 -0
  69. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/RDs/info.yaml +0 -0
  70. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/README.md +0 -0
  71. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/__init__.py +0 -0
  72. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/2011_datatype.py +0 -0
  73. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/2012_datatype.py +0 -0
  74. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/2015_datatype.py +0 -0
  75. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/2016_datatype.py +0 -0
  76. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/2017_datatype.py +0 -0
  77. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/2018_datatype.py +0 -0
  78. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/B0ToK0ee.py +0 -0
  79. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/B0ToK0mumu.py +0 -0
  80. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/BpToKee.py +0 -0
  81. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/BpToKmumu.py +0 -0
  82. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/LbToL0ee.py +0 -0
  83. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/LbToL0eeSS.py +0 -0
  84. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/LbToL0emu.py +0 -0
  85. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/LbToL0emuSS.py +0 -0
  86. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/LbToL0mumu.py +0 -0
  87. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/LbToL0mumuSS.py +0 -0
  88. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/README.md +0 -0
  89. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/__init__.py +0 -0
  90. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/general_options.py +0 -0
  91. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/helpers/MC_tuple_maker.py +0 -0
  92. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/helpers/__init__.py +0 -0
  93. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/helpers/decay_descriptors.py +0 -0
  94. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/helpers/locations.py +0 -0
  95. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/helpers/related_info.py +0 -0
  96. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/helpers/stripping.py +0 -0
  97. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/helpers/tags.py +0 -0
  98. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/helpers/tuple_maker.py +0 -0
  99. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/info.yaml +0 -0
  100. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_general_options_DST.py +0 -0
  101. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_general_options_FDST.py +0 -0
  102. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_general_options_FMDST.py +0 -0
  103. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_general_options_MDST.py +0 -0
  104. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2JpsiKs_ee.py +0 -0
  105. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2JpsiKs_mm.py +0 -0
  106. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2Ksee.py +0 -0
  107. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2Ksmm.py +0 -0
  108. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2PsiKs_ee.py +0 -0
  109. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bd2PsiKs_mm.py +0 -0
  110. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bu2JpsiK_ee.py +0 -0
  111. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Bu2JpsiK_mm.py +0 -0
  112. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2JpsiL_ee.py +0 -0
  113. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2JpsiL_mm.py +0 -0
  114. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2Lee.py +0 -0
  115. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2Lem.py +0 -0
  116. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2Lmm.py +0 -0
  117. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2PsiL_ee.py +0 -0
  118. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/mc_samples/MC_Lb2PsiL_mm.py +0 -0
  119. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/sequence_setup.py +0 -0
  120. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/cbtesting/stripping_seq.py +0 -0
  121. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/executabletests/2016_MagDown_PromptMC_D02KK_autoconf.py +0 -0
  122. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/executabletests/2016_MagUp_PromptMC_D02KK_autoconf.py +0 -0
  123. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/executabletests/info.yaml +0 -0
  124. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/data-pkg-repo/executabletests/ntuple_options.py +0 -0
  125. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/example-logs/error-failed-to-read-file.log +0 -0
  126. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/example-logs/error-illegal-instruction.log +0 -0
  127. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/example-logs/error-missing-shared-library.log +0 -0
  128. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/example-logs/error-platform-unsupported.log +0 -0
  129. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/example-logs/error-related-info-missing.log +0 -0
  130. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/example-logs/good-DaVinci_00110296_00000038_1.log +0 -0
  131. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/example-logs/good-DaVinci_00110296_00000194_1.log +0 -0
  132. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/data/example-logs/good-Gauss_00104988_00000011_1.log +0 -0
  133. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/fixture_loader.py +0 -0
  134. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/fixtures/executabletests/2016_MagDown_PromptMC_D02KK/query_result.json +0 -0
  135. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/fixtures/executabletests/2016_MagUp_PromptMC_D02KK/query_result.json +0 -0
  136. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/fixtures/executabletests/manifest.yaml +0 -0
  137. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/reslice_fixture.py +0 -0
  138. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/test-input-dst/00070767_00000711_7.AllStreams_slice.dst +0 -0
  139. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/test-input-dst/00070793_00000685_7.AllStreams_slice.dst +0 -0
  140. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/test_cli.py +0 -0
  141. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/test_cwl_cli.py +0 -0
  142. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/test_execute.py +0 -0
  143. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/test_generate.py +0 -0
  144. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/test_handlers.py +0 -0
  145. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/test_local_datapkg.py +0 -0
  146. {lbaplocal-0.10.1 → lbaplocal-0.10.2}/tests/test_log_parse.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: LbAPLocal
3
- Version: 0.10.1
3
+ Version: 0.10.2
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
@@ -20,6 +20,7 @@ import importlib.metadata
20
20
  import json
21
21
  import os
22
22
  import random
23
+ import re
23
24
  import shlex
24
25
  import shutil
25
26
  import subprocess
@@ -1359,6 +1360,41 @@ def clone(
1359
1360
  new_branch = params["branch_name"]
1360
1361
  clone_type = CloneType(params["clone_type"])
1361
1362
 
1363
+ # Validate argument count: only 0, 1, or 4 positional args are valid
1364
+ n_args = sum(
1365
+ x is not None for x in [branch_or_wg, production_name, version, new_branch]
1366
+ )
1367
+ if n_args == 2:
1368
+ err_console.print(
1369
+ "[bold red]✗ Invalid arguments:[/bold red] clone expects either "
1370
+ "1 argument (branch mode) or 4 arguments (production mode).\n\n"
1371
+ "[cyan]Usage:[/cyan]\n"
1372
+ " lb-ap clone my-branch # Branch mode\n"
1373
+ " lb-ap clone <wg> <production> <version> <branch> # Production mode\n"
1374
+ " lb-ap clone # Interactive wizard"
1375
+ )
1376
+ raise typer.Exit(code=1)
1377
+ if n_args == 3:
1378
+ version_re = re.compile(r"v\d+r\d+(?:p\d+)?$")
1379
+ if version_re.match(branch_or_wg):
1380
+ err_console.print(
1381
+ "[bold red]✗ Invalid arguments:[/bold red] it looks like the "
1382
+ "arguments may be in the wrong order.\n\n"
1383
+ "[cyan]Expected order:[/cyan]\n"
1384
+ " lb-ap clone <working-group> <production> <version> <new-branch>\n\n"
1385
+ f"[cyan]Did you mean:[/cyan]\n"
1386
+ f" lb-ap clone {production_name} {version} {branch_or_wg} <new-branch>"
1387
+ )
1388
+ else:
1389
+ err_console.print(
1390
+ "[bold red]✗ Invalid arguments:[/bold red] production mode requires "
1391
+ "4 arguments but only 3 were given.\n\n"
1392
+ "[cyan]Usage:[/cyan]\n"
1393
+ f" lb-ap clone {branch_or_wg} {production_name} {version} <new-branch>\n\n"
1394
+ "The 4th argument is the name of the new branch to create."
1395
+ )
1396
+ raise typer.Exit(code=1)
1397
+
1362
1398
  # Determine mode: branch clone vs production checkout
1363
1399
  is_production_mode = all([production_name, version, new_branch])
1364
1400
 
@@ -614,18 +614,16 @@ def generate_wizard(seen_welcome: bool = False) -> dict:
614
614
  )
615
615
 
616
616
  wg_validator = prompt_toolkit.validation.Validator.from_callable(
617
- lambda wg: wg.upper() in [k.upper() for k in known_working_groups]
618
- )
619
- wg_completer = prompt_toolkit.completion.WordCompleter(
620
- known_working_groups, ignore_case=True
617
+ lambda wg: wg in known_working_groups
621
618
  )
619
+ wg_completer = prompt_toolkit.completion.FuzzyWordCompleter(known_working_groups)
622
620
 
623
621
  wg = prompt_toolkit.prompt(
624
622
  "Enter working group: ",
625
623
  default=detected_wg,
626
624
  completer=wg_completer,
627
625
  validator=wg_validator,
628
- ).upper()
626
+ )
629
627
 
630
628
  console.print(f"\n[bold cyan]Step {step}: Review[/bold cyan]")
631
629
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: LbAPLocal
3
- Version: 0.10.1
3
+ Version: 0.10.2
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
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
@@ -107,10 +107,10 @@ pip = "*"
107
107
  textual-plotext = "*"
108
108
  nodejs = "*"
109
109
  quickjs = "*"
110
-
111
- [tool.pixi.target.linux-64.dependencies]
112
110
  python-gfal2 = "*"
113
111
  m2crypto = ">=0.38.0"
112
+
113
+ [tool.pixi.target.linux-64.dependencies]
114
114
  prmon = "*"
115
115
 
116
116
  [tool.pixi.pypi-dependencies]
File without changes
File without changes
File without changes