ATLAS Offline Software
Loading...
Searching...
No Matches
python.Node.Node Class Reference
Collaboration diagram for python.Node.Node:

Public Member Functions

 __init__ (self, name="root", flags=None, root=None)
 lock (self, lockstate=_LOCKED)
 unlock (self)
 lock_forever (self)
 islocked (self)
 __setattr__ (self, name, value)
 __getattribute__ (self, name)
 __getattr__ (self, name)
 name (self)
 add (self, attr_name, value)
 addFlag (self, tag, value, flags=None)
 addNewNode (self, name, flags=None)
 addNode (self, node)
 has (self, name)
 hasFlag (self, name)
 nodes (self)
 hasNode (self, name)
 node (self, name)
 delete (self, name)
 rename (self, name, newname)
 clone (self, name=None)
 print (self, spacer="")
 dump (self)

Protected Member Functions

 _fail_if_locked_forever (self)
 _fail_if_locked (self)
 _loadflags (self, name)
 _addDynaFlags (self, name)
 _rootnode (self)
 _setrootnode (self, rootnode)
 _addFlagImpl (self, tag, value, flags=None, unlock=False)
 _addFlagUnlock (self, tag, value, flags=None)

Protected Attributes

 _lockstate = _LOCKED:
return self._children[name_children
return self._root._loadflags(name_root
 _name

Private Attributes

delattr(self, name__dict__

Detailed Description

Basic node class, so we can get all the egregious flags from a
flags object, and use, and pass round, the individual nodes, as
actual nodes without all the nonsense limitations of using the
flags directly

Definition at line 27 of file Node.py.

Constructor & Destructor Documentation

◆ __init__()

python.Node.Node.__init__ ( self,
name = "root",
flags = None,
root = None )

Definition at line 35 of file Node.py.

35 def __init__(self, name="root", flags=None, root=None ):
36 object.__setattr__(self, "_lockstate", _UNLOCKED)
37 object.__setattr__(self, "_name", name)
38 object.__setattr__(self, "_children", {})
39 object.__setattr__(self, "_flags", flags)
40 object.__setattr__(self, "_root", root)
41

Member Function Documentation

◆ __getattr__()

python.Node.Node.__getattr__ ( self,
name )
will attempt a dynamic load from flags if need be 

Definition at line 77 of file Node.py.

77 def __getattr__(self, name):
78 """ will attempt a dynamic load from flags if need be """
79 if name in self._children : return self._children[name]
80 if self._root :
81 if self._root._loadflags( f"{self.name()}.{name}" ) :
82 if name in self._children : return self._children[name]
83
84 if name in self._root._children : return self._root._children[name]
85 if self._root._loadflags( name ) :
86 if name in self._root._children : return self._root._children[name]
87 else:
88 if self._loadflags( name ) :
89 if name in self._children : return self._children[name]
90
91 raise AttributeError(f"no attribute {name}")
92
93

◆ __getattribute__()

python.Node.Node.__getattribute__ ( self,
name )

Definition at line 69 of file Node.py.

69 def __getattribute__(self, name):
70 value = object.__getattribute__(self, name)
71 if isinstance(value, CfgFlag):
72 flags = object.__getattribute__(self, "_flags")
73 return value.get(flags)
74 return value
75
76

◆ __setattr__()

python.Node.Node.__setattr__ ( self,
name,
value )

Definition at line 65 of file Node.py.

65 def __setattr__(self, name, value):
66 self._fail_if_locked()
67 object.__setattr__(self, name, value)
68

◆ _addDynaFlags()

python.Node.Node._addDynaFlags ( self,
name )
protected

Definition at line 113 of file Node.py.

113 def _addDynaFlags(self, name) :
114 flags = self._flags
115 self._flags._loadDynaFlags(name)
116 for key, val in self._flags._flagdict.items() :
117 if key == name or key.startswith(name+".") : self._addFlagUnlock( key, val, flags )
118 return True
119

◆ _addFlagImpl()

python.Node.Node._addFlagImpl ( self,
tag,
value,
flags = None,
unlock = False )
protected
addFlag method like that in the egregious flags 

Definition at line 136 of file Node.py.

136 def _addFlagImpl(self, tag, value, flags=None, unlock=False):
137 """ addFlag method like that in the egregious flags """
138 node = self
139 if flags is not None and self._flags is None : node._flags = flags
140 names = tag.split(".")
141 for name in names[:-1]:
142 node = node.addNewNode(name, flags )
143 if unlock : object.__setattr__( node, "_lockstate", _UNLOCKED )
144 if flags is not None : node._flags = flags
145 if names[-1] in node.__dict__ : return False
146 setattr(node, names[-1], value)
147 return True
148

◆ _addFlagUnlock()

python.Node.Node._addFlagUnlock ( self,
tag,
value,
flags = None )
protected

Definition at line 153 of file Node.py.

153 def _addFlagUnlock(self, tag, value, flags=None):
154 self._addFlagImpl( tag, value, flags, True )
155
156

◆ _fail_if_locked()

python.Node.Node._fail_if_locked ( self)
protected

Definition at line 61 of file Node.py.

61 def _fail_if_locked(self):
62 if self._lockstate == _LOCKED : raise RuntimeError(f"Node '{self._name}' is locked; ")
63 if self._lockstate == _LOCKED_FOREVER : raise RuntimeError(f"Node '{self._name}' is permanently locked; ")
64

◆ _fail_if_locked_forever()

python.Node.Node._fail_if_locked_forever ( self)
protected

Definition at line 58 of file Node.py.

58 def _fail_if_locked_forever(self):
59 if self._lockstate == _LOCKED_FOREVER : raise RuntimeError(f"Node '{self._name}' is permanently locked; ")
60

◆ _loadflags()

python.Node.Node._loadflags ( self,
name )
protected
load dynamic flags - can only load flags on the root node 

Definition at line 94 of file Node.py.

94 def _loadflags(self, name ) :
95 """ load dynamic flags - can only load flags on the root node """
96
97 if self._root : return self._root._loadflags( name )
98
99 flags = self._flags
100 if flags is None : raise AttributeError(f"no attribute {name}")
101 lockstate = self._lockstate
102 object.__setattr__(self, "_lockstate", _UNLOCKED)
103 try:
104 if name in flags._dynaflags : return self._addDynaFlags(name)
105 for key in flags._dynaflags :
106 if name in key : return self._addDynaFlags(key)
107 return False
108 finally:
109 # ensure the lock state is restored if something goes wrong ...
110 if lockstate != _UNLOCKED : self.lock(lockstate)
111
112

◆ _rootnode()

python.Node.Node._rootnode ( self)
protected

Definition at line 120 of file Node.py.

120 def _rootnode(self):
121 if self._root : return self._root
122 return self
123

◆ _setrootnode()

python.Node.Node._setrootnode ( self,
rootnode )
protected

Definition at line 124 of file Node.py.

124 def _setrootnode(self, rootnode ):
125 if self._root is rootnode : return
126 object.__setattr__(self, "_root", rootnode )
127 for node in self.nodes() : node._setrootnode(rootnode)
128

◆ add()

python.Node.Node.add ( self,
attr_name,
value )
add an attribute to this node 

Definition at line 132 of file Node.py.

132 def add(self, attr_name, value):
133 """ add an attribute to this node """
134 setattr(self, attr_name, value)
135
bool add(const std::string &hname, TKey *tobj)
Definition fastadd.cxx:55

◆ addFlag()

python.Node.Node.addFlag ( self,
tag,
value,
flags = None )

Definition at line 149 of file Node.py.

149 def addFlag(self, tag, value, flags=None):
150 if not self._addFlagImpl( tag, value, flags, False ):
151 raise KeyError(f"node: {tag} already exists")
152

◆ addNewNode()

python.Node.Node.addNewNode ( self,
name,
flags = None )
add a new child node 

Definition at line 157 of file Node.py.

157 def addNewNode(self, name, flags=None):
158 """ add a new child node """
159 self._fail_if_locked()
160 rootnode = self._rootnode()
161 if name not in self._children :
162 self._children[name] = ( node := Node(name, root=rootnode) )
163 if flags is not None : node._flags = flags
164 return self._children[name]
165

◆ addNode()

python.Node.Node.addNode ( self,
node )
an en existing node as a child node 

Definition at line 166 of file Node.py.

166 def addNode(self, node):
167 """ an en existing node as a child node """
168 self._fail_if_locked()
169 rootnode = self._rootnode()
170 if node.name() not in self._children :
171 if node._root and rootnode is not node.root :
172 raise RuntimeError(f"cannot add node {node.name()} from a different tree")
173 self._children[node.name()] = node
174 if not node._root : node.setrootnode( rootnode )
175 return self._children[node.name()]
176
void name(const std::string &n)
Definition node.h:40

◆ clone()

python.Node.Node.clone ( self,
name = None )
Return an independent copy" of this node

Definition at line 207 of file Node.py.

207 def clone(self, name=None):
208 """Return an independent copy" of this node"""
209
210 if name is not None : newnode = Node(name)
211 else: newnode = Node(self._name)
212
213 for key, value in self.__dict__.items():
214 if key in {"_name", "_children", "_lockstate", "_root" } : continue
215
216 setattr(newnode, key, value)
217
218 for node in self.nodes():
219 newnode.addNode(node.clone())
220
221 return newnode
222
223

◆ delete()

python.Node.Node.delete ( self,
name )

Definition at line 193 of file Node.py.

193 def delete(self, name):
194 self._fail_if_locked()
195 if name in self._children : del ( self._children[name] )
196 elif name in self.__dict__ : delattr( self, name )
197

◆ dump()

python.Node.Node.dump ( self)

Definition at line 233 of file Node.py.

233 def dump(self):
234 self.print()
235
236
237
-event-from-file

◆ has()

python.Node.Node.has ( self,
name )

Definition at line 177 of file Node.py.

177 def has(self, name ):
178 return hasattr( self, name )
179

◆ hasFlag()

python.Node.Node.hasFlag ( self,
name )

Definition at line 180 of file Node.py.

180 def hasFlag(self, name ):
181 return name in self.__dict__
182

◆ hasNode()

python.Node.Node.hasNode ( self,
name )

Definition at line 186 of file Node.py.

186 def hasNode(self, name):
187 return name in self._children
188

◆ islocked()

python.Node.Node.islocked ( self)

Definition at line 55 of file Node.py.

55 def islocked(self):
56 return self._lockstate != _UNLOCKED
57

◆ lock()

python.Node.Node.lock ( self,
lockstate = _LOCKED )

Definition at line 42 of file Node.py.

42 def lock(self, lockstate=_LOCKED):
43 for node in self.nodes() : node.lock(lockstate)
44 object.__setattr__(self, "_lockstate", lockstate)
45
virtual void lock()=0
Interface to allow an object to lock itself when made const in SG.

◆ lock_forever()

python.Node.Node.lock_forever ( self)

Definition at line 52 of file Node.py.

52 def lock_forever(self):
53 self.lock(_LOCKED_FOREVER)
54

◆ name()

python.Node.Node.name ( self)

Definition at line 129 of file Node.py.

129 def name(self) :
130 return self._name
131

◆ node()

python.Node.Node.node ( self,
name )

Definition at line 189 of file Node.py.

189 def node(self, name):
190 if self.hasNode(name) : return self._children[name]
191 raise RuntimeError(f"So such child: {name}")
192
Definition node.h:24

◆ nodes()

python.Node.Node.nodes ( self)

Definition at line 183 of file Node.py.

183 def nodes(self):
184 return self._children.values()
185

◆ print()

python.Node.Node.print ( self,
spacer = "" )

Definition at line 224 of file Node.py.

224 def print(self, spacer=""):
225 print( f"{spacer}", self._name, "(Node)" )
226 if spacer=="" : spacer = "|__"
227 else: spacer=f" {spacer}"
228 for key, value in self.__dict__.items():
229 if key in {"_name","_children","_lockstate", "_flags", "_root"} : continue
230 print( spacer, key, " : ", value )
231 for node in self.nodes() : node.print( spacer )
232
void print(char *figname, TCanvas *c1)

◆ rename()

python.Node.Node.rename ( self,
name,
newname )

Definition at line 198 of file Node.py.

198 def rename( self, name, newname ):
199 if newname in self._children or newname in self.__dict__ :
200 raise RuntimeError(f"name {newname} already in node")
201
202 if name in self.__dict__: setattr(self, newname, self.__dict__.pop(name) )
203 elif name in self._children :
204 self._children[newname] = ( node := self._children.pop(name) )
205 node._name = newname
206

◆ unlock()

python.Node.Node.unlock ( self)

Definition at line 46 of file Node.py.

46 def unlock(self):
47 self._fail_if_locked_forever()
48 if self._lockstate == _LOCKED:
49 object.__setattr__(self, "_lockstate", _UNLOCKED)
50 for node in self.nodes(): node.unlock()
51

Member Data Documentation

◆ __dict__

delattr( self, name ) python.Node.Node.__dict__
private

Definition at line 196 of file Node.py.

◆ _children

return self._children[name] python.Node.Node._children
protected

Definition at line 79 of file Node.py.

◆ _lockstate

python.Node.Node._lockstate = _LOCKED:
protected

Definition at line 48 of file Node.py.

◆ _name

python.Node.Node._name
protected

Definition at line 225 of file Node.py.

◆ _root

return self._root._loadflags( name ) python.Node.Node._root
protected

Definition at line 80 of file Node.py.


The documentation for this class was generated from the following file: