diff options
Diffstat (limited to 'grc/base/FlowGraph.py')
-rw-r--r-- | grc/base/FlowGraph.py | 45 |
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 |