コード例 #1
0
  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
コード例 #2
0
ファイル: config.py プロジェクト: TheSchwa/sibyl
  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
コード例 #3
0
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
コード例 #4
0
ファイル: library.py プロジェクト: TheSchwa/sibyl
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
コード例 #5
0
ファイル: config.py プロジェクト: TheSchwa/sibyl
  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
コード例 #6
0
  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
コード例 #7
0
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
コード例 #8
0
ファイル: library.py プロジェクト: TheSchwa/sibyl
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
コード例 #9
0
ファイル: config.py プロジェクト: jfrederickson/sibyl
    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
コード例 #10
0
ファイル: config.py プロジェクト: TheSchwa/sibyl
  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
コード例 #11
0
ファイル: room.py プロジェクト: TheSchwa/sibyl
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
コード例 #12
0
ファイル: room.py プロジェクト: nixy/sibyl
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
コード例 #13
0
ファイル: config.py プロジェクト: jfrederickson/sibyl
    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
コード例 #14
0
ファイル: config.py プロジェクト: TheSchwa/sibyl
  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
コード例 #15
0
ファイル: config.py プロジェクト: TheSchwa/sibyl
  def parse_admin(self,opt,val):
    """parse the list of protocols"""

    return util.split_strip(val,',')
コード例 #16
0
  def parse_admin(self,opt,val):
    """parse the list of protocols"""

    return util.split_strip(val,',')