00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 import ConfigParser
00021 import os
00022 import logging
00023
00024
00025 class _GateBase:
00026 def process(self, data_set, value_if_granted, value_else):
00027 if self.grants(data_set):
00028 return value_if_granted
00029 else:
00030 return value_else
00031
00032
00033 class _Gate(_GateBase):
00034 def __init__(self, config_files=None):
00035 if config_files is None:
00036 config_files = [
00037 '/etc/smolt/client.cfg',
00038 os.path.expanduser('~/.smolt/client.cfg'),
00039 ]
00040 self.config = ConfigParser.ConfigParser()
00041 self.config.read(config_files)
00042
00043 def grants(*args):
00044 assert 2 <= len(args) <= 3
00045 if len(args) == 2:
00046 self, data_set = args
00047 distro = 'any'
00048 else:
00049 self, distro, data_set = args
00050 res = self._grants(distro, data_set)
00051 logging.debug('Section "%s", key "%s" --> "%s"' % (distro, data_set, str(res)))
00052 return res
00053
00054 def _grants(self, distro, data_set):
00055 try:
00056 return self.config.getboolean(distro, data_set)
00057 except (ValueError,
00058 ConfigParser.NoOptionError,
00059 ConfigParser.NoSectionError):
00060
00061
00062 return True
00063
00064
00065 class _FakeGate(_GateBase):
00066 def __init__(self, grant):
00067 """
00068 >>> gate = _FakeGate(grant=True)
00069 >>> gate.grants("whatever")
00070 True
00071 >>> gate = _FakeGate(grant=False)
00072 >>> gate.grants("whatever")
00073 False
00074 """
00075 self._granted = grant
00076
00077 def grants(self, *args):
00078 return self._granted
00079
00080
00081 def create_default_gate():
00082 return _Gate()
00083
00084
00085 def create_gate_from_file(filename):
00086 return _Gate([filename, ])
00087
00088
00089 def create_passing_gate():
00090 """
00091 >>> create_passing_gate().grants("whatever")
00092 True
00093 """
00094 return _FakeGate(grant=True)
00095
00096
00097 def create_blocking_gate():
00098 """
00099 >>> create_blocking_gate().grants("whatever")
00100 False
00101 """
00102 return _FakeGate(grant=False)