# Path: Milter/config.py
# class MilterConfigParser(ConfigParser):
# 
#   def __init__(self,defaults={}):
#     ConfigParser.__init__(self)
#     self.defaults = defaults
# 
#   # The defaults provided by ConfigParser show up in all sections,
#   # which screws up iterating over all options in a section.
#   # Worse, passing "defaults" with vars= overrides the config file!
#   # So we roll our own defaults.
#   def get(self,sect,opt,fallback=None,**kwds):
#     if not self.has_option(sect,opt) and not fallback and opt in self.defaults:
#       return self.defaults[opt]
#     return ConfigParser.get(self,sect,opt,fallback=fallback,**kwds)
#     
#   def getlist(self,sect,opt):
#     if self.has_option(sect,opt):
#       return [q.strip() for q in self.get(sect,opt).split(',')]
#     return []
# 
#   def getaddrset(self,sect,opt,dir=''):
#     if not self.has_option(sect,opt):
#       return {}
#     s = self.get(sect,opt)
#     d = {}
#     for q in s.split(','):
#       q = q.strip()
#       if q.startswith('file:'):
#         domain = q[5:].lower()
#         fname = os.path.join(dir,domain)
#         with open(fname,'r') as fp:
#           d[domain] = d.setdefault(domain,[]) + fp.read().split()
#       else:
#         user,domain = q.split('@')
#         d.setdefault(domain.lower(),[]).append(user)
#     return d
#   
#   def getaddrdict(self,sect,opt,dir=''):
#     if not self.has_option(sect,opt):
#       return {}
#     d = {}
#     for q in self.get(sect,opt).split(','):
#       q = q.strip()
#       if self.has_option(sect,q):
#         l = self.get(sect,q)
#         for addr in l.split(','):
#           addr = addr.strip()
#           if addr.startswith('file:'):
#             fname = os.path.join(dir,addr[5:])
#             with open(fname,'r') as fp:
#               for a in fp.read().split():
#                 d[a] = q
#           else:
#             d[addr] = q
#     return d
# 
#   def getdefault(self,sect,opt,default=None):
#     if self.has_option(sect,opt):
#       return self.get(sect,opt)
#     return default
# 
#   def getintdefault(self,sect,opt,default=None):
#     if self.has_option(sect,opt):
#       return self.getint(sect,opt)
#     return default


import unittest
from Milter.config import MilterConfigParser

class ConfigTestCase(unittest.TestCase):
  def testConfig(self):
    cp = MilterConfigParser()
    cp.read(['test/pysrs.cfg'])
    socketname = cp.getdefault('srsmilter','socketname',
        '/var/run/milter/srsmilter')
    self.assertEqual(socketname,'/var/run/milter/srsmilter')
    miltersrs = cp.getboolean('srsmilter','miltersrs')
    self.assertFalse(miltersrs)


# Path: Milter/config.py
# class MilterConfigParser(ConfigParser):
# 
#   def __init__(self,defaults={}):
#     ConfigParser.__init__(self)
#     self.defaults = defaults
# 
#   # The defaults provided by ConfigParser show up in all sections,
#   # which screws up iterating over all options in a section.
#   # Worse, passing "defaults" with vars= overrides the config file!
#   # So we roll our own defaults.
#   def get(self,sect,opt,fallback=None,**kwds):
#     if not self.has_option(sect,opt) and not fallback and opt in self.defaults:
#       return self.defaults[opt]
#     return ConfigParser.get(self,sect,opt,fallback=fallback,**kwds)
#     
#   def getlist(self,sect,opt):
#     if self.has_option(sect,opt):
#       return [q.strip() for q in self.get(sect,opt).split(',')]
#     return []
# 
#   def getaddrset(self,sect,opt,dir=''):
#     if not self.has_option(sect,opt):
#       return {}
#     s = self.get(sect,opt)
#     d = {}
#     for q in s.split(','):
#       q = q.strip()
#       if q.startswith('file:'):
#         domain = q[5:].lower()
#         fname = os.path.join(dir,domain)
#         with open(fname,'r') as fp:
#           d[domain] = d.setdefault(domain,[]) + fp.read().split()
#       else:
#         user,domain = q.split('@')
#         d.setdefault(domain.lower(),[]).append(user)
#     return d
#   
#   def getaddrdict(self,sect,opt,dir=''):
#     if not self.has_option(sect,opt):
#       return {}
#     d = {}
#     for q in self.get(sect,opt).split(','):
#       q = q.strip()
#       if self.has_option(sect,q):
#         l = self.get(sect,q)
#         for addr in l.split(','):
#           addr = addr.strip()
#           if addr.startswith('file:'):
#             fname = os.path.join(dir,addr[5:])
#             with open(fname,'r') as fp:
#               for a in fp.read().split():
#                 d[a] = q
#           else:
#             d[addr] = q
#     return d
# 
#   def getdefault(self,sect,opt,default=None):
#     if self.has_option(sect,opt):
#       return self.get(sect,opt)
#     return default
# 
#   def getintdefault(self,sect,opt,default=None):
#     if self.has_option(sect,opt):
#       return self.getint(sect,opt)
#     return default


# Path: testcfg.py
import unittest
from Milter.config import MilterConfigParser


class ConfigTestCase(unittest.TestCase):
  def testConfig(self):
    cp = MilterConfigParser()
    cp.read(['test/pysrs.cfg'])
    socketname = cp.getdefault('srsmilter','socketname',
        '/var/run/milter/srsmilter')
    self.assertEqual(socketname,'/var/run/milter/srsmilter')
    miltersrs = cp.getboolean('srsmilter','miltersrs')
    self.assertFalse(miltersrs)


def suite(): return unittest.makeSuite(ConfigTestCase,'test')