Skip to content

Commit 34d7522

Browse files
committed
Alternative implementation of name based listing
1 parent ac4f4bd commit 34d7522

File tree

3 files changed

+26
-21
lines changed

3 files changed

+26
-21
lines changed

examples/fodo.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,16 +43,16 @@ def main():
4343
)
4444
# Create line with all elements
4545
line = Line(
46-
line=[
47-
drift1,
48-
quad1,
49-
drift2,
50-
quad2,
51-
drift3,
52-
]
46+
line={
47+
drift1.name: drift1,
48+
quad1.name: quad1,
49+
drift2.name: drift2,
50+
quad2.name: quad2,
51+
drift3.name: drift3,
52+
}
5353
)
5454
# Serialize to YAML
55-
yaml_data = yaml.dump(line.model_dump(), default_flow_style=False)
55+
yaml_data = yaml.dump(line.model_dump(), default_flow_style=False, sort_keys=False)
5656
print("Dumping YAML data...")
5757
print(f"{yaml_data}")
5858
# Write YAML data to file
@@ -67,7 +67,7 @@ def main():
6767
# Validate loaded data
6868
assert line == loaded_line
6969
# Serialize to JSON
70-
json_data = json.dumps(line.model_dump(), sort_keys=True, indent=2)
70+
json_data = json.dumps(line.model_dump(), indent=2, sort_keys=False)
7171
print("Dumping JSON data...")
7272
print(f"{json_data}")
7373
# Write JSON data to file

schema/Line.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
from pydantic import BaseModel, ConfigDict, Field
2-
from typing import Annotated, List, Literal, Union
2+
from typing import Annotated, Literal, OrderedDict, Union
33

44
from schema.BaseElement import BaseElement
55
from schema.ThickElement import ThickElement
@@ -16,7 +16,8 @@ class Line(BaseModel):
1616

1717
kind: Literal["Line"] = "Line"
1818

19-
line: List[
19+
line: OrderedDict[
20+
str,
2021
Annotated[
2122
Union[
2223
BaseElement,
@@ -26,7 +27,7 @@ class Line(BaseModel):
2627
"Line",
2728
],
2829
Field(discriminator="kind"),
29-
]
30+
],
3031
]
3132

3233

tests/test_schema.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -104,18 +104,22 @@ def test_QuadrupoleElement():
104104
def test_Line():
105105
# Create first line with one base element
106106
element1 = BaseElement(name="element1")
107-
line1 = Line(line=[element1])
108-
assert line1.line == [element1]
107+
line1 = Line(line={element1.name: element1})
108+
assert line1.line == {element1.name: element1}
109109
# Extend first line with one thick element
110110
element2 = ThickElement(name="element2", length=2.0)
111-
line1.line.extend([element2])
112-
assert line1.line == [element1, element2]
111+
line1.line.update({element2.name: element2})
112+
assert line1.line == {element1.name: element1, element2.name: element2}
113113
# Create second line with one drift element
114114
element3 = DriftElement(name="element3", length=3.0)
115-
line2 = Line(line=[element3])
115+
line2 = Line(line={element3.name: element3})
116116
# Extend first line with second line
117-
line1.line.extend(line2.line)
118-
assert line1.line == [element1, element2, element3]
117+
line1.line.update(line2.line)
118+
assert line1.line == {
119+
element1.name: element1,
120+
element2.name: element2,
121+
element3.name: element3,
122+
}
119123

120124

121125
def test_yaml():
@@ -124,7 +128,7 @@ def test_yaml():
124128
# Create one thick element
125129
element2 = ThickElement(name="element2", length=2.0)
126130
# Create line with both elements
127-
line = Line(line=[element1, element2])
131+
line = Line(line={element1.name: element1, element2.name: element2})
128132
# Serialize the Line object to YAML
129133
yaml_data = yaml.dump(line.model_dump(), default_flow_style=False)
130134
print(f"\n{yaml_data}")
@@ -149,7 +153,7 @@ def test_json():
149153
# Create one thick element
150154
element2 = ThickElement(name="element2", length=2.0)
151155
# Create line with both elements
152-
line = Line(line=[element1, element2])
156+
line = Line(line={element1.name: element1, element2.name: element2})
153157
# Serialize the Line object to JSON
154158
json_data = json.dumps(line.model_dump(), sort_keys=True, indent=2)
155159
print(f"\n{json_data}")

0 commit comments

Comments
 (0)