Skip to content

Commit e477b40

Browse files
authored
refactor: Rework Generator instanciation in Builder (#133)
2 parents 5359a48 + 24fc335 commit e477b40

File tree

8 files changed

+67
-67
lines changed

8 files changed

+67
-67
lines changed

example/bl01t-services/services/bl01t-mo-ioc-01/config/ioc.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ entities:
3333
GRP1: All
3434
GRP2: X
3535
GRP3: A
36-
P: BL01T-MO-MAP-01:STAGE
36+
P: BL01T-MO-MOTOR-01
3737
PLC: 11
3838
PmacController: BRICK1
3939

@@ -50,7 +50,7 @@ entities:
5050
LLM: "-25"
5151
M: :X
5252
MRES: -0.000125
53-
P: BL01T-MO-MAP-01:STAGE
53+
P: BL01T-MO-MOTOR-01
5454
PREC: 3
5555
TWV: 1
5656
UEIP: "Yes"
@@ -68,7 +68,7 @@ entities:
6868
HLSV: NO_ALARM
6969
M: :A
7070
MRES: 0.018
71-
P: BL01T-MO-MAP-01:STAGE
71+
P: BL01T-MO-MOTOR-01
7272
PREC: 3
7373
TWV: 18
7474
UEIP: "Yes"

example/bl01t-services/synoptic/create_gui.yaml renamed to example/bl01t-services/synoptic/techui.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ components:
2222
prefix: BL01T-EA-PILAT-01
2323

2424
motor:
25-
desc: Hexapod Stage
26-
prefix: BL01T-MO-MAP-01:STAGE
25+
desc: Motor Stage
26+
prefix: BL01T-MO-MOTOR-01
2727
extras:
2828
- BL01T-MO-BRICK-01

src/techui_builder/builder.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ def __post_init__(self):
5757
# Requires beamline has already been read from create_gui.yaml
5858
self._services_dir = Path(f"{self.beamline.dom}-services/services")
5959

60+
self.generator = Generator(self._services_dir.parent)
61+
6062
def _extract_from_create_gui(self):
6163
"""
6264
Extracts from the create_gui.yaml file to generate
@@ -120,13 +122,13 @@ def _extract_entities(self, ioc_yaml: Path):
120122
self.entities[new_entity.P].append(new_entity)
121123

122124
def _generate_screen(self, screen_name: str, screen_components: list[Entity]):
123-
generator = Generator(screen_components, screen_name, self._services_dir.parent)
124-
generator.build_groups()
125-
generator.write_screen(self._write_directory)
125+
self.generator.load_screen(screen_name, screen_components)
126+
self.generator.build_groups()
127+
self.generator.write_screen(self._write_directory)
126128

127129
def generate_screens(self):
128130
"""Generate the screens for each component in techui.yaml"""
129-
if self.entities is None:
131+
if len(self.entities) == 0:
130132
LOGGER.critical("No ioc entities found, has setup() been run?")
131133
exit()
132134

src/techui_builder/generate.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@
1717

1818
@dataclass
1919
class Generator:
20-
screen_components: list[Entity]
21-
# TODO: Fix type of screen
22-
screen_name: str
2320
services_dir: Path = field(repr=False)
2421

22+
screen_name: str = field(init=False)
23+
screen_components: list[Entity] = field(init=False)
24+
2525
# These are global params for the class (not accessible by user)
2626
ibek_map: dict = field(init=False, repr=False)
2727
default_size: int = field(default=100, init=False, repr=False)
@@ -40,18 +40,22 @@ class Generator:
4040
group_padding: int = field(default=50, init=False, repr=False)
4141

4242
def __post_init__(self):
43-
self._read_gui_map()
43+
self._read_map()
4444

45-
def _read_gui_map(self):
45+
def _read_map(self):
4646
"""Read the ibek-mapping.yaml file from techui-support."""
4747
ibek_map = self.services_dir.parent.parent.joinpath(
4848
"src/techui_support/ibek_mapping.yaml"
49-
)
49+
).absolute()
5050
LOGGER.debug(f"ibek_mapping.yaml location: {ibek_map}")
5151

5252
with open(ibek_map) as map:
5353
self.ibek_map = yaml.safe_load(map)
5454

55+
def load_screen(self, screen_name: str, screen_components: list[Entity]):
56+
self.screen_name = screen_name
57+
self.screen_components = screen_components
58+
5559
def _get_screen_dimensions(self, file: str) -> tuple[int, int]:
5660
"""
5761
Parses the bob files for information on the height

tests/conftest.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
from pathlib import Path
2+
3+
import pytest
4+
5+
from techui_builder.builder import Builder
6+
7+
8+
@pytest.fixture
9+
def builder():
10+
path = Path("example/bl01t-services/synoptic/techui.yaml")
11+
b = Builder(path)
12+
b._services_dir = Path("example/bl01t-services/services")
13+
b._write_directory = b._services_dir.parent.joinpath("synoptic/opis")
14+
return b

tests/test_builder.py

Lines changed: 24 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -3,27 +3,16 @@
33

44
import pytest
55

6-
from techui_builder.builder import Builder
7-
8-
9-
@pytest.fixture
10-
def gb():
11-
path = Path("example/bl01t-services/synoptic/create_gui.yaml")
12-
b = Builder(path)
13-
b._services_dir = Path("./example/bl01t-services/services")
14-
b.setup()
15-
return b
16-
176

187
@pytest.mark.parametrize(
198
"attr, expected",
209
[
21-
("beamline.dom", "bl01t"),
22-
("beamline.desc", "Test Beamline"),
10+
("dom", "bl01t"),
11+
("desc", "Test Beamline"),
2312
],
2413
)
25-
def test_beamline_attributes(gb: Builder, attr, expected):
26-
assert eval(f"gb.{attr}") == expected
14+
def test_beamline_attributes(builder, attr, expected):
15+
assert getattr(builder.beamline, attr) == expected
2716

2817

2918
@pytest.mark.parametrize(
@@ -33,16 +22,16 @@ def test_beamline_attributes(gb: Builder, attr, expected):
3322
(
3423
4,
3524
"motor",
36-
"Hexapod Stage",
37-
"BL01T-MO-MAP-01",
38-
"STAGE",
25+
"Motor Stage",
26+
"BL01T-MO-MOTOR-01",
27+
None,
3928
None,
4029
None,
4130
),
4231
],
4332
)
44-
def test_component_attributes(gb: Builder, index, name, desc, P, R, attribute, extras):
45-
component = gb.components[index]
33+
def test_component_attributes(builder, index, name, desc, P, R, attribute, extras):
34+
component = builder.components[index]
4635
assert component.name == name
4736
assert component.desc == desc
4837
assert component.P == P
@@ -56,45 +45,47 @@ def test_component_attributes(gb: Builder, index, name, desc, P, R, attribute, e
5645
"index, type, desc, P, M, R",
5746
[
5847
(0, "pmac.GeoBrick", None, "BL01T-MO-BRICK-01", None, None),
59-
(0, "pmac.autohome", None, "BL01T-MO-MAP-01:STAGE", None, None),
48+
(0, "pmac.autohome", None, "BL01T-MO-MOTOR-01", None, None),
6049
(
6150
1,
6251
"pmac.dls_pmac_asyn_motor",
6352
None,
64-
"BL01T-MO-MAP-01:STAGE",
53+
"BL01T-MO-MOTOR-01",
6554
"X",
6655
None,
6756
),
6857
(
6958
2,
7059
"pmac.dls_pmac_asyn_motor",
7160
None,
72-
"BL01T-MO-MAP-01:STAGE",
61+
"BL01T-MO-MOTOR-01",
7362
"A",
7463
None,
7564
),
7665
],
7766
)
78-
def test_gb_extract_entities(gb: Builder, index, type, desc, P, M, R):
79-
entity = gb.entities[P][index]
67+
def test_gb_extract_entities(builder, index, type, desc, P, M, R):
68+
builder._extract_entities(
69+
builder._services_dir.joinpath("bl01t-mo-ioc-01/config/ioc.yaml")
70+
)
71+
entity = builder.entities[P][index]
8072
assert entity.type == type
8173
assert entity.desc == desc
8274
assert entity.P == P
8375
assert entity.M == M
8476
assert entity.R == R
8577

8678

87-
def test_setup(gb: Builder):
88-
gb._services_dir = Path(f"example/{gb.beamline.dom}-services/services")
89-
gb._write_directory = Path("example/data")
90-
gb.generate_screens()
79+
def test_generate_screens(builder):
80+
builder.setup()
81+
builder.generate_screens()
9182

92-
with open(f"./{gb._write_directory}/motor.bob") as f:
83+
with open(f"{builder._write_directory}/motor.bob") as f:
9384
expected = f.read()
9485

95-
with open("./tests/test_files/motor.bob") as f:
86+
with open("tests/test_files/motor.bob") as f:
9687
control = f.read()
9788

9889
assert expected == control
99-
if Path.exists(Path(f"./{gb._write_directory}/motor.bob")):
100-
os.remove(f"./{gb._write_directory}/motor.bob")
90+
if Path.exists(Path(f"{builder._write_directory}/motor.bob")):
91+
os.remove(f"{builder._write_directory}/motor.bob")

tests/test_files/motor.bob

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@
1111
<name>X</name>
1212
<width>205</width>
1313
<height>120</height>
14-
<file>../../../../src/techui_support/bob/pmac/motor_embed.bob</file>
14+
<file>../../../src/techui_support/bob/pmac/motor_embed.bob</file>
1515
<macros>
16-
<P>BL01T-MO-MAP-01:STAGE</P>
16+
<P>BL01T-MO-MOTOR-01</P>
1717
<M>X</M>
1818
</macros>
1919
<x>0</x>
@@ -23,9 +23,9 @@
2323
<name>A</name>
2424
<width>205</width>
2525
<height>120</height>
26-
<file>../../../../src/techui_support/bob/pmac/motor_embed.bob</file>
26+
<file>../../../src/techui_support/bob/pmac/motor_embed.bob</file>
2727
<macros>
28-
<P>BL01T-MO-MAP-01:STAGE</P>
28+
<P>BL01T-MO-MOTOR-01</P>
2929
<M>A</M>
3030
</macros>
3131
<x>0</x>
@@ -43,7 +43,7 @@
4343
<macros>
4444
<P>BL01T-MO-BRICK-01</P>
4545
</macros>
46-
<file>../../../../src/techui_support/bob/pmac/pmacController.bob</file>
46+
<file>../../../src/techui_support/bob/pmac/pmacController.bob</file>
4747
<target>tab</target>
4848
</action>
4949
</actions>

tests/test_generate.py

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,12 @@
1-
from pathlib import Path
1+
# from pathlib import Path
22

3-
import pytest
3+
# import pytest
44

5-
from techui_builder.builder import Builder
5+
# from techui_builder.builder import Builder
66

77
# from techui_builder.generate import Generator
88

99

10-
@pytest.fixture
11-
def gb():
12-
b = Builder(Path("example/create_gui.yaml)"))
13-
b._services_dir = Path(f"./example/{b.beamline.dom}-services")
14-
b._write_directory = Path("example/")
15-
b._extract_entities(
16-
ioc_yaml=Path(f"{b._services_dir}/services/bl01t-mo-ioc-01/config/ioc.yaml"),
17-
) # TODO: Change from hardcoded index
18-
return b
19-
20-
2110
# def test_build_groups(gb: Builder):
2211
# generator = Generator(
2312
# gb.entities, gb._gui_map, gb.components[4].name

0 commit comments

Comments
 (0)