Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
    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", {})
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
 def chan(name):
     return Submaster.Submaster(
         name=name,
         levels={get_dmx_channel(name) : 1.0})