summaryrefslogtreecommitdiff
path: root/grc/base
diff options
context:
space:
mode:
authorSebastian Koslowski <koslowski@kit.edu>2014-12-02 22:20:46 +0100
committerSebastian Koslowski <koslowski@kit.edu>2014-12-02 22:41:53 +0100
commit30ff5da2bf36ebb98852f6be9c098447022818cd (patch)
tree8aa515bf9289ea12138fd59e709795c3464c3e75 /grc/base
parent8d579a42871b157a7e360ba89d0925d81950e021 (diff)
grc: add domain attribute to ports
Diffstat (limited to 'grc/base')
-rw-r--r--grc/base/Connection.py13
-rw-r--r--grc/base/Port.py8
2 files changed, 16 insertions, 5 deletions
diff --git a/grc/base/Connection.py b/grc/base/Connection.py
index b35ca91050..dd74f2d660 100644
--- a/grc/base/Connection.py
+++ b/grc/base/Connection.py
@@ -81,10 +81,15 @@ class Connection(Element):
The ports must match in type.
"""
Element.validate(self)
- source_type = self.get_source().get_type()
- sink_type = self.get_sink().get_type()
- if source_type != sink_type:
- self.add_error_message('Source type "%s" does not match sink type "%s".'%(source_type, sink_type))
+ platform = self.get_parent().get_parent()
+ source_domain = self.get_source().get_domain()
+ sink_domain = self.get_sink().get_domain()
+ if (source_domain, sink_domain) not in platform.get_connection_templates():
+ self.add_error_message('No connection known for domains "%s", "%s"' % (source_domain, sink_domain))
+ multiple_sinks = platform.get_domain(key=self.get_source().get_domain())['multiple_sinks']
+ if not multiple_sinks and len(self.get_source().get_connections()) > 1:
+ self.add_error_message('Source domain "%s" can have only one downstream block' % source_domain)
+
def get_enabled(self):
"""
diff --git a/grc/base/Port.py b/grc/base/Port.py
index be32d15a91..f8a9a6d123 100644
--- a/grc/base/Port.py
+++ b/grc/base/Port.py
@@ -18,6 +18,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
"""
from Element import Element
+from . Constants import DEFAULT_DOMAIN
class Port(Element):
@@ -36,6 +37,7 @@ class Port(Element):
self._name = n['name']
self._key = n['key']
self._type = n['type']
+ self._domain = n.find('domain') or DEFAULT_DOMAIN
self._hide = n.find('hide') or ''
self._dir = dir
self._type_evaluated = None # updated on rewrite()
@@ -48,7 +50,10 @@ class Port(Element):
"""
Element.validate(self)
if self.get_type() not in self.get_types():
- self.add_error_message('Type "%s" is not a possible type.'%self.get_type())
+ self.add_error_message('Type "%s" is not a possible type.' % self.get_type())
+ platform = self.get_parent().get_parent().get_parent()
+ if self.get_domain() not in platform.get_domains():
+ self.add_error_message('Domain key "%s" is not registered.' % self.get_domain())
def rewrite(self):
"""resolve dependencies in for type and hide"""
@@ -85,6 +90,7 @@ class Port(Element):
def get_type(self):
return self.get_parent().resolve_dependencies(self._type) \
if self._type_evaluated is None else self._type_evaluated
+ def get_domain(self): return self._domain
def get_hide(self): return self._hide_evaluated
def get_connections(self):