Skip to content

Commit

Permalink
Travel down model tree only once when listing children.
Browse files Browse the repository at this point in the history
This should alleviate performance issues reported in #25,
at least to some extent.
  • Loading branch information
john-hen committed Apr 7, 2021
1 parent d94065d commit 7112a94
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions mph/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,9 +157,10 @@ def java(self):
if self.is_group():
return self.groups.get(name, None)
parent = self.parent()
if not parent.exists():
java = parent.java
if not java:
return
container = parent.java if parent.is_group() else parent.java.feature()
container = java if parent.is_group() else java.feature()
for tag in container.tags():
member = container.get(tag)
if name == escape(member.name()):
Expand Down Expand Up @@ -190,14 +191,14 @@ def parent(self):

def children(self):
"""Returns all child nodes."""
java = self.java
if self.is_root():
return [Node(self.model, group) for group in self.groups]
elif self.is_group():
return [self/escape(self.java.get(tag).name())
for tag in self.java.tags()]
elif hasattr(self.java, 'feature'):
return [self/escape(self.java.feature(tag).name())
for tag in self.java.feature().tags()]
return [self/escape(java.get(tag).name()) for tag in java.tags()]
elif hasattr(java, 'feature'):
return [self/escape(java.feature(tag).name())
for tag in java.feature().tags()]
else:
return []

Expand Down

0 comments on commit 7112a94

Please sign in to comment.