def check_attribute_exists(model): model = fn.tango.parse_tango_model(model) alldevs = fn.tango.get_all_devices() device = fn.tango.get_normal_name(model.device) if device not in alldevs: return False #alldevs = fn.tango.get_all_devices(exported=True) #if not device in alldevs: #return True if not fn.tango.check_device(device): return True return bool(fn.find_attributes(model.normalname))
def setModels(self, args): #self.clear() if len(args) == 1: args = args[0] if fn.isString(args): args = fn.find_attributes(args) print('setModels(%s)' % args) for m in args: w = TaurusSingleValue() w.setModel(m) self.main.layout().addWidget(w) self.widgets.append(w) #self.main.show() self.setWidget(self.main) #self.resize(400,600) self.show()
def start_attributes_for_archivers(target,attr_regexp='',event_conf={}, load=False, by_class=False, min_polling = 100, overwrite = False, check = True): """ Target may be an attribute list or a device regular expression if by_class = True, config will be loaded from Tango class properties """ import PyTangoArchiving.hdbpp as ptah if fn.isSequence(target): if attr_regexp: attrs = [a for a in target if fn.clmatch(attr_regexp,a.rsplit('/')[-1])] else: attrs = target else: dev_regexp = target attrs = fn.find_attributes(dev_regexp+'/'+(attr_regexp or '*')) if by_class: classes = fn.defaultdict(dict) devs = fn.defaultdict(list) [devs[a.rsplit('/',1)[0]].append(a) for a in attrs] for d,v in devs.items(): classes[fn.tango.get_device_class(d)][d] = v attrs = {} for c,devs in classes.items(): cfg = get_class_archiving(devs.keys()[0]) for d in devs: raw = devs[d] for a,v in cfg.items(): for aa in raw: if fn.clmatch(a,aa.split('/')[-1],terminate=True): if not attr_regexp or fn.clmatch(attr_regexp,aa): attrs[aa] = v elif event_conf: attrs = dict((a,event_conf) for a in attrs) else: attrs = dict((a,get_current_conf(a)) for a in attrs) print('Starting %d attributes' % (len(attrs))) archs = ptah.multi.match_attributes_and_archivers(attrs.keys()) rd = PyTangoArchiving.Reader() #print(archs) alldbs = ptah.multi.get_hdbpp_databases() dbs = ptah.multi.get_hdbpp_databases(archs,alldbs) #return dbs,archs,attrs for db,rcs in dbs.items(): api = PyTangoArchiving.Schemas.getApi(db) dbs[db] = dict.fromkeys(rcs) for d in rcs: dbs[db][d] = ts = dict.fromkeys(archs[d]) #return ts for a in ts: try: m = fn.parse_tango_model(a,fqdn=True) dbs[db][d][a] = mode = attrs[a] if not overwrite and db in rd.is_attribute_archived(a): print('%s already archived in %s' % (a,db)) continue events = ft.check_attribute_events(a,ft.EventType.ARCHIVE_EVENT) ep = events.get(ft.EventType.ARCHIVE_EVENT,False) if ep is True: if 'polling' in mode: mode.pop('polling') elif isinstance(events.get(ep,(int,float))): mode['polling'] = min((ep,mode.get('polling',10000))) mode['polling'] = max((mode['polling'],min_polling)) if not events.get(ft.EventType.CHANGE_EVENT,False): if mode.get('archive_abs_change',0): mode['abs_event'] = mode['archive_abs_change'] if mode.get('archive_rel_change',0): mode['rel_event'] = mode['archive_rel_change'] if mode.get('arch_per_event',0): mode['per_event'] = mode['archive_per_event'] print('%s.start_archiving(%s,%s,%s): %s' % (db,d,m.fullname,mode,load)) if load: fn.tango.set_attribute_events(a,**mode) r = api.start_archiving(m.fullname,d,code_event=True) assert not check or r except: print('%s failed!'%a) traceback.print_exc() return dbs