import argparse import os import pkg_resources import posix import sys VERSION = '0.1' class AdminCommand(object): def _setup_argparser(self): kwargs = { 'description': 'Tool to manage the DAV Events django project installation.', 'epilog': 'Off Belay.', } parser = argparse.ArgumentParser(**kwargs) parser.add_argument('-V', '--version', action='version', version='%(prog)s ' + VERSION) subparsers = parser.add_subparsers(dest='subcmd', metavar='CMD', title='subcommands', description="Use '%(prog)s CMD -h' to show help for a subcommand") subparser = subparsers.add_parser('setup', help='Setup the installation.') subparser.add_argument('path', metavar='PATH', help='A directory, where the project files will be installed.') return parser def _parse_args(self, argv=None): if argv is None: argv = sys.argv[1:] if not argv: argv = ['--help'] return self._argparser.parse_args(argv) def _subcmd_setup(self, cmd_args): django_project_name = 'main' django_project_path = cmd_args.path sys.stdout.write('Setup installation in \'{path}\'...\n'.format(path=django_project_path)) if os.path.exists(django_project_path): if not os.path.isdir(django_project_path): sys.stderr.write('{path}: Not a directory.\n'.format(path=django_project_path)) return posix.EX_USAGE else: os.makedirs(django_project_path) sys.stdout.write('Creating django project...\n') django_cmd = 'django-admin startproject {name} "{path}"'.format(name=django_project_name, path=django_project_path) exitval = os.system(django_cmd) if exitval != posix.EX_OK: return exitval sys.stdout.write('Creating directories...\n') dirs = [ os.path.join(django_project_path, 'var', 'db'), os.path.join(django_project_path, 'var', 'log'), os.path.join(django_project_path, 'var', 'www', 'static'), ] for d in dirs: sys.stdout.write(' - %s\n' % d) os.makedirs(d) sys.stdout.write('Configure django project...\n') input_file = os.path.join('Resources', 'django.main.additional_settings.py') output_file = os.path.join(django_project_path, django_project_name, 'settings.py') with open(output_file, 'a') as f: f.write(pkg_resources.resource_string(__package__, input_file)) input_file = os.path.join('Resources', 'django.main.urls.py') output_file = os.path.join(django_project_path, django_project_name, 'urls.py') with open(output_file, 'w') as f: f.write(pkg_resources.resource_string(__package__, input_file)) return posix.EX_OK def __init__(self): self._argparser = self._setup_argparser() def __call__(self, argv=None): cmd_args = self._parse_args(argv) subcmd = cmd_args.subcmd method_name = '_subcmd_{}'.format(subcmd) method = getattr(self, method_name) exitval = method(cmd_args) return exitval def main(): cmd = AdminCommand() exitval = cmd() sys.exit(exitval)