manage.py 3.09 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#!/usr/bin/env python
"""
Usage: manage.py {lms|cms} [--settings env] ...

Run django management commands. Because edx-platform contains multiple django projects,
the first argument specifies which project to run (cms [Studio] or lms [Learning Management System]).

By default, those systems run in with a settings file appropriate for development. However,
by passing the --settings flag, you can specify what environment specific settings file to use.

Any arguments not understood by this manage.py will be passed to django-admin.py
"""

import os
import sys
import glob2
import imp
from argparse import ArgumentParser

def parse_args():
    """Parse edx specific arguments to manage.py"""
    parser = ArgumentParser()
23
    subparsers = parser.add_subparsers(title='system', description='edX service to run')
24 25 26 27 28 29 30 31 32 33

    lms = subparsers.add_parser(
        'lms',
        help='Learning Management System',
        add_help=False,
        usage='%(prog)s [options] ...'
    )
    lms.add_argument('-h', '--help', action='store_true', help='show this help message and exit')
    lms.add_argument(
        '--settings',
34 35
        help="Which django settings module to use under lms.envs. If not provided, the DJANGO_SETTINGS_MODULE "
             "environment variable will be used if it is set, otherwise it will default to lms.envs.dev")
36
    lms.add_argument(
37
        '--service-variant',
38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
        choices=['lms', 'lms-xml', 'lms-preview'],
        default='lms',
        help='Which service variant to run, when using the aws environment')
    lms.set_defaults(
        help_string=lms.format_help(),
        settings_base='lms/envs',
        default_settings='lms.envs.dev'
    )

    cms = subparsers.add_parser(
        'cms',
        help='Studio',
        add_help=False,
        usage='%(prog)s [options] ...'
    )
    cms.add_argument(
        '--settings',
55 56
        help="Which django settings module to use under cms.envs. If not provided, the DJANGO_SETTINGS_MODULE "
             "environment variable will be used if it is set, otherwise it will default to cms.envs.dev")
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
    cms.add_argument('-h', '--help', action='store_true', help='show this help message and exit')
    cms.set_defaults(
        help_string=cms.format_help(),
        settings_base='cms/envs',
        default_settings='cms.envs.dev',
        service_variant='cms'
    )

    edx_args, django_args = parser.parse_known_args()

    if edx_args.help:
        print "edX:"
        print edx_args.help_string

    return edx_args, django_args


if __name__ == "__main__":
    edx_args, django_args = parse_args()

    if edx_args.settings:
78
        os.environ["DJANGO_SETTINGS_MODULE"] = edx_args.settings_base.replace('/', '.') + "." + edx_args.settings
79 80
    else:
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", edx_args.default_settings)
81

82
    os.environ.setdefault("SERVICE_VARIANT", edx_args.service_variant)
83

84 85 86
    if edx_args.help:
        print "Django:"
        # This will trigger django-admin.py to print out its help
87
        django_args.append('--help')
88 89 90

    from django.core.management import execute_from_command_line

91
    execute_from_command_line([sys.argv[0]] + django_args)