コード例 #1
0
    def sort(self, sortkey=None, as_text=False, filtered=True, keep=True):
        """
        Returns a sorted list of alarm models
        
        valid keys are:
        * name
        * device
        * active (time desc)
        * severity
        * receivers
        * hierarchy
        * failed
        """
        try:
            updated = [a for a in self.alarms.values() if a.updated]
            if len(updated) == len(self.alarms):
                [
                    a.get_active() for a in self.alarms.values()
                    if a.active in (1, True)
                ]
            else:
                self.info('sort(): %d alarms not updated yet' %
                          (len(self.alarms) - len(updated)))

            self.debug('%d alarms, %d filtered, %d updated' %
                       tuple(map(len, (self.alarms, updated, self.filtered))))

            #self.lock.acquire()
            ordered = self.ordered
            if not keep or not ordered \
                    or (now()-self.last_sort) > self.get_period():
                #self.last_keys = keys or self.last_keys
                sortkey = sortkey or self.sortkey
                if isSequence(sortkey):
                    sortkey = lambda a, p=sortkey: self.sortkey(a, priority=p)
                if filtered:
                    objs = [self.api[f] for f in self.filtered]
                else:
                    objs = self.alarms.values()

                ordered = sorted(objs, key=sortkey)
                if keep: self.ordered = ordered
                self.debug('sort([%d])' % (len(ordered)))

            if as_text:
                kw = fd.isMapping(as_text) and as_text or {}
                r = list(
                    reversed(
                        [self.get_alarm_as_text(a, **kw) for a in ordered]))
            else:
                r = list(reversed([a.get_model() for a in ordered]))

            self.last_sort = now()
            return r
        except:
            self.error(traceback.format_exc())
        finally:
            #self.lock.release()
            pass
コード例 #2
0
def test_AlarmDS(device=''):
    if not device:
        device = Fn.first(
            (d for d, v in api.devices.items() if v.ping() is not None), None)
    Fn.log.info('Testing AlarmDS(%s)' % device)
    if device:
        device = api.devices.get(device)
        assert Fn.isMapping(device.get_active_alarms())
    return True
コード例 #3
0
ファイル: device.py プロジェクト: mbroseta/WedTornadoDS
 def attributes2json(self, filename, attrs, keep=False, log=False):
     if not fn.isMapping(attrs):
         attrs = self.attrs2dict(attrs, keep=keep, log=log)
     try:
         if not os.path.exists(os.path.dirname(filename)):
             try:
                 os.makedirs(os.path.dirname(filename))
             except OSError as exc:  # Guard against race condition
                 raise
         json.dump(attrs, open(filename, 'w'), encoding='latin-1')
         print('%d attributes written to %s' % (len(attrs), filename))
     except Exception, e:
         print('attributes2json(%s) failed!' % filename)
         failed = 0
         for k, v in attrs.items():
             try:
                 json.dumps({k: v}, encoding='latin-1')
             except Exception, ee:
                 failed = 1
                 print((k, 'cannot be parsed: ', ee))
コード例 #4
0
    def test(self, tests=[]):
        """
    Tests would be a list of (name,result,args,kwargs) values
    """
        print('test(', tests, ')')
        try:
            tests = tests or self.tests
            if not fn.isSequence(tests): tests = [tests]
            passed = 0
            if fn.isMapping(tests):
                tests = [
                    [k] +
                    list(t if not isMapping(t) else (t.get('result', None),
                                                     t.get('args', []),
                                                     t.get('kwargs', [])))
                    for k, t in tests.items()
                ]
            for t in tests:
                t = fn.toList(t)
                print t
                t[0] = t[0]
                t[1] = (t[1:] or [None])[0]
                t[2] = (t[2:] or [[]])[0]
                t[3] = (t[3:] or [{}])[0]
                v = self.test_object(t[0], t[1], *t[2], **t[3])
                if v: passed += 1
                self.results[t[0]] = v

            print('-' * 80)
            for t in tests:
                v = self.results[fn.toList(t)[0]]
                print('%s testing: %s : %s' %
                      (self.module, t, ['Failed', 'Ok'][bool(v)]))

            print('%s : %d / %d tests passed' %
                  (self.module, passed, len(tests)))
        except:
            traceback.print_exc()
            print(tests)
        return passed
コード例 #5
0
ファイル: testmodule.py プロジェクト: sergirubio/fandango
 def test(self,tests=[]):
   """
   Tests would be a list of (name,result,args,kwargs) values
   """
   print('test(',tests,')')
   try:
     tests = tests or self.tests
     if not fn.isSequence(tests): tests = [tests]
     passed = 0
     if fn.isMapping(tests):
       tests = [
         [k]+list(t if not isMapping(t) else 
           (t.get('result',None),t.get('args',[]),t.get('kwargs',[]))
           )
         for k,t in tests.items()]
     for t in tests:
       t = fn.toList(t)
       print t
       t[0] = t[0]
       t[1] = (t[1:] or [None])[0]
       t[2] = (t[2:] or [[]])[0]
       t[3] = (t[3:] or [{}])[0]
       v = self.test_object(t[0],t[1],*t[2],**t[3])
       if v: passed += 1
       self.results[t[0]] = v
       
     print('-'*80)
     for t in tests:
       v = self.results[fn.toList(t)[0]]
       print('%s testing: %s : %s' % (self.module,t,['Failed','Ok'][bool(v)]))
       
     print('%s : %d / %d tests passed'%(self.module,passed,len(tests)))
   except:
     traceback.print_exc()
     print(tests)
   return passed
コード例 #6
0
ファイル: gen_simulation.py プロジェクト: PhilLAL/SimulatorDS
def generate_class_properties(filein='ui_attribute_values.pck', all_rw=False):

    print('generate_class_properties:' + str(filein))
    devs = pickle.load(open(filein))

    classes = defaultdict(Struct)
    print('classes in %s are: %s' %
          (filein, sorted(set(s.dev_class for s in devs.values()))))
    filters = raw_input(
        'Do you want to filter out some classes? [PyStateComposer]'
    ) or 'PyStateComposer'
    for d, s in devs.items():
        if s.dev_class in filters: continue
        classes[s.dev_class].attrs = {}
        classes[s.dev_class].comms = {}
        classes[s.dev_class].values = defaultdict(set)

    for d, s in devs.items():

        if s.dev_class in filters:
            continue

        for a, t in s.attrs.items():
            t['datatype'] = t.get('data_type', 'DevDouble')
            if not isinstance(t, Struct): t = Struct(t)

            if t.value is not None and not any(x in t.datatype.lower()
                                               for x in ('array', )):
                try:
                    classes[s.dev_class].values[a].add(t.value)
                except:
                    print d, s.dev_class, a, t

    for d, s in devs.items():

        if s.dev_class in filters:
            continue

        #Iterate attributes
        for a, t in s.attrs.items():

            if a.lower() in ('state', 'status'):
                continue

            if t.value is None and a in classes[s.dev_class].attrs:
                continue

            else:
                if t.value is None:
                    datatype, formula = 'DevDouble', 'NaN'

                else:
                    datatype = t.datatype if t.data_format == 'SCALAR' else t.datatype.replace(
                        'Dev', 'DevVar') + 'Array'
                    if 'bool' in datatype.lower(): formula = DEFAULT_BOOL()
                    elif 'state' in datatype.lower():
                        formula = DEFAULT_STATE(
                            f='choice(%s or [0])' %
                            list(classes[s.dev_class].values[a]))
                    elif 'string' in datatype.lower():
                        formula = DEFAULT_STRING(
                            d=d,
                            a=a,
                            f='choice(%s or [0])' %
                            list(classes[s.dev_class].values[a]))
                    elif 'double' in datatype.lower(
                    ) or 'float' in datatype.lower():
                        formula = DEFAULT_DOUBLE(f=random.choice(
                            list(classes[s.dev_class].values[a]) or [0]))
                    else:
                        formula = DEFAULT_INT(
                            f='choice(%s or [0])' %
                            list(classes[s.dev_class].values[a]))
                    if 'Array' in datatype:
                        formula = "[%s for i in range(10)]" % formula
                    if all_rw or 'WRITE' in t.writable:
                        formula = DEFAULT_WRITE(a=a, f=formula)
                    classes[s.dev_class].attrs[a] = '%s = %s(%s)' % (
                        a, datatype, formula)

        #Iterate commands
        for c, t in s.comms.items():

            if fd.isMapping(t):
                t = t['in_type'], t['out_type']
            datatype = t[1] if t[1] != 'DevVoid' else 'DevString'
            if 'bool' in datatype.lower(): formula = DEFAULT_BOOL()
            elif 'state' in datatype.lower(): formula = DEFAULT_STATE()
            elif 'string' in datatype.lower():
                formula = DEFAULT_STRING(d=d, a=c)
            elif 'double' in datatype.lower() or 'float' in datatype.lower():
                formula = DEFAULT_DOUBLE()
            else:
                formula = DEFAULT_INT()
            if 'Array' in datatype:
                formula = "[%s for i in range(10)]" % formula
            if 'DevVoid' not in t[0]: formula = DEFAULT_ARGS(f=formula)
            classes[s.dev_class].comms[c] = '%s = %s(%s)' % (c, datatype,
                                                             formula)

        classes[s.dev_class].states = DEFAULT_STATES

    for k, t in classes.items():
        print('\nWriting %s attributes ([%d])\n' % (k, len(t.attrs)))
        f = open('%s_attributes.txt' % k, 'w')
        for a in sorted(t.attrs.values()):
            print('%s' % a)
            f.write('%s\n' % a)
        f.close()
        print('\nWriting %s commands ([%d])\n' % (k, len(t.comms)))
        f = open('%s_commands.txt' % k, 'w')
        for a in sorted(t.comms.values()):
            print('%s' % a)
            f.write('%s\n' % a)
        f.close()
        print('\nWriting %s states ([%d])\n' % (k, len(t.states)))
        f = open('%s_states.txt' % k, 'w')
        for a in t.states:
            print('%s' % a)
            f.write('%s\n' % a)
        f.close()

    return (filein)