summaryrefslogtreecommitdiff
path: root/grc
diff options
context:
space:
mode:
authorSebastian Koslowski <koslowski@kit.edu>2014-12-05 14:17:15 +0100
committerSebastian Koslowski <koslowski@kit.edu>2014-12-05 14:17:15 +0100
commit2008a6e3976a74c31747d99f41d38a8aef72c569 (patch)
tree78559914042846204276ecafc5063a72e580f93c /grc
parent2c9079afda99349a8a5914c15d55d3d86a50eaca (diff)
grc: add multiple_sources flag to domain.dtd
Diffstat (limited to 'grc')
-rw-r--r--grc/base/Connection.py24
-rw-r--r--grc/base/Platform.py5
-rw-r--r--grc/base/domain.dtd3
-rw-r--r--grc/blocks/gr_message_domain.xml1
-rw-r--r--grc/python/Port.py2
5 files changed, 24 insertions, 11 deletions
diff --git a/grc/base/Connection.py b/grc/base/Connection.py
index abe8b4fc97..3a2de5b9a5 100644
--- a/grc/base/Connection.py
+++ b/grc/base/Connection.py
@@ -85,14 +85,24 @@ class Connection(Element):
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))
-
- if (source_domain in platform.get_domains() and
+ self.add_error_message('No connection known for domains "%s", "%s"'
+ % (source_domain, sink_domain))
+ too_many_other_sinks = (
+ source_domain in platform.get_domains() and
not platform.get_domain(key=source_domain)['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)
-
+ len(self.get_source().get_enabled_connections()) > 1
+ )
+ too_many_other_sources = (
+ sink_domain in platform.get_domains() and
+ not platform.get_domain(key=sink_domain)['multiple_sources'] and
+ len(self.get_sink().get_enabled_connections()) > 1
+ )
+ if too_many_other_sinks:
+ self.add_error_message(
+ 'Domain "%s" can have only one downstream block' % source_domain)
+ if too_many_other_sources:
+ self.add_error_message(
+ 'Domain "%s" can have only one upstream block' % sink_domain)
def get_enabled(self):
"""
diff --git a/grc/base/Platform.py b/grc/base/Platform.py
index 744b546d44..75b49012fd 100644
--- a/grc/base/Platform.py
+++ b/grc/base/Platform.py
@@ -143,9 +143,12 @@ class Platform(_Element):
print >> sys.stderr, 'Warning: Domain with key "%s" already exists.\n\tIgnoring: %s' % (key, xml_file)
return
+ to_bool = lambda s, d: d if s is None else \
+ s.lower() not in ('false', 'off', '0', '')
self._domains[key] = dict(
name=n.find('name') or key,
- multiple_sinks=n.find('multiple_sinks') or True
+ multiple_sinks=to_bool(n.find('multiple_sinks'), True),
+ multiple_sources=to_bool(n.find('multiple_sources'), False),
)
for connection_n in n.findall('connection'):
source_domain = connection_n.find('source_domain') or DEFAULT_DOMAIN
diff --git a/grc/base/domain.dtd b/grc/base/domain.dtd
index 3c50687987..1dc2959591 100644
--- a/grc/base/domain.dtd
+++ b/grc/base/domain.dtd
@@ -16,7 +16,7 @@ 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
-->
-<!ELEMENT domain (name, key, multiple_sinks?, connection*)>
+<!ELEMENT domain (name, key, multiple_sinks?, multiple_sources?, connection*)>
<!--
Sub level elements.
-->
@@ -28,6 +28,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
<!ELEMENT name (#PCDATA)>
<!ELEMENT key (#PCDATA)>
<!ELEMENT multiple_sinks (#PCDATA)>
+<!ELEMENT multiple_sources (#PCDATA)>
<!ELEMENT make (#PCDATA)>
<!ELEMENT source_domain (#PCDATA)>
<!ELEMENT sink_domain (#PCDATA)>
diff --git a/grc/blocks/gr_message_domain.xml b/grc/blocks/gr_message_domain.xml
index 7e2b4cf046..443f600dab 100644
--- a/grc/blocks/gr_message_domain.xml
+++ b/grc/blocks/gr_message_domain.xml
@@ -7,6 +7,7 @@
<domain>
<name>GR Message</name>
<key>gr_message</key>
+ <multiple_sources>True</multiple_sources>
<connection>
<source_domain>gr_message</source_domain>
<sink_domain>gr_message</sink_domain>
diff --git a/grc/python/Port.py b/grc/python/Port.py
index fdeb14a4a6..4cd07a9721 100644
--- a/grc/python/Port.py
+++ b/grc/python/Port.py
@@ -128,8 +128,6 @@ class Port(_Port, _GUIPort):
_Port.validate(self)
if not self.get_enabled_connections() and not self.get_optional():
self.add_error_message('Port is not connected.')
- if not self.is_source() and (not self.get_type() == "message") and len(self.get_enabled_connections()) > 1:
- self.add_error_message('Port has too many connections.')
#message port logic
if self.get_type() == 'msg':
if self.get_nports():