techui-builder 0.6.8a2__tar.gz → 0.7__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.
- techui_builder-0.7/.gitmodules +3 -0
- {techui_builder-0.6.8a2/src/techui_builder.egg-info → techui_builder-0.7}/PKG-INFO +16 -4
- {techui_builder-0.6.8a2 → techui_builder-0.7}/README.md +14 -2
- techui_builder-0.7/example/t01-services/services/bl01t-ea-ioc-01/config/fastcs.yaml +18 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example/t01-services/synoptic/techui.yaml +2 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/pyproject.toml +3 -2
- techui_builder-0.7/src/techui_builder/__main__.py +69 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder/_logger.py +4 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder/_version.py +3 -3
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder/autofill.py +1 -1
- techui_builder-0.7/src/techui_builder/builder.py +238 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder/generate.py +80 -108
- techui_builder-0.6.8a2/src/techui_builder/builder.py → techui_builder-0.7/src/techui_builder/generate_jsonmap.py +83 -246
- techui_builder-0.6.8a2/src/techui_builder/__main__.py → techui_builder-0.7/src/techui_builder/main_app.py +4 -66
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder/models.py +28 -5
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder/schema_generator.py +8 -0
- techui_builder-0.7/src/techui_builder/status.py +103 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7/src/techui_builder.egg-info}/PKG-INFO +16 -4
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder.egg-info/SOURCES.txt +8 -1
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/conftest.py +135 -10
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_autofiller.py +9 -9
- techui_builder-0.7/tests/test_builder.py +211 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_cli.py +67 -20
- techui_builder-0.7/tests/test_files/widget_custom_suffix.xml +22 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/widget_related.xml +2 -3
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/widget_url_screen.xml +2 -1
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_generate.py +106 -137
- techui_builder-0.7/tests/test_generate_jsonmap.py +414 -0
- techui_builder-0.7/tests/test_status.py +96 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_utils.py +2 -2
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_validator.py +2 -2
- techui_builder-0.6.8a2/tests/test_builder.py +0 -598
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.copier-answers.yml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.devcontainer/devcontainer.json +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.devcontainer/install_lazygit.sh +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/CONTRIBUTING.md +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/ISSUE_TEMPLATE/issue.md +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/dependabot.yml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/pages/index.html +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/pages/make_switcher.py +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/workflows/_dist.yml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/workflows/_docs.yml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/workflows/_pypi.yml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/workflows/_release.yml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/workflows/_test.yml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/workflows/_tox.yml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/workflows/ci.yml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.github/workflows/periodic.yml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.gitignore +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.gitleaks.toml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.pre-commit-config.yaml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.python-version +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.vscode/extensions.json +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.vscode/launch.json +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.vscode/settings.json +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/.vscode/tasks.json +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/Dockerfile +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/LICENSE +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/catalog-info.yaml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/docs/conf.py +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example/t01-services/services/bl01t-mo-ioc-01/config/ioc.yaml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example/t01-services/synoptic/index.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/config/devsta.db +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/services/bl23b-di-mod-01/config/ioc.yaml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/services/bl23b-di-mod-02/config/ioc.yaml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/services/bl23b-di-uvcam-01/config/ioc.yaml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/services/bl23b-di-uvcam-02/config/ioc.yaml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/services/bl23b-mo-ioc-01/config/ioc.yaml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/services/bl23b-va-ioc-01/config/ioc.yaml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/IMG1.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/IMG11.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/IMG12.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/IONP1.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/IONP11.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/IONP12.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/IONP21.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/JsonMap.json +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/M3.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/MOD1.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/MOD2.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/PIRG1.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/PIRG11.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/PIRG12.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/SPACE11.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/index.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/LICENSE +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/ADAravis/ADAravis_detail.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/ADAravis/ADAravis_summary.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/ADAravis/NDFileHDF5.pvi.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/ADAravis/NDPluginPva.pvi.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/ADAravis/NDPluginROI.pvi.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/ADAravis/NDPluginROIStat.pvi.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/ADAravis/NDPluginStats.pvi.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/ADAravis/ProfileCursorGraphs.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/colour.def +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/digitelMpc/digitelMpcIonp.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/dls_class.bcf +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/mks937a/mks937a.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/mks937a/mks937aGauge.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/mks937a/mks937aImg.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/mks937a/mks937aPirg.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/pmac/MOTOR.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/pmac/motor_embed.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/pmac/pmacController.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/pmac/ppmacController.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/rga/rga.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/settings.ini +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/vacuumValve/vacuumValve.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/bob/vacuumValve/vacuumValveInterlocks.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/3DCM_diag_3.gif +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/Beamline_Image.png +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/Beamline_Image_Colour.png +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/Panda.jpg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/WoodenArch.jpg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/absorber 1 (copy).svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/absorber 1.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/aperture.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/camera +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/camera-1.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/dcm.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/diag-stick-camera.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/diag-stick-camera_flipped.png +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/diag-stick.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/fastValve 1 (copy).svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/fastValve 1.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/floodgate.jpg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/fm.png +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/fm.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/fvg 0.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/hfm.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/img 0 (copy).svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/img 0.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/ionp 4 (another copy).svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/ionp 4 (copy).svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/ionp 4.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/manualValve 1 (copy).svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/manualValve 1.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/motors +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/pirg 0 (copy).svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/pirg 0.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/rga 0.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/ring 0.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/ring 1.png +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/ring 1.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/shutter 1 (copy).svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/shutter 1.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/shutter 2.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/shutter 3.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/slits.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/space 0.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/spacenew 0.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/table.png +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/valve 1 (copy).svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/valve 1.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/vfm-up.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/webcam.png +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/symbols/webcam.svg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui-support/techui-support.yaml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/example-synoptic/b23-services/synoptic/techui.yaml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/setup.cfg +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder/__init__.py +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder/utils.py +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder/validator.py +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder.egg-info/dependency_links.txt +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder.egg-info/entry_points.txt +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder.egg-info/requires.txt +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/src/techui_builder.egg-info/top_level.txt +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/__init__.py +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/group.xml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/index.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/motor-edited.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/motor.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/motor_bad.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/motor_embed.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/test_bob.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/test_bob_bad.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/test_bob_embedded.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/test_bob_navtabs.bob +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/widget.xml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/widget_bad.xml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/widget_bad_2.xml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_files/widget_related_no_suffix.xml +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_logger.py +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/tests/test_models.py +0 -0
- {techui_builder-0.6.8a2 → techui_builder-0.7}/uv.lock +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: techui-builder
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.7
|
|
4
4
|
Summary: A package for building Phoebus GUIs
|
|
5
|
-
Author-email: Oliver Copping <oliver.copping@diamond.ac.uk>, Adedamola Sode <adedamola.sode@diamond.ac.uk>, Niamh Dougan <niamh.dougan@diamond.ac.uk>
|
|
5
|
+
Author-email: Oliver Copping <oliver.copping@diamond.ac.uk>, Adedamola Sode <adedamola.sode@diamond.ac.uk>, Niamh Dougan <niamh.dougan@diamond.ac.uk>, Thomas Kane <thomas.kane@diamond.ac.uk>
|
|
6
6
|
Project-URL: GitHub, https://github.com/DiamondLightSource/techui-builder
|
|
7
7
|
Classifier: Development Status :: 3 - Alpha
|
|
8
8
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -75,7 +75,7 @@ The process to use this module goes as follows (WIP):
|
|
|
75
75
|
> `extras` is optional, but allows any embedded screen to be added to make a summary screen e.g. combining all imgs, pirgs and ionps associated with a vacuum space.
|
|
76
76
|
1. Run this command to locally generate a schema, which can be used for validation testing
|
|
77
77
|
|
|
78
|
-
```$ techui-builder
|
|
78
|
+
```$ techui-builder schema```
|
|
79
79
|
|
|
80
80
|
Add the following at the top of the `techui.yaml` to validate it against a schema
|
|
81
81
|
|
|
@@ -85,10 +85,22 @@ The process to use this module goes as follows (WIP):
|
|
|
85
85
|
|
|
86
86
|
## Generating the Synoptic
|
|
87
87
|
|
|
88
|
-
`$ techui-builder /path/to/synoptic/techui.yaml`
|
|
88
|
+
`$ techui-builder build /path/to/synoptic/techui.yaml`
|
|
89
89
|
|
|
90
90
|
This populates `index.bob` and individual component screens inside `ixx-services/synoptic`.
|
|
91
91
|
|
|
92
|
+
## Generating the JsonMap
|
|
93
|
+
|
|
94
|
+
`$ techui-builder generate-jsonmap /path/to/synoptic/index.bob`
|
|
95
|
+
|
|
96
|
+
This populates `JsonMap.json` with the tree of component screens inside `ixx-services/synoptic/index.bob`.
|
|
97
|
+
|
|
98
|
+
## Generating the Status PV database file
|
|
99
|
+
|
|
100
|
+
`$ techui-builder status /path/to/synoptic/techui.yaml`
|
|
101
|
+
|
|
102
|
+
This populates `config/status.db` with the status PVs of components inside `ixx-services/synoptic/techui.yaml`.
|
|
103
|
+
|
|
92
104
|
## Viewing the Synoptic
|
|
93
105
|
|
|
94
106
|
In a terminal outside of the container:
|
|
@@ -53,7 +53,7 @@ The process to use this module goes as follows (WIP):
|
|
|
53
53
|
> `extras` is optional, but allows any embedded screen to be added to make a summary screen e.g. combining all imgs, pirgs and ionps associated with a vacuum space.
|
|
54
54
|
1. Run this command to locally generate a schema, which can be used for validation testing
|
|
55
55
|
|
|
56
|
-
```$ techui-builder
|
|
56
|
+
```$ techui-builder schema```
|
|
57
57
|
|
|
58
58
|
Add the following at the top of the `techui.yaml` to validate it against a schema
|
|
59
59
|
|
|
@@ -63,10 +63,22 @@ The process to use this module goes as follows (WIP):
|
|
|
63
63
|
|
|
64
64
|
## Generating the Synoptic
|
|
65
65
|
|
|
66
|
-
`$ techui-builder /path/to/synoptic/techui.yaml`
|
|
66
|
+
`$ techui-builder build /path/to/synoptic/techui.yaml`
|
|
67
67
|
|
|
68
68
|
This populates `index.bob` and individual component screens inside `ixx-services/synoptic`.
|
|
69
69
|
|
|
70
|
+
## Generating the JsonMap
|
|
71
|
+
|
|
72
|
+
`$ techui-builder generate-jsonmap /path/to/synoptic/index.bob`
|
|
73
|
+
|
|
74
|
+
This populates `JsonMap.json` with the tree of component screens inside `ixx-services/synoptic/index.bob`.
|
|
75
|
+
|
|
76
|
+
## Generating the Status PV database file
|
|
77
|
+
|
|
78
|
+
`$ techui-builder status /path/to/synoptic/techui.yaml`
|
|
79
|
+
|
|
80
|
+
This populates `config/status.db` with the status PVs of components inside `ixx-services/synoptic/techui.yaml`.
|
|
81
|
+
|
|
70
82
|
## Viewing the Synoptic
|
|
71
83
|
|
|
72
84
|
In a terminal outside of the container:
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# yaml-language-server: $schema=schema.json
|
|
2
|
+
controllers:
|
|
3
|
+
- name: BL01T-EA-TEST-01
|
|
4
|
+
type: fastcs.TemperatureController
|
|
5
|
+
ip_settings:
|
|
6
|
+
ip: "localhost"
|
|
7
|
+
port: 25565
|
|
8
|
+
num_ramp_controllers: 4
|
|
9
|
+
|
|
10
|
+
transport:
|
|
11
|
+
- graphql:
|
|
12
|
+
host: localhost
|
|
13
|
+
port: 8083
|
|
14
|
+
log_level: info
|
|
15
|
+
- epicsca: {}
|
|
16
|
+
gui:
|
|
17
|
+
title: Temperature Controller Demo
|
|
18
|
+
output_dir: .
|
|
@@ -3,6 +3,8 @@ requires = ["setuptools>=64", "setuptools_scm[toml]>=8"]
|
|
|
3
3
|
build-backend = "setuptools.build_meta"
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
|
+
scripts = { techui-builder = "techui_builder.__main__:app" }
|
|
7
|
+
|
|
6
8
|
name = "techui-builder"
|
|
7
9
|
dynamic = ["version"]
|
|
8
10
|
description = "A package for building Phoebus GUIs"
|
|
@@ -16,6 +18,7 @@ authors = [
|
|
|
16
18
|
{ name = "Oliver Copping", email = "oliver.copping@diamond.ac.uk" },
|
|
17
19
|
{ name = "Adedamola Sode", email = "adedamola.sode@diamond.ac.uk" },
|
|
18
20
|
{ name = "Niamh Dougan", email = "niamh.dougan@diamond.ac.uk" },
|
|
21
|
+
{ name = "Thomas Kane", email = "thomas.kane@diamond.ac.uk" },
|
|
19
22
|
]
|
|
20
23
|
license-files = ["LICENSE"]
|
|
21
24
|
readme = "README.md"
|
|
@@ -30,8 +33,6 @@ dependencies = [
|
|
|
30
33
|
"softioc>=4.7.0",
|
|
31
34
|
"epicsdbbuilder>=1.5",
|
|
32
35
|
]
|
|
33
|
-
scripts = { techui-builder = "techui_builder.__main__:app" }
|
|
34
|
-
|
|
35
36
|
[dependency-groups]
|
|
36
37
|
dev = [
|
|
37
38
|
"copier",
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"""Interface for ``python -m techui_builder``."""
|
|
2
|
+
|
|
3
|
+
import logging
|
|
4
|
+
|
|
5
|
+
import typer
|
|
6
|
+
|
|
7
|
+
from techui_builder._version import __version__
|
|
8
|
+
from techui_builder.generate_jsonmap import app as generate_jsonmap_app
|
|
9
|
+
from techui_builder.main_app import app as main_app
|
|
10
|
+
from techui_builder.schema_generator import app as schema_app
|
|
11
|
+
from techui_builder.status import app as status_app
|
|
12
|
+
|
|
13
|
+
logger_ = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
app = typer.Typer(
|
|
16
|
+
pretty_exceptions_show_locals=False,
|
|
17
|
+
context_settings={"allow_interspersed_args": True},
|
|
18
|
+
help="""
|
|
19
|
+
A script for building Phoebus GUIs.
|
|
20
|
+
|
|
21
|
+
This is the required file structure:\n
|
|
22
|
+
\n
|
|
23
|
+
ixx-services\n
|
|
24
|
+
|-- services\n
|
|
25
|
+
| |-- blxxi-ea-device-01\n
|
|
26
|
+
| | `-- config\n
|
|
27
|
+
| | `-- ioc.yaml\n
|
|
28
|
+
| |-- ...\n
|
|
29
|
+
| `-- blxxi-va-device-01\n
|
|
30
|
+
| `-- config\n
|
|
31
|
+
| `-- ioc.yaml\n
|
|
32
|
+
`-- synoptic\n
|
|
33
|
+
. |-- techui-support/\n
|
|
34
|
+
| | `-- ...\n
|
|
35
|
+
. |-- techui.yaml\n
|
|
36
|
+
. `-- index.bob\n
|
|
37
|
+
""",
|
|
38
|
+
no_args_is_help=True,
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def version_callback(value: bool):
|
|
43
|
+
if value:
|
|
44
|
+
print(f"techui-builder version: {__version__}")
|
|
45
|
+
raise typer.Exit()
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
@app.callback()
|
|
49
|
+
def _(
|
|
50
|
+
version: bool = typer.Option(
|
|
51
|
+
False,
|
|
52
|
+
"--version",
|
|
53
|
+
callback=version_callback,
|
|
54
|
+
is_eager=True,
|
|
55
|
+
help="Show version of techui-builder and exit",
|
|
56
|
+
),
|
|
57
|
+
):
|
|
58
|
+
"""Boilerplate callback function to allow for --version CLI option"""
|
|
59
|
+
pass
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
app.add_typer(main_app)
|
|
63
|
+
app.add_typer(schema_app, name="schema")
|
|
64
|
+
app.add_typer(generate_jsonmap_app, name="generate-jsonmap")
|
|
65
|
+
app.add_typer(status_app, name="status")
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
if __name__ == "__main__":
|
|
69
|
+
app()
|
|
@@ -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 = '0.
|
|
22
|
-
__version_tuple__ = version_tuple = (0,
|
|
21
|
+
__version__ = version = '0.7'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 7)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'ga46847b35'
|
|
@@ -8,7 +8,7 @@ from lxml import objectify
|
|
|
8
8
|
from lxml.etree import Element, SubElement, tostring
|
|
9
9
|
from lxml.objectify import ObjectifiedElement, fromstring
|
|
10
10
|
|
|
11
|
-
from techui_builder.
|
|
11
|
+
from techui_builder.generate_jsonmap import _get_action_group
|
|
12
12
|
from techui_builder.models import Component
|
|
13
13
|
from techui_builder.utils import read_bob
|
|
14
14
|
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import os
|
|
3
|
+
import re
|
|
4
|
+
from collections import defaultdict
|
|
5
|
+
from dataclasses import dataclass, field
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
import yaml
|
|
9
|
+
from jinja2 import Template
|
|
10
|
+
|
|
11
|
+
from techui_builder.generate import Generator
|
|
12
|
+
from techui_builder.models import Entity, SupportEntity, TechUi, TechUiSupport
|
|
13
|
+
from techui_builder.validator import Validator
|
|
14
|
+
|
|
15
|
+
logger_ = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass
|
|
19
|
+
class Builder:
|
|
20
|
+
"""
|
|
21
|
+
This class provides the functionality to process the required
|
|
22
|
+
techui.yaml file into screens mapped from ioc.yaml and
|
|
23
|
+
*-mapping.yaml files.
|
|
24
|
+
|
|
25
|
+
By default it looks for a `techui.yaml` file in the same dir
|
|
26
|
+
of the script Guibuilder is called in. Optionally a custom path
|
|
27
|
+
can be declared.
|
|
28
|
+
|
|
29
|
+
"""
|
|
30
|
+
|
|
31
|
+
techui: Path = field(default=Path("techui.yaml"))
|
|
32
|
+
|
|
33
|
+
entities: defaultdict[str, list[Entity]] = field(
|
|
34
|
+
default_factory=lambda: defaultdict(list), init=False
|
|
35
|
+
)
|
|
36
|
+
_services_dir: Path = field(init=False, repr=False)
|
|
37
|
+
_write_directory: Path = field(init=False, repr=False)
|
|
38
|
+
|
|
39
|
+
def __post_init__(self):
|
|
40
|
+
# Populate beamline and components
|
|
41
|
+
self.conf = TechUi.model_validate(
|
|
42
|
+
yaml.safe_load(self.techui.read_text(encoding="utf-8"))
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
def setup(self):
|
|
46
|
+
"""
|
|
47
|
+
Run intial setup, e.g. extracting entries
|
|
48
|
+
from service ioc.yaml or fastcs.yaml.
|
|
49
|
+
"""
|
|
50
|
+
# This needs to be before _read_map()
|
|
51
|
+
self.support_path = self._write_directory.joinpath("techui-support")
|
|
52
|
+
|
|
53
|
+
self._read_map()
|
|
54
|
+
|
|
55
|
+
self._extract_services()
|
|
56
|
+
|
|
57
|
+
self.clean_files()
|
|
58
|
+
|
|
59
|
+
self.generator = Generator(
|
|
60
|
+
self._write_directory,
|
|
61
|
+
self.conf.beamline.url,
|
|
62
|
+
self.support_path,
|
|
63
|
+
self.techui_support,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
def _read_map(self):
|
|
67
|
+
"""Read the techui-support.yaml file from techui-support."""
|
|
68
|
+
support_yaml = self.support_path.joinpath("techui-support.yaml").absolute()
|
|
69
|
+
logger_.debug(f"techui-support.yaml location: {support_yaml}")
|
|
70
|
+
|
|
71
|
+
self.techui_support = TechUiSupport.model_validate(
|
|
72
|
+
yaml.safe_load(support_yaml.read_text(encoding="utf-8"))
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
def clean_files(self):
|
|
76
|
+
exclude = {"index.bob"}
|
|
77
|
+
bobs = [
|
|
78
|
+
bob
|
|
79
|
+
for bob in self._write_directory.glob("*.bob")
|
|
80
|
+
if bob.name not in exclude
|
|
81
|
+
]
|
|
82
|
+
|
|
83
|
+
self.validator = Validator(bobs)
|
|
84
|
+
self.validator.check_bobs()
|
|
85
|
+
|
|
86
|
+
# Get bobs that are only present in the bobs list (i.e. generated)
|
|
87
|
+
self.generated_bobs = list(set(bobs) ^ set(self.validator.validate.values()))
|
|
88
|
+
|
|
89
|
+
logger_.info("Preserving edited screens for validation.")
|
|
90
|
+
logger_.debug(f"Screens to validate: {list(self.validator.validate.keys())}")
|
|
91
|
+
|
|
92
|
+
logger_.info("Cleaning synoptic/ of generated screens.")
|
|
93
|
+
|
|
94
|
+
try:
|
|
95
|
+
# Find the JsonMap file
|
|
96
|
+
json_map_file = next(self._write_directory.glob("JsonMap.json"))
|
|
97
|
+
# If it exists, we want to remove it too
|
|
98
|
+
generated_files = [*self.generated_bobs, json_map_file]
|
|
99
|
+
except StopIteration:
|
|
100
|
+
generated_files = self.generated_bobs
|
|
101
|
+
|
|
102
|
+
# Remove any generated files that exist
|
|
103
|
+
for file_ in generated_files:
|
|
104
|
+
logger_.debug(f"Removing generated file: {file_.name}")
|
|
105
|
+
os.remove(file_)
|
|
106
|
+
|
|
107
|
+
def _extract_services(self):
|
|
108
|
+
"""
|
|
109
|
+
Finds the services folders in the services directory
|
|
110
|
+
and extracts all entites
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
# Loop over every dir in services, ignoring anything that isn't a service
|
|
114
|
+
for service in self._services_dir.glob(f"{self.conf.beamline.domain}-*-*-*"):
|
|
115
|
+
service_name = service.name
|
|
116
|
+
# If service doesn't exist, file open will fail throwing exception
|
|
117
|
+
try:
|
|
118
|
+
service_yaml_dir = service.joinpath("config")
|
|
119
|
+
service_yaml = next(service_yaml_dir.glob("*.yaml"), None)
|
|
120
|
+
if service_yaml is None:
|
|
121
|
+
raise OSError()
|
|
122
|
+
|
|
123
|
+
self._extract_entities(
|
|
124
|
+
service_name=service_name,
|
|
125
|
+
service_yaml=service_yaml,
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
except OSError:
|
|
129
|
+
logger_.error(
|
|
130
|
+
"No ioc.yaml or fastcs.yaml found for service: "
|
|
131
|
+
f"[bold]{service_name}[/bold]. Does it exist?"
|
|
132
|
+
)
|
|
133
|
+
|
|
134
|
+
def _extract_entities(self, service_name: str, service_yaml: Path):
|
|
135
|
+
"""
|
|
136
|
+
Extracts the entries in ioc.yaml matching the defined prefix
|
|
137
|
+
"""
|
|
138
|
+
|
|
139
|
+
with open(service_yaml) as ioc:
|
|
140
|
+
ioc_conf: dict[str, list[dict[str, str]]] = yaml.safe_load(ioc)
|
|
141
|
+
|
|
142
|
+
for key in ioc_conf.keys():
|
|
143
|
+
_regex = re.compile(r"^(?:(entities)|(controllers))$")
|
|
144
|
+
match = _regex.match(key)
|
|
145
|
+
if match:
|
|
146
|
+
entity_key = match.group()
|
|
147
|
+
|
|
148
|
+
for entity in ioc_conf[entity_key]:
|
|
149
|
+
if entity["type"] in self.techui_support.support_modules:
|
|
150
|
+
support_mapping: SupportEntity = (
|
|
151
|
+
self.techui_support.support_modules[entity["type"]]
|
|
152
|
+
)
|
|
153
|
+
support_macros = support_mapping.macros
|
|
154
|
+
|
|
155
|
+
macros = {
|
|
156
|
+
k: v for k, v in entity.items() if k in support_macros
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
prefix_template = Template(support_mapping.prefix)
|
|
160
|
+
prefix: str = prefix_template.render(macros)
|
|
161
|
+
|
|
162
|
+
# Create Entity and append to entity list
|
|
163
|
+
new_entity = Entity(
|
|
164
|
+
service_name=service_name,
|
|
165
|
+
type=entity["type"],
|
|
166
|
+
desc=entity.get("desc", None),
|
|
167
|
+
prefix=prefix,
|
|
168
|
+
macros=macros,
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
pv_root = prefix.split(":", maxsplit=1)[0]
|
|
172
|
+
self.entities[pv_root].append(new_entity)
|
|
173
|
+
break
|
|
174
|
+
|
|
175
|
+
def _generate_screen(self, screen_name: str):
|
|
176
|
+
self.generator.build_screen(screen_name)
|
|
177
|
+
self.generator.write_screen(screen_name, self._write_directory)
|
|
178
|
+
|
|
179
|
+
def _validate_screen(self, screen_name: str):
|
|
180
|
+
# Get the generated widgets to validate against
|
|
181
|
+
widgets = self.generator.widgets
|
|
182
|
+
widget_group = self.generator.group
|
|
183
|
+
assert widget_group is not None
|
|
184
|
+
widget_group_name = widget_group.get_element_value("name")
|
|
185
|
+
self.validator.validate_bob(screen_name, widget_group_name, widgets)
|
|
186
|
+
|
|
187
|
+
def create_screens(self):
|
|
188
|
+
"""Create the screens for each component in techui.yaml"""
|
|
189
|
+
if len(self.entities) == 0:
|
|
190
|
+
logger_.critical(
|
|
191
|
+
"No ioc entities found. This [italic]normally[/italic]"
|
|
192
|
+
" suggests an issue with finding ixx-services."
|
|
193
|
+
)
|
|
194
|
+
exit()
|
|
195
|
+
|
|
196
|
+
# Loop over every component defined in techui.yaml and locate
|
|
197
|
+
# any extras defined
|
|
198
|
+
for component_name, component in self.conf.components.items():
|
|
199
|
+
screen_entities: list[Entity] = []
|
|
200
|
+
|
|
201
|
+
# ONLY IF there is a matching component and entity, generate a screen
|
|
202
|
+
if component.prefix in self.entities.keys():
|
|
203
|
+
# Populate child labels for any entities
|
|
204
|
+
# with the same prefix as the component
|
|
205
|
+
for entity in self.entities[component.prefix]:
|
|
206
|
+
entity.child_labels = component.child_labels
|
|
207
|
+
|
|
208
|
+
screen_entities.extend(self.entities[component.prefix])
|
|
209
|
+
|
|
210
|
+
if component.extras is not None:
|
|
211
|
+
# If component has any extras, add them to the entries to generate
|
|
212
|
+
for extra_p in component.extras:
|
|
213
|
+
if extra_p not in self.entities.keys():
|
|
214
|
+
logger_.error(
|
|
215
|
+
f"Extra prefix {extra_p} for {component_name} does not"
|
|
216
|
+
" exist."
|
|
217
|
+
)
|
|
218
|
+
continue
|
|
219
|
+
screen_entities.extend(self.entities[extra_p])
|
|
220
|
+
|
|
221
|
+
# This is used by both generate and validate,
|
|
222
|
+
# so called beforehand for tidyness
|
|
223
|
+
self.generator.build_widgets(component_name, screen_entities)
|
|
224
|
+
self.generator.build_groups(component_name, self.conf.components)
|
|
225
|
+
|
|
226
|
+
screens_to_validate = list(self.validator.validate.keys())
|
|
227
|
+
|
|
228
|
+
if component_name in screens_to_validate:
|
|
229
|
+
self._validate_screen(component_name)
|
|
230
|
+
else:
|
|
231
|
+
self._generate_screen(component_name)
|
|
232
|
+
|
|
233
|
+
else:
|
|
234
|
+
logger_.warning(
|
|
235
|
+
f"{self.techui.name}: The prefix [bold]{component.prefix}[/bold] "
|
|
236
|
+
f"set in the component [bold]{component_name}[/bold] does not match"
|
|
237
|
+
" any P field in the ioc.yaml files in services"
|
|
238
|
+
)
|