summaryrefslogtreecommitdiff
path: root/grc
diff options
context:
space:
mode:
Diffstat (limited to 'grc')
-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
-rw-r--r--grc/gui/Block.py4
-rw-r--r--grc/gui/Connection.py2
-rw-r--r--grc/gui/FlowGraph.py6
-rw-r--r--grc/gui/VariableEditor.py12
12 files changed, 59 insertions, 82 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()))
diff --git a/grc/gui/Block.py b/grc/gui/Block.py
index e7dc03345b..db147738b6 100644
--- a/grc/gui/Block.py
+++ b/grc/gui/Block.py
@@ -137,7 +137,7 @@ class Block(CoreBlock, Element):
self._bg_color = (
Colors.MISSING_BLOCK_BACKGROUND_COLOR if self.is_dummy_block else
Colors.BLOCK_BYPASSED_COLOR if self.get_bypassed() else
- Colors.BLOCK_ENABLED_COLOR if self.get_enabled() else
+ Colors.BLOCK_ENABLED_COLOR if self.enabled else
Colors.BLOCK_DISABLED_COLOR
)
@@ -234,7 +234,7 @@ class Block(CoreBlock, Element):
markups.append('<span></span>')
markups.append('<span foreground="{foreground}" font_desc="{font}">{comment}</span>'.format(
- foreground='#444' if self.get_enabled() else '#888', font=BLOCK_FONT, comment=Utils.encode(comment)
+ foreground='#444' if self.enabled else '#888', font=BLOCK_FONT, comment=Utils.encode(comment)
))
if markups:
layout = self._comment_layout = Gtk.DrawingArea().create_pango_layout('')
diff --git a/grc/gui/Connection.py b/grc/gui/Connection.py
index 87dd97a520..b6e84f8c89 100644
--- a/grc/gui/Connection.py
+++ b/grc/gui/Connection.py
@@ -171,7 +171,7 @@ class Connection(Element, _Connection):
# draw
color1, color2 = (
Colors.HIGHLIGHT_COLOR if self.highlighted else
- Colors.CONNECTION_DISABLED_COLOR if not self.get_enabled() else
+ Colors.CONNECTION_DISABLED_COLOR if not self.enabled else
color for color in (self._color, self._color2))
Element.draw(self, widget, cr, color1, Colors.FLOWGRAPH_BACKGROUND_COLOR)
diff --git a/grc/gui/FlowGraph.py b/grc/gui/FlowGraph.py
index da88636e1b..a3dd379074 100644
--- a/grc/gui/FlowGraph.py
+++ b/grc/gui/FlowGraph.py
@@ -456,13 +456,13 @@ class FlowGraph(Element, _Flowgraph):
hide_variables = Actions.TOGGLE_HIDE_VARIABLES.get_active()
def draw_order(elem):
- return elem.highlighted, elem.is_block, elem.get_enabled()
+ return elem.highlighted, elem.is_block, elem.enabled
elements = sorted(self.get_elements(), key=draw_order)
del self._elements_to_draw[:]
for element in elements:
- if hide_disabled_blocks and not element.get_enabled():
+ if hide_disabled_blocks and not element.enabled:
continue # skip hidden disabled blocks and connections
if hide_variables and (element.is_variable or element.is_import):
continue # skip hidden disabled blocks and connections
@@ -471,7 +471,7 @@ class FlowGraph(Element, _Flowgraph):
def _drawables(self):
show_comments = Actions.TOGGLE_SHOW_BLOCK_COMMENTS.get_active()
for element in self._elements_to_draw:
- if element.is_block and show_comments and element.get_enabled():
+ if element.is_block and show_comments and element.enabled:
yield element.draw_comment
for element in self._elements_to_draw:
yield element.draw
diff --git a/grc/gui/VariableEditor.py b/grc/gui/VariableEditor.py
index 11284f5708..09fe629195 100644
--- a/grc/gui/VariableEditor.py
+++ b/grc/gui/VariableEditor.py
@@ -211,7 +211,7 @@ class VariableEditor(Gtk.VBox):
# Block specific changes
if block:
- if not block.get_enabled():
+ if not block.enabled:
# Disabled block. But, this should still be editable
sp('editable', True)
sp('foreground', 'gray')
@@ -274,9 +274,9 @@ class VariableEditor(Gtk.VBox):
else:
self.handle_action(None, self.DELETE_BLOCK, None)
elif key == self.ENABLE_BLOCK:
- self._block.set_enabled(True)
+ self._block.state = 'enabled'
elif key == self.DISABLE_BLOCK:
- self._block.set_enabled(False)
+ self._block.state = 'disabled'
Actions.VARIABLE_EDITOR_UPDATE()
def _handle_mouse_button_press(self, widget, event):
@@ -318,7 +318,7 @@ class VariableEditor(Gtk.VBox):
return True
elif event.button == 3 and event.type == Gdk.EventType.BUTTON_PRESS:
if self._block:
- self._context_menu.update_sensitive(True, enabled=self._block.get_enabled())
+ self._context_menu.update_sensitive(True, enabled=self._block.enabled)
else:
self._context_menu.update_sensitive(False)
self._context_menu.popup(None, None, None, None, event.button, event.time)
@@ -341,10 +341,10 @@ class VariableEditor(Gtk.VBox):
def _handle_key_button_press(self, widget, event):
model, path = self.treeview.get_selection().get_selected_rows()
if path and self._block:
- if self._block.get_enabled() and event.string == "d":
+ if self._block.enabled and event.string == "d":
self.handle_action(None, self.DISABLE_BLOCK, None)
return True
- elif not self._block.get_enabled() and event.string == "e":
+ elif not self._block.enabled and event.string == "e":
self.handle_action(None, self.ENABLE_BLOCK, None)
return True
return False