From d9fb5d17a545bb21d5f277db9cc186cd1f785e5f Mon Sep 17 00:00:00 2001 From: Chris Church Date: Tue, 25 Jun 2013 11:35:40 -0400 Subject: [PATCH] Support South migrations and Django management commands in .pyc files. --- awx/__init__.py | 20 ++++++++++++++++++++ awx/settings/production.py | 3 +++ 2 files changed, 23 insertions(+) diff --git a/awx/__init__.py b/awx/__init__.py index d0d07598b6..8aa03e5bd0 100644 --- a/awx/__init__.py +++ b/awx/__init__.py @@ -16,6 +16,22 @@ try: except ImportError: MODE = 'production' +def find_commands(management_dir): + # Modified version of function from django/core/management/__init__.py. + command_dir = os.path.join(management_dir, 'commands') + commands = [] + try: + for f in os.listdir(command_dir): + if f.startswith('_'): + continue + elif f.endswith('.py') and f[:-3] not in commands: + commands.append(f[:-3]) + elif f.endswith('.pyc') and f[:-4] not in commands: + commands.append(f[:-4]) + except OSError: + pass + return commands + def manage(): # Update the default settings environment variable based on current mode. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'awx.settings.%s' % MODE) @@ -23,6 +39,10 @@ def manage(): local_site_packages = os.path.join(os.path.dirname(__file__), 'lib', 'site-packages') sys.path.insert(0, local_site_packages) + # Monkeypatch Django find_commands to also work with .pyc files. + import django.core.management + django.core.management.find_commands = find_commands + # Now run the command (or display the version). from django.core.management import execute_from_command_line if len(sys.argv) >= 2 and sys.argv[1] in ('version', '--version'): sys.stdout.write('awx-%s\n' % __version__) diff --git a/awx/settings/production.py b/awx/settings/production.py index 78e0e5e7a2..9ab3147053 100644 --- a/awx/settings/production.py +++ b/awx/settings/production.py @@ -11,6 +11,9 @@ TEMPLATE_DEBUG = DEBUG # Clear database settings to force production environment to define them. DATABASES = {} +# Enable South to look for migrations in .pyc files. +SOUTH_USE_PYC = True + # Clear the secret key to force production environment to define it. SECRET_KEY = None