summaryrefslogtreecommitdiff
path: root/grc/core
diff options
context:
space:
mode:
Diffstat (limited to 'grc/core')
-rw-r--r--grc/core/Block.py28
-rw-r--r--grc/core/Connection.py35
-rw-r--r--grc/core/Element.py9
-rw-r--r--grc/core/Element.pyi25
-rw-r--r--grc/core/FlowGraph.py12
-rw-r--r--grc/core/Port.py2
-rw-r--r--grc/core/generator/Generator.py4
-rw-r--r--grc/core/utils/_complexity.py2
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()))