Sean F avatar Sean F committed 529493f

adding a project template and startlfsproject management command

Comments (0)

Files changed (5)

Add a comment to this file

lfs/conf/project_template/__init__.py

Empty file added.

lfs/conf/project_template/manage.py

+#!/usr/bin/env python
+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(If the file settings.py does indeed exist, it's causing an ImportError somehow.)\n" % __file__)
+    sys.exit(1)
+
+if __name__ == "__main__":
+    execute_manager(settings)

lfs/conf/project_template/settings.py

+# Django settings for lfs development buildout.
+
+import os
+DIRNAME = os.path.dirname(__file__)
+
+DEBUG = True
+TEMPLATE_DEBUG = DEBUG
+TESTING = False
+
+DEFAULT_FROM_EMAIL = 'your_email@domain.com'
+
+ADMINS = (
+    # ('Your Name', 'your_email@domain.com'),
+)
+
+MANAGERS = ADMINS
+
+DATABASES = {
+    'default': {
+        'ENGINE': 'django.db.backends.', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
+        'NAME': '',                      # Or path to database file if using sqlite3.
+        'USER': '',                      # Not used with sqlite3.
+        'PASSWORD': '',                  # Not used with sqlite3.
+        'HOST': '',                      # Set to empty string for localhost. Not used with sqlite3.
+        'PORT': '',                      # Set to empty string for default. Not used with sqlite3.
+    }
+}
+
+# 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.
+# 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'
+
+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
+
+# Absolute path to the directory that holds media.
+# Example: "/home/media/media.lawrence.com/"
+MEDIA_ROOT = DIRNAME + "/media"
+
+# static files settings
+STATIC_URL = '/static/'
+STATIC_ROOT = DIRNAME + "/sitestatic"
+
+# URL that handles the media served from MEDIA_ROOT. Make sure to use a
+# trailing slash if there is a path component (optional in other cases).
+# Examples: "http://media.lawrence.com", "http://example.com/media/"
+MEDIA_URL = '/media/'
+
+# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
+# trailing slash.
+# Examples: "http://foo.com/media/", "/media/".
+ADMIN_MEDIA_PREFIX = '/media/admin/'
+
+# Make this unique, and don't share it with anybody.
+SECRET_KEY = ''
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+    'django.template.loaders.filesystem.load_template_source',
+    'django.template.loaders.app_directories.load_template_source',
+#     'django.template.loaders.eggs.load_template_source',
+)
+
+MIDDLEWARE_CLASSES = (
+    'django.middleware.csrf.CsrfViewMiddleware',
+    'django.middleware.common.CommonMiddleware',
+    'django.contrib.sessions.middleware.SessionMiddleware',
+    'django.contrib.auth.middleware.AuthenticationMiddleware',
+    'lfs.utils.middleware.RedirectFallbackMiddleware',
+    "pagination.middleware.PaginationMiddleware",
+)
+
+ROOT_URLCONF = 'urls'
+
+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 = (
+    "lfstheme",
+    "django.contrib.admin",
+    'django.contrib.auth',
+    'django.contrib.contenttypes',
+    'django.contrib.sessions',
+    'django.contrib.staticfiles',
+    'django.contrib.sites',
+    "django.contrib.flatpages",
+    "django.contrib.redirects",
+    "django.contrib.sitemaps",
+    'djangorestframework',
+    'django_countries',
+    "pagination",
+    'reviews',
+    "tagging",
+    "portlets",
+    "lfs",
+    "lfs.tests",
+    'lfs.core',
+    'lfs.caching',
+    'lfs.cart',
+    'lfs.catalog',
+    'lfs.checkout',
+    "lfs.criteria",
+    "lfs.customer",
+    "lfs.discounts",
+    "lfs.export",
+    'lfs.gross_price',
+    'lfs.integrationtests',
+    'lfs.mail',
+    'lfs.manage',
+    'lfs.marketing',
+    'lfs.manufacturer',
+    'lfs.net_price',
+    'lfs.order',
+    'lfs.page',
+    'lfs.payment',
+    'lfs.portlet',
+    'lfs.search',
+    'lfs.shipping',
+    'lfs.supplier',
+    'lfs.tagging',
+    'lfs.tax',
+    'lfs.utils',
+    'lfs.voucher',
+    'lfs_contact',
+    'postal',
+    'paypal.standard.ipn',
+    'paypal.standard.pdt',
+    'gunicorn',
+)
+
+FORCE_SCRIPT_NAME=""
+LOGIN_URL = "/login/"
+LOGIN_REDIRECT_URL = "/manage/"
+
+TEMPLATE_CONTEXT_PROCESSORS = (
+    'django.core.context_processors.debug',
+    'django.core.context_processors.auth',
+    'django.core.context_processors.request',
+    'django.core.context_processors.media',
+    'django.core.context_processors.static',
+    'lfs.core.context_processors.main',
+)
+
+AUTHENTICATION_BACKENDS = (
+    'lfs.customer.auth.EmailBackend',
+    'django.contrib.auth.backends.ModelBackend',
+)
+
+# For sql_queries
+INTERNAL_IPS = (
+    "127.0.0.1",
+)
+
+# CACHE_BACKEND = 'file:///'
+# CACHE_BACKEND = 'locmem:///'
+# CACHE_BACKEND = 'memcached://127.0.0.1:11211/'
+CACHE_BACKEND = 'dummy:///'
+
+EMAIL_HOST = ""
+EMAIL_HOST_USER = ""
+EMAIL_HOST_PASSWORD = ""
+
+PAYPAL_RECEIVER_EMAIL = "info@yourbusiness.com"
+PAYPAL_IDENTITY_TOKEN = "set_this_to_your_paypal_pdt_identity_token"
+
+# TODO: Put this into the Shop model
+LFS_PAYPAL_REDIRECT = True
+LFS_AFTER_ADD_TO_CART = "lfs_added_to_cart"
+LFS_RECENT_PRODUCTS_LIMIT = 5
+
+REVIEWS_SHOW_PREVIEW = False
+REVIEWS_IS_NAME_REQUIRED = False
+REVIEWS_IS_EMAIL_REQUIRED = False
+REVIEWS_IS_MODERATED = False
+
+try:
+    from local_settings import *
+except ImportError:
+    pass

lfs/conf/project_template/urls.py

+# django imports
+from django.conf import settings
+from django.conf.urls.defaults import *
+from django.contrib import admin
+admin.autodiscover()
+
+import os
+DIRNAME = os.path.dirname(__file__)
+
+urlpatterns = patterns("",
+    (r'', include('lfs.core.urls')),
+    (r'^manage/', include('lfs.manage.urls')),
+)
+
+urlpatterns += patterns("",
+    (r'^reviews/', include('reviews.urls')),
+    (r'^paypal/ipn/', include('paypal.standard.ipn.urls')),
+    (r'^paypal/pdt/', include('paypal.standard.pdt.urls')),
+)
+
+urlpatterns += patterns("",
+    (r'^admin/', include(admin.site.urls)),
+    (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': os.path.join(DIRNAME, "media"), 'show_indexes': True }),
+)
+
+if getattr(settings, 'TESTING'):
+    urlpatterns += patterns("",
+        (r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': os.path.join(DIRNAME, "sitestatic"), 'show_indexes': True }),
+    )

lfs/core/management/commands/startlfsproject.py

+from django.core.management.base import CommandError, LabelCommand
+from django.utils.importlib import import_module
+import os
+import re
+import shutil
+import lfs
+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_module(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)
+        template_dir = os.path.join(lfs.__path__[0], 'conf', 'project_template')
+        project_dir = '%s/%s' % (directory, project_name)
+        shutil.copytree(template_dir, project_dir)
+
+        # 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()
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.