summaryrefslogtreecommitdiff
path: root/grc/base/FlowGraph.py
diff options
context:
space:
mode:
Diffstat (limited to 'grc/base/FlowGraph.py')
-rw-r--r--grc/base/FlowGraph.py45
1 files changed, 33 insertions, 12 deletions
diff --git a/grc/base/FlowGraph.py b/grc/base/FlowGraph.py
index 697ae8c47a..61e60f9968 100644
--- a/grc/base/FlowGraph.py
+++ b/grc/base/FlowGraph.py
@@ -18,10 +18,14 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
"""
import time
-from . import odict
-from Element import Element
+from operator import methodcaller
+from itertools import ifilter
+
from .. gui import Messages
-from . Constants import FLOW_GRAPH_FILE_FORMAT_VERSION
+
+from . import odict
+from .Element import Element
+from .Constants import FLOW_GRAPH_FILE_FORMAT_VERSION
class FlowGraph(Element):
@@ -118,18 +122,33 @@ class FlowGraph(Element):
##############################################
## Access Elements
##############################################
- def get_block(self, id): return filter(lambda b: b.get_id() == id, self.get_blocks())[0]
- def get_blocks_unordered(self): return filter(lambda e: e.is_block(), self.get_elements())
+ def get_block(self, id):
+ for block in self.iter_blocks():
+ if block.get_id() == id:
+ return block
+ raise KeyError('No block with ID {0!r}'.format(id))
+
+ def iter_blocks(self):
+ return ifilter(methodcaller('is_block'), self.get_elements())
+
+ def get_blocks_unordered(self):
+ return list(self.iter_blocks())
+
def get_blocks(self):
# refactored the slow, ugly version
# don't know why we need this here, using it for sorted export_data()
- return sorted(self.get_blocks_unordered(), key=lambda b: (
+ return sorted(self.iter_blocks(), key=lambda b: (
b.get_key() != 'options', # options to the front
not b.get_key().startswith('variable'), # then vars
str(b)
))
- def get_connections(self): return filter(lambda e: e.is_connection(), self.get_elements())
- def get_children(self): return self.get_elements()
+
+ def iter_connections(self):
+ return ifilter(methodcaller('is_connection'), self.get_elements())
+
+ def get_connections(self):
+ return list(self.iter_connections())
+
def get_elements(self):
"""
Get a list of all the elements.
@@ -145,6 +164,8 @@ class FlowGraph(Element):
self._elements.remove(self._options_block)
return self._elements
+ get_children = get_elements
+
def get_enabled_blocks(self):
"""
Get a list of all blocks that are enabled and not bypassed.
@@ -152,7 +173,7 @@ class FlowGraph(Element):
Returns:
a list of blocks
"""
- return filter(lambda b: b.get_enabled(), self.get_blocks())
+ return filter(methodcaller('get_enabled'), self.iter_blocks())
def get_bypassed_blocks(self):
"""
@@ -161,7 +182,7 @@ class FlowGraph(Element):
Returns:
a list of blocks
"""
- return filter(lambda b: b.get_bypassed(), self.get_blocks())
+ return filter(methodcaller('get_bypassed'), self.iter_blocks())
def get_enabled_connections(self):
"""
@@ -170,7 +191,7 @@ class FlowGraph(Element):
Returns:
a list of connections
"""
- return filter(lambda c: c.get_enabled(), self.get_connections())
+ return filter(methodcaller('get_enabled'), self.get_connections())
def get_new_block(self, key):
"""
@@ -301,7 +322,7 @@ class FlowGraph(Element):
block.import_data(block_n)
#build the connections
- block_ids = map(lambda b: b.get_id(), self.get_blocks())
+ block_ids = map(methodcaller('get_id'), self.iter_blocks())
for connection_n in connections_n:
try: # to make the connection
#get the block ids