Revert "Make ReadConfigLine an iterator"

This reverts commit 19b718ef41 which breaks
the virtual employer mechanism.
This commit is contained in:
Jonathan Corbet
2011-07-11 13:54:56 -06:00
parent 47ffed3cee
commit 954b559f13

View File

@@ -13,43 +13,19 @@
import sys, re, datetime, os.path import sys, re, datetime, os.path
import database import database
class ReadConfigLine: #
""" # Read a line and strip out junk.
ReadConfigLine provides a iterator to extract line #
from an config file without comments. def ReadConfigLine (file):
line = file.readline ()
Typical use case: if not line:
return None
fd = open(filename, 'r')
for line in ReadConfigLine(fd):
parse_line(line)
fd.close(fd)
"""
def __init__(self, fd):
self.fd = fd
self.buffer = None
self.patch = []
def __iter__(self):
return self
def next(self):
line = self.fd.readline()
while line:
line = line.split('#')[0] # Get rid of any comments line = line.split('#')[0] # Get rid of any comments
line = line.strip () # and extra white space line = line.strip () # and extra white space
if len (line) == 0: # we got rid of everything if len (line) == 0: # we got rid of everything
line = self.fd.readline() return ReadConfigLine (file)
else:
break
if not line:
raise StopIteration
return line return line
# #
# Give up and die. # Give up and die.
# #
@@ -62,19 +38,19 @@ def croak (message):
# #
def ReadEmailAliases (name): def ReadEmailAliases (name):
try: try:
fd = open (name, 'r') file = open (name, 'r')
except IOError: except IOError:
croak ('Unable to open email alias file %s' % (name)) croak ('Unable to open email alias file %s' % (name))
line = ReadConfigLine (file)
for line in ReadConfigLine (fd): while line:
m = re.match ('^("[^"]+"|\S+)\s+(.+)$', line) m = re.match ('^("[^"]+"|\S+)\s+(.+)$', line)
if not m or len (m.groups ()) != 2: if not m or len (m.groups ()) != 2:
croak ('Funky email alias line "%s"' % (line)) croak ('Funky email alias line "%s"' % (line))
if m and m.group (2).find ('@') <= 0: if m and m.group (2).find ('@') <= 0:
croak ('Non-addresses in email alias "%s"' % (line)) croak ('Non-addresses in email alias "%s"' % (line))
database.AddEmailAlias (m.group (1).replace ('"', ''), m.group (2)) database.AddEmailAlias (m.group (1).replace ('"', ''), m.group (2))
line = ReadConfigLine (file)
fd.close () file.close ()
# #
# The Email/Employer map # The Email/Employer map
@@ -83,11 +59,11 @@ EMMpat = re.compile (r'^([^\s]+)\s+([^<]+)\s*(<\s*(\d+-\d+-\d+)\s*)?$')
def ReadEmailEmployers (name): def ReadEmailEmployers (name):
try: try:
fd = open (name, 'r') file = open (name, 'r')
except IOError: except IOError:
croak ('Unable to open email/employer file %s' % (name)) croak ('Unable to open email/employer file %s' % (name))
line = ReadConfigLine (file)
for line in ReadConfigLine (fd): while line:
m = EMMpat.match (line) m = EMMpat.match (line)
if not m: if not m:
croak ('Funky email/employer line "%s"' % (line)) croak ('Funky email/employer line "%s"' % (line))
@@ -95,8 +71,8 @@ def ReadEmailEmployers (name):
company = m.group (2).strip () company = m.group (2).strip ()
enddate = ParseDate (m.group (4)) enddate = ParseDate (m.group (4))
database.AddEmailEmployerMapping (email, company, enddate) database.AddEmailEmployerMapping (email, company, enddate)
line = ReadConfigLine (file)
fd.close () file.close ()
def ParseDate (cdate): def ParseDate (cdate):
if not cdate: if not cdate:
@@ -107,22 +83,22 @@ def ParseDate (cdate):
def ReadGroupMap (fname, employer): def ReadGroupMap (fname, employer):
try: try:
fd = open (fname, 'r') file = open (fname, 'r')
except IOError: except IOError:
croak ('Unable to open group map file %s' % (fname)) croak ('Unable to open group map file %s' % (fname))
line = ReadConfigLine (file)
for line in ReadConfigLine (fd): while line:
database.AddEmailEmployerMapping (line, employer) database.AddEmailEmployerMapping (line, employer)
line = ReadConfigLine (file)
fd.close () file.close ()
# #
# Read in a virtual employer description. # Read in a virtual employer description.
# #
def ReadVirtual (fd, name): def ReadVirtual (file, name):
ve = database.VirtualEmployer (name) ve = database.VirtualEmployer (name)
line = ReadConfigLine (file)
for line in ReadConfigLine (fd): while line:
sl = line.split (None, 1) sl = line.split (None, 1)
first = sl[0] first = sl[0]
if first == 'end': if first == 'end':
@@ -140,6 +116,7 @@ def ReadVirtual (fd, name):
if not (0 < percent <= 100): if not (0 < percent <= 100):
croak ('Bad split value "%s" for virtual empl %s' % (first, name)) croak ('Bad split value "%s" for virtual empl %s' % (first, name))
ve.addsplit (' '.join (sl[1:]), percent/100.0) ve.addsplit (' '.join (sl[1:]), percent/100.0)
line = ReadConfigLine (file)
# #
# We should never get here # We should never get here
# #
@@ -150,20 +127,21 @@ def ReadVirtual (fd, name):
# #
def ReadFileType (filename): def ReadFileType (filename):
try: try:
fd = open (filename, 'r') file = open (filename, 'r')
except IOError: except IOError:
croak ('Unable to open file type mapping file %s' % (filename)) croak ('Unable to open file type mapping file %s' % (filename))
patterns = {} patterns = {}
order = [] order = []
regex_order = re.compile ('^order\s+(.*)$') regex_order = re.compile ('^order\s+(.*)$')
regex_file_type = re.compile ('^filetype\s+(\S+)\s+(.+)$') regex_file_type = re.compile ('^filetype\s+(\S+)\s+(.+)$')
line = ReadConfigLine (file)
for line in ReadConfigLine (fd): while line:
o = regex_order.match (line) o = regex_order.match (line)
if o: if o:
# Consider only the first definition in the config file # Consider only the first definition in the config file
elements = o.group(1).replace (' ', '') elements = o.group(1).replace (' ', '')
order = order or elements.split(',') order = order or elements.split(',')
line = ReadConfigLine (file)
continue continue
m = regex_file_type.match (line) m = regex_file_type.match (line)
@@ -177,7 +155,8 @@ def ReadFileType (filename):
patterns[m.group (1)].append (re.compile (m.group (2), re.IGNORECASE)) patterns[m.group (1)].append (re.compile (m.group (2), re.IGNORECASE))
fd.close () line = ReadConfigLine (file)
file.close ()
return patterns, order return patterns, order
# #
@@ -186,11 +165,11 @@ def ReadFileType (filename):
def ConfigFile (name, confdir): def ConfigFile (name, confdir):
try: try:
fd = open (name, 'r') file = open (name, 'r')
except IOError: except IOError:
croak ('Unable to open config file %s' % (name)) croak ('Unable to open config file %s' % (name))
line = ReadConfigLine (file)
for line in ReadConfigLine (fd): while line:
sline = line.split (None, 2) sline = line.split (None, 2)
if len (sline) < 2: if len (sline) < 2:
croak ('Funky config line: "%s"' % (line)) croak ('Funky config line: "%s"' % (line))
@@ -209,15 +188,5 @@ def ConfigFile (name, confdir):
database.FileTypes = database.FileType (patterns, order) database.FileTypes = database.FileType (patterns, order)
else: else:
croak ('Unrecognized config line: "%s"' % (line)) croak ('Unrecognized config line: "%s"' % (line))
line = ReadConfigLine (file)
if __name__ == '__main__':
'''Test the iterato for reading configuration files'''
try:
fd = open(sys.argv[1])
except:
croak('Usage: %s <config-file>' % sys.argv[0])
for line in ReadConfigLine(fd):
print line