builder2ibek 2.1.0__tar.gz → 2.2.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.
Files changed (323) hide show
  1. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.devcontainer/devcontainer.json +2 -21
  2. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.devcontainer/postCreate.sh +0 -6
  3. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/Dockerfile +3 -3
  4. {builder2ibek-2.1.0/src/builder2ibek.egg-info → builder2ibek-2.2.0}/PKG-INFO +3 -8
  5. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/README.md +2 -7
  6. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/_version.py +3 -3
  7. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/convert.py +23 -0
  8. {builder2ibek-2.1.0 → builder2ibek-2.2.0/src/builder2ibek.egg-info}/PKG-INFO +3 -8
  9. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek.egg-info/SOURCES.txt +7 -7
  10. builder2ibek-2.2.0/src/builder2ibek.egg-info/scm_file_list.json +309 -0
  11. builder2ibek-2.2.0/src/builder2ibek.egg-info/scm_version.json +8 -0
  12. builder2ibek-2.2.0/tests/samples/BL03I-MO-IOC-11.xml +27 -0
  13. builder2ibek-2.2.0/tests/samples/cross_ref_test.ioc.subst +46 -0
  14. builder2ibek-2.2.0/tests/samples/cross_ref_test.st.cmd +20 -0
  15. builder2ibek-2.2.0/tests/samples/cross_ref_test.xml +10 -0
  16. builder2ibek-2.2.0/tests/samples/cross_ref_test.yaml +53 -0
  17. builder2ibek-2.1.0/.devcontainer/Dockerfile +0 -46
  18. builder2ibek-2.1.0/.devcontainer/claude-sandbox/claude-shadow +0 -376
  19. builder2ibek-2.1.0/.devcontainer/claude-sandbox/install.sh +0 -285
  20. builder2ibek-2.1.0/.devcontainer/claude-sandbox/promote.sh +0 -194
  21. builder2ibek-2.1.0/.devcontainer/claude-sandbox.conf +0 -38
  22. builder2ibek-2.1.0/justfile +0 -55
  23. builder2ibek-2.1.0/out.yaml +0 -42
  24. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/commands/beamline-check.md +0 -0
  25. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/commands/beamline-convert.md +0 -0
  26. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/commands/beamline-reconvert.md +0 -0
  27. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/commands/ioc-check.md +0 -0
  28. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/commands/ioc-convert-raw.md +0 -0
  29. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/commands/ioc-convert.md +0 -0
  30. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/commands/ioc-inspect.md +0 -0
  31. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/commands/memo.md +0 -0
  32. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/commands/support-create.md +0 -0
  33. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/commands/support-fix.md +0 -0
  34. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/commands/support-inspect.md +0 -0
  35. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/hooks/sandbox-check.sh +0 -0
  36. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/settings.json +0 -0
  37. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/beamline-gui/SKILL.md +0 -0
  38. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/ibek-concepts/SKILL.md +0 -0
  39. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/ibek-support-ansible/SKILL.md +0 -0
  40. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/shared/autosave-conversion.md +0 -0
  41. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/shared/builder-py-analysis.md +0 -0
  42. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/shared/error-categorization.md +0 -0
  43. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/shared/find-boot-script.md +0 -0
  44. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/shared/find-ioc-xmls.md +0 -0
  45. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/shared/find-module-path.md +0 -0
  46. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/shared/module-rename-map.md +0 -0
  47. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/shared/module-special-cases.md +0 -0
  48. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/shared/services-repo-resolution.md +0 -0
  49. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/shared/support-yaml-rules.md +0 -0
  50. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/shared/vxworks-to-rtems-differences.md +0 -0
  51. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/skills/skills-edit/SKILL.md +0 -0
  52. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.claude/statusline-command.sh +0 -0
  53. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.copier-answers.yml +0 -0
  54. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.devcontainer/initializeCommand.sh +0 -0
  55. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.devcontainer/local_build.sh +0 -0
  56. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.gitattributes +0 -0
  57. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/CONTRIBUTING.md +0 -0
  58. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
  59. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/ISSUE_TEMPLATE/issue.md +0 -0
  60. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
  61. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/copilot-instructions.md +0 -0
  62. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/pages/index.html +0 -0
  63. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/pages/make_switcher.py +0 -0
  64. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/workflows/_dist.yml +0 -0
  65. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/workflows/_docs.yml +0 -0
  66. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/workflows/_pypi.yml +0 -0
  67. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/workflows/_release.yml +0 -0
  68. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/workflows/_test.yml +0 -0
  69. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/workflows/_tox.yml +0 -0
  70. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/workflows/ci.yml +0 -0
  71. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.github/workflows/periodic.yml +0 -0
  72. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.gitignore +0 -0
  73. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.gitleaks.toml +0 -0
  74. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.gitmodules +0 -0
  75. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.gitremotes +0 -0
  76. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.pre-commit-config.yaml +0 -0
  77. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.python-version +0 -0
  78. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.vscode/extensions.json +0 -0
  79. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.vscode/mcp.json +0 -0
  80. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.vscode/settings.json +0 -0
  81. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/.vscode/tasks.json +0 -0
  82. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/CLAUDE.md +0 -0
  83. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/LICENSE +0 -0
  84. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/bl21i-mo-ioc-01_blacklist.txt +0 -0
  85. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/_api.rst +0 -0
  86. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/_templates/custom-module-template.rst +0 -0
  87. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/conf.py +0 -0
  88. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/conftest.py +0 -0
  89. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/explanations/decisions/0001-record-architecture-decisions.md +0 -0
  90. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/explanations/decisions/0002-switched-to-python-copier-template.md +0 -0
  91. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/explanations/decisions/0003-remove-mcp-server-for-copilot.md +0 -0
  92. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/explanations/decisions/COPYME +0 -0
  93. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/explanations/decisions.md +0 -0
  94. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/explanations.md +0 -0
  95. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/genindex.md +0 -0
  96. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/how-to/after-beamline-convert.md +0 -0
  97. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/how-to/autosave.md +0 -0
  98. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/how-to/contribute.md +0 -0
  99. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/how-to/convert-ioc-instance.md +0 -0
  100. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/how-to/create-converter.md +0 -0
  101. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/how-to/create-generic-ioc-repo.md +0 -0
  102. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/how-to/migrate-autosave.md +0 -0
  103. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/how-to/runtime-support.md +0 -0
  104. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/how-to/verify-with-devcontainer.md +0 -0
  105. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/how-to.md +0 -0
  106. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/images/dls-logo.svg +0 -0
  107. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/index.md +0 -0
  108. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/reference/dlsplc-migration.md +0 -0
  109. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/reference.md +0 -0
  110. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/tutorials/convert-ioc-xml.md +0 -0
  111. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/tutorials/create-support-yaml-advanced.md +0 -0
  112. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/tutorials/create-support-yaml.md +0 -0
  113. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/tutorials/installation.md +0 -0
  114. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/docs/tutorials.md +0 -0
  115. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/pyproject.toml +0 -0
  116. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/renovate.json +0 -0
  117. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/setup.cfg +0 -0
  118. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/__init__.py +0 -0
  119. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/__main__.py +0 -0
  120. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/builder.py +0 -0
  121. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ACCELCryoIP.py +0 -0
  122. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ADAndor.py +0 -0
  123. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ADAravis.py +0 -0
  124. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ADCore.py +0 -0
  125. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ADIvium.py +0 -0
  126. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ADOdin.py +0 -0
  127. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ADOdinTristan.py +0 -0
  128. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ADPilatus.py +0 -0
  129. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ADZMQ.py +0 -0
  130. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/AMI186.py +0 -0
  131. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/BL11I.py +0 -0
  132. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/BL15I-BUILDER.py +0 -0
  133. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/BL19I.py +0 -0
  134. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/BL20J.py +0 -0
  135. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/BL21I.py +0 -0
  136. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/BL46P-BUILDER.py +0 -0
  137. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/BLGui.py +0 -0
  138. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/BLfeedback.py +0 -0
  139. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/CrateMonitor.py +0 -0
  140. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/CryoCoolerXV.py +0 -0
  141. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/DLS8515.py +0 -0
  142. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/DruckDPI515.py +0 -0
  143. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ETLdetector.py +0 -0
  144. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/FINS.py +0 -0
  145. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/FastVacuum.py +0 -0
  146. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/Hy8401ip-asyn.py +0 -0
  147. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/Hy8401ip.py +0 -0
  148. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/Hy8401ipTemplates.py +0 -0
  149. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/Hy8402ip.py +0 -0
  150. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/Hy8414.py +0 -0
  151. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/IOCInfo.py +0 -0
  152. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/OXCS700.py +0 -0
  153. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/OXCS700asyn.py +0 -0
  154. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/OXCryo.py +0 -0
  155. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/QPC.py +0 -0
  156. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/README.md +0 -0
  157. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/SR-VA.py +0 -0
  158. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/SchottLLS.py +0 -0
  159. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/SycosH-Hot.py +0 -0
  160. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/TimingTemplates.py +0 -0
  161. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/Xspress3.py +0 -0
  162. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/__init__.py +0 -0
  163. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/adUtil.py +0 -0
  164. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/agilent33220A.py +0 -0
  165. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/agilent53220.py +0 -0
  166. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/alicatGasFlow.py +0 -0
  167. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/asyn.py +0 -0
  168. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/autosave.py +0 -0
  169. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/bronkhorstFlowBus.py +0 -0
  170. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/cmsIon.py +0 -0
  171. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/cognexDataMan100.py +0 -0
  172. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/currAmp.py +0 -0
  173. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/deltaTauPLCStat.py +0 -0
  174. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/deviocstats.py +0 -0
  175. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/digitelMpc.py +0 -0
  176. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/digitelSpc.py +0 -0
  177. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/directoryMonitor.py +0 -0
  178. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/dlsPLC.py +0 -0
  179. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/enzLoCuM4.py +0 -0
  180. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/epics_base.py +0 -0
  181. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ether_ip.py +0 -0
  182. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ethercat.py +0 -0
  183. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/eurotherm2k.py +0 -0
  184. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/eurothermModbus.py +0 -0
  185. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/femto.py +0 -0
  186. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ffmpegServer.py +0 -0
  187. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/filters.py +0 -0
  188. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/fogaleHLS.py +0 -0
  189. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/fw102.py +0 -0
  190. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/fzoom.py +0 -0
  191. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/gasInjectionRig.py +0 -0
  192. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/gdaPlugins.py +0 -0
  193. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/gdaPlugins.yaml +0 -0
  194. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/globalHandler.py +0 -0
  195. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/harvardSyringe.py +0 -0
  196. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/hidenRGA.py +0 -0
  197. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/insertionDevice.py +0 -0
  198. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/interlock.py +0 -0
  199. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/ipac.py +0 -0
  200. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/keithley6514.py +0 -0
  201. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/lakeshore336.py +0 -0
  202. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/lakeshore340.py +0 -0
  203. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/laudaRE2xx.py +0 -0
  204. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/leybold.py +0 -0
  205. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/mca.py +0 -0
  206. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/mirror.py +0 -0
  207. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/mitsubishiRobot.py +0 -0
  208. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/mks937a.py +0 -0
  209. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/mks937b.py +0 -0
  210. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/mks9xx.py +0 -0
  211. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/motomanNX100.py +0 -0
  212. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/motor.py +0 -0
  213. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/motorSmarAct.py +0 -0
  214. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/mrfTiming.py +0 -0
  215. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/mrfioc2.py +0 -0
  216. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/mxEH.py +0 -0
  217. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/pgmVls.py +0 -0
  218. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/picotechPT104.py +0 -0
  219. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/pmac.py +0 -0
  220. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/pmacCoord.py +0 -0
  221. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/pmacUtil.py +0 -0
  222. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/positioner.py +0 -0
  223. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/procServControl.py +0 -0
  224. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/pvlogging.py +0 -0
  225. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/quadEM.py +0 -0
  226. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/rackFan.py +0 -0
  227. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/records.py +0 -0
  228. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/rga.py +0 -0
  229. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/rgamv2.py +0 -0
  230. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/scpi.py +0 -0
  231. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/slsDetector.py +0 -0
  232. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/smaractEcm.py +0 -0
  233. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/smargon.py +0 -0
  234. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/strainGauge.py +0 -0
  235. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/temperature.py +0 -0
  236. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/terminalserver.py +0 -0
  237. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/tpmac.py +0 -0
  238. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/transfocator.py +0 -0
  239. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/uniblitz.py +0 -0
  240. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/userIO.py +0 -0
  241. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/utility.py +0 -0
  242. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/vacuumSpace.py +0 -0
  243. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/vacuumValve.py +0 -0
  244. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/water.py +0 -0
  245. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/converters/zebra.py +0 -0
  246. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/db2autosave.py +0 -0
  247. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/dbcompare.py +0 -0
  248. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/migrate_autosave.py +0 -0
  249. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/moduleinfos.py +0 -0
  250. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/reconvert.py +0 -0
  251. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/support_defaults.py +0 -0
  252. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/types.py +0 -0
  253. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek/utils.py +0 -0
  254. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek.egg-info/dependency_links.txt +0 -0
  255. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek.egg-info/entry_points.txt +0 -0
  256. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek.egg-info/requires.txt +0 -0
  257. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/src/builder2ibek.egg-info/top_level.txt +0 -0
  258. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/__init__.py +0 -0
  259. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/conftest.py +0 -0
  260. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/BL04I-MO-IOC-03.xml +0 -0
  261. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/BL04I-VA-IOC-01.xml +0 -0
  262. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/BL04I-VA-IOC-01_expanded.db +0 -0
  263. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/BL11I-CS-IOC-09.xml +0 -0
  264. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/BL11I-VA-IOC-01.xml +0 -0
  265. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/BL15I-VA-IOC-01.xml +0 -0
  266. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/BL16I-VA-IOC-01.xml +0 -0
  267. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/BL19I-VA-IOC-01.xml +0 -0
  268. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/BL21I-MO-IOC-01.xml +0 -0
  269. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/BL45P-MO-IOC-01.xml +0 -0
  270. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/BL99P-EA-IOC-05.xml +0 -0
  271. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/BL99P-EA-IOC-05.yaml +0 -0
  272. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/SR03C-VA-IOC-01.xml +0 -0
  273. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/SR03C-VA-IOC-01_expanded.db +0 -0
  274. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl04i-mo-ioc-03.ioc.subst +0 -0
  275. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl04i-mo-ioc-03.st.cmd +0 -0
  276. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl04i-mo-ioc-03.yaml +0 -0
  277. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl04i-va-ioc-01.ioc.subst +0 -0
  278. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl04i-va-ioc-01.st.cmd +0 -0
  279. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl04i-va-ioc-01.yaml +0 -0
  280. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl11i-cs-ioc-09.ioc.subst +0 -0
  281. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl11i-cs-ioc-09.st.cmd +0 -0
  282. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl11i-cs-ioc-09.yaml +0 -0
  283. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl11i-va-ioc-01.ioc.subst +0 -0
  284. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl11i-va-ioc-01.st.cmd +0 -0
  285. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl11i-va-ioc-01.yaml +0 -0
  286. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl15i-va-ioc-01.ioc.subst +0 -0
  287. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl15i-va-ioc-01.st.cmd +0 -0
  288. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl15i-va-ioc-01.yaml +0 -0
  289. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl16i-va-ioc-01.ioc.subst +0 -0
  290. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl16i-va-ioc-01.st.cmd +0 -0
  291. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl16i-va-ioc-01.yaml +0 -0
  292. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl19i-va-ioc-01.ioc.subst +0 -0
  293. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl19i-va-ioc-01.st.cmd +0 -0
  294. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl19i-va-ioc-01.yaml +0 -0
  295. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl21i-mo-ioc-01.ioc.subst +0 -0
  296. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl21i-mo-ioc-01.st.cmd +0 -0
  297. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl21i-mo-ioc-01.yaml +0 -0
  298. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl21i-mo-ioc-01_blacklist.txt +0 -0
  299. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl45p-mo-ioc-01.ioc.subst +0 -0
  300. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl45p-mo-ioc-01.st.cmd +0 -0
  301. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl45p-mo-ioc-01.yaml +0 -0
  302. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl99p-ea-ioc-05.ioc.subst +0 -0
  303. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl99p-ea-ioc-05.st.cmd +0 -0
  304. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/bl99p-ea-ioc-05.yaml +0 -0
  305. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/compare.diff +0 -0
  306. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/make_samples.sh +0 -0
  307. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/motor.template +0 -0
  308. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/motorpositioner.ioc.subst +0 -0
  309. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/motorpositioner.st.cmd +0 -0
  310. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/motorpositioner.xml +0 -0
  311. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/motorpositioner.yaml +0 -0
  312. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/sr03c-va-ioc-01.db +0 -0
  313. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/sr03c-va-ioc-01.ioc.subst +0 -0
  314. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/sr03c-va-ioc-01.st.cmd +0 -0
  315. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/samples/sr03c-va-ioc-01.yaml +0 -0
  316. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/test_autosave.py +0 -0
  317. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/test_cli.py +0 -0
  318. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/test_compare.py +0 -0
  319. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/test_file_conversion.py +0 -0
  320. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/test_migrate_autosave.py +0 -0
  321. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/tests/test_reconvert_cli.py +0 -0
  322. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/update-schema +0 -0
  323. {builder2ibek-2.1.0 → builder2ibek-2.2.0}/uv.lock +0 -0
@@ -45,13 +45,12 @@
45
45
  ]
46
46
  }
47
47
  },
48
- // Create the config folder for the bash-config feature and uv cache
49
- "initializeCommand": "mkdir -p ${localEnv:HOME}/.config/terminal-config",
50
48
  "runArgs": [
51
49
  // Allow the container to access the host X11 display and EPICS CA
52
50
  "--net=host",
53
51
  // Make sure SELinux does not disable with access to host filesystems like tmp
54
- "--security-opt=label=disable"
52
+ "--security-opt=label=disable",
53
+ "--device=/dev/net/tun"
55
54
  ],
56
55
  "mounts": [
57
56
  // Mount in the user terminal config folder so it can be edited
@@ -66,24 +65,6 @@
66
65
  "target": "/cache",
67
66
  "type": "volume"
68
67
  },
69
- // Persist gh auth across container rebuilds with per-repo scoped PAT
70
- {
71
- "source": "gh-auth-${localWorkspaceFolderBasename}",
72
- "target": "/root/.config/gh",
73
- "type": "volume"
74
- },
75
- // Persist glab auth across container rebuilds (GitLab CLI, for ibek-support-dls)
76
- {
77
- "source": "glab-auth-${localWorkspaceFolderBasename}",
78
- "target": "/root/.config/glab-cli",
79
- "type": "volume"
80
- },
81
- // Mount Claude config from host (settings, memory, skills)
82
- {
83
- "source": "${localEnv:HOME}/.claude",
84
- "target": "/root/.claude",
85
- "type": "bind"
86
- },
87
68
  // Mount /dls_sw readonly; slave propagation ensures autofs submounts on the host
88
69
  // are visible inside the container without needing to trigger them from within it
89
70
  "type=bind,source=/dls_sw,target=/dls_sw,readonly,bind-propagation=slave"
@@ -1,9 +1,6 @@
1
1
  #!/bin/bash
2
2
  set -euo pipefail
3
3
 
4
- # Install Claude Code CLI
5
- curl -fsSL https://claude.ai/install.sh | bash
6
-
7
4
  # Install Python dependencies and pre-commit hooks
8
5
  uv venv --clear
9
6
  uv sync
@@ -11,6 +8,3 @@ pre-commit install --install-hooks
11
8
 
12
9
  # Initialise git submodules if any are declared
13
10
  [ -f .gitmodules ] && git submodule update --init || true
14
-
15
- # claude-sandbox: bring up the sandbox (added by just promote).
16
- bash .devcontainer/claude-sandbox/install.sh
@@ -4,6 +4,6 @@ ARG PYTHON_VERSION=3.13
4
4
  FROM ghcr.io/diamondlightsource/ubuntu-devcontainer:noble AS developer
5
5
 
6
6
  # Add any system dependencies for the developer/build environment here
7
- RUN apt-get update -y && apt-get install -y --no-install-recommends \
8
- graphviz \
9
- && apt-get dist-clean
7
+ # RUN apt-get update -y && apt-get install -y --no-install-recommends \
8
+ # graphviz \
9
+ # && apt-get dist-clean
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: builder2ibek
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Conversion tool for DLS XML builder IOC instances to ibek ioc.yaml
5
5
  Author-email: Giles Knap <giles.knap@diamond.ac.uk>
6
6
  License: Apache License
@@ -233,14 +233,9 @@ PyPI | `pip install builder2ibek`
233
233
  Documentation | <https://epics-containers.github.io/builder2ibek>
234
234
  Releases | <https://github.com/epics-containers/builder2ibek/releases>
235
235
 
236
- Note: the devcontainer includes Claude Code vscode plugin and skills for doing
237
- IOC conversions from XmlBuilder to ibek.
236
+ # Claude
238
237
 
239
- For a fully up to date claude client you can install the latest CLI as follows:
240
-
241
- ```bash
242
- curl -fsSL https://claude.ai/install.sh | bash
243
- ```
238
+ For Claude agentic conversions, use the [claude-sandbox guest project](https://github.com/gilesknap/claude-sandbox) as a peer workspace.
244
239
 
245
240
  ## Testing
246
241
 
@@ -15,14 +15,9 @@ PyPI | `pip install builder2ibek`
15
15
  Documentation | <https://epics-containers.github.io/builder2ibek>
16
16
  Releases | <https://github.com/epics-containers/builder2ibek/releases>
17
17
 
18
- Note: the devcontainer includes Claude Code vscode plugin and skills for doing
19
- IOC conversions from XmlBuilder to ibek.
18
+ # Claude
20
19
 
21
- For a fully up to date claude client you can install the latest CLI as follows:
22
-
23
- ```bash
24
- curl -fsSL https://claude.ai/install.sh | bash
25
- ```
20
+ For Claude agentic conversions, use the [claude-sandbox guest project](https://github.com/gilesknap/claude-sandbox) as a peer workspace.
26
21
 
27
22
  ## Testing
28
23
 
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '2.1.0'
22
- __version_tuple__ = version_tuple = (2, 1, 0)
21
+ __version__ = version = '2.2.0'
22
+ __version_tuple__ = version_tuple = (2, 2, 0)
23
23
 
24
- __commit_id__ = commit_id = 'g4a8d3b809'
24
+ __commit_id__ = commit_id = 'g9ecee7725'
@@ -163,6 +163,20 @@ def _has_leading_zero(val: str) -> bool:
163
163
  return len(val) > 1 and val[0] == "0" and val[1] != "."
164
164
 
165
165
 
166
+ _CROSS_REF_RE = re.compile(r"^\$\(([^)]+)\)$")
167
+
168
+
169
+ def _jinja_type_filter(raw_value: str | None) -> str:
170
+ """Return the Jinja2 type filter for a raw XML attribute value."""
171
+ try:
172
+ f = float(raw_value) # type: ignore
173
+ if _has_leading_zero(raw_value): # type: ignore
174
+ return "string"
175
+ return "int" if f.is_integer() else "float"
176
+ except (ValueError, TypeError):
177
+ return "string"
178
+
179
+
166
180
  def make_entity(element: Element) -> Entity:
167
181
  """
168
182
  default Entity creation is a direct mapping
@@ -174,6 +188,15 @@ def make_entity(element: Element) -> Entity:
174
188
  entity.type = f"{element.module}.{element.name}"
175
189
 
176
190
  for attribute_name, attribute_val in element.attributes.items():
191
+ # detect cross-references like $(MRES) and convert to Jinja2 templates
192
+ m = _CROSS_REF_RE.match(attribute_val)
193
+ if m:
194
+ ref_name = m.group(1)
195
+ ref_val = element.attributes.get(ref_name)
196
+ type_filter = _jinja_type_filter(ref_val)
197
+ entity[attribute_name] = f"{{{{ {ref_name} | {type_filter} }}}}"
198
+ continue
199
+
177
200
  # convert to numeric type if appropriate, otherwise Serialize will
178
201
  # put quotes around numbers in the YAML
179
202
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: builder2ibek
3
- Version: 2.1.0
3
+ Version: 2.2.0
4
4
  Summary: Conversion tool for DLS XML builder IOC instances to ibek ioc.yaml
5
5
  Author-email: Giles Knap <giles.knap@diamond.ac.uk>
6
6
  License: Apache License
@@ -233,14 +233,9 @@ PyPI | `pip install builder2ibek`
233
233
  Documentation | <https://epics-containers.github.io/builder2ibek>
234
234
  Releases | <https://github.com/epics-containers/builder2ibek/releases>
235
235
 
236
- Note: the devcontainer includes Claude Code vscode plugin and skills for doing
237
- IOC conversions from XmlBuilder to ibek.
236
+ # Claude
238
237
 
239
- For a fully up to date claude client you can install the latest CLI as follows:
240
-
241
- ```bash
242
- curl -fsSL https://claude.ai/install.sh | bash
243
- ```
238
+ For Claude agentic conversions, use the [claude-sandbox guest project](https://github.com/gilesknap/claude-sandbox) as a peer workspace.
244
239
 
245
240
  ## Testing
246
241
 
@@ -11,8 +11,6 @@ Dockerfile
11
11
  LICENSE
12
12
  README.md
13
13
  bl21i-mo-ioc-01_blacklist.txt
14
- justfile
15
- out.yaml
16
14
  pyproject.toml
17
15
  renovate.json
18
16
  update-schema
@@ -46,15 +44,10 @@ uv.lock
46
44
  .claude/skills/shared/support-yaml-rules.md
47
45
  .claude/skills/shared/vxworks-to-rtems-differences.md
48
46
  .claude/skills/skills-edit/SKILL.md
49
- .devcontainer/Dockerfile
50
- .devcontainer/claude-sandbox.conf
51
47
  .devcontainer/devcontainer.json
52
48
  .devcontainer/initializeCommand.sh
53
49
  .devcontainer/local_build.sh
54
50
  .devcontainer/postCreate.sh
55
- .devcontainer/claude-sandbox/claude-shadow
56
- .devcontainer/claude-sandbox/install.sh
57
- .devcontainer/claude-sandbox/promote.sh
58
51
  .github/CONTRIBUTING.md
59
52
  .github/copilot-instructions.md
60
53
  .github/ISSUE_TEMPLATE/bug_report.md
@@ -122,6 +115,8 @@ src/builder2ibek.egg-info/SOURCES.txt
122
115
  src/builder2ibek.egg-info/dependency_links.txt
123
116
  src/builder2ibek.egg-info/entry_points.txt
124
117
  src/builder2ibek.egg-info/requires.txt
118
+ src/builder2ibek.egg-info/scm_file_list.json
119
+ src/builder2ibek.egg-info/scm_version.json
125
120
  src/builder2ibek.egg-info/top_level.txt
126
121
  src/builder2ibek/converters/ACCELCryoIP.py
127
122
  src/builder2ibek/converters/ADAndor.py
@@ -256,6 +251,7 @@ tests/test_compare.py
256
251
  tests/test_file_conversion.py
257
252
  tests/test_migrate_autosave.py
258
253
  tests/test_reconvert_cli.py
254
+ tests/samples/BL03I-MO-IOC-11.xml
259
255
  tests/samples/BL04I-MO-IOC-03.xml
260
256
  tests/samples/BL04I-VA-IOC-01.xml
261
257
  tests/samples/BL04I-VA-IOC-01_expanded.db
@@ -302,6 +298,10 @@ tests/samples/bl99p-ea-ioc-05.ioc.subst
302
298
  tests/samples/bl99p-ea-ioc-05.st.cmd
303
299
  tests/samples/bl99p-ea-ioc-05.yaml
304
300
  tests/samples/compare.diff
301
+ tests/samples/cross_ref_test.ioc.subst
302
+ tests/samples/cross_ref_test.st.cmd
303
+ tests/samples/cross_ref_test.xml
304
+ tests/samples/cross_ref_test.yaml
305
305
  tests/samples/make_samples.sh
306
306
  tests/samples/motor.template
307
307
  tests/samples/motorpositioner.ioc.subst
@@ -0,0 +1,309 @@
1
+ {
2
+ "files": [
3
+ ".pre-commit-config.yaml",
4
+ ".gitremotes",
5
+ "README.md",
6
+ "uv.lock",
7
+ ".gitmodules",
8
+ "update-schema",
9
+ "Dockerfile",
10
+ ".python-version",
11
+ "LICENSE",
12
+ "pyproject.toml",
13
+ "renovate.json",
14
+ "bl21i-mo-ioc-01_blacklist.txt",
15
+ ".gitattributes",
16
+ "CLAUDE.md",
17
+ ".gitleaks.toml",
18
+ ".gitignore",
19
+ ".copier-answers.yml",
20
+ ".devcontainer/postCreate.sh",
21
+ ".devcontainer/initializeCommand.sh",
22
+ ".devcontainer/local_build.sh",
23
+ ".devcontainer/devcontainer.json",
24
+ ".vscode/tasks.json",
25
+ ".vscode/settings.json",
26
+ ".vscode/mcp.json",
27
+ ".vscode/extensions.json",
28
+ "docs/explanations.md",
29
+ "docs/how-to.md",
30
+ "docs/tutorials.md",
31
+ "docs/_api.rst",
32
+ "docs/genindex.md",
33
+ "docs/conftest.py",
34
+ "docs/conf.py",
35
+ "docs/reference.md",
36
+ "docs/index.md",
37
+ "docs/images/dls-logo.svg",
38
+ "docs/_templates/custom-module-template.rst",
39
+ "docs/how-to/verify-with-devcontainer.md",
40
+ "docs/how-to/after-beamline-convert.md",
41
+ "docs/how-to/contribute.md",
42
+ "docs/how-to/create-generic-ioc-repo.md",
43
+ "docs/how-to/create-converter.md",
44
+ "docs/how-to/convert-ioc-instance.md",
45
+ "docs/how-to/runtime-support.md",
46
+ "docs/how-to/migrate-autosave.md",
47
+ "docs/how-to/autosave.md",
48
+ "docs/explanations/decisions.md",
49
+ "docs/explanations/decisions/COPYME",
50
+ "docs/explanations/decisions/0002-switched-to-python-copier-template.md",
51
+ "docs/explanations/decisions/0003-remove-mcp-server-for-copilot.md",
52
+ "docs/explanations/decisions/0001-record-architecture-decisions.md",
53
+ "docs/reference/dlsplc-migration.md",
54
+ "docs/tutorials/installation.md",
55
+ "docs/tutorials/create-support-yaml-advanced.md",
56
+ "docs/tutorials/convert-ioc-xml.md",
57
+ "docs/tutorials/create-support-yaml.md",
58
+ "src/builder2ibek/__init__.py",
59
+ "src/builder2ibek/reconvert.py",
60
+ "src/builder2ibek/utils.py",
61
+ "src/builder2ibek/db2autosave.py",
62
+ "src/builder2ibek/builder.py",
63
+ "src/builder2ibek/migrate_autosave.py",
64
+ "src/builder2ibek/moduleinfos.py",
65
+ "src/builder2ibek/dbcompare.py",
66
+ "src/builder2ibek/convert.py",
67
+ "src/builder2ibek/support_defaults.py",
68
+ "src/builder2ibek/__main__.py",
69
+ "src/builder2ibek/types.py",
70
+ "src/builder2ibek/converters/lakeshore340.py",
71
+ "src/builder2ibek/converters/water.py",
72
+ "src/builder2ibek/converters/quadEM.py",
73
+ "src/builder2ibek/converters/temperature.py",
74
+ "src/builder2ibek/converters/agilent33220A.py",
75
+ "src/builder2ibek/converters/deltaTauPLCStat.py",
76
+ "src/builder2ibek/converters/cognexDataMan100.py",
77
+ "src/builder2ibek/converters/OXCS700.py",
78
+ "src/builder2ibek/converters/asyn.py",
79
+ "src/builder2ibek/converters/FastVacuum.py",
80
+ "src/builder2ibek/converters/mrfTiming.py",
81
+ "src/builder2ibek/converters/ADCore.py",
82
+ "src/builder2ibek/converters/README.md",
83
+ "src/builder2ibek/converters/uniblitz.py",
84
+ "src/builder2ibek/converters/__init__.py",
85
+ "src/builder2ibek/converters/motorSmarAct.py",
86
+ "src/builder2ibek/converters/DLS8515.py",
87
+ "src/builder2ibek/converters/ADAravis.py",
88
+ "src/builder2ibek/converters/Xspress3.py",
89
+ "src/builder2ibek/converters/BL15I-BUILDER.py",
90
+ "src/builder2ibek/converters/IOCInfo.py",
91
+ "src/builder2ibek/converters/BL46P-BUILDER.py",
92
+ "src/builder2ibek/converters/procServControl.py",
93
+ "src/builder2ibek/converters/ADAndor.py",
94
+ "src/builder2ibek/converters/lakeshore336.py",
95
+ "src/builder2ibek/converters/smaractEcm.py",
96
+ "src/builder2ibek/converters/strainGauge.py",
97
+ "src/builder2ibek/converters/leybold.py",
98
+ "src/builder2ibek/converters/OXCryo.py",
99
+ "src/builder2ibek/converters/SycosH-Hot.py",
100
+ "src/builder2ibek/converters/femto.py",
101
+ "src/builder2ibek/converters/ethercat.py",
102
+ "src/builder2ibek/converters/mks937a.py",
103
+ "src/builder2ibek/converters/fogaleHLS.py",
104
+ "src/builder2ibek/converters/alicatGasFlow.py",
105
+ "src/builder2ibek/converters/Hy8414.py",
106
+ "src/builder2ibek/converters/transfocator.py",
107
+ "src/builder2ibek/converters/positioner.py",
108
+ "src/builder2ibek/converters/pvlogging.py",
109
+ "src/builder2ibek/converters/mxEH.py",
110
+ "src/builder2ibek/converters/smargon.py",
111
+ "src/builder2ibek/converters/filters.py",
112
+ "src/builder2ibek/converters/vacuumValve.py",
113
+ "src/builder2ibek/converters/directoryMonitor.py",
114
+ "src/builder2ibek/converters/utility.py",
115
+ "src/builder2ibek/converters/ADZMQ.py",
116
+ "src/builder2ibek/converters/insertionDevice.py",
117
+ "src/builder2ibek/converters/mks937b.py",
118
+ "src/builder2ibek/converters/ADOdinTristan.py",
119
+ "src/builder2ibek/converters/digitelMpc.py",
120
+ "src/builder2ibek/converters/ether_ip.py",
121
+ "src/builder2ibek/converters/gdaPlugins.yaml",
122
+ "src/builder2ibek/converters/bronkhorstFlowBus.py",
123
+ "src/builder2ibek/converters/keithley6514.py",
124
+ "src/builder2ibek/converters/enzLoCuM4.py",
125
+ "src/builder2ibek/converters/slsDetector.py",
126
+ "src/builder2ibek/converters/ADPilatus.py",
127
+ "src/builder2ibek/converters/currAmp.py",
128
+ "src/builder2ibek/converters/ACCELCryoIP.py",
129
+ "src/builder2ibek/converters/BLfeedback.py",
130
+ "src/builder2ibek/converters/motomanNX100.py",
131
+ "src/builder2ibek/converters/pgmVls.py",
132
+ "src/builder2ibek/converters/BLGui.py",
133
+ "src/builder2ibek/converters/cmsIon.py",
134
+ "src/builder2ibek/converters/adUtil.py",
135
+ "src/builder2ibek/converters/mirror.py",
136
+ "src/builder2ibek/converters/Hy8401ip-asyn.py",
137
+ "src/builder2ibek/converters/agilent53220.py",
138
+ "src/builder2ibek/converters/harvardSyringe.py",
139
+ "src/builder2ibek/converters/fw102.py",
140
+ "src/builder2ibek/converters/pmacCoord.py",
141
+ "src/builder2ibek/converters/pmacUtil.py",
142
+ "src/builder2ibek/converters/FINS.py",
143
+ "src/builder2ibek/converters/globalHandler.py",
144
+ "src/builder2ibek/converters/digitelSpc.py",
145
+ "src/builder2ibek/converters/hidenRGA.py",
146
+ "src/builder2ibek/converters/OXCS700asyn.py",
147
+ "src/builder2ibek/converters/gasInjectionRig.py",
148
+ "src/builder2ibek/converters/TimingTemplates.py",
149
+ "src/builder2ibek/converters/Hy8401ipTemplates.py",
150
+ "src/builder2ibek/converters/AMI186.py",
151
+ "src/builder2ibek/converters/scpi.py",
152
+ "src/builder2ibek/converters/eurothermModbus.py",
153
+ "src/builder2ibek/converters/vacuumSpace.py",
154
+ "src/builder2ibek/converters/ADOdin.py",
155
+ "src/builder2ibek/converters/rga.py",
156
+ "src/builder2ibek/converters/pmac.py",
157
+ "src/builder2ibek/converters/Hy8402ip.py",
158
+ "src/builder2ibek/converters/SR-VA.py",
159
+ "src/builder2ibek/converters/deviocstats.py",
160
+ "src/builder2ibek/converters/BL21I.py",
161
+ "src/builder2ibek/converters/epics_base.py",
162
+ "src/builder2ibek/converters/SchottLLS.py",
163
+ "src/builder2ibek/converters/ETLdetector.py",
164
+ "src/builder2ibek/converters/gdaPlugins.py",
165
+ "src/builder2ibek/converters/interlock.py",
166
+ "src/builder2ibek/converters/ADIvium.py",
167
+ "src/builder2ibek/converters/eurotherm2k.py",
168
+ "src/builder2ibek/converters/CryoCoolerXV.py",
169
+ "src/builder2ibek/converters/records.py",
170
+ "src/builder2ibek/converters/ipac.py",
171
+ "src/builder2ibek/converters/QPC.py",
172
+ "src/builder2ibek/converters/mitsubishiRobot.py",
173
+ "src/builder2ibek/converters/motor.py",
174
+ "src/builder2ibek/converters/autosave.py",
175
+ "src/builder2ibek/converters/BL20J.py",
176
+ "src/builder2ibek/converters/mca.py",
177
+ "src/builder2ibek/converters/mks9xx.py",
178
+ "src/builder2ibek/converters/BL11I.py",
179
+ "src/builder2ibek/converters/tpmac.py",
180
+ "src/builder2ibek/converters/DruckDPI515.py",
181
+ "src/builder2ibek/converters/laudaRE2xx.py",
182
+ "src/builder2ibek/converters/rackFan.py",
183
+ "src/builder2ibek/converters/zebra.py",
184
+ "src/builder2ibek/converters/Hy8401ip.py",
185
+ "src/builder2ibek/converters/picotechPT104.py",
186
+ "src/builder2ibek/converters/mrfioc2.py",
187
+ "src/builder2ibek/converters/dlsPLC.py",
188
+ "src/builder2ibek/converters/fzoom.py",
189
+ "src/builder2ibek/converters/terminalserver.py",
190
+ "src/builder2ibek/converters/ffmpegServer.py",
191
+ "src/builder2ibek/converters/userIO.py",
192
+ "src/builder2ibek/converters/CrateMonitor.py",
193
+ "src/builder2ibek/converters/BL19I.py",
194
+ "src/builder2ibek/converters/rgamv2.py",
195
+ ".claude/statusline-command.sh",
196
+ ".claude/settings.json",
197
+ ".claude/commands/support-create.md",
198
+ ".claude/commands/beamline-convert.md",
199
+ ".claude/commands/ioc-check.md",
200
+ ".claude/commands/support-fix.md",
201
+ ".claude/commands/ioc-inspect.md",
202
+ ".claude/commands/beamline-reconvert.md",
203
+ ".claude/commands/ioc-convert.md",
204
+ ".claude/commands/memo.md",
205
+ ".claude/commands/ioc-convert-raw.md",
206
+ ".claude/commands/beamline-check.md",
207
+ ".claude/commands/support-inspect.md",
208
+ ".claude/skills/shared/services-repo-resolution.md",
209
+ ".claude/skills/shared/find-module-path.md",
210
+ ".claude/skills/shared/module-special-cases.md",
211
+ ".claude/skills/shared/module-rename-map.md",
212
+ ".claude/skills/shared/find-ioc-xmls.md",
213
+ ".claude/skills/shared/builder-py-analysis.md",
214
+ ".claude/skills/shared/error-categorization.md",
215
+ ".claude/skills/shared/find-boot-script.md",
216
+ ".claude/skills/shared/vxworks-to-rtems-differences.md",
217
+ ".claude/skills/shared/autosave-conversion.md",
218
+ ".claude/skills/shared/support-yaml-rules.md",
219
+ ".claude/skills/ibek-support-ansible/SKILL.md",
220
+ ".claude/skills/skills-edit/SKILL.md",
221
+ ".claude/skills/ibek-concepts/SKILL.md",
222
+ ".claude/skills/beamline-gui/SKILL.md",
223
+ ".claude/hooks/sandbox-check.sh",
224
+ "tests/__init__.py",
225
+ "tests/test_compare.py",
226
+ "tests/test_autosave.py",
227
+ "tests/test_file_conversion.py",
228
+ "tests/test_migrate_autosave.py",
229
+ "tests/test_reconvert_cli.py",
230
+ "tests/conftest.py",
231
+ "tests/test_cli.py",
232
+ "tests/samples/bl16i-va-ioc-01.st.cmd",
233
+ "tests/samples/bl21i-mo-ioc-01.yaml",
234
+ "tests/samples/bl11i-cs-ioc-09.st.cmd",
235
+ "tests/samples/bl21i-mo-ioc-01.st.cmd",
236
+ "tests/samples/sr03c-va-ioc-01.yaml",
237
+ "tests/samples/bl11i-va-ioc-01.st.cmd",
238
+ "tests/samples/BL15I-VA-IOC-01.xml",
239
+ "tests/samples/BL99P-EA-IOC-05.xml",
240
+ "tests/samples/bl04i-va-ioc-01.st.cmd",
241
+ "tests/samples/motorpositioner.xml",
242
+ "tests/samples/bl45p-mo-ioc-01.yaml",
243
+ "tests/samples/bl19i-va-ioc-01.ioc.subst",
244
+ "tests/samples/bl11i-cs-ioc-09.yaml",
245
+ "tests/samples/sr03c-va-ioc-01.ioc.subst",
246
+ "tests/samples/bl11i-va-ioc-01.yaml",
247
+ "tests/samples/BL03I-MO-IOC-11.xml",
248
+ "tests/samples/bl11i-cs-ioc-09.ioc.subst",
249
+ "tests/samples/bl99p-ea-ioc-05.st.cmd",
250
+ "tests/samples/bl04i-mo-ioc-03.ioc.subst",
251
+ "tests/samples/bl16i-va-ioc-01.ioc.subst",
252
+ "tests/samples/bl45p-mo-ioc-01.st.cmd",
253
+ "tests/samples/SR03C-VA-IOC-01.xml",
254
+ "tests/samples/bl99p-ea-ioc-05.ioc.subst",
255
+ "tests/samples/sr03c-va-ioc-01.st.cmd",
256
+ "tests/samples/bl04i-mo-ioc-03.st.cmd",
257
+ "tests/samples/cross_ref_test.xml",
258
+ "tests/samples/BL16I-VA-IOC-01.xml",
259
+ "tests/samples/BL45P-MO-IOC-01.xml",
260
+ "tests/samples/cross_ref_test.yaml",
261
+ "tests/samples/make_samples.sh",
262
+ "tests/samples/motor.template",
263
+ "tests/samples/SR03C-VA-IOC-01_expanded.db",
264
+ "tests/samples/bl21i-mo-ioc-01_blacklist.txt",
265
+ "tests/samples/BL99P-EA-IOC-05.yaml",
266
+ "tests/samples/bl16i-va-ioc-01.yaml",
267
+ "tests/samples/BL04I-VA-IOC-01.xml",
268
+ "tests/samples/bl19i-va-ioc-01.st.cmd",
269
+ "tests/samples/BL19I-VA-IOC-01.xml",
270
+ "tests/samples/bl04i-va-ioc-01.yaml",
271
+ "tests/samples/motorpositioner.st.cmd",
272
+ "tests/samples/bl45p-mo-ioc-01.ioc.subst",
273
+ "tests/samples/bl21i-mo-ioc-01.ioc.subst",
274
+ "tests/samples/bl15i-va-ioc-01.yaml",
275
+ "tests/samples/bl11i-va-ioc-01.ioc.subst",
276
+ "tests/samples/bl04i-va-ioc-01.ioc.subst",
277
+ "tests/samples/BL04I-VA-IOC-01_expanded.db",
278
+ "tests/samples/sr03c-va-ioc-01.db",
279
+ "tests/samples/bl15i-va-ioc-01.st.cmd",
280
+ "tests/samples/motorpositioner.ioc.subst",
281
+ "tests/samples/bl15i-va-ioc-01.ioc.subst",
282
+ "tests/samples/BL04I-MO-IOC-03.xml",
283
+ "tests/samples/BL11I-VA-IOC-01.xml",
284
+ "tests/samples/cross_ref_test.st.cmd",
285
+ "tests/samples/cross_ref_test.ioc.subst",
286
+ "tests/samples/bl99p-ea-ioc-05.yaml",
287
+ "tests/samples/BL21I-MO-IOC-01.xml",
288
+ "tests/samples/bl04i-mo-ioc-03.yaml",
289
+ "tests/samples/bl19i-va-ioc-01.yaml",
290
+ "tests/samples/motorpositioner.yaml",
291
+ "tests/samples/BL11I-CS-IOC-09.xml",
292
+ "tests/samples/compare.diff",
293
+ ".github/copilot-instructions.md",
294
+ ".github/CONTRIBUTING.md",
295
+ ".github/PULL_REQUEST_TEMPLATE/pull_request_template.md",
296
+ ".github/pages/index.html",
297
+ ".github/pages/make_switcher.py",
298
+ ".github/ISSUE_TEMPLATE/bug_report.md",
299
+ ".github/ISSUE_TEMPLATE/issue.md",
300
+ ".github/workflows/_pypi.yml",
301
+ ".github/workflows/periodic.yml",
302
+ ".github/workflows/_release.yml",
303
+ ".github/workflows/_docs.yml",
304
+ ".github/workflows/_test.yml",
305
+ ".github/workflows/ci.yml",
306
+ ".github/workflows/_tox.yml",
307
+ ".github/workflows/_dist.yml"
308
+ ]
309
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "2.2.0",
3
+ "distance": 0,
4
+ "node": "g9ecee7725232c7f4642f2b2ad402ee65e133119b",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-07-03"
8
+ }
@@ -0,0 +1,27 @@
1
+ <?xml version="1.0" ?>
2
+ <components arch="linux-x86_64">
3
+ <EPICS_BASE.EpicsEnvSet key="IOCSH_PS1" name="prompt" value="BL03I-MO-IOC-11 -&gt;"/>
4
+ <EPICS_BASE.EpicsEnvSet key="EPICS_CA_MAX_ARRAY_BYTES" name="maxArrayBytes" value="6000000"/>
5
+ <devIocStats.devIocStatsHelper guiTags="True" ioc="BL03I-MO-IOC-11" name="MO11" scanMonitor="True" screen="ioc_stats_softdls.edl"/>
6
+ <autosave.Autosave bl="False" debug="0" iocName="BL03I-MO-IOC-11" ip="None" path="/dls_sw/i03/epics/autosave" server="None" skip_1="False" vx_gid="500" vx_uid="37134"/>
7
+ <pmac.pmacAsynSSHPort IP="10.0.0.0" PASSWORD="pytest" name="PPMAC01_PORT"/>
8
+ <pmac.PowerPMAC P="BL03I-MO-PPMAC-01" Port="PPMAC01_PORT" name="PPMAC01"/>
9
+ <pmac.dls_pmac_asyn_motor ACCL="0.1" ADDR="5" BACC="0.5" BVEL="0.2" DESC="QBPM1 Y Translation" DHLM="1.1" DLLM="-41" EGU="mm" ERES="$(MRES)" HOME="BL03I-DI-QBPM-01" HOMEVIS="" JAR="1" M=":Y" MRES="0.0001" OFF="0" P="BL03I-DI-QBPM-01" PORT="PPMAC01" PREC="4" SPORT="PPMAC01_PORT" SREV="200" TWV="1" VELO="2.5" VMAX="3" gda_desc="Pre-HFM QBPM Y" gda_name="QBPM1.Y" name="QBPM1.Y"/>
10
+ <!--<pmac.dls_pmac_asyn_motor ACCL="0.1" ADDR="1" BACC="0.5" BVEL="0.1" DESC="S1 X Inboard Blade" DHLM="9" DLLM="-27" EGU="mm" ERES="$(MRES)" HOME="BL03I-AL-SLITS-01" HOMEVIS="" JAR="1" M=":X:MINUS" MRES="0.001" P="BL03I-AL-SLITS-01" PORT="PPMAC01" PREC="4" SPORT="PPMAC01_PORT" SREV="200" TWV="1" VELO="2" gda_desc="White Beam Slits XM" gda_name="S1.XM" name="S1.XMINUS"/>-->
11
+ <!--<pmac.dls_pmac_asyn_motor ACCL="0.1" ADDR="2" BACC="0.5" BVEL="0.1" DESC="S1 X Outboard Blade" DHLM="27" DLLM="-9" EGU="mm" ERES="$(MRES)" HOME="BL03I-AL-SLITS-01" HOMEVIS="" JAR="1" M=":X:PLUS" MRES="0.001" P="BL03I-AL-SLITS-01" PORT="PPMAC01" PREC="4" SPORT="PPMAC01_PORT" SREV="200" TWV="1" VELO="2" gda_desc="White Beam Slits XP" gda_name="S1.XP" name="S1.XPLUS"/>-->
12
+ <!--<pmac.dls_pmac_asyn_motor ACCL="0.1" ADDR="3" BACC="0.5" BVEL="0.1" DESC="S1 Y Top Blade" DHLM="27" DLLM="-9" EGU="mm" ERES="$(MRES)" HOME="BL03I-AL-SLITS-01" HOMEVIS="" JAR="1" M=":Y:PLUS" MRES="0.001" P="BL03I-AL-SLITS-01" PORT="PPMAC01" PREC="4" SPORT="PPMAC01_PORT" SREV="200" TWV="1" VELO="2" gda_desc="White Beam Slits YP" gda_name="S1.YP" name="S1.YPLUS"/>-->
13
+ <!--<pmac.dls_pmac_asyn_motor ACCL="0.1" ADDR="4" BACC="0.5" BVEL="0.1" DESC="S1 Y Bottom Blade" DHLM="9" DLLM="-27" EGU="mm" ERES="$(MRES)" HOME="BL03I-AL-SLITS-01" HOMEVIS="" JAR="1" M=":Y:MINUS" MRES="0.001" P="BL03I-AL-SLITS-01" PORT="PPMAC01" PREC="4" SPORT="PPMAC01_PORT" SREV="200" TWV="1" VELO="2" gda_desc="White Beam Slits YM" gda_name="S1.YM" name="S1.YMINUS"/>-->
14
+ <pmac.autohome GRP1="" GRP2="QBPM1" P="BL03I-DI-QBPM-01" PLC="12" PORT="PPMAC01" name="QBPM1"/>
15
+ <!--<pmac.autohome GRP2="X Translations" GRP3="Y Translations" P="BL03I-AL-SLITS-01" PLC="11" PORT="PPMAC01" name="S1"/>-->
16
+ <positioner.multipositioner DESC="Pre-HFM QBPM" MP=":Y:MP" P="BL03I-DI-QBPM-01" STRA="Interlock" STRB="Out of the Beam" STRC="Lower Foil" STRD="Upper Foil" gda_desc="QBPM1 Pre-HFM QBPM" gda_name="QBPM1.APOSN" name="QBPM1.MP"/>
17
+ <positioner.motorpositioner DESC="Pre-HFM QBPM" MP="QBPM1.MP" PREC="5" Q=":Y:P" VALA="1.1" VALB="-0.0025" VALC="-18.752" VALD="-37.855" motor="QBPM1.Y" name="QBPM1.MP.M1"/>
18
+ <!--<pmac.CS CS="2" Controller="PPMAC01" PLCNum="10" name="PPMAC01_CS2"/>-->
19
+ <!--<pmac.CS CS="3" Controller="PPMAC01" PLCNum="10" name="PPMAC01_CS3"/>-->
20
+ <!--<pmac.dls_pmac_cs_asyn_motor ADDR="7" DESC="X Centre" DHLM="12.25" DLLM="-12.25" EGU="mm" ERES="$(MRES)" HOMEVIS="0" HOMEVISSTR="" JAR="1" M=":X:CENTRE" MRES="0.0001" P="BL03I-AL-SLITS-01" PORT="PPMAC01_CS2" PREC="5" RDBD="0.0001" TWV="1" VELO="2" gda_desc="S1 X Centre" gda_name="S1.XCENTRE" name="S1.XCENTRE"/>-->
21
+ <!--<pmac.dls_pmac_cs_asyn_motor ADDR="8" DESC="X Size" DHLM="49.937" DLLM="-14.935" EGU="mm" ERES="$(MRES)" HOMEVIS="0" HOMEVISSTR="" JAR="1" M=":X:SIZE" MRES="0.0001" OFF="0.499" P="BL03I-AL-SLITS-01" PORT="PPMAC01_CS2" PREC="5" RDBD="0.0001" TWV="1" VELO="2" gda_desc="S1 X Size" gda_name="S1.XSIZE" name="S1.XSIZE"/>-->
22
+ <!--<pmac.dls_pmac_cs_asyn_motor/>-->
23
+ <!--<pmac.dls_pmac_cs_asyn_motor ADDR="7" DESC="Y Centre" DHLM="10.8755" DLLM="-10.8755" EGU="mm" ERES="$(MRES)" HOMEVIS="0" HOMEVISSTR="" JAR="1" M=":Y:CENTRE" MRES="0.0001" P="BL03I-AL-SLITS-01" PORT="PPMAC01_CS3" PREC="5" RDBD="0.0001" TWV="1" VELO="2" gda_desc="S1 Y Centre" gda_name="S1.YCENTRE" name="S1.YCENTRE"/>-->
24
+ <!--<pmac.dls_pmac_cs_asyn_motor ADDR="8" DESC="Y Size" DHLM="50.521" DLLM="-17.021" EGU="mm" ERES="$(MRES)" HOMEVIS="0" HOMEVISSTR="" JAR="1" M=":Y:SIZE" MRES="0.0001" OFF="1.25" P="BL03I-AL-SLITS-01" PORT="PPMAC01_CS3" PREC="5" RDBD="0.0001" TWV="1" VELO="2" gda_desc="S1 Y Size" gda_name="S1.YSIZE" name="S1.YSIZE"/>-->
25
+ <!--<BL03I.auto_asynMotorAlias P="BL03I-AL-SLITS-01:X:CENTRE" alias="BL03I-AL-SLITS-01:X:CENTER"/>-->
26
+ <!--<BL03I.auto_asynMotorAlias P="BL03I-AL-SLITS-01:Y:CENTRE" alias="BL03I-AL-SLITS-01:Y:CENTER"/>-->
27
+ </components>
@@ -0,0 +1,46 @@
1
+ #############################################################################
2
+ # DB substitution file generated by http://github.com/epics-containers/ibek #
3
+ #############################################################################
4
+
5
+ file "$(IOCSTATS)/db/iocAdminSoft.db" {
6
+ pattern
7
+ { "IOC" }
8
+ { "" }
9
+ }
10
+
11
+ file "$(IOCSTATS)/db/iocAdminScanMon.db" {
12
+ pattern
13
+ { "IOC" }
14
+ { "" }
15
+ }
16
+
17
+ file "powerPmacStatus.template" {
18
+ pattern
19
+ { "P", "PORT" }
20
+ { "BL999-MO-PPMAC-01", "PPMAC01" }
21
+ }
22
+
23
+ file "pmacController.template" {
24
+ pattern
25
+ { "FEEDRATE", "CSG7", "CSG6", "CSG5", "CSG4", "CSG3", "CSG2", "CSG1", "CSG0", "P", "TIMEOUT", "NAXES", "PORT" }
26
+ { "100", "", "", "", "", "", "", "", "", "BL999-MO-PPMAC-01", "4", "8", "PPMAC01" }
27
+ }
28
+
29
+ file "pmacStatusAxis.template" {
30
+ pattern
31
+ { "type", "entity_enabled", "PMAC", "PORT", "AXIS" }
32
+ { "pmac._axisStatus", "True", "BL999-MO-PPMAC-01", "PPMAC01", "1" }
33
+ { "pmac._axisStatus", "True", "BL999-MO-PPMAC-01", "PPMAC01", "2" }
34
+ { "pmac._axisStatus", "True", "BL999-MO-PPMAC-01", "PPMAC01", "3" }
35
+ { "pmac._axisStatus", "True", "BL999-MO-PPMAC-01", "PPMAC01", "4" }
36
+ { "pmac._axisStatus", "True", "BL999-MO-PPMAC-01", "PPMAC01", "5" }
37
+ { "pmac._axisStatus", "True", "BL999-MO-PPMAC-01", "PPMAC01", "6" }
38
+ { "pmac._axisStatus", "True", "BL999-MO-PPMAC-01", "PPMAC01", "7" }
39
+ { "pmac._axisStatus", "True", "BL999-MO-PPMAC-01", "PPMAC01", "8" }
40
+ }
41
+
42
+ file "dls_pmac_asyn_motor.template" {
43
+ pattern
44
+ { "P", "M", "PORT", "SPORT", "CS", "PMAC", "VELO", "ACCL", "SCALE", "BACC", "alh", "DHLM", "HOMEVIS", "EGU", "FEHSV", "VBAS", "VMAX", "HOME", "BDST", "DIR", "DTYP", "FEHIGH", "DLLM", "INIT", "ALLOW_HOMED_SET", "RDBL", "SREV", "LLM", "ADEL", "RDBD", "URIP", "ADDR", "RTRY", "OFF", "ERES", "FEHIHI", "FEHHSV", "JAR", "DESC", "BVEL", "MRES", "DLY", "HLSV", "UEIP", "RRES", "PREC", "RLNK", "FOFF", "HLM", "NTM", "TWV", "HOMEVISSTR" }
45
+ { "012345", ":Y", "PPMAC01", "PPMAC01_PORT", "0", "BL999-MO-PPMAC-01", "2.5", "0.1", "1", "0.5", "None", "1.1", "1", "mm", "NO_ALARM", "0.0", "2.5", "012345", "0.0", "0", "asynMotor", "0.0", "-41.0", "", "#", "", "200", "0.0", "0.0", "0.0", "0", "1", "0", "0.0", "0.0001", "0.0", "NO_ALARM", "1.0", ":Y", "0.2", "0.0001", "0", "MAJOR", "0", "0.0", "4", "", "0", "0.0", "1", "1.0", "Use motor summary screen" }
46
+ }