def __init__(self,
                 schema,
                 host=None,
                 user='******',
                 passwd='browser',
                 classes=[],
                 LogLevel='info',
                 load=True,
                 logger=None):
        """
        """
        self.log = logger or Logger(
            'ArchivingAPI(%s)' % schema,
            format='%(levelname)-8s %(asctime)s %(name)s: %(message)s')
        self.log.setLogLevel(LogLevel)
        self.log.debug('Logger streams initialized (error,warning,info,debug)')

        self.tango = PyTango.Database()  #access to Tango database
        self.api = self  #hook used by legacy packages
        self.servers = None
        self.schema = str(schema).lower()
        self.user, self.passwd = user, passwd

        if host is None:
            prop = self.tango.get_class_property('%sArchiver' % schema,
                                                 ['DbHost'])['DbHost']
            if not prop:
                print('ERROR: %sArchiver.DbHost property not defined!' %
                      schema)
                self.host = None
            else:
                self.host = prop[0]
            #if 'TANGO_HOST' in os.environ:
            #    self.host=os.environ['TANGO_HOST'].split(':')[0]
        else:
            self.host = host

        self.dbs = {}  #pointers to Archiving databases

        self.ArchivingClasses = classes or self.get_archiving_classes()
        self.ArchiverClass = (k for k in self.ArchivingClasses
                              if 'Archiver' in k).next()
        self.ManagerClass = (k for k in self.ArchivingClasses
                             if 'Manager' in k).next()
        self.ExtractorClass = (k for k in self.ArchivingClasses
                               if 'Extractor' in k).next()
        try:
            self.WatcherClass = (k for k in self.ArchivingClasses
                                 if 'Watcher' in k).next()
        except:
            self.WatcherClass = None

        self.loads = CaselessDefaultDict(
            lambda k: 0)  #a dict with the archiving load for each device
        self.attributes = CaselessDict()  #a dict of ArchivedAttribute objects
        self.dedicated = CaselessDefaultDict(lambda k: set(
        ))  #Dictionary for keeping the attributes reserved for each archiver

        if load and self.host and self.ArchivingClasses:
            self.load_servers()
예제 #2
0
    def __init__(self,
                 pattern='',
                 klass='',
                 devs_list='',
                 servers_list='',
                 hosts='',
                 loadAll=False,
                 log='WARNING',
                 logger=None,
                 tango_host='',
                 host='',
                 devices=''):
        ''' def __init__(self,pattern='', klass='',devs_list='',servers_list=''):
        The ServersDict can be initialized using any of the three argument lists or a wildcard for Database.get_server_list(pattern) 
        ServersDict('*') can be used to load all servers in database
        '''
        self.call__init__(CaselessDict, self)
        if logger is None:
            self.log = Logger('ServersDict')
            self.log.setLogLevel(log)
        else:
            self.log = logger
        self.log.debug('ServersDict(%s)' % ','.join(
            map(str, (pattern, klass, devs_list, servers_list, hosts, loadAll,
                      log, logger, tango_host))))

        ## proxies will keep a list of persistent device proxies
        self.proxies = ProxiesDict(tango_host=tango_host)
        ## db will keep a persistent link to PyTango database
        self.db = get_database() if not tango_host else get_database(
            *(tango_host.split(':')))
        self.server_names = self.keys
        self.servers = self.values

        if loadAll: self.load_all_servers()
        elif klass: self.load_by_class(klass)
        elif devs_list: self.load_from_devs_list(devs_list)
        elif devices: self.load_from_devs_list(devices)
        elif servers_list:
            self.load_from_servers_list(servers_list)
            #elif pattern: self.load_from_servers_list(self.db.get_server_list(pattern))
        elif hosts:
            hosts = type(hosts) is str and (',' in hosts and hosts.split(',')
                                            or [hosts]) or hosts
            for h in hosts:
                self.load_by_host(h)
        elif host:
            self.load_by_host(host)
        elif pattern:
            self.load_by_name(pattern)
예제 #3
0
 def __init__(self, name='', host='', parent=None):
     if not name or '/' not in name:
         raise Exception, 'TServer_WrongServerName_%s' % name
     self.info = None
     self.name = self.get_simple_name(name)
     self.update_level(host, 0)
     self.controlled = False
     self.level = 0
     self._classes = None
     self.state = None  #PyTango.DevState.UNKNOWN
     self.log = Logger('TServer-%s' % name)
     if parent and parent.log.getLogLevel():
         self.log.setLogLevel(parent.log.getLogLevel())
     else:
         self.log.setLogLevel('ERROR')
     self.state_lock = threading.Lock()
     if parent: self.proxies = parent.proxies
     else: self.proxies = ProxiesDict()
     pass
예제 #4
0
 def __init__(self,use_tau = False, tango_host = ''):
     self.log = Logger('ProxiesDict')
     self.log.setLogLevel('INFO')
     self.use_tau = TAU and use_tau
     self.tango_host = tango_host
     self.call__init__(CaselessDefaultDict,self.__default_factory__)