def parse_rooms(self,opt,val): """parse the rooms into a list""" val = val.replace('\n','') entries = util.split_strip(val,';') rooms = {} for entry in entries: if entry=='': continue params = util.split_strip(entry,',') if not params[0] or ':' not in params[0]: self.log('warning','Ignoring room "%s"; invalid syntax' % entry) continue room = util.split_strip(params[0],':') (pname,room) = (room[0],':'.join(room[1:])) # check for optional arguments room = {'room':room,'nick':None,'pass':None} if len(params)>1 and params[1]: room['nick'] = params[1] if len(params)>2 and params[2]: room['pass'] = Password(params[2]) # add room to dict if pname in rooms: rooms[pname].append(room) else: rooms[pname] = [room] return rooms
def parse_lib(conf,opt,val): """parse the lib into a list""" val = val.replace('\n','') # paths are separated by semi-colon entries = util.split_strip(val,';') lib = [] for entry in entries: if entry=='': continue if ',' in entry: if not util.has_module('smbc'): conf.log('warning','Ignoring share "%s" (missing smbc)' % entry) continue # samba share parameters are separated by comma params = util.split_strip(entry,',') item = {'server':params[0], 'share':params[1], 'username':None, 'password':None} if len(params)>2: item['username'] = params[2] if len(params)>3: item['password'] = Password(params[3]) else: item = entry lib.append(item) return lib
def parse_rename(self,opt,val): """parse the rename commands into a dict""" d = {} for pair in util.split_strip(val,','): (old,new) = util.split_strip(pair,':') if old in d.keys() or new in d.values(): raise ValueError d[old] = new return d
def parse_remote(conf,opt,val): """parse the remote replace list into a dict""" val = val.replace('\n','') entries = util.split_strip(val,';') replace = {} for entry in entries: (local,remote) = util.split_strip(entry,',') replace[local] = remote return replace
def parse_bw(self, opt, val): """parse and fully expand the bw_list""" val = val.replace('\n', '') # semi-colons divide separate rules entries = util.split_strip(val, ';') # we don't want to use modifier methods on the actual default object bw = copy.copy(self.OPTS[opt][self.DEF]) for entry in entries: if entry == '': continue # spaces divide fields (color, users, cmds) = util.split_strip(entry) # skip invalid colors if color not in ('b', 'w'): self.log( 'warning', 'ignoring bw entry "%s"; invalid color "%s"' % (entry, color)) continue # commas allow for multiple items per field users = util.split_strip(users, ',') cmds = util.split_strip(cmds, ',') for user in users: # skip badly formatted users if (user != '*' and ((not user) or (user[0] not in ('p', 'r', 'u')) or (user[1] != ':') or (user[0] in ('r', 'u') and len(user.split(':')) < 3))): self.log('warning', 'ignoring bw user "%s"; invalid syntax' % user) continue for cmd in cmds: # only append the rule if the cmd isn't blank if cmd: bw.append((color, user, cmd)) return bw
def parse_bw(self,opt,val): """parse and fully expand the bw_list""" val = val.replace('\n','') # semi-colons divide separate rules entries = util.split_strip(val,';') # we don't want to use modifier methods on the actual default object bw = copy.copy(self.OPTS[opt][self.DEF]) for entry in entries: if entry=='': continue # spaces divide fields (color,users,cmds) = util.split_strip(entry) # skip invalid colors if color not in ('b','w'): self.log('warning','ignoring bw entry "%s"; invalid color "%s"' % (entry,color)) continue # commas allow for multiple items per field users = util.split_strip(users,',') cmds = util.split_strip(cmds,',') for user in users: # skip badly formatted users if (user!='*' and ( (not user) or (user[0] not in ('p','r','u')) or (user[1]!=':') or (user[0] in ('r','u') and len(user.split(':'))<3))): self.log('warning','ignoring bw user "%s"; invalid syntax' % user) continue for cmd in cmds: # only append the rule if the cmd isn't blank if cmd: bw.append((color,user,cmd)) return bw
def parse(conf,opt,val): if val=='all': return val bridges = [] all_rooms = [] for bridge in util.split_strip(val,';'): rooms = [] for room in util.split_strip(bridge,','): room = util.split_strip(room,':') room = tuple([room[0],':'.join(room[1:])]) if room in all_rooms: conf.log('error','Room "%s:%s" is in more than one bridge' % room) raise ValueError rooms.append(room) all_rooms.append(room) bridges.append(rooms) return bridges
def parse_protocols(self, opt, val): """parse the protocols and return the subclasses""" val = util.split_strip(val, ',') protocols = {} success = False for proto in val: protocols[proto] = None fname = os.path.join('protocols', 'sibyl_' + proto + os.path.extsep + 'py') if not os.path.isfile(fname): self.log('critical', 'No matching file in protocols/ for "%s"' % proto) continue try: mod = util.load_module('sibyl_' + proto, 'protocols') for (name, clas) in inspect.getmembers(mod, inspect.isclass): if issubclass(clas, Protocol) and clas != Protocol: protocols[proto] = clas if protocols[proto] is None: self.log( 'critical', 'Protocol "%s" does not contain a lib.protocol.Protocol subclass' % proto) except Exception as e: full = traceback.format_exc(e) short = full.split('\n')[-2] self.log( 'critical', 'Exception importing protocols/%s:' % ('sibyl_' + proto)) self.log('critical', ' %s' % short) self.log('debug', full) if None in protocols.values(): raise ValueError return protocols
def parse_protocols(self,opt,val): """parse the protocols and return the subclasses""" val = util.split_strip(val,',') protocols = {} success = False for proto in val: protocols[proto] = None fname = os.path.join('protocols','sibyl_'+proto+os.path.extsep+'py') if not os.path.isfile(fname): self.log('critical','No matching file in protocols/ for "%s"' % proto) continue try: mod = util.load_module('sibyl_'+proto,'protocols') for (name,clas) in inspect.getmembers(mod,inspect.isclass): if issubclass(clas,Protocol) and clas!=Protocol: protocols[proto] = clas if protocols[proto] is None: self.log('critical', 'Protocol "%s" does not contain a lib.protocol.Protocol subclass' % proto) except Exception as e: full = traceback.format_exc(e) short = full.split('\n')[-2] self.log('critical','Exception importing protocols/%s:' % ('sibyl_'+proto)) self.log('critical',' %s' % short) self.log('debug',full) if None in protocols.values(): raise ValueError return protocols
def parse_admin(self,opt,val): """parse the list of protocols""" return util.split_strip(val,',')