summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2005-12-06 05:53:31 +0000
committerAdrian Holovaty <adrian@holovaty.com>2005-12-06 05:53:31 +0000
commit28263d66755343b164604667e16e0da3ff9c6f1a (patch)
tree69ff6886d8f82237791d94a3c52d66071cbefa46
parent17108bc1903efa5e3e10f709f98746bc1031b220 (diff)
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
-rw-r--r--django/conf/project_template/manage.py10
-rw-r--r--django/core/management.py21
2 files changed, 31 insertions, 0 deletions
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)