Changeset - 04f246d85071
[Not reviewed]
! ! !
Patrick Altman - 9 years ago 2015-10-16 17:53:02
paltman@gmail.com
Initial commit of the PinaxCon demo site
105 files changed:
Changeset was too big and was cut off... Show full diff anyway
0 comments (0 inline, 0 general)
.gitignore
Show inline comments
 
new file 100644
 
*.pyc
 
node_modules/
README.md
Show inline comments
 
new file 100644
 
# PinaxCon
 

	
 
A working demo of Symposion and the Symposion Starter Project.  Online at:
 

	
 
http://conference.pinaxproject.com/
 

	
 

	
 

	
 
## Getting Started
 

	
 
Make sure you are using a virtual environment of some sort (e.g. `virtualenv` or
 
`pyenv`).
 

	
 
```
 
createdb pinaxcon
 
pip install -r requirements.txt
 
./manage.py migrate
 
./manage.py loaddata sites conference proposal_base sitetree sponsor_benefits sponsor_levels
 
./manage.py runserver
 
```
 

	
 

	
 
pinax-boxes
 
pinax-pages
fixtures/conference.json
Show inline comments
 
new file 100644
 
[
 
    {
 
        "pk": 1,
 
        "model": "symposion_conference.conference",
 
        "fields": {
 
            "timezone": "US/Eastern",
 
            "start_date": "2040-01-01",
 
            "end_date": "2040-01-04",
 
            "title": "PinaxCon"
 
        }
 
    },
 
    {
 
        "pk": 1,
 
        "model": "symposion_conference.section",
 
        "fields": {
 
            "conference": 1,
 
            "start_date": "2040-01-01",
 
            "name": "General Sessions",
 
            "end_date": "2040-01-01",
 
            "slug": "general-sessions"
 
        }
 
    }
 
]
fixtures/proposal_base.json
Show inline comments
 
new file 100644
 
[
 
    {
 
        "pk": 1,
 
        "model": "symposion_proposals.proposalsection",
 
        "fields": {
 
            "start": null,
 
            "section": 1,
 
            "end": null,
 
            "closed": null,
 
            "published": null
 
        }
 
    },
 
    {
 
        "pk": 1,
 
        "model": "symposion_proposals.proposalkind",
 
        "fields": {
 
            "section": 1,
 
            "name": "talk",
 
            "slug": "talk"
 
        }
 
    }
 
]
fixtures/sites.json
Show inline comments
 
new file 100644
 
[
 
    {
 
        "pk": 1,
 
        "model": "sites.site",
 
        "fields": {
 
            "domain": "localhost:8000",
 
            "name": "PinaxCon"
 
        }
 
    },
 
    {
 
        "pk": 2,
 
        "model": "sites.site",
 
        "fields": {
 
            "domain": "conference.pinaxproject.com",
 
            "name": "PinaxCon"
 
        }
 
    }
 
]
fixtures/sitetree.json
Show inline comments
 
new file 100644
 
[
 
    {
 
        "pk": 1,
 
        "model": "sitetree.tree",
 
        "fields": {
 
            "alias": "main",
 
            "title": "main"
 
        }
 
    },
 
    {
 
        "pk": 1,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": null,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "pages_page \"about/\"",
 
            "inbreadcrumbs": true,
 
            "title": "About",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 2,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    },
 
    {
 
        "pk": 2,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": null,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "pages_page \"venue/\"",
 
            "inbreadcrumbs": true,
 
            "title": "Venue",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 3,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    },
 
    {
 
        "pk": 3,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": null,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "#",
 
            "inbreadcrumbs": true,
 
            "title": "Sponsors",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 4,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": false
 
        }
 
    },
 
    {
 
        "pk": 4,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": null,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "home",
 
            "inbreadcrumbs": true,
 
            "title": "Home",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 1,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    },
 
    {
 
        "pk": 5,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": 3,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "sponsor_apply",
 
            "inbreadcrumbs": true,
 
            "title": "Apply to be a Sponsor",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 6,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    },
 
    {
 
        "pk": 6,
 
        "model": "sitetree.treeitem",
 
        "fields": {
 
            "parent": 3,
 
            "access_restricted": false,
 
            "access_permissions": [],
 
            "description": "",
 
            "insitetree": true,
 
            "hint": "",
 
            "url": "sponsor_list",
 
            "inbreadcrumbs": true,
 
            "title": "{{ SITE_NAME }} Sponsors",
 
            "tree": 1,
 
            "access_perm_type": 1,
 
            "alias": null,
 
            "sort_order": 5,
 
            "inmenu": true,
 
            "access_loggedin": false,
 
            "hidden": false,
 
            "urlaspattern": true
 
        }
 
    }
 
]
fixtures/sponsor_benefits.json
Show inline comments
 
new file 100644
 
[
 
    {
 
        "pk": 2,
 
        "model": "symposion_sponsorship.benefit",
 
        "fields": {
 
            "type": "weblogo",
 
            "name": "Web Logo",
 
            "description": "Logo to appear on the website"
 
        }
 
    },
 
    {
 
        "pk": 3,
 
        "model": "symposion_sponsorship.benefit",
 
        "fields": {
 
            "type": "file",
 
            "name": "Print Logo",
 
            "description": "Logo to appear in print"
 
        }
 
    },
 
    {
 
        "pk": 4,
 
        "model": "symposion_sponsorship.benefit",
 
        "fields": {
 
            "type": "text",
 
            "name": "Sponsor Description",
 
            "description": "Description to appear on website and in print"
 
        }
 
    },
 
    {
 
        "pk": 9,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 4,
 
            "max_words": null,
 
            "level": 1
 
        }
 
    },
 
    {
 
        "pk": 5,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 3,
 
            "max_words": null,
 
            "level": 1
 
        }
 
    },
 
    {
 
        "pk": 1,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 2,
 
            "max_words": null,
 
            "level": 1
 
        }
 
    },
 
    {
 
        "pk": 10,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 4,
 
            "max_words": null,
 
            "level": 2
 
        }
 
    },
 
    {
 
        "pk": 6,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 3,
 
            "max_words": null,
 
            "level": 2
 
        }
 
    },
 
    {
 
        "pk": 2,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 2,
 
            "max_words": null,
 
            "level": 2
 
        }
 
    },
 
    {
 
        "pk": 11,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 4,
 
            "max_words": null,
 
            "level": 3
 
        }
 
    },
 
    {
 
        "pk": 7,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 3,
 
            "max_words": null,
 
            "level": 3
 
        }
 
    },
 
    {
 
        "pk": 3,
 
        "model": "symposion_sponsorship.benefitlevel",
 
        "fields": {
 
            "other_limits": "",
 
            "benefit": 2,
 
            "max_words": null,
 
            "level": 3
 
        }
 
    }
 
]
fixtures/sponsor_levels.json
Show inline comments
 
new file 100644
 
[
 
    {
 
        "pk": 1,
 
        "model": "symposion_sponsorship.sponsorlevel",
 
        "fields": {
 
            "conference": 1,
 
            "description": "",
 
            "cost": 10000,
 
            "name": "Gold",
 
            "order": 0
 
        }
 
    },
 
    {
 
        "pk": 2,
 
        "model": "symposion_sponsorship.sponsorlevel",
 
        "fields": {
 
            "conference": 1,
 
            "description": "",
 
            "cost": 5000,
 
            "name": "Silver",
 
            "order": 1
 
        }
 
    },
 
    {
 
        "pk": 3,
 
        "model": "symposion_sponsorship.sponsorlevel",
 
        "fields": {
 
            "conference": 1,
 
            "description": "",
 
            "cost": 2000,
 
            "name": "Bronze",
 
            "order": 2
 
        }
 
    }
 
]
gondor.yml
Show inline comments
 
new file 100644
 
site: eldarion-conferences/pinaxcon
 
exec:
 
  web: gunicorn --bind=0.0.0.0 --log-file - --workers=4 pinaxcon.wsgi
 
branches:
 
  master: primary
manage.py
Show inline comments
 
new file 100755
 
#!/usr/bin/env python
 

	
 
import os
 
import sys
 

	
 

	
 
if __name__ == "__main__":
 
    os.environ.setdefault("DJANGO_SETTINGS_MODULE", "pinaxcon.settings")
 

	
 
    from django.core.management import execute_from_command_line
 

	
 
    execute_from_command_line(sys.argv)
package.json
Show inline comments
 
new file 100644
 
{
 
  "repository": {
 
    "type": "git",
 
    "url": "https://github.com/pinax/pinax-project"
 
  },
 
  "scripts": {
 
     "build": "./node_modules/.bin/webpack --config=static/webpack.config.js -p",
 
     "watch": "./node_modules/.bin/webpack --config=static/webpack.config.js -w"
 
  },
 
  "dependencies": {
 
    "babel-core": "^5.8.23",
 
    "babel-loader": "^5.3.2",
 
    "bootstrap": "^3.3.5",
 
    "css-loader": "^0.17.0",
 
    "extract-text-webpack-plugin": "^0.8.2",
 
    "file-loader": "^0.8.4",
 
    "font-awesome": "^4.4.0",
 
    "html-webpack-plugin": "^1.6.1",
 
    "jquery": "^2.1.4",
 
    "less": "^2.5.1",
 
    "less-loader": "^2.2.0",
 
    "style-loader": "^0.12.3",
 
    "webpack": "^1.12.1"
 
  }
 
}
pinaxcon/__init__.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 

	
 
__about__ = """
 
In addition to what is provided by the "zero" project, this project
 
provides thorough integration with django-user-accounts, adding
 
comprehensive account management functionality. It is a foundation
 
suitable for most sites that have user accounts.
 
"""
 

	
 
default_app_config = "pinaxcon.apps.AppConfig"
pinaxcon/apps.py
Show inline comments
 
new file 100644
 
from importlib import import_module
 

	
 
from django.apps import AppConfig as BaseAppConfig
 

	
 

	
 
class AppConfig(BaseAppConfig):
 

	
 
    name = "pinaxcon"
 

	
 
    def ready(self):
 
        import_module("pinaxcon.receivers")
pinaxcon/hooks.py
Show inline comments
 
new file 100644
 
import markdown
 

	
 
import pinax.boxes.hooks
 
import pinax.pages.hooks
 

	
 

	
 
def markup_renderer(content):
 
    return markdown.markdown(content)
 

	
 

	
 
class PinaxBoxesHookSet(pinax.boxes.hooks.DefaultHookSet):
 

	
 
    def parse_content(self, content):
 
        return markup_renderer(content)
 

	
 

	
 
class PinaxPagesHookSet(pinax.pages.hooks.DefaultHookSet):
 

	
 
    def parse_content(self, content):
 
        return markup_renderer(content)
pinaxcon/proposals/__init__.py
Show inline comments
 
new file 100644
pinaxcon/proposals/admin.py
Show inline comments
 
new file 100644
 
from django.contrib import admin
 

	
 
from .models import TalkProposal
 

	
 

	
 
admin.site.register(TalkProposal)
pinaxcon/proposals/forms.py
Show inline comments
 
new file 100644
 
from django import forms
 

	
 
from .models import TalkProposal
 

	
 

	
 
class ProposalForm(forms.ModelForm):
 

	
 
    def clean_description(self):
 
        value = self.cleaned_data["description"]
 
        if len(value) > 400:
 
            raise forms.ValidationError(
 
                u"The description must be less than 400 characters"
 
            )
 
        return value
 

	
 

	
 
class TalkProposalForm(ProposalForm):
 

	
 
    class Meta:
 
        model = TalkProposal
 
        fields = [
 
            "title",
 
            "audience_level",
 
            "description",
 
            "abstract",
 
            "additional_notes",
 
            "recording_release",
 
        ]
pinaxcon/proposals/migrations/0001_initial.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 
from __future__ import unicode_literals
 

	
 
from django.db import models, migrations
 

	
 

	
 
class Migration(migrations.Migration):
 

	
 
    dependencies = [
 
        ('symposion_proposals', '__first__'),
 
    ]
 

	
 
    operations = [
 
        migrations.CreateModel(
 
            name='TalkProposal',
 
            fields=[
 
                ('proposalbase_ptr', models.OneToOneField(primary_key=True, to='symposion_proposals.ProposalBase', parent_link=True, auto_created=True, serialize=False)),
 
                ('audience_level', models.IntegerField(choices=[(1, b'Novice'), (3, b'Intermediate'), (2, b'Experienced')])),
 
                ('recording_release', models.BooleanField(help_text=b'By submitting your proposal, you agree to give permission to the conference organizers to record, edit, and release audio and/or video of your presentation. If you do not agree to this, please uncheck this box.', default=True)),
 
            ],
 
            options={
 
                'verbose_name': 'talk proposal',
 
            },
 
            bases=('symposion_proposals.proposalbase',),
 
        ),
 
    ]
pinaxcon/proposals/migrations/__init__.py
Show inline comments
 
new file 100644
pinaxcon/proposals/models.py
Show inline comments
 
new file 100644
 
from django.db import models
 

	
 
from symposion.proposals.models import ProposalBase
 

	
 

	
 
class Proposal(ProposalBase):
 

	
 
    AUDIENCE_LEVEL_NOVICE = 1
 
    AUDIENCE_LEVEL_EXPERIENCED = 2
 
    AUDIENCE_LEVEL_INTERMEDIATE = 3
 

	
 
    AUDIENCE_LEVELS = [
 
        (AUDIENCE_LEVEL_NOVICE, "Novice"),
 
        (AUDIENCE_LEVEL_INTERMEDIATE, "Intermediate"),
 
        (AUDIENCE_LEVEL_EXPERIENCED, "Experienced"),
 
    ]
 

	
 
    audience_level = models.IntegerField(choices=AUDIENCE_LEVELS)
 

	
 
    recording_release = models.BooleanField(
 
        default=True,
 
        help_text="By submitting your proposal, you agree to give permission to the conference organizers to record, edit, and release audio and/or video of your presentation. If you do not agree to this, please uncheck this box."
 
    )
 

	
 
    class Meta:
 
        abstract = True
 

	
 

	
 
class TalkProposal(Proposal):
 

	
 
    class Meta:
 
        verbose_name = "talk proposal"
pinaxcon/receivers.py
Show inline comments
 
new file 100644
 
from django.dispatch import receiver
 

	
 
from account.signals import password_changed
 
from account.signals import user_sign_up_attempt, user_signed_up
 
from account.signals import user_login_attempt, user_logged_in
 

	
 
from pinax.eventlog.models import log
 

	
 

	
 
@receiver(user_logged_in)
 
def handle_user_logged_in(sender, **kwargs):
 
    log(
 
        user=kwargs.get("user"),
 
        action="USER_LOGGED_IN",
 
        extra={}
 
    )
 

	
 

	
 
@receiver(password_changed)
 
def handle_password_changed(sender, **kwargs):
 
    log(
 
        user=kwargs.get("user"),
 
        action="PASSWORD_CHANGED",
 
        extra={}
 
    )
 

	
 

	
 
@receiver(user_login_attempt)
 
def handle_user_login_attempt(sender, **kwargs):
 
    log(
 
        user=None,
 
        action="LOGIN_ATTEMPTED",
 
        extra={
 
            "username": kwargs.get("username"),
 
            "result": kwargs.get("result")
 
        }
 
    )
 

	
 

	
 
@receiver(user_sign_up_attempt)
 
def handle_user_sign_up_attempt(sender, **kwargs):
 
    log(
 
        user=None,
 
        action="SIGNUP_ATTEMPTED",
 
        extra={
 
            "username": kwargs.get("username"),
 
            "email": kwargs.get("email"),
 
            "result": kwargs.get("result")
 
        }
 
    )
 

	
 

	
 
@receiver(user_signed_up)
 
def handle_user_signed_up(sender, **kwargs):
 
    log(
 
        user=kwargs.get("user"),
 
        action="USER_SIGNED_UP",
 
        extra={}
 
    )
pinaxcon/settings.py
Show inline comments
 
new file 100644
 
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("DEBUG", "1")))
 

	
 
DATABASES = {
 
    "default": dj_database_url.config(default="postgres://localhost/pinaxcon")
 
}
 

	
 
ALLOWED_HOSTS = [
 
    os.environ.get("GONDOR_INSTANCE_DOMAIN"),
 
    "conference.pinaxproject.com"
 
]
 

	
 
# 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 = "UTC"
 

	
 
# 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
 

	
 
# Absolute filesystem path to the directory that will hold user-uploaded files.
 
# Example: "/home/media/media.lawrence.com/media/"
 
MEDIA_ROOT = os.path.join(PACKAGE_ROOT, "site_media", "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 = "/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(PACKAGE_ROOT, "site_media", "static")
 

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

	
 
# Additional locations of static files
 
STATICFILES_DIRS = [
 
    os.path.join(PROJECT_ROOT, "static", "dist"),
 
]
 

	
 
# 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",
 
]
 

	
 
# Make this unique, and don't share it with anybody.
 
SECRET_KEY = "6r&z0i#!k-thu4nv^zzx!f$fbp(&#2i5mq_^%%@ihu_qxxotl_"
 

	
 
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.core.context_processors.debug",
 
                "django.core.context_processors.i18n",
 
                "django.core.context_processors.media",
 
                "django.core.context_processors.static",
 
                "django.core.context_processors.tz",
 
                "django.core.context_processors.request",
 
                "django.contrib.messages.context_processors.messages",
 
                "account.context_processors.account",
 
                "pinax_theme_bootstrap.context_processors.theme",
 
                "symposion.reviews.context_processors.reviews",
 
            ],
 
        },
 
    },
 
]
 

	
 
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",
 
]
 

	
 
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",
 
    "metron",
 
    "sitetree",
 
    "pinax.boxes",
 
    "pinax.eventlog",
 
    "pinax.pages",
 

	
 
    # symposion
 
    "symposion",
 
    "symposion.conference",
 
    "symposion.proposals",
 
    "symposion.reviews",
 
    "symposion.schedule",
 
    "symposion.speakers",
 
    "symposion.sponsorship",
 
    "symposion.teams",
 

	
 
    # project
 
    "pinaxcon",
 
    "pinaxcon.proposals"
 
]
 

	
 
# 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,
 
        },
 
    }
 
}
 

	
 
FIXTURE_DIRS = [
 
    os.path.join(PROJECT_ROOT, "fixtures"),
 
]
 

	
 
EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend"
 

	
 
ACCOUNT_OPEN_SIGNUP = True
 
ACCOUNT_EMAIL_UNIQUE = True
 
ACCOUNT_EMAIL_CONFIRMATION_REQUIRED = False
 
ACCOUNT_LOGIN_REDIRECT_URL = "home"
 
ACCOUNT_LOGOUT_REDIRECT_URL = "home"
 
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS = 2
 
ACCOUNT_USE_AUTH_AUTHENTICATE = True
 

	
 
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"
pinaxcon/templates/_account_bar.html
Show inline comments
 
new file 100644
 
{% load i18n %}
 
{% load account_tags %}
 

	
 

	
 
<ul class="nav navbar-nav pull-right">
 
    {% if request.user.is_authenticated %}