def check_connect(self, src, dest, scope): """Check validity of connecting a source expression to a destination expression.""" if self.get_source(dest) is not None: scope.raise_exception("'%s' is already connected to source '%s'" % (dest, self.get_source(dest)), RuntimeError) destexpr = ConnectedExprEvaluator(dest, scope, getter='get_wrapped_attr', is_dest=True) srcexpr = ConnectedExprEvaluator(src, scope, getter='get_wrapped_attr') srccomps = srcexpr.get_referenced_compnames() destcomps = destexpr.get_referenced_compnames() if destcomps and destcomps.pop() in srccomps: raise RuntimeError("'%s' and '%s' refer to the same component." % (src, dest)) return srcexpr, destexpr
def check_connect(self, src, dest, scope): """Check validity of connecting a source expression to a destination expression, and determine if we need to create links to pseudocomps. """ if self.get_source(dest) is not None: scope.raise_exception("'%s' is already connected to source '%s'" % (dest, self.get_source(dest)), RuntimeError) destexpr = ConnectedExprEvaluator(dest, scope, is_dest=True) srcexpr = ConnectedExprEvaluator(src, scope, getter='get_attr') srccomps = srcexpr.get_referenced_compnames() destcomps = list(destexpr.get_referenced_compnames()) if destcomps and destcomps[0] in srccomps: raise RuntimeError("'%s' and '%s' refer to the same component." % (src, dest)) return srcexpr, destexpr, self._needs_pseudo(scope, srcexpr, destexpr)
def check_connect(self, src, dest, scope): """Check validity of connecting a source expression to a destination expression.""" if self.get_source(dest) is not None: scope.raise_exception( "'%s' is already connected to source '%s'" % (dest, self.get_source(dest)), RuntimeError) destexpr = ConnectedExprEvaluator(dest, scope, getter='get_wrapped_attr', is_dest=True) srcexpr = ConnectedExprEvaluator(src, scope, getter='get_wrapped_attr') srccomps = srcexpr.get_referenced_compnames() destcomps = destexpr.get_referenced_compnames() if destcomps and destcomps.pop() in srccomps: raise RuntimeError("'%s' and '%s' refer to the same component." % (src, dest)) return srcexpr, destexpr
def check_connect(self, src, dest, scope): """Check validity of connecting a source expression to a destination expression, and determine if we need to create links to pseudocomps. """ if self.get_source(dest) is not None: scope.raise_exception( "'%s' is already connected to source '%s'" % (dest, self.get_source(dest)), RuntimeError) destexpr = ConnectedExprEvaluator(dest, scope, is_dest=True) srcexpr = ConnectedExprEvaluator(src, scope, getter='get_attr') srccomps = srcexpr.get_referenced_compnames() destcomps = list(destexpr.get_referenced_compnames()) if destcomps and destcomps[0] in srccomps: raise RuntimeError("'%s' and '%s' refer to the same component." % (src, dest)) return srcexpr, destexpr, self._needs_pseudo(scope, srcexpr, destexpr)
def check_connect(self, src, dest, scope): """Check validity of connecting a source expression to a destination expression, and determine if we need to create links to pseudocomps. """ if self.get_source(dest) is not None: scope.raise_exception( "'%s' is already connected to source '%s'" % (dest, self.get_source(dest)), RuntimeError) destexpr = ConnectedExprEvaluator(dest, scope, is_dest=True) srcexpr = ConnectedExprEvaluator(src, scope, getter='get_attr_w_copy') srccomps = srcexpr.get_referenced_compnames() destcomps = list(destexpr.get_referenced_compnames()) if destcomps and destcomps[0] in srccomps: raise RuntimeError("'%s' and '%s' refer to the same component." % (src, dest)) try: return srcexpr, destexpr, self._needs_pseudo(srcexpr, destexpr) except AttributeError as err: exc_type, value, traceback = sys.exc_info() invalid_vars = srcexpr.get_unresolved() + destexpr.get_unresolved() parts = invalid_vars[0].rsplit('.', 1) parent = repr(scope.name) if scope.name else 'top level assembly' vname = repr(parts[0]) if len(parts) > 1: parent = repr(parts[0]) vname = repr(parts[1]) msg = "{parent} has no variable {vname}" msg = msg.format(parent=parent, vname=vname) raise AttributeError, AttributeError(msg), traceback