summaryrefslogtreecommitdiff
path: root/grc/core/Element.py
diff options
context:
space:
mode:
authorSebastian Koslowski <sebastian.koslowski@gmail.com>2016-05-03 17:13:08 +0200
committerJohnathan Corgan <johnathan@corganlabs.com>2017-06-29 09:16:49 -0700
commit7f7fa2f91467fdb2b11312be8562e7b51fdeb199 (patch)
tree24268bac15b9920d2a15ddbb45eaf3b9b03718a1 /grc/core/Element.py
parent44cae388881821942e691a4d69a923bbd8d347db (diff)
grc: added yaml/mako support
Includes basic converter from XML/Cheetah to YAML/Mako based block format.
Diffstat (limited to 'grc/core/Element.py')
-rw-r--r--grc/core/Element.py180
1 files changed, 0 insertions, 180 deletions
diff --git a/grc/core/Element.py b/grc/core/Element.py
deleted file mode 100644
index 86e0746655..0000000000
--- a/grc/core/Element.py
+++ /dev/null
@@ -1,180 +0,0 @@
-# Copyright 2008, 2009, 2015, 2016 Free Software Foundation, Inc.
-# This file is part of GNU Radio
-#
-# GNU Radio Companion is free software; you can redistribute it and/or
-# modify it under the terms of the GNU General Public License
-# as published by the Free Software Foundation; either version 2
-# of the License, or (at your option) any later version.
-#
-# GNU Radio Companion is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
-
-import weakref
-import functools
-
-
-class lazy_property(object):
-
- def __init__(self, func):
- self.func = func
- functools.update_wrapper(self, func)
-
- def __get__(self, instance, cls):
- if instance is None:
- return self
- value = self.func(instance)
- setattr(instance, self.func.__name__, value)
- return value
-
-
-def nop_write(prop):
- """Make this a property with a nop setter"""
- def nop(self, value):
- pass
- return prop.setter(nop)
-
-
-class Element(object):
-
- def __init__(self, parent=None):
- self._parent = weakref.ref(parent) if parent else lambda: None
- self._error_messages = []
-
- ##################################################
- # Element Validation API
- ##################################################
- def validate(self):
- """
- Validate this element and call validate on all children.
- Call this base method before adding error messages in the subclass.
- """
- del self._error_messages[:]
-
- for child in self.get_children():
- child.validate()
-
- def is_valid(self):
- """
- Is this element valid?
-
- Returns:
- true when the element is enabled and has no error messages or is bypassed
- """
- if not self.enabled or self.get_bypassed():
- return True
- return not next(self.iter_error_messages(), False)
-
- def add_error_message(self, msg):
- """
- Add an error message to the list of errors.
-
- Args:
- msg: the error message string
- """
- self._error_messages.append(msg)
-
- def get_error_messages(self):
- """
- Get the list of error messages from this element and all of its children.
- Do not include the error messages from disabled or bypassed children.
- Cleverly indent the children error messages for printing purposes.
-
- Returns:
- a list of error message strings
- """
- return [msg if elem is self else "{}:\n\t{}".format(elem, msg.replace("\n", "\n\t"))
- for elem, msg in self.iter_error_messages()]
-
- def iter_error_messages(self):
- """
- Iterate over error messages. Yields tuples of (element, message)
- """
- for msg in self._error_messages:
- yield self, msg
- for child in self.get_children():
- if not child.enabled or child.get_bypassed():
- continue
- for element_msg in child.iter_error_messages():
- yield element_msg
-
- def rewrite(self):
- """
- Rewrite this element and call rewrite on all children.
- Call this base method before rewriting the element.
- """
- for child in self.get_children():
- child.rewrite()
-
- @property
- def enabled(self):
- return True
-
- def get_bypassed(self):
- return False
-
- ##############################################
- # Tree-like API
- ##############################################
- @property
- def parent(self):
- return self._parent()
-
- def get_parent_by_type(self, cls):
- parent = self.parent
- if parent is None:
- return None
- elif isinstance(parent, cls):
- return parent
- else:
- return parent.get_parent_by_type(cls)
-
- @lazy_property
- def parent_platform(self):
- from .Platform import Platform
- return self.get_parent_by_type(Platform)
-
- @lazy_property
- def parent_flowgraph(self):
- from .FlowGraph import FlowGraph
- return self.get_parent_by_type(FlowGraph)
-
- @lazy_property
- def parent_block(self):
- from .Block import Block
- return self.get_parent_by_type(Block)
-
- def reset_parents_by_type(self):
- """Reset all lazy properties"""
- for name, obj in vars(Element): # explicitly only in Element, not subclasses
- if isinstance(obj, lazy_property):
- delattr(self, name)
-
- def get_children(self):
- return list()
-
- ##############################################
- # Type testing
- ##############################################
- is_platform = False
-
- is_flow_graph = False
-
- is_block = False
-
- is_dummy_block = False
-
- is_connection = False
-
- is_port = False
-
- is_param = False
-
- is_variable = False
-
- is_import = False