Skip to content

Instantly share code, notes, and snippets.

@IlianIliev
Created May 28, 2012 11:04
Show Gist options
  • Save IlianIliev/2818562 to your computer and use it in GitHub Desktop.
Save IlianIliev/2818562 to your computer and use it in GitHub Desktop.

Revisions

  1. IlianIliev revised this gist Jun 1, 2012. 2 changed files with 1 addition and 2 deletions.
    2 changes: 1 addition & 1 deletion fabfile.py
    Original file line number Diff line number Diff line change
    @@ -9,7 +9,7 @@
    from fabric.api import env, run, local
    from fabric.context_managers import lcd, prefix
    except ImportError, e:
    print 'Python Fabric should be installed to sue this script'
    print 'Python Fabric should be installed to use this script'

    import re, sys, os

    1 change: 0 additions & 1 deletion settings.py
    Original file line number Diff line number Diff line change
    @@ -1,4 +1,3 @@

    # Django settings for %%%project_name%%% project.

    import os
  2. IlianIliev created this gist May 28, 2012.
    73 changes: 73 additions & 0 deletions fabfile.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,73 @@
    """
    This fabric script automates the creation of a virtual environment and a Django
    project. The result will be virtual environtment with the name of the project.
    The folder namer where the project code will be placed is specified in
    SOURCE_DIRECTORY_NAME, a static root folder will be created and settings.py
    will be updated.
    """
    try:
    from fabric.api import env, run, local
    from fabric.context_managers import lcd, prefix
    except ImportError, e:
    print 'Python Fabric should be installed to sue this script'

    import re, sys, os


    DIRECTORY_NAME_REGEXP = r'^[a-zA-Z_].[\w_-]+$'
    SOURCE_DIRECTORY_NAME = 'src'


    PACKAGES_LIST = [
    'Django==1.4',
    'south',
    ]


    def create_virtual_env():
    local('virtualenv --no-site-packages .')


    def create_project_directory(name):
    if name is None:
    print 'You should provide project name to use this script'
    sys.exit()
    if not re.match(DIRECTORY_NAME_REGEXP, name):
    print 'Incorrect name, name can contain only numbers, letters, dash ' \
    'and underscore and should start with letter or underscore'
    exit(1)
    else:
    local('mkdir %s' % name)


    def install_packages():
    for package in PACKAGES_LIST:
    local('pip install %s' % package)


    def create_django_project(name):
    local('mkdir %s' % SOURCE_DIRECTORY_NAME)
    local('mkdir static')
    local('mkdir media')
    local('python ./bin/django-admin.py startproject %s %s' % (name, SOURCE_DIRECTORY_NAME))


    def update_settings(name):
    with open('settings.py', 'r') as base_settings:
    content = base_settings.read().replace('%%%project_name%%%', name)
    with open(os.path.join(name, SOURCE_DIRECTORY_NAME, name, 'settings.py'), 'w') as settings:
    settings.write(content)


    def start_project(name=None):
    create_project_directory(name)
    with lcd(name):
    create_virtual_env()
    ve_activate_prefix = os.path.join(os.getcwd(), name, 'bin', 'activate')
    print ve_activate_prefix
    with prefix('. %s' % ve_activate_prefix):
    install_packages()
    create_django_project(name)
    update_settings(name)
    manage_py_path = os.path.join(SOURCE_DIRECTORY_NAME, 'manage.py')
    local('python %s collectstatic' % manage_py_path)
    156 changes: 156 additions & 0 deletions settings.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,156 @@

    # Django settings for %%%project_name%%% project.

    import os


    PROJECT_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))

    DEBUG = False
    TEMPLATE_DEBUG = DEBUG

    ADMINS = (
    # ('Your Name', '[email protected]'),
    )

    MANAGERS = ADMINS


    # Local time zone for this installation. Choices can be found here:
    # http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
    # although not all choices may be available on all operating systems.
    # On Unix systems, a value of None will cause Django to use the same
    # timezone as the operating system.
    # If running in a Windows environment this must be set to the same as your
    # system time zone.
    TIME_ZONE = 'America/Chicago'

    # Language code for this installation. All choices can be found here:
    # http://www.i18nguy.com/unicode/language-identifiers.html
    LANGUAGE_CODE = 'en-us'

    SITE_ID = 1

    # If you set this to False, Django will make some optimizations so as not
    # to load the internationalization machinery.
    USE_I18N = True

    # If you set this to False, Django will not format dates, numbers and
    # calendars according to the current locale.
    USE_L10N = True

    # If you set this to False, Django will not use timezone-aware datetimes.
    USE_TZ = True

    # Absolute filesystem path to the directory that will hold user-uploaded files.
    # Example: "/home/media/media.lawrence.com/media/"
    MEDIA_ROOT = os.path.join(PROJECT_PATH, os.pardir, 'media')

    # URL that handles the media served from MEDIA_ROOT. Make sure to use a
    # trailing slash.
    # Examples: "http://media.lawrence.com/media/", "http://example.com/media/"
    MEDIA_URL = '/media/'

    # Absolute path to the directory static files should be collected to.
    # Don't put anything in this directory yourself; store your static files
    # in apps' "static/" subdirectories and in STATICFILES_DIRS.
    # Example: "/home/media/media.lawrence.com/static/"
    STATIC_ROOT = os.path.join(PROJECT_PATH, os.pardir, 'static')

    # URL prefix for static files.
    # Example: "http://media.lawrence.com/static/"
    STATIC_URL = '/static/'

    # Additional locations of static files
    STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    )

    # List of finder classes that know how to find static files in
    # various locations.
    STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
    # 'django.contrib.staticfiles.finders.DefaultStorageFinder',
    )

    # Make this unique, and don't share it with anybody.
    SECRET_KEY = '(6s62fym+%qkk37pe=-utcpo%14a38se9=$w+@!ib4g5=o9sf9'

    # List of callables that know how to import templates from various sources.
    TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
    # 'django.template.loaders.eggs.Loader',
    )

    MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    # Uncomment the next line for simple clickjacking protection:
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
    )

    ROOT_URLCONF = '%%%project_name%%%.urls'

    # Python dotted path to the WSGI application used by Django's runserver.
    WSGI_APPLICATION = '%%%project_name%%%.wsgi.application'

    TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    )

    INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    # 'django.contrib.admindocs',
    )

    # A sample logging configuration. The only tangible logging
    # performed by this configuration is to send an email to
    # the site admins on every HTTP 500 error when DEBUG=False.
    # See http://docs.djangoproject.com/en/dev/topics/logging for
    # more details on how to customize your logging configuration.
    LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'filters': {
    'require_debug_false': {
    '()': 'django.utils.log.RequireDebugFalse'
    }
    },
    'handlers': {
    'mail_admins': {
    'level': 'ERROR',
    'filters': ['require_debug_false'],
    'class': 'django.utils.log.AdminEmailHandler'
    }
    },
    'loggers': {
    'django.request': {
    'handlers': ['mail_admins'],
    'level': 'ERROR',
    'propagate': True,
    },
    }
    }


    try:
    from setting_local import *
    except ImportError, e:
    pass