def get_user(self, uid, silent=False): """Gets a single users data silent supresses Http404 exception if user not found""" self.telnet.sendline('user -s %s' % uid) matched_index = self.telnet.expect([ r'.+Unknown User:.*' + STANDARD_PROMPT, r'.+Usage: user.*' + STANDARD_PROMPT, r'(.+)\n' + STANDARD_PROMPT, ]) if matched_index != 2: if silent: return else: raise ObjectNotFoundError('Unknown user: %s' % uid) result = self.telnet.match.group(1) user = {} for line in [l for l in result.splitlines() if l][1:]: d = [str(x, 'utf-8') for x in line.split() if x] if len(d) == 2: user[d[0]] = d[1] elif len(d) == 4: #Not DRY, could be more elegant if not d[0] in user: user[d[0]] = {} if not d[1] in user[d[0]]: user[d[0]][d[1]] = {} if not d[2] in user[d[0]][d[1]]: user[d[0]][d[1]][d[2]] = {} user[d[0]][d[1]][d[2]] = d[3] #each line has two or four lines so above exhaustive return user
def get_router(self, order): "Return data for one mtrouter as Python dict" routers = self._list()['mtrouters'] try: return { 'mtrouter': next((m for m in routers if m['order'] == order), None) } except StopIteration: raise ObjectNotFoundError('No MTRouter with order: %s' % order)
def simple_httpccm_action(self, action, cid): self.telnet.sendline('httpccm -%s %s' % (action, cid)) matched_index = self.telnet.expect([ r'.+Successfully(.+)' + STANDARD_PROMPT, r'.+Unknown connector: (.+)' + STANDARD_PROMPT, r'(.*)' + STANDARD_PROMPT, ]) if matched_index == 0: self.telnet.sendline('persist') return {'name': cid} elif matched_index == 1: raise ObjectNotFoundError('Unknown HTTP Connector: %s' % cid) else: raise ActionFailed(self.telnet.match.group(1))
def simple_smppccm_action(self, action, cid): self.telnet.sendline('smppccm -%s %s' % (action, cid)) matched_index = self.telnet.expect([ r'.+Successfully(.+)' + STANDARD_PROMPT, r'.+Unknown connector: (.+)' + STANDARD_PROMPT, r'(.*)' + STANDARD_PROMPT, ]) if matched_index == 0: self.telnet.sendline('persist') return {'name': cid} elif matched_index == 1: logger.error("ObjectNotFoundError: {}".format( ObjectNotFoundError('Unknown SMPP Connector: %s' % cid))) #raise ObjectNotFoundError('Unknown SMPP Connector: %s' % cid) else: logger.error("ActionFailed: {}".format( ActionFailed(self.telnet.match.group(1)))) #raise ActionFailed(self.telnet.match.group(1)) return {}
def retrieve(self, cid): """Retreive data for one connector Required parameter: cid (connector id)""" connector = self.get_httpccm(cid, silent=False) connector_list = self.get_connector_list() list_data = next( (raw_data for raw_data in connector_list if raw_data[0] == '#' + cid), None ) if not list_data: raise ObjectNotFoundError('Unknown connector: %s' % cid) connector.update( cid=cid, type=list_data[1], method=list_data[2], url=list_data[3] ) return {'connector': connector}
def get_smppccm(self, cid, silent=False): #Some of this could be abstracted out - similar pattern in users.py self.telnet.sendline('smppccm -s ' + cid) matched_index = self.telnet.expect([ r'.+Unknown connector:.*' + STANDARD_PROMPT, r'.+Usage:.*' + STANDARD_PROMPT, r'(.+)\n' + STANDARD_PROMPT, ]) if matched_index != 2: if silent: return else: raise ObjectNotFoundError('Unknown connector: %s' % cid) result = self.telnet.match.group(1) smppccm = {} for line in result.splitlines(): d = [x for x in line.split() if x] if len(d) == 2: smppccm[str(d[0], 'utf-8')] = str(d[1], 'utf-8') return smppccm