From 28263d66755343b164604667e16e0da3ff9c6f1a Mon Sep 17 00:00:00 2001 From: Adrian Holovaty Date: Tue, 6 Dec 2005 05:53:31 +0000 Subject: [PATCH] Added conf/project_template/manage.py, which is a light wrapper around django-admin.py that gets installed in each project with 'startproject'. It takes care of the PYTHONPATH and DJANGO_SETTINGS_MODULE business automatically. git-svn-id: http://code.djangoproject.com/svn/django/trunk@1556 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/conf/project_template/manage.py | 10 ++++++++++ django/core/management.py | 21 +++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 django/conf/project_template/manage.py diff --git a/django/conf/project_template/manage.py b/django/conf/project_template/manage.py new file mode 100644 index 0000000000..48a9a516a4 --- /dev/null +++ b/django/conf/project_template/manage.py @@ -0,0 +1,10 @@ +from django.core.management import execute_manager +try: + import settings # Assumed to be in the same directory. +except ImportError: + import sys + sys.stderr.write("Error: Can't find the file 'settings.py' in the directory containing %r. It appears you've customized things.\nYou'll have to run django-admin.py, passing it your settings module.\n" % __file__) + sys.exit(1) + +if __name__ == "__main__": + execute_manager(settings) diff --git a/django/core/management.py b/django/core/management.py index 208dfdf734..79b2c866f2 100644 --- a/django/core/management.py +++ b/django/core/management.py @@ -960,3 +960,24 @@ def execute_from_command_line(action_mapping=DEFAULT_ACTION_MAPPING): print '\n'.join(output) if action not in NO_SQL_TRANSACTION: print "COMMIT;" + +def execute_manager(settings_mod): + # Add this project to sys.path so that it's importable in the conventional + # way. For example, if this file (manage.py) lives in a directory + # "myproject", this code would add "/path/to/myproject" to sys.path. + project_directory = os.path.dirname(settings_mod.__file__) + project_name = os.path.basename(project_directory) + sys.path.append(os.path.join(project_directory, '..')) + project_module = __import__(project_name, '', '', ['']) + sys.path.pop() + + # Set DJANGO_SETTINGS_MODULE appropriately. + os.environ['DJANGO_SETTINGS_MODULE'] = '%s.settings' % project_name + + # Remove the "startproject" command from the action_mapping, because that's + # a django-admin.py command, not a manage.py command. + action_mapping = DEFAULT_ACTION_MAPPING.copy() + del action_mapping['startproject'] + + # Run the django-admin.py command. + execute_from_command_line(action_mapping)