################# functions for connections ########################################
def send_fail_connection():
################# functions for connections ########################################
def send_fail_connection():
- send('>>> Warning: A connection can only be created between a source and an unconnected sink.\n')
+ send('>>> Error: Cannot create connection.\n')
################# functions for preferences ########################################
def send_fail_load_preferences(prefs_file_path):
################# functions for preferences ########################################
def send_fail_load_preferences(prefs_file_path):
All ports and params must be valid.
All checks must evaluate to true.
"""
All ports and params must be valid.
All checks must evaluate to true.
"""
- if not self.get_enabled(): return
- for c in self.get_params() + self.get_sinks() + self.get_sources() + self.get_connections():
+ for c in self.get_params() + self.get_ports() + self.get_connections():
try: assert(c.is_valid())
except AssertionError:
for msg in c.get_error_messages():
try: assert(c.is_valid())
except AssertionError:
for msg in c.get_error_messages():
for port in (porta, portb):
if port.is_source(): source = port
if port.is_sink(): sink = port
for port in (porta, portb):
if port.is_source(): source = port
if port.is_sink(): sink = port
- #verify the source and sink
- assert(not source.is_full())
- assert(not sink.is_full())
+ #ensure that this connection (source -> sink) is unique
+ for connection in self.get_parent().get_connections():
+ assert not (connection.get_source() is source and connection.get_sink() is sink)
self._source = source
self._sink = sink
self._source = source
self._sink = sink
def is_valid(self):
self._error_messages = []#reset err msgs
def is_valid(self):
self._error_messages = []#reset err msgs
- try: self.validate()
- except: pass
+ if self.get_enabled():
+ try: self.validate()
+ except: pass
return not self.get_error_messages()
return not self.get_error_messages()
+ def get_enabled(self): return True
+
def _add_error_message(self, msg):
self._error_messages.append(msg)
def _add_error_message(self, msg):
self._error_messages.append(msg)
Validate the port.
The port must be non-empty and type must a possible type.
"""
Validate the port.
The port must be non-empty and type must a possible type.
"""
- try: assert(not self.is_empty())
- except AssertionError: self._add_error_message('Port is not connected.')
try: assert(self.get_type() in self.TYPES)
except AssertionError: self._add_error_message('Type "%s" is not a possible type.'%self.get_type())
try: assert(self.get_type() in self.TYPES)
except AssertionError: self._add_error_message('Type "%s" is not a possible type.'%self.get_type())
return 'Sink - %s(%s)'%(self.get_name(), self.get_key())
def is_port(self): return True
return 'Sink - %s(%s)'%(self.get_name(), self.get_key())
def is_port(self): return True
def get_color(self): return '#FFFFFF'
def get_color(self): return '#FFFFFF'
def get_name(self): return self._name
def get_name(self): return self._name
def get_key(self): return self._key
def get_key(self): return self._key
def is_sink(self): return self in self.get_parent().get_sinks()
def is_sink(self): return self in self.get_parent().get_sinks()
def is_source(self): return self in self.get_parent().get_sources()
def is_source(self): return self in self.get_parent().get_sources()
def get_type(self): return self.get_parent().resolve_dependencies(self._type)
def get_connections(self):
def get_type(self): return self.get_parent().resolve_dependencies(self._type)
def get_connections(self):
connections = filter(lambda c: c.get_source() is self or c.get_sink() is self, connections)
return connections
connections = filter(lambda c: c.get_source() is self or c.get_sink() is self, connections)
return connections
- def is_connected(self):
- """
- Is this port connected?
- @return true if at least one connection
+ def get_enabled_connections(self):
- return bool(self.get_connections())
-
- def is_full(self):
- """
- Is this port full of connections?
- Generally a sink can handle one connection and a source can handle many.
- @return true if the port is full
- """
- if self.is_source(): return False
- if self.is_sink(): return bool(self.get_connections())
-
- def is_empty(self):
- """
- Is this port empty?
- An empty port has no connections.
- @return true if empty
+ Get all enabled connections that use this port.
+ @return a list of connection objects
- return not self.get_connections()
+ return filter(lambda c: c.get_enabled(), self.get_connections())
try: assert check_eval
except AssertionError: self._add_error_message('Check "%s" failed.'%check)
except: self._add_error_message('Check "%s" did not evaluate.'%check)
try: assert check_eval
except AssertionError: self._add_error_message('Check "%s" failed.'%check)
except: self._add_error_message('Check "%s" did not evaluate.'%check)
for ports, Port in (
(self._sources, self.get_parent().get_parent().Source),
(self._sinks, self.get_parent().get_parent().Sink),
for ports, Port in (
(self._sources, self.get_parent().get_parent().Source),
(self._sinks, self.get_parent().get_parent().Sink),
self._vlen = vlen
self._optional = bool(optional)
self._vlen = vlen
self._optional = bool(optional)
+ def validate(self):
+ _Port.validate(self)
+ try: assert(self.get_enabled_connections() or self.get_optional())
+ except AssertionError: self._add_error_message('Port is not connected.')
+ try: assert(self.is_source() or len(self.get_enabled_connections()) == 1)
+ except AssertionError: self._add_error_message('Port has too many connections.')
+
def get_vlen(self):
"""
Get the vector length.
def get_vlen(self):
"""
Get the vector length.
}[self.get_type()]
except: return _Port.get_color(self)
}[self.get_type()]
except: return _Port.get_color(self)
- def is_empty(self):
- """
- Is this port empty?
- An empty port has no connections.
- Not empty of optional is set.
- @return true if empty
- """
- return not self.get_optional() and not self.get_connections()
-
class Source(Port):
def __init__(self, block, n):
class Source(Port):
def __init__(self, block, n):