@@ -273,8 +273,9 @@ def _unmarshal(self, data: bytes):
273273 setattr (obj , prop .name , val )
274274 return obj
275275
276- # Dictionary of entity types (metadata) collected by the Entity decorator
277- obx_models_by_name : Dict [str , Set [_Entity ]] = {}
276+ # Dictionary of entity types (metadata) collected by the Entity decorator.
277+ # Note: using a list not a set to keep the order of entities as they were defined (set would not be deterministic).
278+ obx_models_by_name : Dict [str , List [_Entity ]] = {}
278279
279280
280281def Entity (uid : int = 0 , model : str = "default" ) -> Callable [[Type ], _Entity ]:
@@ -288,21 +289,21 @@ def wrapper(class_):
288289 obj = class_member [1 ]()
289290 setattr (class_ , class_member [0 ], obj )
290291
291- metadata_set = obx_models_by_name .get (model )
292- if metadata_set is None :
293- metadata_set = set ()
294- obx_models_by_name [model ] = metadata_set
292+ types = obx_models_by_name .get (model )
293+ if types is None :
294+ types = []
295+ obx_models_by_name [model ] = types
295296
296- metadata = _Entity (class_ , uid )
297- for existing in metadata_set :
298- if existing .name == metadata .name :
297+ entity_type = _Entity (class_ , uid )
298+ for existing in types :
299+ if existing .name == entity_type .name :
299300 # OK for tests, where multiple models are created with the same entity name
300- logging .warning (f"Model \" { model } \" already contains an entity \" { metadata .name } \" ; replacing it." )
301- metadata_set .remove (existing )
301+ logging .warning (f"Model \" { model } \" already contains an entity type \" { entity_type .name } \" ; replacing it." )
302+ types .remove (existing )
302303 break
303304
304- obx_models_by_name [model ].add ( metadata )
305- logging .info (f"Entity { metadata .name } added to model { model } " )
306- return metadata
305+ obx_models_by_name [model ].append ( entity_type )
306+ logging .info (f"Entity type { entity_type .name } added to model { model } " )
307+ return entity_type
307308
308309 return wrapper
0 commit comments