Changeset - 6d0e5bc50884
[Not reviewed]
Merge
4 16 20
Patrick Altman - 10 years ago 2014-12-15 22:08:12
paltman@gmail.com
Merge branch 'pyohio-master'
39 files changed with 1533 insertions and 248 deletions:
setup.py
13
2
0 comments (0 inline, 0 general)
README.rst
Show inline comments
...
 
@@ -22,12 +22,17 @@ A conference management solution from Eldarion.
 

	
 
Built with the generous support of the Python Software Foundation.
 

	
 
See http://eldarion.com/symposion/ for commercial support, customization and hosting
 

	
 
Quickstart
 
==========
 

	
 
If you're interested in running symposion locally, we have built a [basic
 
To install Symposion, run:
 

	
 
    pip install symposion
 

	
 
Symposion is a Django app. You will need to create a Django project to
 
customize and manage your Symposion installation. We have built a [basic
 
Django startproject template that includes Symposion][1].
 

	
 
[1]: https://github.com/pinax/pinax-project-symposion
requirements/base.txt
Show inline comments
 
new file 100644
 
Django>=1.5,<=1.6
 
django-appconf==0.5
 
django-forms-bootstrap>=2.0.3.post2
 
django-markitup==2.1
 
django-model-utils==2.0.2
 
django-reversion==1.8
 
django-sitetree==1.0.0
 
django-taggit==0.11.2
 
django-timezones==0.2
 
django-user-accounts==1.0b13
 
easy-thumbnails==1.4
 
html5lib==0.95
 
markdown==2.3.1
requirements/docs.txt
Show inline comments
 
file renamed from requirements-docs.txt to requirements/docs.txt
setup.py
Show inline comments
 
#!/usr/bin/env python
 

	
 
import os
 
from setuptools import setup, find_packages
 

	
 
import symposion
 

	
 

	
 
def read_file(filename):
 
    """Read a file into a string."""
 
    path = os.path.abspath(os.path.dirname(__file__))
 
    filepath = os.path.join(path, filename)
 
    try:
 
        return open(filepath).read()
 
    except IOError:
 
        return ''
 

	
 

	
 
setup(
 
    name="symposion",
 
    author="James Tauber",
 
    author_email="jtauber@jtauber.com",
 
    version=symposion.__version__,
 
    description="A collection of Django apps for conference websites.",
 
    url="http://eldarion.com/symposion/",
 
    packages=find_packages(exclude=["symposion_project"]),
 
    packages=find_packages(),
 
    include_package_data=True,
 
    classifiers=(
 
        "Development Status :: 4 - Beta",
 
        "Programming Language :: Python",
 
        "Framework :: Django",
 
        "Intended Audience :: Developers",
 
        "Natural Language :: English",
 
        "License :: OSI Approved :: MIT License",
 
    ),
 
    install_requires=read_file("requirements/base.txt").splitlines(),
 
)
symposion/boxes/migrations/0001_initial.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 
from south.utils import datetime_utils as datetime
 
from south.db import db
 
from south.v2 import SchemaMigration
 
from django.db import models
 

	
 

	
 
class Migration(SchemaMigration):
 

	
 
    def forwards(self, orm):
 
        # Adding model 'Box'
 
        db.create_table('boxes_box', (
 
            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
 
            ('label', self.gf('django.db.models.fields.CharField')(max_length=100, db_index=True)),
 
            ('content', self.gf('markitup.fields.MarkupField')(no_rendered_field=True, blank=True)),
 
            ('created_by', self.gf('django.db.models.fields.related.ForeignKey')(related_name='boxes', to=orm['auth.User'])),
 
            ('last_updated_by', self.gf('django.db.models.fields.related.ForeignKey')(related_name='updated_boxes', to=orm['auth.User'])),
 
            ('_content_rendered', self.gf('django.db.models.fields.TextField')(blank=True)),
 
        ))
 
        db.send_create_signal('boxes', ['Box'])
 

	
 

	
 
    def backwards(self, orm):
 
        # Deleting model 'Box'
 
        db.delete_table('boxes_box')
 

	
 

	
 
    models = {
 
        'auth.group': {
 
            'Meta': {'object_name': 'Group'},
 
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
 
            'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
 
            'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
 
        },
 
        'auth.permission': {
 
            'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
 
            'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
 
            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
 
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
 
            'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
 
        },
 
        'auth.user': {
 
            'Meta': {'object_name': 'User'},
 
            'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
 
            'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
 
            'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
 
            'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
 
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
 
            'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
 
            'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
 
            'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
 
            'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
 
            'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
 
            'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
 
            'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
 
            'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
 
        },
 
        'boxes.box': {
 
            'Meta': {'object_name': 'Box'},
 
            '_content_rendered': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
 
            'content': ('markitup.fields.MarkupField', [], {'no_rendered_field': 'True', 'blank': 'True'}),
 
            'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'boxes'", 'to': "orm['auth.User']"}),
 
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
 
            'label': ('django.db.models.fields.CharField', [], {'max_length': '100', 'db_index': 'True'}),
 
            'last_updated_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'updated_boxes'", 'to': "orm['auth.User']"})
 
        },
 
        'contenttypes.contenttype': {
 
            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
 
            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
 
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
 
            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
 
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
 
        }
 
    }
 

	
 
    complete_apps = ['boxes']
...
 
\ No newline at end of file
symposion/boxes/migrations/__init__.py
Show inline comments
 
new file 100644
symposion/boxes/models.py
Show inline comments
 
from django.db import models
 

	
 
from django.contrib.auth.models import User
 

	
 
import reversion
 

	
 
from markitup.fields import MarkupField
 

	
 

	
 
class Box(models.Model):
symposion/boxes/urls.py
Show inline comments
 
from django.conf.urls import url, patterns
 
from django.conf.urls import patterns, url
 

	
 

	
 
urlpatterns = patterns(
 
    "symposion.boxes.views",
 
    url(r"^([-\w]+)/edit/$", "box_edit", name="box_edit"),
 
)
symposion/cms/migrations/0001_initial.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 
from south.utils import datetime_utils as datetime
 
from south.db import db
 
from south.v2 import SchemaMigration
 
from django.db import models
 

	
 

	
 
class Migration(SchemaMigration):
 

	
 
    def forwards(self, orm):
 
        # Adding model 'Page'
 
        db.create_table('cms_page', (
 
            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
 
            ('title', self.gf('django.db.models.fields.CharField')(max_length=100)),
 
            ('path', self.gf('django.db.models.fields.CharField')(unique=True, max_length=100)),
 
            ('body', self.gf('markitup.fields.MarkupField')(no_rendered_field=True)),
 
            ('status', self.gf('django.db.models.fields.IntegerField')(default=2)),
 
            ('publish_date', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
 
            ('created', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
 
            ('updated', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
 
            ('_body_rendered', self.gf('django.db.models.fields.TextField')(blank=True)),
 
        ))
 
        db.send_create_signal('cms', ['Page'])
 

	
 
        # Adding model 'File'
 
        db.create_table('cms_file', (
 
            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
 
            ('file', self.gf('django.db.models.fields.files.FileField')(max_length=100)),
 
            ('created', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
 
        ))
 
        db.send_create_signal('cms', ['File'])
 

	
 

	
 
    def backwards(self, orm):
 
        # Deleting model 'Page'
 
        db.delete_table('cms_page')
 

	
 
        # Deleting model 'File'
 
        db.delete_table('cms_file')
 

	
 

	
 
    models = {
 
        'cms.file': {
 
            'Meta': {'object_name': 'File'},
 
            'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
 
            'file': ('django.db.models.fields.files.FileField', [], {'max_length': '100'}),
 
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'})
 
        },
 
        'cms.page': {
 
            'Meta': {'object_name': 'Page'},
 
            '_body_rendered': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
 
            'body': ('markitup.fields.MarkupField', [], {'no_rendered_field': 'True'}),
 
            'created': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
 
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
 
            'path': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '100'}),
 
            'publish_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
 
            'status': ('django.db.models.fields.IntegerField', [], {'default': '2'}),
 
            'title': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
 
            'updated': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'})
 
        },
 
        'contenttypes.contenttype': {
 
            'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
 
            'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
 
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
 
            'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
 
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
 
        },
 
        'taggit.tag': {
 
            'Meta': {'object_name': 'Tag'},
 
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
 
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
 
            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'})
 
        },
 
        'taggit.taggeditem': {
 
            'Meta': {'object_name': 'TaggedItem'},
 
            'content_type': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_tagged_items'", 'to': "orm['contenttypes.ContentType']"}),
 
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
 
            'object_id': ('django.db.models.fields.IntegerField', [], {'db_index': 'True'}),
 
            'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'taggit_taggeditem_items'", 'to': "orm['taggit.Tag']"})
 
        }
 
    }
 

	
 
    complete_apps = ['cms']
...
 
\ No newline at end of file
symposion/cms/migrations/__init__.py
Show inline comments
 
new file 100644
symposion/conference/migrations/0001_initial.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 
from south.utils import datetime_utils as datetime
 
from south.db import db
 
from south.v2 import SchemaMigration
 
from django.db import models
 

	
 

	
 
class Migration(SchemaMigration):
 

	
 
    def forwards(self, orm):
 
        # Adding model 'Conference'
 
        db.create_table('conference_conference', (
 
            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
 
            ('title', self.gf('django.db.models.fields.CharField')(max_length=100)),
 
            ('start_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)),
 
            ('end_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)),
 
            ('timezone', self.gf('timezones.fields.TimeZoneField')(default='US/Eastern', max_length=100, blank=True)),
 
        ))
 
        db.send_create_signal('conference', ['Conference'])
 

	
 
        # Adding model 'Section'
 
        db.create_table('conference_section', (
 
            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
 
            ('conference', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['conference.Conference'])),
 
            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
 
            ('slug', self.gf('django.db.models.fields.SlugField')(max_length=50)),
 
            ('start_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)),
 
            ('end_date', self.gf('django.db.models.fields.DateField')(null=True, blank=True)),
 
        ))
 
        db.send_create_signal('conference', ['Section'])
 

	
 

	
 
    def backwards(self, orm):
 
        # Deleting model 'Conference'
 
        db.delete_table('conference_conference')
 

	
 
        # Deleting model 'Section'
 
        db.delete_table('conference_section')
 

	
 

	
 
    models = {
 
        'conference.conference': {
 
            'Meta': {'object_name': 'Conference'},
 
            'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
 
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
 
            'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
 
            'timezone': ('timezones.fields.TimeZoneField', [], {'default': "'US/Eastern'", 'max_length': '100', 'blank': 'True'}),
 
            'title': ('django.db.models.fields.CharField', [], {'max_length': '100'})
 
        },
 
        'conference.section': {
 
            'Meta': {'ordering': "['start_date']", 'object_name': 'Section'},
 
            'conference': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['conference.Conference']"}),
 
            'end_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
 
            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
 
            'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
 
            'slug': ('django.db.models.fields.SlugField', [], {'max_length': '50'}),
 
            'start_date': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'})
 
        }
 
    }
 

	
 
    complete_apps = ['conference']
...
 
\ No newline at end of file
symposion/conference/migrations/__init__.py
Show inline comments
 
new file 100644
symposion/conference/models.py
Show inline comments
 
from django.db import models
 
from django.utils.translation import ugettext_lazy as _
 

	
 
from timezones.fields import TimeZoneField
 

	
 
from south.modelsinspector import add_introspection_rules
 
add_introspection_rules([], [r"^timezones\.fields\.TimeZoneField"])
 

	
 

	
 
CONFERENCE_CACHE = {}
 

	
 

	
 
class Conference(models.Model):
 
    """
 
    the full conference for a specific year, e.g. US PyCon 2012.
 
    """
symposion/proposals/actions.py
Show inline comments
...
 
@@ -17,19 +17,18 @@ def export_as_csv_action(description="Export selected objects as CSV file",
 
        """
 
        opts = modeladmin.model._meta
 
        if fields:
 
            fieldset = set(fields)
 
            field_names = fieldset
 
        elif exclude:
 
            excludeset = set(exclude)
 
            field_names = field_names - excludeset
 
        response = HttpResponse(mimetype="text/csv")
 
        response["Content-Disposition"] = \
 
            "attachment; filename=%s.csv" % unicode(opts).replace(".", "_")
 
        response = HttpResponse(content_type="text/csv")
 
        response["Content-Disposition"] = "attachment; filename=%s.csv" % unicode(opts).replace(".", "_")
 
        writer = csv.writer(response)
 
        if header:
 
            writer.writerow(list(field_names))
 
        for obj in queryset:
 
            writer.writerow(
 
                [unicode(getattr(obj, field)).encode("utf-8", "replace") for field in field_names])
 
        return response
 
    export_as_csv.short_description = description
symposion/proposals/migrations/0001_initial.py
Show inline comments
 
new file 100644
 
# -*- coding: utf-8 -*-
 
import datetime
 
from south.db import db
 
from south.v2 import SchemaMigration
 
from django.db import models
 

	
 

	
 
class Migration(SchemaMigration):
 

	
 
    depends_on = (
 
        ("speakers", "0001_initial"),
 
    )
 

	
 
    def forwards(self, orm):
 
        # Adding model 'ProposalSection'
 
        db.create_table('proposals_proposalsection', (
 
            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
 
            ('section', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['conference.Section'], unique=True)),
 
            ('start', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
 
            ('end', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)),
 
            ('closed', self.gf('django.db.models.fields.NullBooleanField')(null=True, blank=True)),
 
            ('published', self.gf('django.db.models.fields.NullBooleanField')(null=True, blank=True)),
 
        ))
 
        db.send_create_signal('proposals', ['ProposalSection'])
 

	
 
        # Adding model 'ProposalKind'
 
        db.create_table('proposals_proposalkind', (
 
            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
 
            ('section', self.gf('django.db.models.fields.related.ForeignKey')(related_name='proposal_kinds', to=orm['conference.Section'])),
 
            ('name', self.gf('django.db.models.fields.CharField')(max_length=100)),
 
            ('slug', self.gf('django.db.models.fields.SlugField')(max_length=50)),
 
        ))
 
        db.send_create_signal('proposals', ['ProposalKind'])
 

	
 
        # Adding model 'ProposalBase'
 
        db.create_table('proposals_proposalbase', (
 
            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
 
            ('kind', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['proposals.ProposalKind'])),
 
            ('title', self.gf('django.db.models.fields.CharField')(max_length=100)),
 
            ('description', self.gf('django.db.models.fields.TextField')(max_length=400)),
 
            ('abstract', self.gf('markitup.fields.MarkupField')(no_rendered_field=True)),
 
            ('additional_notes', self.gf('markitup.fields.MarkupField')(no_rendered_field=True, blank=True)),
 
            ('submitted', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
 
            ('speaker', self.gf('django.db.models.fields.related.ForeignKey')(related_name='proposals', to=orm['speakers.Speaker'])),
 
            ('cancelled', self.gf('django.db.models.fields.BooleanField')(default=False)),
 
            ('_abstract_rendered', self.gf('django.db.models.fields.TextField')(blank=True)),
 
            ('_additional_notes_rendered', self.gf('django.db.models.fields.TextField')(blank=True)),
 
        ))
 
        db.send_create_signal('proposals', ['ProposalBase'])
 

	
 
        # Adding model 'AdditionalSpeaker'
 
        db.create_table('proposals_proposalbase_additional_speakers', (
 
            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
 
            ('speaker', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['speakers.Speaker'])),
 
            ('proposalbase', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['proposals.ProposalBase'])),
 
            ('status', self.gf('django.db.models.fields.IntegerField')(default=1)),
 
        ))
 
        db.send_create_signal('proposals', ['AdditionalSpeaker'])
 

	
 
        # Adding unique constraint on 'AdditionalSpeaker', fields ['speaker', 'proposalbase']
 
        db.create_unique('proposals_proposalbase_additional_speakers', ['speaker_id', 'proposalbase_id'])
 

	
 
        # Adding model 'SupportingDocument'
 
        db.create_table('proposals_supportingdocument', (
 
            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
 
            ('proposal', self.gf('django.db.models.fields.related.ForeignKey')(related_name='supporting_documents', to=orm['proposals.ProposalBase'])),
 
            ('uploaded_by', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])),
 
            ('created_at', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.now)),
 
            ('file', self.gf('django.db.models.fields.files.FileField')(max_length=100)),
 
            ('description', self.gf('django.db.models.fields.CharField')(max_length=140)),
 
        ))
 
        db.send_create_signal('proposals', ['SupportingDocument'])
 

	
 

	
 
    def backwards(self, orm):
 
        # Removing unique constraint on 'AdditionalSpeaker', fields ['speaker', 'proposalbase']
 
        db.delete_unique('proposals_proposalbase_additional_speakers', ['speaker_id', 'proposalbase_id'])
 

	
 
        # Deleting model 'ProposalSection'
 
        db.delete_table('proposals_proposalsection')