Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Let the fun begin

  • Loading branch information...
commit 40dbdb04fb7c86b4b66934ff43d41f1c9de8e1f4 0 parents
@kumar303 kumar303 authored
4 .gitignore
@@ -0,0 +1,4 @@
+*.py[co]
+*.sw[po]
+.DS_Store
+.nose*
25 LICENSE
@@ -0,0 +1,25 @@
+Copyright (c) 2011, Mozilla
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of the copyright owner nor the names of its contributors
+ may be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
4 README.rst
@@ -0,0 +1,4 @@
+funfactory is the what makes `playdoh`_ fun. You import it within a Django `manage.py`_ file but the playdoh docs will explain everything.
+
+.. _`playdoh`: https://github.com/mozilla/playdoh
+.. _`manage.py`: https://github.com/mozilla/playdoh/blob/base/manage.py
0  funfactory/__init__.py
No changes.
104 funfactory/manage.py
@@ -0,0 +1,104 @@
+#!/usr/bin/env python
+import logging
+import os
+import site
+import sys
+
+
+current_settings = None
+execute_manager = None
+log = logging.getLogger(__name__)
+ROOT = None
+
+
+def path(*a):
+ return os.path.join(ROOT, *a)
+
+
+def setup_environ(manage_file, settings=None):
+ """Sets up a Django app within a manage.py file.
+
+ Keyword Arguments
+
+ **settings**
+ An imported settings module. Without this, playdoh tries to import
+ these modules (in order): settings_local, settings
+
+ """
+ # sys is global to avoid undefined local
+ global sys, current_settings, execute_manager, ROOT
+
+ ROOT = os.path.dirname(os.path.abspath(manage_file))
+
+ # Adjust the python path and put local packages in front.
+ prev_sys_path = list(sys.path)
+
+ # Make settings_local importable
+ sys.path.append(os.getcwd())
+
+ site.addsitedir(path('apps'))
+ site.addsitedir(path('lib'))
+
+ # Local (project) vendor library
+ site.addsitedir(path('vendor-local'))
+ site.addsitedir(path('vendor-local/lib/python'))
+
+ # Global (upstream) vendor library
+ site.addsitedir(path('vendor'))
+ site.addsitedir(path('vendor/lib/python'))
+
+ # Move the new items to the front of sys.path. (via virtualenv)
+ new_sys_path = []
+ for item in list(sys.path):
+ if item not in prev_sys_path:
+ new_sys_path.append(item)
+ sys.path.remove(item)
+ sys.path[:0] = new_sys_path
+
+ from django.core.management import execute_manager, setup_environ
+
+ exceptions = []
+ if not settings:
+ try:
+ import settings_local as settings
+ except ImportError, exc:
+ exceptions.append(('settings_local', exc))
+ try:
+ import settings
+ except ImportError:
+ exceptions.append(('settings', exc))
+ import sys
+ import traceback
+ traceback.print_exc()
+ sys.stderr.write(
+ "\nError: Tried importing 'settings_local.py' and "
+ "'settings.py' but neither could be found (or they're "
+ "throwing an ImportError)."
+ " This is what we tried to do:\n\n")
+ for mod, exc in exceptions:
+ sys.stderr.write("import %s\n" % mod)
+ sys.stderr.write(" %s: %s\n" % (exc.__class__.__name__,
+ exc))
+ sys.exit(1)
+ current_settings = settings
+
+ # If we want to use django settings anywhere, we need to set up the
+ # required environment variables.
+ setup_environ(settings)
+
+ # Monkey-patch django forms to avoid having to use Jinja2's |safe
+ # everywhere.
+ import safe_django_forms
+ safe_django_forms.monkeypatch()
+
+ # Configure Celery (optional)
+ try:
+ import djcelery
+ except ImportError, exc:
+ log.warning('%s (playdoh did not initialize djcelery)' % exc)
+ else:
+ djcelery.setup_loader()
+
+
+def main():
+ execute_manager(current_settings)
1  funfactory/models.py
@@ -0,0 +1 @@
+# This is here to trick Django
7 funfactory/requirements/compiled.txt
@@ -0,0 +1,7 @@
+MySQL-python==1.2.3c1
+Jinja2==2.5.5
+
+# for bcrypt passwords
+hmac==20101005
+hashlib==20081119
+py-bcrypt==0.2
16 funfactory/requirements/dev.txt
@@ -0,0 +1,16 @@
+# This file pulls in everything a developer needs. If it's a basic package
+# needed to run the site, it belongs in requirements/prod.txt. If it's a
+# package for developers (testing, docs, etc.), it goes in this file.
+
+-r prod.txt
+
+# Documentation
+Sphinx==1.0.6
+
+# Testing
+nose==1.0.0
+-e git://github.com/jbalogh/django-nose.git#egg=django_nose
+-e git://github.com/jbalogh/test-utils.git#egg=test-utils
+
+# L10n
+translate-toolkit==1.8.0
24 funfactory/requirements/prod.txt
@@ -0,0 +1,24 @@
+# Django stuff
+-e git://github.com/django/django@36c82ac8#egg=django
+
+# Templates
+-e git://github.com/jbalogh/jingo.git#egg=jingo
+-e git://github.com/jsocol/jingo-minify.git#egg=jingo-minify
+GitPython==0.1.7
+
+# Various tidbits
+-e git://github.com/jsocol/commonware.git#egg=commonware
+-e git://github.com/mozilla/nuggets.git#egg=nuggets
+
+# Security
+-e git://github.com/fwenzel/django-sha2.git#egg=django-sha2
+-e git://github.com/jsocol/bleach.git#egg=bleach
+
+# Celery: Message queue
+celery
+django-celery
+
+# L10n
+Babel>=0.9.4
+-e git://github.com/clouserw/tower.git#egg=tower
+-e git://github.com/fwenzel/django-mozilla-product-details#egg=django-mozilla-product-details
276 funfactory/settings_base.py
@@ -0,0 +1,276 @@
+# Django settings file for a project based on the playdoh template.
+# import * into your settings_local.py
+import logging
+import os
+
+from django.utils.functional import lazy
+
+from .manage import ROOT, path
+
+ROOT_PACKAGE = os.path.basename(ROOT)
+
+# Is this a dev instance?
+DEV = False
+
+DEBUG = False
+TEMPLATE_DEBUG = DEBUG
+
+ADMINS = ()
+MANAGERS = ADMINS
+
+DATABASES = {} # See settings_local.
+
+# Site ID is used by Django's Sites framework.
+SITE_ID = 1
+# Logging
+LOG_LEVEL = logging.DEBUG
+HAS_SYSLOG = True
+SYSLOG_TAG = "http_app_playdoh" # Change this after you fork.
+LOGGING_CONFIG = None
+LOGGING = { }
+
+
+## Internationalization.
+
+# 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/Los_Angeles'
+
+# 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
+
+# Gettext text domain
+TEXT_DOMAIN = 'messages'
+STANDALONE_DOMAINS = [TEXT_DOMAIN, 'javascript']
+TOWER_KEYWORDS = {'_lazy': None}
+TOWER_ADD_HEADERS = True
+
+# Language code for this installation. All choices can be found here:
+# http://www.i18nguy.com/unicode/language-identifiers.html
+LANGUAGE_CODE = 'en-US'
+
+## Accepted locales
+
+# On dev instances, the list of accepted locales defaults to the contents of
+# the `locale` directory. A localizer can add their locale in the l10n
+# repository (copy of which is checked out into `locale`) in order to start
+# testing the localization on the dev server.
+try:
+ DEV_LANGUAGES = [
+ loc.replace('_', '-') for loc in os.listdir(path('locale'))
+ if os.path.isdir(path('locale', loc)) and loc != 'templates'
+ ]
+except OSError:
+ DEV_LANGUAGES = ('en-US',)
+
+# On stage/prod, the list of accepted locales is manually maintained. Only
+# locales whose localizers have signed off on their work should be listed here.
+PROD_LANGUAGES = (
+ 'en-US',
+)
+
+def lazy_lang_url_map():
+ from django.conf import settings
+ langs = settings.DEV_LANGUAGES if settings.DEV else settings.PROD_LANGUAGES
+ return dict([(i.lower(), i) for i in langs])
+
+LANGUAGE_URL_MAP = lazy(lazy_lang_url_map, dict)()
+
+# Override Django's built-in with our native names
+def lazy_langs():
+ from django.conf import settings
+ from product_details import product_details
+ langs = DEV_LANGUAGES if settings.DEV else PROD_LANGUAGES
+ return dict([(lang.lower(), product_details.languages[lang]['native'])
+ for lang in langs])
+
+# Where to store product details etc.
+PROD_DETAILS_DIR = path('lib/product_details_json')
+
+LANGUAGES = lazy(lazy_langs, dict)()
+
+# Paths that don't require a locale code in the URL.
+SUPPORTED_NONLOCALES = ['media']
+
+
+## Media and templates.
+
+# Absolute path to the directory that holds media.
+# Example: "/home/media/media.lawrence.com/"
+MEDIA_ROOT = path('media')
+
+# 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 = '/admin-media/'
+
+# Make this unique, and don't share it with anybody.
+SECRET_KEY = '1iz#v0m55@h26^m6hxk3a7at*h$qj_2a$juu1#nv50548j(x1v'
+
+# 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',
+)
+
+TEMPLATE_CONTEXT_PROCESSORS = (
+ 'django.contrib.auth.context_processors.auth',
+ 'django.core.context_processors.debug',
+ 'django.core.context_processors.media',
+ 'django.core.context_processors.request',
+ 'django.core.context_processors.csrf',
+ 'django.contrib.messages.context_processors.messages',
+
+ 'commons.context_processors.i18n',
+ #'jingo_minify.helpers.build_ids',
+)
+
+TEMPLATE_DIRS = (
+ path('templates'),
+)
+
+def JINJA_CONFIG():
+ import jinja2
+ from django.conf import settings
+# from caching.base import cache
+ config = {'extensions': ['tower.template.i18n', 'jinja2.ext.do',
+ 'jinja2.ext.with_', 'jinja2.ext.loopcontrols'],
+ 'finalize': lambda x: x if x is not None else ''}
+# if 'memcached' in cache.scheme and not settings.DEBUG:
+ # We're passing the _cache object directly to jinja because
+ # Django can't store binary directly; it enforces unicode on it.
+ # Details: http://jinja.pocoo.org/2/documentation/api#bytecode-cache
+ # and in the errors you get when you try it the other way.
+# bc = jinja2.MemcachedBytecodeCache(cache._cache,
+# "%sj2:" % settings.CACHE_PREFIX)
+# config['cache_size'] = -1 # Never clear the cache
+# config['bytecode_cache'] = bc
+ return config
+
+# Bundles is a dictionary of two dictionaries, css and js, which list css files
+# and js files that can be bundled together by the minify app.
+MINIFY_BUNDLES = {
+ 'css': {
+ 'example_css': (
+ 'css/examples/main.css',
+ ),
+ },
+ 'js': {
+ 'example_js': (
+ 'js/libs/jquery-1.4.4.min.js',
+ ),
+ }
+}
+
+
+## Middlewares, apps, URL configs.
+
+MIDDLEWARE_CLASSES = (
+ 'commons.middleware.LocaleURLMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ 'django.middleware.csrf.CsrfViewMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ 'django.contrib.messages.middleware.MessageMiddleware',
+
+ 'commonware.middleware.FrameOptionsHeader',
+)
+
+ROOT_URLCONF = '%s.urls' % ROOT_PACKAGE
+
+INSTALLED_APPS = (
+ # Local apps
+ 'commons', # Content common to most playdoh-based apps.
+ 'jingo_minify',
+ 'tower', # for ./manage.py extract (L10n)
+
+ 'examples', # Example code. Can (and should) be removed for actual projects.
+
+ # We need this so the jsi18n view will pick up our locale directory.
+ ROOT_PACKAGE,
+
+ # Third-party apps
+ 'commonware.response.cookies',
+ 'djcelery',
+ 'django_nose',
+
+ # Django contrib apps
+ 'django.contrib.auth',
+ 'django_sha2', # Load after auth to monkey-patch it.
+
+ 'django.contrib.contenttypes',
+ # 'django.contrib.sessions',
+ # 'django.contrib.sites',
+ # 'django.contrib.messages',
+ # Uncomment the next line to enable the admin:
+ # 'django.contrib.admin',
+ # Uncomment the next line to enable admin documentation:
+ # 'django.contrib.admindocs',
+
+ # L10n
+ 'product_details',
+
+)
+
+# Tells the extract script what files to look for L10n in and what function
+# handles the extraction. The Tower library expects this.
+DOMAIN_METHODS = {
+ 'messages': [
+ ('apps/**.py',
+ 'tower.management.commands.extract.extract_tower_python'),
+ ('**/templates/**.html',
+ 'tower.management.commands.extract.extract_tower_template'),
+ ],
+
+ ## Use this if you have localizable HTML files:
+ #'lhtml': [
+ # ('**/templates/**.lhtml',
+ # 'tower.management.commands.extract.extract_tower_template'),
+ #],
+
+ ## Use this if you have localizable JS files:
+ #'javascript': [
+ # Make sure that this won't pull in strings from external libraries you
+ # may use.
+ # ('media/js/**.js', 'javascript'),
+ #],
+}
+
+# Path to Java. Used for compress_assets.
+JAVA_BIN = '/usr/bin/java'
+
+## Auth
+PWD_ALGORITHM = 'sha512' # recommended: 'bcrypt'
+HMAC_KEYS = { # for bcrypt only
+ #'2011-01-01': 'cheesecake',
+}
+
+## Tests
+TEST_RUNNER = 'test_utils.runner.RadicalTestSuiteRunner'
+
+## Celery
+
+# True says to simulate background tasks without actually using celeryd.
+# Good for local development in case celeryd is not running.
+CELERY_ALWAYS_EAGER = True
+
+BROKER_CONNECTION_TIMEOUT = 0.1
+CELERY_RESULT_BACKEND = 'amqp'
+CELERY_IGNORE_RESULT = True
+CELERY_EAGER_PROPAGATES_EXCEPTIONS = True
27 setup.py
@@ -0,0 +1,27 @@
+extra_setup = {}
+try:
+ from setuptools import setup, find_packages
+except ImportError:
+ from distutils.core import setup
+else:
+ extra_setup.update(dict(packages=find_packages(exclude=['ez_setup']),
+ install_requires=[]))
+
+setup(
+ name='funfactory',
+ version='1.0',
+ description="Mozilla's Django app skeleton.",
+ long_description=open('README.rst').read(),
+ author='Kumar McMillan and contributors',
+ author_email='',
+ license="Mozilla License",
+ url='http://farmdev.com/projects/fudge/',
+ include_package_data=True,
+ classifiers = [
+ 'Intended Audience :: Developers',
+ 'Natural Language :: English',
+ 'Operating System :: OS Independent',
+ 'Programming Language :: Python :: 2.6',
+ ],
+ **extra_setup
+ )
Please sign in to comment.
Something went wrong with that request. Please try again.