88from ansys .fluent .core .services .datamodel_tui import PyMenu
99
1010
11+ class LocalObjectDataExtractor :
12+ def __init__ (self , obj ):
13+ self .field_info = lambda : obj ._get_top_most_parent ().session .field_info
14+ self .field_data = lambda : obj ._get_top_most_parent ().session .field_data
15+ self .surface_api = (
16+ lambda : obj ._get_top_most_parent ().session .tui .solver .surface
17+ )
18+ self .id = lambda : obj ._get_top_most_parent ().session .id
19+
20+
1121class Attribute :
1222 VALID_NAMES = ["range" , "allowed_values" ]
1323
@@ -87,7 +97,40 @@ def __new__(cls, name, bases, attrs):
8797 return super (PyMenuMeta , cls ).__new__ (cls , name , bases , attrs )
8898
8999
90- class PyLocalPropertyMeta (type ):
100+ class PyLocalBaseMeta (type ):
101+ @classmethod
102+ def __create_get_parent_by_type (cls ):
103+ def wrapper (self , obj_type , obj = None ):
104+ obj = self if obj is None else obj
105+ parent = None
106+ if getattr (obj , "_parent" , None ):
107+ if isinstance (obj ._parent , obj_type ):
108+ return obj ._parent
109+ parent = self ._get_parent_by_type (obj_type , obj ._parent )
110+ return parent
111+
112+ return wrapper
113+
114+ @classmethod
115+ def __create_get_top_most_parent (cls ):
116+ def wrapper (self , obj = None ):
117+ obj = self if obj is None else obj
118+ parent = obj
119+ if getattr (obj , "_parent" , None ):
120+ parent = self ._get_top_most_parent (obj ._parent )
121+ return parent
122+
123+ return wrapper
124+
125+ def __new__ (cls , name , bases , attrs ):
126+ attrs [
127+ "_get_parent_by_type"
128+ ] = cls .__create_get_parent_by_type ()
129+ attrs ["_get_top_most_parent" ] = cls .__create_get_top_most_parent ()
130+ return super (PyLocalBaseMeta , cls ).__new__ (cls , name , bases , attrs )
131+
132+
133+ class PyLocalPropertyMeta (PyLocalBaseMeta ):
91134 """Metaclass for local property classes."""
92135
93136 @classmethod
@@ -126,14 +169,8 @@ def wrapper(self, value):
126169 @classmethod
127170 def __create_init (cls ):
128171 def wrapper (self , parent ):
129- def get_top_most_parent (obj ):
130- parent = obj
131- if getattr (obj , "parent" , None ):
132- parent = get_top_most_parent (obj .parent )
133- return parent
134-
135- self .get_session = lambda : get_top_most_parent (self ).session
136- self .parent = parent
172+ self ._data_extractor = LocalObjectDataExtractor (self )
173+ self ._parent = parent
137174 self ._on_change_cbs = []
138175 annotations = self .__class__ .__dict__ .get ("__annotations__" )
139176 if isinstance (getattr (self .__class__ , "value" , None ), property ):
@@ -194,17 +231,17 @@ def __new__(cls, name, bases, attrs):
194231 attrs ["_validate" ] = cls .__create_validate ()
195232 attrs ["_register_on_change_cb" ] = cls .__create_register_on_change ()
196233 attrs ["set_state" ] = cls .__create_set_state ()
197- attrs ["parent" ] = None
198234 return super (PyLocalPropertyMeta , cls ).__new__ (cls , name , bases , attrs )
199235
200236
201- class PyLocalObjectMeta (type ):
237+ class PyLocalObjectMeta (PyLocalBaseMeta ):
202238 """Metaclass for local object classes."""
203239
204240 @classmethod
205241 def __create_init (cls ):
206242 def wrapper (self , parent ):
207- self .parent = parent
243+ self ._parent = parent
244+ self ._data_extractor = LocalObjectDataExtractor (self )
208245
209246 def update (clss ):
210247 for name , cls in clss .__dict__ .items ():
@@ -260,7 +297,8 @@ def wrapper(self, value):
260297 obj .set_state (val )
261298 else :
262299 obj .update (val )
263- wrapper .__doc__ = "Update method."
300+
301+ wrapper .__doc__ = "Update object."
264302 return wrapper
265303
266304 # graphics = ansys.fluent.postprocessing.pyvista.Graphics(session1)
@@ -330,7 +368,6 @@ def __new__(cls, name, bases, attrs):
330368 attrs ["__setattr__" ] = cls .__create_setattr ()
331369 attrs ["__repr__" ] = cls .__create_repr ()
332370 attrs ["update" ] = cls .__create_updateitem ()
333- attrs ["parent" ] = None
334371 return super (PyLocalObjectMeta , cls ).__new__ (cls , name , bases , attrs )
335372
336373
@@ -340,8 +377,9 @@ class PyLocalNamedObjectMeta(PyLocalObjectMeta):
340377 @classmethod
341378 def __create_init (cls ):
342379 def wrapper (self , name , parent ):
343- self .__name = name
344- self .parent = parent
380+ self ._name = name
381+ self ._data_extractor = LocalObjectDataExtractor (self )
382+ self ._parent = parent
345383
346384 def update (clss ):
347385 for name , cls in clss .__dict__ .items ():
@@ -382,7 +420,7 @@ class PyLocalContainer(MutableMapping):
382420 """Local container for named objects."""
383421
384422 def __init__ (self , parent , object_class ):
385- self .parent = parent
423+ self ._parent = parent
386424 self .__object_class = object_class
387425 self .__collection : dict = {}
388426
0 commit comments