Exemplo n.º 1
0
class OnSite(CompositeNode, AutoDiscoveredNode):
    def __init__(self):
        self._endpoint = None
        self.running = False
        self._discovered = False
        super(OnSite, self).__init__()
        return
        
    def configure(self, cd):
        super(OnSite, self).configure(cd)
        set_attribute(self, 'address', REQUIRED, cd)
        set_attribute(self, 'user', REQUIRED, cd)
        set_attribute(self, 'password', REQUIRED, cd)
        set_attribute(self, 'email', REQUIRED, cd)
        set_attribute(self, 'use_https', 'yes', cd, as_boolean)
        # discovery mode == once or none
        set_attribute(self, 'discovery_mode', 'once', cd)
        if self.use_https:
            transport = 'https'
        else:
            transport = 'http'
        default_uri = '%s://%s/cgi-bin/acs.fcgi?user=%s&pass=%s' %\
            (transport, self.address, self.user, self.password)
        set_attribute(self, 'endpoint_uri', default_uri, cd)
        if self.running is True:
            # force endpoint reconfiguration
            self.running = False 
            self.start() 
        return
        
    def configuration(self):
        cd = super(OnSite, self).configuration()
        get_attribute(self, 'address', cd)
        get_attribute(self, 'user', cd)
        get_attribute(self, 'password', cd)
        get_attribute(self, 'email', cd)
        get_attribute(self, 'use_https', cd)
        get_attribute(self, 'discovery_mode', cd)
        get_attribute(self, 'endpoint_uri', cd)
        return cd
        
    def start(self):
        if self.running is False:
            self._endpoint = Server(self.endpoint_uri)
        super(OnSite, self).start()
        self.running = True
        return
        
    def stop(self):
        self.running = False
        self._discovered = False
        return
        
    def _discover_children(self):
        answer = {}
        if not self._discovered and self.running is True and \
            self.discovery_mode == 'once':
            existing_accounts = []
            for accnt in self.children_nodes({'auto_discover':False}): #self._get_children().values():
                existing_accounts.append(accnt.configuration().get('brivo_id_value'))
            # query panel for list of active accounts
            accnts = self.list_accounts()
            for accnt_id in accnts:
                # add new accounts
                if accnt_id.get('value') not in existing_accounts:
                    accnt_name = self.retrieve_account(accnt_id)['name']
                    answer[accnt_name] = Account(accnt_id)
            self._discovered = True
        return answer
        
    # Brivo XML-RPC methods follow
    def list_accounts(self, filter=[]):
        print 'list_accounts'
        return self._endpoint.list_accounts(filter)
        
    def retrieve_account(self, accnt):
        print 'retrieve_account'
        return self._endpoint.retrieve_account(accnt)
        
    def retrieve_device(self, accnt, dev):
        print 'retrieve_device'
        return self._endpoint.retrieve_device(accnt, dev)
        
    def list_events(self, accnt, filter=[]):
        print 'list_events'
        return self._endpoint.list_events(accnt, filter)
        
    def list_devices(self, accnt, filter=[]):
        print 'list_devices'
        return self._endpoint.list_devices(accnt, filter)
        
    def delete_event_subscription(self, accnt, sid):
        print 'delete_event_subscription'
        return self._endpoint.delete_event_subscription(accnt, sid)
Exemplo n.º 2
0
 def start(self):
     if self.running is False:
         self._endpoint = Server(self.endpoint_uri)
     super(OnSite, self).start()
     self.running = True
     return