diff options
author | Sebastian Koslowski <koslowski@kit.edu> | 2016-07-21 11:30:42 +0200 |
---|---|---|
committer | Sebastian Koslowski <koslowski@kit.edu> | 2016-07-29 15:45:08 +0200 |
commit | 6b99b6fded94ae1ed8421c624246362e7925fb08 (patch) | |
tree | b65ede7ccc1833714b97fb4036faa377a282a001 /grc/core | |
parent | 980ab9d2b0455cd0a39730617435774df4af658b (diff) |
grc: refactor: replace get_enabled by prop
Diffstat (limited to 'grc/core')
-rw-r--r-- | grc/core/Block.py | 28 | ||||
-rw-r--r-- | grc/core/Connection.py | 35 | ||||
-rw-r--r-- | grc/core/Element.py | 9 | ||||
-rw-r--r-- | grc/core/Element.pyi | 25 | ||||
-rw-r--r-- | grc/core/FlowGraph.py | 12 | ||||
-rw-r--r-- | grc/core/Port.py | 2 | ||||
-rw-r--r-- | grc/core/generator/Generator.py | 4 | ||||
-rw-r--r-- | grc/core/utils/_complexity.py | 2 |
8 files changed, 47 insertions, 70 deletions
diff --git a/grc/core/Block.py b/grc/core/Block.py index 7042ba7702..9572982bf7 100644 --- a/grc/core/Block.py +++ b/grc/core/Block.py @@ -332,30 +332,11 @@ class Block(Element): self.states['_enabled'] = encoded # Enable/Disable Aliases - def get_enabled(self): - """ - Get the enabled state of the block. - - Returns: - true for enabled - """ + @property + def enabled(self): + """Get the enabled state of the block""" return self.state != 'disabled' - def set_enabled(self, enabled): - """ - Set the enabled state of the block. - - Args: - enabled: true for enabled - - Returns: - True if block changed state - """ - old_state = self.state - new_state = 'enabled' if enabled else 'disabled' - self.state = new_state - return old_state != new_state - # Block bypassing def get_bypassed(self): """ @@ -739,7 +720,8 @@ class DummyBlock(Block): def is_valid(self): return False - def get_enabled(self): + @property + def enabled(self): return False def add_missing_port(self, key, dir): diff --git a/grc/core/Connection.py b/grc/core/Connection.py index aec7a217b3..6be1ccb2aa 100644 --- a/grc/core/Connection.py +++ b/grc/core/Connection.py @@ -76,6 +76,24 @@ class Connection(Element): raise ValueError('Connection could not isolate sink') return source, sink + @lazy_property + def source_block(self): + return self.source_port.parent_block + + @lazy_property + def sink_block(self): + return self.sink_port.parent_block + + @property + def enabled(self): + """ + Get the enabled state of this connection. + + Returns: + true if source and sink blocks are enabled + """ + return self.source_block.enabled and self.sink_block.enabled + def __str__(self): return 'Connection (\n\t{}\n\t\t{}\n\t{}\n\t\t{}\n)'.format( self.source_block, self.source_port, self.sink_block, self.sink_port, @@ -125,23 +143,6 @@ class Connection(Element): if source_size != sink_size: self.add_error_message('Source IO size "{}" does not match sink IO size "{}".'.format(source_size, sink_size)) - def get_enabled(self): - """ - Get the enabled state of this connection. - - Returns: - true if source and sink blocks are enabled - """ - return self.source_block.get_enabled() and self.sink_block.get_enabled() - - @lazy_property - def source_block(self): - return self.source_port.parent_block - - @lazy_property - def sink_block(self): - return self.sink_port.parent_block - ############################################## # Import/Export Methods ############################################## diff --git a/grc/core/Element.py b/grc/core/Element.py index 415b086402..32afabbed7 100644 --- a/grc/core/Element.py +++ b/grc/core/Element.py @@ -66,7 +66,7 @@ class Element(object): Returns: true when the element is enabled and has no error messages or is bypassed """ - return (not self.get_error_messages() or not self.get_enabled()) or self.get_bypassed() + return (not self.get_error_messages() or not self.enabled) or self.get_bypassed() def add_error_message(self, msg): """ @@ -88,7 +88,7 @@ class Element(object): """ error_messages = list(self._error_messages) # Make a copy for child in self.get_children(): - if not child.get_enabled() or child.get_bypassed(): + if not child.enabled or child.get_bypassed(): continue for msg in child.get_error_messages(): error_messages.append("{}:\n\t{}".format(child, msg.replace("\n", "\n\t"))) @@ -102,7 +102,8 @@ class Element(object): for child in self.get_children(): child.rewrite() - def get_enabled(self): + @property + def enabled(self): return True def get_bypassed(self): @@ -141,7 +142,7 @@ class Element(object): def reset_parents_by_type(self): """Reset all lazy properties""" - for name, obj in vars(Element): + for name, obj in vars(Element): # explicitly only in Element, not subclasses if isinstance(obj, lazy_property): delattr(self, name) diff --git a/grc/core/Element.pyi b/grc/core/Element.pyi index 46c6d3480d..2a2aed401c 100644 --- a/grc/core/Element.pyi +++ b/grc/core/Element.pyi @@ -15,32 +15,27 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA +from typing import Union + from . import Platform, FlowGraph, Block -def lazy_property(func): - return func +lazy_property = property # fixme: descriptors don't seems to be supported class Element(object): - def __init__(self, parent=None): - ... + def __init__(self, parent: Union[None, 'Element'] = None): ... - @property - def parent(self): -> 'Element' - ... + @lazy_property + def parent(self) -> 'Element': ... - def get_parent_by_type(self, cls): -> 'Element' - ... + def get_parent_by_type(self, cls) -> Union[None, 'Element']: ... @lazy_property - def parent_platform(self): -> Platform.Platform - ... + def parent_platform(self) -> Platform.Platform: ... @lazy_property - def parent_flowgraph(self): -> FlowGraph.FlowGraph - ... + def parent_flowgraph(self) -> FlowGraph.FlowGraph: ... @lazy_property - def parent_block(self): -> Block.Block - ... + def parent_block(self) -> Block.Block: ... diff --git a/grc/core/FlowGraph.py b/grc/core/FlowGraph.py index cb2a56ce7d..97a4c37353 100644 --- a/grc/core/FlowGraph.py +++ b/grc/core/FlowGraph.py @@ -21,11 +21,9 @@ import imp import time import re from itertools import chain -from operator import methodcaller, attrgetter +from operator import methodcaller import collections -from six.moves import filter - from . import Messages from .Constants import FLOW_GRAPH_FILE_FORMAT_VERSION from .Element import Element @@ -86,7 +84,7 @@ class FlowGraph(Element): Returns: a sorted list of variable blocks in order of dependency (indep -> dep) """ - variables = list(filter(attrgetter('is_variable'), self.iter_enabled_blocks())) + variables = [block for block in self.iter_enabled_blocks() if block.is_variable] return expr_utils.sort_objects(variables, methodcaller('get_id'), methodcaller('get_var_make')) def get_parameters(self): @@ -142,7 +140,7 @@ class FlowGraph(Element): """ Get an iterator of all blocks that are enabled and not bypassed. """ - return filter(methodcaller('get_enabled'), self.blocks) + return (block for block in self.blocks if block.enabled) def get_enabled_blocks(self): """ @@ -160,7 +158,7 @@ class FlowGraph(Element): Returns: a list of blocks """ - return list(filter(methodcaller('get_bypassed'), self.blocks)) + return [block for block in self.blocks if block.get_bypassed()] def get_enabled_connections(self): """ @@ -169,7 +167,7 @@ class FlowGraph(Element): Returns: a list of connections """ - return list(filter(methodcaller('get_enabled'), self.connections)) + return [connection for connection in self.connections if connection.enabled] def get_option(self, key): """ diff --git a/grc/core/Port.py b/grc/core/Port.py index f7046ad8c8..0d9298fb05 100644 --- a/grc/core/Port.py +++ b/grc/core/Port.py @@ -332,7 +332,7 @@ class Port(Element): Returns: a list of connection objects """ - return [c for c in self.get_connections() if c.get_enabled()] + return [c for c in self.get_connections() if c.enabled] def get_associated_ports(self): if not self.get_type() == 'bus': diff --git a/grc/core/generator/Generator.py b/grc/core/generator/Generator.py index dcbf767835..7c9a1eca73 100644 --- a/grc/core/generator/Generator.py +++ b/grc/core/generator/Generator.py @@ -145,7 +145,7 @@ class TopBlockGenerator(object): return code blocks_all = expr_utils.sort_objects( - [b for b in fg.blocks if b.get_enabled() and not b.get_bypassed()], + [b for b in fg.blocks if b.enabled and not b.get_bypassed()], operator.methodcaller('get_id'), _get_block_sort_text ) deprecated_block_keys = set(b.name for b in blocks_all if b.is_deprecated) @@ -198,7 +198,7 @@ class TopBlockGenerator(object): # Loop through all the downstream connections for sink in (c for c in connections if c.source_port == block.sources[0]): - if not sink.get_enabled(): + if not sink.enabled: # Ignore disabled connections continue sink_port = sink.sink_port diff --git a/grc/core/utils/_complexity.py b/grc/core/utils/_complexity.py index 6da16eb28d..c0f3ae9de4 100644 --- a/grc/core/utils/_complexity.py +++ b/grc/core/utils/_complexity.py @@ -29,7 +29,7 @@ def calculate_flowgraph_complexity(flowgraph): blocks = float(len(flowgraph.blocks)) connections = float(len(flowgraph.connections)) elements = blocks + connections - disabled_connections = sum(not c.get_enabled() for c in flowgraph.connections) + disabled_connections = sum(not c.enabled for c in flowgraph.connections) variables = elements - blocks - connections enabled = float(len(flowgraph.get_enabled_blocks())) |