import os
import sys
import logging
import optparse
import ConfigParser
class App(object):
name = None
@classmethod
def run(class_):
app = class_()
return app.main()
def main(self):
parser = self.create_parser()
(options, args) = parser.parse_args()
cfg = self.read_config(options)
self.setup_logging(cfg)
self.handle_args(parser, cfg, options, args)
def create_parser(self):
parser = optparse.OptionParser()
parser.set_defaults(
config=os.path.expanduser('~/.gitosis.conf'),
)
parser.add_option('--config',
metavar='FILE',
help='read config from FILE',
)
return parser
def read_config(self, options):
cfg = ConfigParser.RawConfigParser()
try:
conffile = file(options.config)
except (IOError, OSError), e:
print >>sys.stderr, '%s: Unable to read config file: %s' \
% (options.get_prog_name(), e)
sys.exit(1)
try:
cfg.readfp(conffile)
finally:
conffile.close()
return cfg
def setup_logging(self, cfg):
logging.basicConfig()
try:
loglevel = cfg.get('gitosis', 'loglevel')
except (ConfigParser.NoSectionError,
ConfigParser.NoOptionError):
pass
else:
try:
symbolic = logging._levelNames[loglevel]
except KeyError:
log = logging.getLogger('gitosis.app')
log.warning(
'Ignored invalid loglevel configuration: %r',
loglevel,
)
else:
logging.root.setLevel(symbolic)
def handle_args(self, parser, options, args):
if args:
parser.error('not expecting arguments')