app/django/core/management/commands/startproject.py
author Pawel Solyga <Pawel.Solyga@gmail.com>
Sun, 19 Oct 2008 13:06:20 +0000
changeset 388 699b206b64b7
parent 323 ff1a9aa48cfd
permissions -rw-r--r--
Add pylint configuration file (pylintrc) and do_pylint.sh script which runs pylint checkers on Melange code using pylintrc file as config. do_pylint.sh as default shows additional information like reports, TODOs, code similarities and unused imports, but you can run it in silent mode (--silent) which disables all of that. The only problem with unused imports in pylint right now is that it doesn't work in the situation described in last example at http://code.google.com/p/soc/wiki/PythonStyleGuide#Packages, so sometimes we get unused import soc when we actually shouldn't. However this can be fixed by writing pylint plugins (our own checkers) in future. Patch by: Pawel Solyga Review by: to-be-reviewed

from django.core.management.base import copy_helper, CommandError, LabelCommand
import os
import re
from random import choice

class Command(LabelCommand):
    help = "Creates a Django project directory structure for the given project name in the current directory."
    args = "[projectname]"
    label = 'project name'

    requires_model_validation = False
    # Can't import settings during this command, because they haven't
    # necessarily been created.
    can_import_settings = False

    def handle_label(self, project_name, **options):
        # Determine the project_name a bit naively -- by looking at the name of
        # the parent directory.
        directory = os.getcwd()

        # Check that the project_name cannot be imported.
        try:
            __import__(project_name)
        except ImportError:
            pass
        else:
            raise CommandError("%r conflicts with the name of an existing Python module and cannot be used as a project name. Please try another name." % project_name)

        copy_helper(self.style, 'project', project_name, directory)

        # Create a random SECRET_KEY hash, and put it in the main settings.
        main_settings_file = os.path.join(directory, project_name, 'settings.py')
        settings_contents = open(main_settings_file, 'r').read()
        fp = open(main_settings_file, 'w')
        secret_key = ''.join([choice('abcdefghijklmnopqrstuvwxyz0123456789!@#$%^&*(-_=+)') for i in range(50)])
        settings_contents = re.sub(r"(?<=SECRET_KEY = ')'", secret_key + "'", settings_contents)
        fp.write(settings_contents)
        fp.close()