0b0b679d18
This doesn't remove all trace of them but it's enough to avoid installing them and still be able to see the front page.
324 lines
10 KiB
Python
324 lines
10 KiB
Python
import os
|
|
import dj_database_url
|
|
|
|
|
|
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir))
|
|
PACKAGE_ROOT = os.path.abspath(os.path.dirname(__file__))
|
|
BASE_DIR = PACKAGE_ROOT
|
|
|
|
DEBUG = bool(int(os.environ.get("DJANGO_DEBUG", "1")))
|
|
|
|
UNPREPEND_WWW = bool(int(os.environ.get("DJANGO_UNPREPEND_WWW", "0")))
|
|
|
|
APPEND_SLASH = True
|
|
|
|
# HEROKU: Update database configuration with $DATABASE_URL.
|
|
DATABASES = {"default": {}}
|
|
import dj_database_url
|
|
db_from_env = dj_database_url.config()
|
|
DATABASES['default'].update(db_from_env)
|
|
if DEBUG and not DATABASES['default']:
|
|
DATABASES['default'] = {
|
|
"ENGINE": "django.db.backends.sqlite3",
|
|
"NAME": os.path.join(PROJECT_ROOT, "dev.db"),
|
|
}
|
|
|
|
ALLOWED_HOSTS = os.environ.get("DJANGO_ALLOWED_HOSTS", "localhost").split()
|
|
CANONICAL_HOST = os.environ.get("DJANGO_CANONICAL_HOST", None)
|
|
|
|
# If DEFAULT_FROM_EMAIL is not set, email will most likely break in prod.
|
|
from_email = os.environ.get("DJANGO_DEFAULT_FROM_EMAIL", None)
|
|
if from_email is not None:
|
|
DEFAULT_FROM_EMAIL = from_email
|
|
SERVER_EMAIL = DEFAULT_FROM_EMAIL
|
|
|
|
THEME_CONTACT_EMAIL = os.environ.get("THEME_CONTACT_EMAIL", from_email)
|
|
|
|
# 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 = os.environ.get("TZ")
|
|
|
|
# Set the email address that will receive errors.
|
|
admin_email = os.environ.get("DJANGO_ADMIN_EMAIL", None)
|
|
if admin_email is not None:
|
|
ADMINS = [("Webmaster", admin_email)]
|
|
|
|
# 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 = int(os.environ.get("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
|
|
|
|
# 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 = "/site_media/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_ROOT, 'staticfiles')
|
|
|
|
# URL prefix for static files.
|
|
# Example: "http://media.lawrence.com/static/"
|
|
STATIC_URL = '/static/'
|
|
|
|
# Additional locations of static files
|
|
STATICFILES_DIRS = (
|
|
os.path.join(PROJECT_ROOT, 'static'),
|
|
)
|
|
|
|
# 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",
|
|
"compressor.finders.CompressorFinder",
|
|
]
|
|
|
|
try:
|
|
_dynamic_storage_root = os.environ['DJANGO_DYNAMIC_STORAGE_ROOT']
|
|
except KeyError:
|
|
# Absolute filesystem path to the directory that will hold user-uploaded files.
|
|
MEDIA_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "media")
|
|
else:
|
|
MEDIA_ROOT = os.path.join(_dynamic_storage_root, "user_upload")
|
|
COMPRESS_ROOT = _dynamic_storage_root
|
|
|
|
# Make this unique, and don't share it with anybody.
|
|
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY', '').strip()
|
|
if (not SECRET_KEY) and DEBUG:
|
|
SECRET_KEY = 'Ae=)D4\V=OFh~C63MJHgpc&6~"p-7>^2ux3#Cr;p^!RGw9.BT}U`pi|b04TDv_NB'
|
|
|
|
TEMPLATES = [
|
|
{
|
|
"BACKEND": "django.template.backends.django.DjangoTemplates",
|
|
"DIRS": [
|
|
os.path.join(PACKAGE_ROOT, "templates"),
|
|
],
|
|
"APP_DIRS": True,
|
|
"OPTIONS": {
|
|
"debug": DEBUG,
|
|
"context_processors": [
|
|
"django.contrib.auth.context_processors.auth",
|
|
"django.template.context_processors.debug",
|
|
"django.template.context_processors.i18n",
|
|
"django.template.context_processors.media",
|
|
"django.template.context_processors.static",
|
|
"django.template.context_processors.tz",
|
|
"django.template.context_processors.request",
|
|
"django.contrib.messages.context_processors.messages",
|
|
"account.context_processors.account",
|
|
"pinax_theme_bootstrap.context_processors.theme",
|
|
"symposion.reviews.context_processors.reviews",
|
|
],
|
|
},
|
|
},
|
|
]
|
|
|
|
TEMPLATE_DEBUG = False
|
|
|
|
MIDDLEWARE_CLASSES = [
|
|
"django.contrib.sessions.middleware.SessionMiddleware",
|
|
"django.middleware.common.CommonMiddleware",
|
|
"django.middleware.csrf.CsrfViewMiddleware",
|
|
"django.contrib.auth.middleware.AuthenticationMiddleware",
|
|
"django.contrib.auth.middleware.SessionAuthenticationMiddleware",
|
|
"django.contrib.messages.middleware.MessageMiddleware",
|
|
"reversion.middleware.RevisionMiddleware",
|
|
"django.middleware.clickjacking.XFrameOptionsMiddleware",
|
|
"pinaxcon.monkey_patch.MonkeyPatchMiddleware",
|
|
]
|
|
|
|
ROOT_URLCONF = "pinaxcon.urls"
|
|
|
|
# Python dotted path to the WSGI application used by Django's runserver.
|
|
WSGI_APPLICATION = "pinaxcon.wsgi.application"
|
|
|
|
INSTALLED_APPS = [
|
|
"django.contrib.admin",
|
|
"django.contrib.auth",
|
|
"django.contrib.contenttypes",
|
|
"django.contrib.messages",
|
|
"django.contrib.sessions",
|
|
"django.contrib.sites",
|
|
"django.contrib.staticfiles",
|
|
|
|
# theme
|
|
"bootstrapform",
|
|
"pinax_theme_bootstrap",
|
|
|
|
# external
|
|
"account",
|
|
"easy_thumbnails",
|
|
"taggit",
|
|
"reversion",
|
|
"sitetree",
|
|
"pinax.boxes",
|
|
"pinax.eventlog",
|
|
"pinax.pages",
|
|
"markdown_deux",
|
|
|
|
# symposion
|
|
"symposion",
|
|
"symposion.conference",
|
|
"symposion.proposals",
|
|
"symposion.reviews",
|
|
"symposion.schedule",
|
|
"symposion.speakers",
|
|
"symposion.sponsorship",
|
|
"symposion.teams",
|
|
|
|
# Registrasion
|
|
"registrasion",
|
|
"symposion_templates",
|
|
|
|
# Registrasion-stipe
|
|
"pinax.stripe",
|
|
"django_countries",
|
|
"registripe",
|
|
|
|
#admin - required by registrasion ??
|
|
"nested_admin",
|
|
|
|
# project
|
|
"pinaxcon",
|
|
"pinaxcon.proposals",
|
|
"pinaxcon.registrasion",
|
|
|
|
# stylesheets and js
|
|
'compressor',
|
|
|
|
'email_log',
|
|
]
|
|
|
|
# A sample logging configuration.
|
|
# 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": {
|
|
'console': {
|
|
'level': os.environ.get('DJANGO_LOG_LEVEL', 'WARNING'),
|
|
'class': 'logging.StreamHandler',
|
|
},
|
|
"mail_admins": {
|
|
"level": "ERROR",
|
|
"filters": ["require_debug_false"],
|
|
"class": "django.utils.log.AdminEmailHandler"
|
|
}
|
|
},
|
|
"loggers": {
|
|
'django': {
|
|
'handlers': ['console'],
|
|
'propagate': True,
|
|
},
|
|
"django.request": {
|
|
"handlers": ["mail_admins"],
|
|
"level": "ERROR",
|
|
"propagate": True,
|
|
},
|
|
}
|
|
}
|
|
|
|
COMPRESS_PRECOMPILERS = (
|
|
('text/x-scss', 'django_libsass.SassCompiler'),
|
|
)
|
|
|
|
FIXTURE_DIRS = [
|
|
os.path.join(PROJECT_ROOT, "fixtures"),
|
|
]
|
|
|
|
# Heroku: Get email configuration from environment variables.
|
|
|
|
EMAIL_BACKEND = os.environ.get(
|
|
"DJANGO_EMAIL_BACKEND",
|
|
"django.core.mail.backends.{}.EmailBackend".format('console' if DEBUG else 'smtp'),
|
|
)
|
|
EMAIL_LOG_BACKEND = "email_log.backends.EmailBackend"
|
|
EMAIL_HOST = os.environ.get("DJANGO_EMAIL_HOST", "")
|
|
EMAIL_PORT = int(os.environ.get("DJANGO_EMAIL_PORT", 25))
|
|
EMAIL_HOST_USER = os.environ.get("DJANGO_EMAIL_HOST_USER", "")
|
|
EMAIL_HOST_PASSWORD = os.environ.get("DJANGO_EMAIL_HOST_PASSWORD", "")
|
|
EMAIL_USE_TLS = bool(int(os.environ.get("DJANGO_EMAIL_USE_TLS", "0")))
|
|
EMAIL_USE_SSL = bool(int(os.environ.get("DJANGO_EMAIL_USE_SSL", "0")))
|
|
|
|
ACCOUNT_LOGIN_URL = "nbpy_login"
|
|
LOGIN_URL = "nbpy_login"
|
|
|
|
# We need to explicitly switch on signups.
|
|
ACCOUNT_OPEN_SIGNUP = bool(int(os.environ.get("DJANGO_ACCOUNT_OPEN_SIGNUP", "0")))
|
|
ACCOUNT_EMAIL_UNIQUE = True
|
|
ACCOUNT_EMAIL_CONFIRMATION_REQUIRED = bool(int(os.environ.get(
|
|
'DJANGO_ACCOUNT_CONFIRM_EMAIL',
|
|
False if DEBUG else True,
|
|
)))
|
|
ACCOUNT_LOGIN_REDIRECT_URL = "dashboard"
|
|
ACCOUNT_LOGOUT_REDIRECT_URL = "home"
|
|
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2
|
|
ACCOUNT_USE_AUTH_AUTHENTICATE = True
|
|
ACCOUNT_HOOKSET = "pinaxcon.account_hooks.BetterAccountHookSet"
|
|
|
|
AUTHENTICATION_BACKENDS = [
|
|
"symposion.teams.backends.TeamPermissionsBackend",
|
|
"account.auth_backends.UsernameAuthenticationBackend",
|
|
]
|
|
|
|
CONFERENCE_ID = 1
|
|
PROPOSAL_FORMS = {
|
|
"talk": "pinaxcon.proposals.forms.TalkProposalForm",
|
|
}
|
|
PINAX_PAGES_HOOKSET = "pinaxcon.hooks.PinaxPagesHookSet"
|
|
PINAX_BOXES_HOOKSET = "pinaxcon.hooks.PinaxBoxesHookSet"
|
|
|
|
PINAX_STRIPE_PUBLIC_KEY = os.environ.get("STRIPE_PUBLIC_KEY", "your test public key")
|
|
PINAX_STRIPE_SECRET_KEY = os.environ.get("STRIPE_SECRET_KEY", "your test secret key")
|
|
TUOKCEHC_BASE_URL = os.environ.get("TUOKCEHC_BASE_URL", None)
|
|
PINAX_STRIPE_SEND_EMAIL_RECEIPTS = False
|
|
|
|
SYMPOSION_SPEAKER_MODEL = "pinaxcon.proposals.models.ConferenceSpeaker"
|
|
SYMPOSION_SPEAKER_FORM = "pinaxcon.proposals.forms.ConferenceSpeakerForm"
|
|
|
|
# Registrasion Attendee profile model
|
|
ATTENDEE_PROFILE_MODEL = "pinaxcon.registrasion.models.AttendeeProfile"
|
|
# Registrasion attendee profile form -- must act on ATTENDEE_PROFILE_FORM
|
|
# You only need to provide this if you're customising the form from the default
|
|
# ATTENDEE_PROFILE_FORM = "pinaxcon.registrasion.forms.ProfileForm"
|
|
|
|
# Ticket product category -- used to identify which products must be available
|
|
# in order to register.
|
|
TICKET_PRODUCT_CATEGORY = 1
|
|
|
|
INVOICE_CURRENCY = "USD"
|
|
|
|
MARKDOWN_DEUX_STYLES = {
|
|
"default": {
|
|
"safe_mode": False,
|
|
"extras": {
|
|
"tables": 1,
|
|
}
|
|
},
|
|
}
|