manage.py 3.22 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
#!/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
16
import importlib
17 18 19 20 21
from argparse import ArgumentParser

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

    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',
33 34
        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")
35
    lms.add_argument(
36
        '--service-variant',
37 38 39 40 41 42
        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',
43 44
        default_settings='lms.envs.dev',
        startup='lms.startup',
45 46 47 48 49 50 51 52 53 54
    )

    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
    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',
62 63
        service_variant='cms',
        startup='cms.startup',
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
    )

    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:
79
        os.environ["DJANGO_SETTINGS_MODULE"] = edx_args.settings_base.replace('/', '.') + "." + edx_args.settings
80 81
    else:
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", edx_args.default_settings)
82

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

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

90 91 92
    startup = importlib.import_module(edx_args.startup)
    startup.run()

93 94
    from django.core.management import execute_from_command_line

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