def get_sub_by_name(name, submasters=None): """name is a channel or sub nama, submasters is a Submasters object. If you leave submasters empty, it will use the global instance of Submasters.""" if not submasters: submasters = get_global_submasters() # get_all_sub_names went missing. needs rework #if name in submasters.get_all_sub_names(): # return submasters.get_sub_by_name(name) try: val = int(name) s = Submaster("#%d" % val, levels={val : 1.0}) return s except ValueError: pass try: subnum = get_dmx_channel(name) s = Submaster("'%s'" % name, levels={subnum : 1.0}) return s except ValueError: pass # make an error sub return Submaster('%s' % name, levels=ValueError)
def eval(self, current, t): """current graph is being passed as an optimization. It should be equivalent to use self.graph in here.""" objs = list(current.objects(self.uri, L9['expression'])) if len(objs) > 1: raise ValueError("found multiple expressions for %s: %s" % (self.uri, objs)) expr = current.value(self.uri, L9['expression']) if not expr: dispatcher.send("expr_error", sender=self.uri, exc="no expr, using 0") return 0 glo = self.curveset.globalsdict() glo['t'] = t glo = exprglo.exprGlobals(glo, t) glo['getsub'] = lambda name: self.submasters.get_sub_by_name(name) glo['chan'] = lambda name: Submaster.Submaster("chan", {get_dmx_channel(name): 1}) try: self.lasteval = eval(expr, glo) except Exception,e: dispatcher.send("expr_error", sender=self.uri, exc=e) return Submaster.Submaster("zero", {})
def get_dmx_list(self): leveldict = self.get_levels() # gets levels of sub contents levels = [] for k, v in leveldict.items(): if v == 0: continue try: dmxchan = get_dmx_channel(k) - 1 except ValueError: log.error("error trying to compute dmx levels for submaster %s" % self.name) raise if dmxchan >= len(levels): levels.extend([0] * (dmxchan - len(levels) + 1)) levels[dmxchan] = max(v, levels[dmxchan]) return levels
def chan(name): return Submaster.Submaster( name=name, levels={get_dmx_channel(name) : 1.0})