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)
def start(self): if self.running is False: self._endpoint = Server(self.endpoint_uri) super(OnSite, self).start() self.running = True return