Skip to content

Commit 6233cdd

Browse files
committed
Add detection for vector member additions
1 parent 0fff273 commit 6233cdd

File tree

1 file changed

+33
-0
lines changed

1 file changed

+33
-0
lines changed

python/podio_schema_evolution.py

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,24 @@ def __init__(self, name, member_name_old, member_name_new):
124124
)
125125

126126

127+
class AddedVectorMember(SchemaChange):
128+
"""Class representing an added VectorMember"""
129+
130+
def __init__(self, member, datatype):
131+
self.member = member
132+
self.klassname = datatype
133+
super().__init__(f"'{self.klassname}' has added a vector member '{self.member}'")
134+
135+
136+
class DroppedVectorMember(SchemaChange):
137+
"""Class representing a dropped VectorMember"""
138+
139+
def __init__(self, member, datatype):
140+
self.member = member
141+
self.klassname = datatype
142+
super().__init__(f"'{self.klassname}' has a dropped member '{self.member.name}")
143+
144+
127145
class RootIoRule:
128146
"""A placeholder IORule class"""
129147

@@ -234,6 +252,15 @@ def _compare_datatypes(self) -> None:
234252
"Members",
235253
)
236254

255+
self._compare_members(
256+
kept_types,
257+
self.datamodel_new.datatypes,
258+
self.datamodel_old.datatypes,
259+
"VectorMembers",
260+
AddedVectorMember,
261+
DroppedVectorMember,
262+
)
263+
237264
def _compare_members(
238265
self,
239266
definitions,
@@ -336,6 +363,12 @@ def heuristics(self):
336363
added_members = [change for change in schema_changes if isinstance(change, AddedMember)]
337364
self.heuristics_members(added_members, dropped_members, schema_changes)
338365

366+
added_vecmems = [c for c in schema_changes if isinstance(c, AddedVectorMember)]
367+
for vmc in added_vecmems:
368+
self.errors.append(
369+
f"Forbidden schema change in '{vmc.klassname}': Added vector member '{vmc.member}'"
370+
)
371+
339372
# are the member changes actually supported/supportable?
340373
changed_members = [
341374
change for change in schema_changes if isinstance(change, ChangedMember)

0 commit comments

Comments
 (0)