Deploy-time placeholders were spread across four independent
implementations: sed in the Gitea deploy script, ansible.builtin.replace
in two playbooks, a hardcoded suffix in bin/sls_hla_launch_gui.sh, and
another in agebd/pv.py. Each defined its own values, so nothing kept them
in sync and a missed substitution failed silently.
Step 1 -- one source of truth:
* config/environments.yml declares every deploy-time token, its value
per environment, and where tokens are allowed to live. An environment
that is missing a token, or defines an undeclared one, is a load-time
error.
* agebd.subs loads it and renders. Rendering is a strict regex over
declared token names rather than a template engine: the rendered
files are EPICS db/substitution files and Qt XML, and an unknown
token must raise rather than survive into the output.
* scripts/ci/check_subs.py enforces the contract in CI: tokens in a
rendered path are declared, declared tokens only appear where they
are rendered or generated, and no pre-migration delimiters survive.
Step 2 -- separate the two substitution stages by delimiter:
* Creation-time (copier, once per new service) keeps {{ token }}.
Deploy-time (every deploy, per environment) becomes @@token@@.
* This drops the {{ '{{ token }}' }} escaping from templates/, which
existed only because one Jinja pass had to emit syntax for a second.
* Angle brackets were tried first and rejected: << >> is not
well-formed XML, and cli parses qt/*.ui with ElementTree.
* The existing sed and ansible consumers are repointed at the new
delimiters so this stays behaviour-preserving. Routing them through
agebd.subs is step 3.
Also fixes, as a side effect of having one implementation:
* The sed pattern '{{ *agebd_env_suffix_upper* }}' quantified 'r'
rather than the space, so it only matched one exact spacing.
* agebd.subs.read_ioc_port compares service names case-insensitively;
ansible/tasks/utils/get-ioc-port.yml still compares CamelCase
registry names against a lowercase input and never matches.
qt/*.ui is declared as a render path but nothing renders it yet -- the
Qt deploy step is still a plain rsync. Wiring that up is step 4.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
410 lines
10 KiB
XML
410 lines
10 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<ui version="4.0">
|
|
<class>MainWindow</class>
|
|
<widget class="QMainWindow" name="MainWindow">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>0</x>
|
|
<y>0</y>
|
|
<width>770</width>
|
|
<height>990</height>
|
|
</rect>
|
|
</property>
|
|
<property name="windowTitle">
|
|
<string>MainWindow</string>
|
|
</property>
|
|
<widget class="QWidget" name="centralwidget">
|
|
<widget class="caInclude" name="cainclude">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>10</x>
|
|
<y>220</y>
|
|
<width>750</width>
|
|
<height>346</height>
|
|
</rect>
|
|
</property>
|
|
<property name="macro">
|
|
<string>sourcepoint=X01DA,beamline=Debye;sourcepoint=X02DA,beamline=S-TOMCAT;sourcepoint=X03DA,beamline=PEARL;sourcepoint=X04DB,beamline=VUV;sourcepoint=X05DA,beamline=Optics;sourcepoint=X06DA,beamline=PXIII;sourcepoint=X07DB,beamline=nanoXAS;sourcepoint=X07DA,beamline=PolLux;sourcepoint=X10DA,beamline=SuperXAS</string>
|
|
</property>
|
|
<property name="filename" stdset="0">
|
|
<string notr="true">A_BD_OrbitBump_Operator_inc.ui</string>
|
|
</property>
|
|
<property name="numberOfItems" stdset="0">
|
|
<number>9</number>
|
|
</property>
|
|
<property name="verticalSpacing" stdset="0">
|
|
<number>5</number>
|
|
</property>
|
|
</widget>
|
|
<widget class="caInclude" name="cainclude_2">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>10</x>
|
|
<y>80</y>
|
|
<width>750</width>
|
|
<height>100</height>
|
|
</rect>
|
|
</property>
|
|
<property name="macro">
|
|
<string>sourcepoint=X01DD,beamline=NEMO;sourcepoint=X08DB,beamline=DISCO;sourcepoint=X10DG,beamline=X11HEAT</string>
|
|
</property>
|
|
<property name="filename" stdset="0">
|
|
<string notr="true">A_BD_OrbitBump_Operator_inc.ui</string>
|
|
</property>
|
|
<property name="numberOfItems" stdset="0">
|
|
<number>3</number>
|
|
</property>
|
|
<property name="verticalSpacing" stdset="0">
|
|
<number>5</number>
|
|
</property>
|
|
</widget>
|
|
<widget class="caLabel" name="calabel">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>10</x>
|
|
<y>190</y>
|
|
<width>261</width>
|
|
<height>30</height>
|
|
</rect>
|
|
</property>
|
|
<property name="font">
|
|
<font>
|
|
<pointsize>18</pointsize>
|
|
<weight>75</weight>
|
|
<bold>true</bold>
|
|
</font>
|
|
</property>
|
|
<property name="text">
|
|
<string>Dipole Beamlines</string>
|
|
</property>
|
|
<property name="alignment">
|
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
|
</property>
|
|
</widget>
|
|
<widget class="caLabel" name="calabel_2">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>10</x>
|
|
<y>50</y>
|
|
<width>291</width>
|
|
<height>30</height>
|
|
</rect>
|
|
</property>
|
|
<property name="font">
|
|
<font>
|
|
<pointsize>18</pointsize>
|
|
<weight>75</weight>
|
|
<bold>true</bold>
|
|
</font>
|
|
</property>
|
|
<property name="text">
|
|
<string>Diagnostic Beamlines</string>
|
|
</property>
|
|
<property name="alignment">
|
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
|
</property>
|
|
</widget>
|
|
<widget class="caLabel" name="calabel_3">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>10</x>
|
|
<y>570</y>
|
|
<width>261</width>
|
|
<height>30</height>
|
|
</rect>
|
|
</property>
|
|
<property name="font">
|
|
<font>
|
|
<pointsize>18</pointsize>
|
|
<weight>75</weight>
|
|
<bold>true</bold>
|
|
</font>
|
|
</property>
|
|
<property name="text">
|
|
<string>ID Beamlines</string>
|
|
</property>
|
|
<property name="alignment">
|
|
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter</set>
|
|
</property>
|
|
</widget>
|
|
<widget class="caInclude" name="cainclude_3">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>10</x>
|
|
<y>600</y>
|
|
<width>750</width>
|
|
<height>541</height>
|
|
</rect>
|
|
</property>
|
|
<property name="macro">
|
|
<string>sourcepoint=X02SA,beamline=I-TOMCAT;sourcepoint=X03MA,beamline=ADRESS;sourcepoint=X04SA,beamline=ADDAMS;sourcepoint=X05LA,beamline=QUEST;sourcepoint=X06SA,beamline=PXI;sourcepoint=X07MA,beamline=Phoenix/XTreme;sourcepoint=X08SA,beamline=micro-XAS;sourcepoint=X09LA,beamline=PEARL/XIL-II;sourcepoint=X10SA,beamline=PXII;sourcepoint=X11MA,beamline=SIM;sourcepoint=X12SA,beamline=cSAXS</string>
|
|
</property>
|
|
<property name="filename" stdset="0">
|
|
<string notr="true">A_BD_OrbitBump_Operator_inc.ui</string>
|
|
</property>
|
|
<property name="numberOfItems" stdset="0">
|
|
<number>11</number>
|
|
</property>
|
|
<property name="verticalSpacing" stdset="0">
|
|
<number>5</number>
|
|
</property>
|
|
</widget>
|
|
<widget class="caLabel" name="calabel_4">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>330</x>
|
|
<y>50</y>
|
|
<width>100</width>
|
|
<height>30</height>
|
|
</rect>
|
|
</property>
|
|
<property name="font">
|
|
<font>
|
|
<pointsize>18</pointsize>
|
|
<weight>75</weight>
|
|
<bold>true</bold>
|
|
</font>
|
|
</property>
|
|
<property name="text">
|
|
<string>X (um)</string>
|
|
</property>
|
|
<property name="alignment">
|
|
<set>Qt::AlignCenter</set>
|
|
</property>
|
|
</widget>
|
|
<widget class="caLabel" name="calabel_5">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>440</x>
|
|
<y>50</y>
|
|
<width>100</width>
|
|
<height>30</height>
|
|
</rect>
|
|
</property>
|
|
<property name="font">
|
|
<font>
|
|
<pointsize>15</pointsize>
|
|
<weight>75</weight>
|
|
<bold>true</bold>
|
|
</font>
|
|
</property>
|
|
<property name="text">
|
|
<string>X' (urad)</string>
|
|
</property>
|
|
<property name="alignment">
|
|
<set>Qt::AlignCenter</set>
|
|
</property>
|
|
</widget>
|
|
<widget class="caLabel" name="calabel_6">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>550</x>
|
|
<y>50</y>
|
|
<width>100</width>
|
|
<height>30</height>
|
|
</rect>
|
|
</property>
|
|
<property name="font">
|
|
<font>
|
|
<pointsize>18</pointsize>
|
|
<weight>75</weight>
|
|
<bold>true</bold>
|
|
</font>
|
|
</property>
|
|
<property name="text">
|
|
<string>Y (um)</string>
|
|
</property>
|
|
<property name="alignment">
|
|
<set>Qt::AlignCenter</set>
|
|
</property>
|
|
</widget>
|
|
<widget class="caLabel" name="calabel_7">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>660</x>
|
|
<y>50</y>
|
|
<width>100</width>
|
|
<height>30</height>
|
|
</rect>
|
|
</property>
|
|
<property name="font">
|
|
<font>
|
|
<pointsize>15</pointsize>
|
|
<weight>75</weight>
|
|
<bold>true</bold>
|
|
</font>
|
|
</property>
|
|
<property name="text">
|
|
<string>Y' (urad)</string>
|
|
</property>
|
|
<property name="alignment">
|
|
<set>Qt::AlignCenter</set>
|
|
</property>
|
|
</widget>
|
|
<widget class="caRelatedDisplay" name="carelateddisplay">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>598</x>
|
|
<y>4</y>
|
|
<width>170</width>
|
|
<height>30</height>
|
|
</rect>
|
|
</property>
|
|
<property name="label">
|
|
<string notr="true">Expert Panel All</string>
|
|
</property>
|
|
<property name="background">
|
|
<color>
|
|
<red>183</red>
|
|
<green>157</green>
|
|
<blue>92</blue>
|
|
</color>
|
|
</property>
|
|
<property name="labels">
|
|
<string>Expert Panel All</string>
|
|
</property>
|
|
<property name="files">
|
|
<string>A_BD_OrbitBump_Expert_all.ui</string>
|
|
</property>
|
|
</widget>
|
|
<widget class="caLabel" name="calabel_8">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>2</x>
|
|
<y>2</y>
|
|
<width>767</width>
|
|
<height>33</height>
|
|
</rect>
|
|
</property>
|
|
<property name="font">
|
|
<font>
|
|
<family>Sans Serif</family>
|
|
<pointsize>20</pointsize>
|
|
<weight>75</weight>
|
|
<italic>false</italic>
|
|
<bold>true</bold>
|
|
</font>
|
|
</property>
|
|
<property name="text">
|
|
<string>Beamline local Bumps</string>
|
|
</property>
|
|
<property name="alignment">
|
|
<set>Qt::AlignLeading</set>
|
|
</property>
|
|
<property name="foreground">
|
|
<color>
|
|
<red>255</red>
|
|
<green>255</green>
|
|
<blue>255</blue>
|
|
</color>
|
|
</property>
|
|
<property name="background">
|
|
<color>
|
|
<red>100</red>
|
|
<green>100</green>
|
|
<blue>100</blue>
|
|
</color>
|
|
</property>
|
|
<property name="colorMode">
|
|
<enum>caLabel::Static</enum>
|
|
</property>
|
|
</widget>
|
|
<widget class="caCalc" name="cacalc_2">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>800</x>
|
|
<y>260</y>
|
|
<width>70</width>
|
|
<height>20</height>
|
|
</rect>
|
|
</property>
|
|
<property name="text">
|
|
<string>Reload</string>
|
|
</property>
|
|
<property name="variable">
|
|
<string notr="true">RELOAD</string>
|
|
</property>
|
|
<property name="calc">
|
|
<string notr="true">A</string>
|
|
</property>
|
|
<property name="channel" stdset="0">
|
|
<string notr="true">AGEBD-ALH@@agebd_env_suffix_upper@@:ORBITBUMP-GUIRELOAD</string>
|
|
</property>
|
|
<property name="eventSignal">
|
|
<enum>caCalc::TriggerZeroToOne</enum>
|
|
</property>
|
|
</widget>
|
|
<widget class="wmSignalPropagator" name="wmsignalpropagator">
|
|
<property name="geometry">
|
|
<rect>
|
|
<x>800</x>
|
|
<y>320</y>
|
|
<width>70</width>
|
|
<height>20</height>
|
|
</rect>
|
|
</property>
|
|
</widget>
|
|
<zorder>cainclude</zorder>
|
|
<zorder>cainclude_2</zorder>
|
|
<zorder>calabel</zorder>
|
|
<zorder>calabel_2</zorder>
|
|
<zorder>calabel_3</zorder>
|
|
<zorder>cainclude_3</zorder>
|
|
<zorder>calabel_4</zorder>
|
|
<zorder>calabel_5</zorder>
|
|
<zorder>calabel_6</zorder>
|
|
<zorder>calabel_7</zorder>
|
|
<zorder>calabel_8</zorder>
|
|
<zorder>carelateddisplay</zorder>
|
|
<zorder>cacalc_2</zorder>
|
|
<zorder>wmsignalpropagator</zorder>
|
|
</widget>
|
|
</widget>
|
|
<customwidgets>
|
|
<customwidget>
|
|
<class>caRelatedDisplay</class>
|
|
<extends>QWidget</extends>
|
|
<header>caRelatedDisplay</header>
|
|
</customwidget>
|
|
<customwidget>
|
|
<class>caLabel</class>
|
|
<extends>QLabel</extends>
|
|
<header>caLabel</header>
|
|
</customwidget>
|
|
<customwidget>
|
|
<class>caInclude</class>
|
|
<extends>QWidget</extends>
|
|
<header>caInclude</header>
|
|
</customwidget>
|
|
<customwidget>
|
|
<class>caCalc</class>
|
|
<extends>QLabel</extends>
|
|
<header>caCalc</header>
|
|
</customwidget>
|
|
<customwidget>
|
|
<class>wmSignalPropagator</class>
|
|
<extends>QLabel</extends>
|
|
<header>wmSignalPropagator</header>
|
|
</customwidget>
|
|
</customwidgets>
|
|
<resources/>
|
|
<connections>
|
|
<connection>
|
|
<sender>cacalc_2</sender>
|
|
<signal>emitSignal(bool)</signal>
|
|
<receiver>wmsignalpropagator</receiver>
|
|
<slot>reloadwindow()</slot>
|
|
<hints>
|
|
<hint type="sourcelabel">
|
|
<x>844</x>
|
|
<y>271</y>
|
|
</hint>
|
|
<hint type="destinationlabel">
|
|
<x>847</x>
|
|
<y>327</y>
|
|
</hint>
|
|
</hints>
|
|
</connection>
|
|
</connections>
|
|
</ui>
|