Revert "Make ReadConfigLine an iterator"
This reverts commit 19b718ef41
which breaks
the virtual employer mechanism.
This commit is contained in:
105
ConfigFile.py
105
ConfigFile.py
@@ -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
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user