Changeset - ffd428d49720
symposion/boxes/models.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.db import models
 
from django.contrib.auth.models import User
 
from django.utils.encoding import python_2_unicode_compatible
 

	
 
import reversion
 

	
 
from markitup.fields import MarkupField
 

	
 

	
 
@python_2_unicode_compatible
 
class Box(models.Model):
 

	
 
    label = models.CharField(max_length=100, db_index=True)
 
    content = MarkupField(blank=True)
 

	
 
    created_by = models.ForeignKey(User, related_name="boxes")
 
    last_updated_by = models.ForeignKey(User, related_name="updated_boxes")
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        return self.label
 

	
 
    class Meta:
 
        verbose_name_plural = "boxes"
symposion/cms/models.py
Show inline comments
...
 
@@ -5,8 +5,9 @@ import re
 
from django.conf import settings
 
from django.core.urlresolvers import reverse
 
from django.core.exceptions import ValidationError
 
from django.db import models
 
from django.utils.encoding import python_2_unicode_compatible
 
from django.utils.translation import ugettext_lazy as _
 

	
 
from markitup.fields import MarkupField
 

	
...
 
@@ -16,8 +17,9 @@ import reversion
 

	
 
from .managers import PublishedPageManager
 

	
 

	
 
@python_2_unicode_compatible
 
class Page(models.Model):
 

	
 
    STATUS_CHOICES = (
 
        (1, _("Draft")),
...
 
@@ -34,9 +36,9 @@ class Page(models.Model):
 
    tags = TaggableManager(blank=True)
 

	
 
    published = PublishedPageManager()
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        return self.title
 

	
 
    @models.permalink
 
    def get_absolute_url(self):
symposion/conference/apps.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.apps import AppConfig
 

	
 

	
 
class ConferenceConfig(AppConfig):
symposion/conference/models.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.db import models
 
from django.utils.translation import ugettext_lazy as _
 
from django.utils.encoding import python_2_unicode_compatible
 

	
 
from timezones.fields import TimeZoneField
 

	
 

	
 
CONFERENCE_CACHE = {}
 

	
 

	
 
@python_2_unicode_compatible
 
class Conference(models.Model):
 
    """
 
    the full conference for a specific year, e.g. US PyCon 2012.
 
    """
...
 
@@ -20,9 +23,9 @@ class Conference(models.Model):
 

	
 
    # timezone the conference is in
 
    timezone = TimeZoneField(_("timezone"), blank=True)
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        return self.title
 

	
 
    def save(self, *args, **kwargs):
 
        super(Conference, self).save(*args, **kwargs)
...
 
@@ -41,8 +44,9 @@ class Conference(models.Model):
 
        verbose_name = _("conference")
 
        verbose_name_plural = _("conferences")
 

	
 

	
 
@python_2_unicode_compatible
 
class Section(models.Model):
 
    """
 
    a section of the conference such as "Tutorials", "Workshops",
 
    "Talks", "Expo", "Sprints", that may have its own review and
...
 
@@ -57,10 +61,10 @@ class Section(models.Model):
 
    # when the section runs
 
    start_date = models.DateField(_("start date"), null=True, blank=True)
 
    end_date = models.DateField(_("end date"), null=True, blank=True)
 

	
 
    def __unicode__(self):
 
        return u"%s %s" % (self.conference, self.name)
 
    def __str__(self):
 
        return "%s %s" % (self.conference, self.name)
 

	
 
    class Meta(object):
 
        verbose_name = _("section")
 
        verbose_name_plural = _("sections")
symposion/markdown_parser.py
Show inline comments
 
from __future__ import unicode_literals
 
from html5lib import html5parser, sanitizer
 

	
 
import markdown
 

	
symposion/proposals/actions.py
Show inline comments
 
from __future__ import unicode_literals
 
import csv
 

	
 
from django.http import HttpResponse
 

	
symposion/proposals/apps.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.apps import AppConfig
 

	
 

	
 
class ProposalsConfig(AppConfig):
symposion/proposals/forms.py
Show inline comments
 
from __future__ import unicode_literals
 
from django import forms
 
from django.db.models import Q
 

	
 
from symposion.proposals.models import SupportingDocument
symposion/proposals/models.py
Show inline comments
 
from __future__ import unicode_literals
 
import os
 
import uuid
 

	
 
from django.core.urlresolvers import reverse
 
from django.db import models
 
from django.db.models import Q
 
from django.utils.encoding import python_2_unicode_compatible
 
from django.utils.translation import ugettext_lazy as _
 
from django.utils.timezone import now
 

	
 
from django.contrib.auth.models import User
...
 
@@ -20,8 +22,9 @@ from model_utils.managers import InheritanceManager
 
from symposion.conference.models import Section
 
from symposion.speakers.models import Speaker
 

	
 

	
 
@python_2_unicode_compatible
 
class ProposalSection(models.Model):
 
    """
 
    configuration of proposal submissions for a specific Section.
 

	
...
 
@@ -54,12 +57,13 @@ class ProposalSection(models.Model):
 
        if self.end and self.end < now():
 
            return False
 
        return True
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        return self.section.name
 

	
 

	
 
@python_2_unicode_compatible
 
class ProposalKind(models.Model):
 
    """
 
    e.g. talk vs panel vs tutorial vs poster
 

	
...
 
@@ -71,12 +75,13 @@ class ProposalKind(models.Model):
 

	
 
    name = models.CharField(_("Name"), max_length=100)
 
    slug = models.SlugField()
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        return self.name
 

	
 

	
 
@python_2_unicode_compatible
 
class ProposalBase(models.Model):
 

	
 
    objects = InheritanceManager()
 

	
...
 
@@ -154,11 +159,15 @@ class ProposalBase(models.Model):
 
            "speakers": ', '.join([x.name for x in self.speakers()]),
 
            "kind": self.kind.name,
 
        }
 

	
 
    def __str__(self):
 
        return self.title
 

	
 
reversion.register(ProposalBase)
 

	
 

	
 
@python_2_unicode_compatible
 
class AdditionalSpeaker(models.Model):
 

	
 
    SPEAKING_STATUS_PENDING = 1
 
    SPEAKING_STATUS_ACCEPTED = 2
...
 
@@ -176,9 +185,9 @@ class AdditionalSpeaker(models.Model):
 

	
 
    class Meta:
 
        unique_together = ("speaker", "proposalbase")
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        if self.status is self.SPEAKING_STATUS_PENDING:
 
            return _(u"pending speaker (%s)") % self.speaker.email
 
        elif self.status is self.SPEAKING_STATUS_DECLINED:
 
            return _(u"declined speaker (%s)") % self.speaker.email
symposion/proposals/views.py
Show inline comments
 
from __future__ import unicode_literals
 
import hashlib
 
import random
 
import sys
 

	
symposion/reviews/apps.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.apps import AppConfig
 

	
 

	
 
class ReviewsConfig(AppConfig):
symposion/reviews/forms.py
Show inline comments
 
from __future__ import unicode_literals
 
from django import forms
 

	
 
from markitup.widgets import MarkItUpWidget
 

	
symposion/reviews/models.py
Show inline comments
 
# -*- coding: utf-8 -*-
 
from __future__ import unicode_literals
 
from datetime import datetime
 
from decimal import Decimal
 

	
 
from django.db import models
...
 
@@ -26,10 +27,10 @@ class ProposalScoreExpression(object):
 

	
 
class Votes(object):
 
    PLUS_ONE = "+1"
 
    PLUS_ZERO = "+0"
 
    MINUS_ZERO = u"−0"
 
    MINUS_ONE = u"−1"
 
    MINUS_ZERO = "−0"
 
    MINUS_ONE = "−1"
 

	
 
    CHOICES = [
 
        (PLUS_ONE, u"+1 — Good proposal and I will argue for it to be accepted."),
 
        (PLUS_ZERO, u"+0 — OK proposal, but I will not argue for it to be accepted."),
symposion/reviews/utils.py
Show inline comments
 
from __future__ import unicode_literals
 

	
 

	
 
def has_permission(user, proposal, speaker=False, reviewer=False):
 
    """
 
    Returns whether or not ther user has permission to review this proposal,
 
    with the specified requirements.
symposion/schedule/admin.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.contrib import admin
 

	
 
from symposion.schedule.models import Schedule, Day, Room, SlotKind, Slot, SlotRoom, Presentation, Session, SessionRole
 

	
symposion/schedule/apps.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.apps import AppConfig
 

	
 

	
 
class ScheduleConfig(AppConfig):
symposion/schedule/forms.py
Show inline comments
 
from __future__ import unicode_literals
 
import csv
 
import time
 

	
 
from datetime import datetime
symposion/schedule/helpers.py
Show inline comments
 
"""
 
This file contains functions that are useful to humans at the shell for
 
manipulating the database in more natural ways.
 
"""
 
from __future__ import unicode_literals
 
from django.db import transaction
 

	
 
from .models import Schedule, Day, Room, Slot, SlotKind, SlotRoom
 

	
symposion/schedule/models.py
Show inline comments
 
from __future__ import unicode_literals
 
import datetime
 

	
 
from django.core.exceptions import ObjectDoesNotExist
 
from django.contrib.auth.models import User
 
from django.db import models
 
from django.utils.encoding import python_2_unicode_compatible
 

	
 
from markitup.fields import MarkupField
 

	
 
from symposion.proposals.models import ProposalBase
 
from symposion.conference.models import Section
 
from symposion.speakers.models import Speaker
 

	
 

	
 
@python_2_unicode_compatible
 
class Schedule(models.Model):
 

	
 
    section = models.OneToOneField(Section)
 
    published = models.BooleanField(default=True)
 
    hidden = models.BooleanField("Hide schedule from overall conference view", default=False)
 

	
 
    def __unicode__(self):
 
        return u"%s Schedule" % self.section
 
    def __str__(self):
 
        return "%s Schedule" % self.section
 

	
 
    class Meta:
 
        ordering = ["section"]
 

	
 

	
 
@python_2_unicode_compatible
 
class Day(models.Model):
 

	
 
    schedule = models.ForeignKey(Schedule)
 
    date = models.DateField()
 

	
 
    def __unicode__(self):
 
        return u"%s" % self.date
 
    def __str__(self):
 
        return "%s" % self.date
 

	
 
    class Meta:
 
        unique_together = [("schedule", "date")]
 
        ordering = ["date"]
 

	
 

	
 
@python_2_unicode_compatible
 
class Room(models.Model):
 

	
 
    schedule = models.ForeignKey(Schedule)
 
    name = models.CharField(max_length=65)
 
    order = models.PositiveIntegerField()
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        return self.name
 

	
 

	
 
@python_2_unicode_compatible
 
class SlotKind(models.Model):
 
    """
 
    A slot kind represents what kind a slot is. For example, a slot can be a
 
    break, lunch, or X-minute talk.
...
 
@@ -55,12 +61,13 @@ class SlotKind(models.Model):
 

	
 
    schedule = models.ForeignKey(Schedule)
 
    label = models.CharField(max_length=50)
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        return self.label
 

	
 

	
 
@python_2_unicode_compatible
 
class Slot(models.Model):
 

	
 
    day = models.ForeignKey(Day)
 
    kind = models.ForeignKey(SlotKind)
...
 
@@ -123,32 +130,34 @@ class Slot(models.Model):
 
    @property
 
    def rooms(self):
 
        return Room.objects.filter(pk__in=self.slotroom_set.values("room"))
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        roomlist = ' '.join(map(lambda r: r.__unicode__(), self.rooms))
 
        return u"%s %s (%s - %s) %s" % (self.day, self.kind, self.start, self.end, roomlist)
 
        return "%s %s (%s - %s) %s" % (self.day, self.kind, self.start, self.end, roomlist)
 

	
 
    class Meta:
 
        ordering = ["day", "start", "end"]
 

	
 

	
 
@python_2_unicode_compatible
 
class SlotRoom(models.Model):
 
    """
 
    Links a slot with a room.
 
    """
 

	
 
    slot = models.ForeignKey(Slot)
 
    room = models.ForeignKey(Room)
 

	
 
    def __unicode__(self):
 
        return u"%s %s" % (self.room, self.slot)
 
    def __str__(self):
 
        return "%s %s" % (self.room, self.slot)
 

	
 
    class Meta:
 
        unique_together = [("slot", "room")]
 
        ordering = ["slot", "room__order"]
 

	
 

	
 
@python_2_unicode_compatible
 
class Presentation(models.Model):
 

	
 
    slot = models.OneToOneField(Slot, null=True, blank=True, related_name="content_ptr")
 
    title = models.CharField(max_length=100)
...
 
@@ -176,15 +185,16 @@ class Presentation(models.Model):
 
        for speaker in self.additional_speakers.all():
 
            if speaker.user:
 
                yield speaker
 

	
 
    def __unicode__(self):
 
        return u"#%s %s (%s)" % (self.number, self.title, self.speaker)
 
    def __str__(self):
 
        return "#%s %s (%s)" % (self.number, self.title, self.speaker)
 

	
 
    class Meta:
 
        ordering = ["slot"]
 

	
 

	
 
@python_2_unicode_compatible
 
class Session(models.Model):
 

	
 
    day = models.ForeignKey(Day, related_name="sessions")
 
    slots = models.ManyToManyField(Slot, related_name="sessions")
...
 
@@ -205,20 +215,21 @@ class Session(models.Model):
 
            return list(slots)[-1].end
 
        else:
 
            return None
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        start = self.start()
 
        end = self.end()
 
        if start and end:
 
            return u"%s: %s - %s" % (
 
            return "%s: %s - %s" % (
 
                self.day.date.strftime("%a"),
 
                start.strftime("%X"),
 
                end.strftime("%X")
 
            )
 
        return u""
 
        return ""
 

	
 

	
 
@python_2_unicode_compatible
 
class SessionRole(models.Model):
 

	
 
    SESSION_ROLE_CHAIR = 1
 
    SESSION_ROLE_RUNNER = 2
...
 
@@ -237,7 +248,7 @@ class SessionRole(models.Model):
 

	
 
    class Meta:
 
        unique_together = [("session", "user", "role")]
 

	
 
    def __unicode__(self):
 
        return u"%s %s: %s" % (self.user, self.session,
 
                               self.SESSION_ROLE_TYPES[self.role - 1][1])
 
    def __str__(self):
 
        return "%s %s: %s" % (self.user, self.session,
 
                              self.SESSION_ROLE_TYPES[self.role - 1][1])
symposion/schedule/timetable.py
Show inline comments
 
from __future__ import unicode_literals
 
import itertools
 

	
 
from django.db.models import Count, Min
 

	
symposion/schedule/urls.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.conf.urls import url, patterns
 

	
 

	
 
urlpatterns = patterns(
symposion/schedule/views.py
Show inline comments
 
from __future__ import unicode_literals
 
import json
 

	
 
from django.core.urlresolvers import reverse
 
from django.http import Http404, HttpResponse
symposion/speakers/admin.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.contrib import admin
 

	
 
from symposion.speakers.models import Speaker
 

	
symposion/speakers/apps.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.apps import AppConfig
 

	
 

	
 
class SpeakersConfig(AppConfig):
symposion/speakers/forms.py
Show inline comments
 
from __future__ import unicode_literals
 
from django import forms
 

	
 
from markitup.widgets import MarkItUpWidget
 

	
symposion/speakers/models.py
Show inline comments
 
from __future__ import unicode_literals
 
import datetime
 
from django.utils.encoding import python_2_unicode_compatible
 

	
 
from django.db import models
 
from django.core.urlresolvers import reverse
 

	
...
 
@@ -7,8 +9,9 @@ from django.contrib.auth.models import User
 

	
 
from markitup.fields import MarkupField
 

	
 

	
 
@python_2_unicode_compatible
 
class Speaker(models.Model):
 

	
 
    SESSION_COUNT_CHOICES = [
 
        (1, "One"),
...
 
@@ -33,13 +36,13 @@ class Speaker(models.Model):
 

	
 
    class Meta:
 
        ordering = ['name']
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        if self.user:
 
            return self.name
 
        else:
 
            return u"?"
 
            return "?"
 

	
 
    def get_absolute_url(self):
 
        return reverse("speaker_edit")
 

	
symposion/speakers/urls.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.conf.urls import patterns, url
 

	
 

	
 
urlpatterns = patterns(
symposion/speakers/views.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.core.exceptions import ObjectDoesNotExist
 
from django.http import Http404
 
from django.shortcuts import render, redirect, get_object_or_404
 

	
symposion/sponsorship/admin.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.contrib import admin
 
from django.utils.html import escape
 
from django.utils.safestring import mark_safe
 
from django.utils.translation import ugettext_lazy as _
symposion/sponsorship/forms.py
Show inline comments
 
from __future__ import unicode_literals
 
from django import forms
 
from django.forms.models import inlineformset_factory, BaseInlineFormSet
 

	
 
from django.contrib.admin.widgets import AdminFileWidget
symposion/sponsorship/models.py
Show inline comments
 
from __future__ import unicode_literals
 
import datetime
 

	
 
from django.conf import settings
 
from django.core.exceptions import ValidationError
 
from django.core.urlresolvers import reverse
 
from django.db import models
 
from django.db.models.signals import post_init, post_save
 
from django.utils.encoding import python_2_unicode_compatible
 
from django.utils.translation import ugettext_lazy as _
 

	
 
from django.contrib.auth.models import User
 

	
...
 
@@ -13,8 +15,9 @@ from symposion.conference.models import Conference
 

	
 
from symposion.sponsorship.managers import SponsorManager
 

	
 

	
 
@python_2_unicode_compatible
 
class SponsorLevel(models.Model):
 

	
 
    conference = models.ForeignKey(Conference, verbose_name=_("conference"))
 
    name = models.CharField(_("name"), max_length=100)
...
 
@@ -26,15 +29,16 @@ class SponsorLevel(models.Model):
 
        ordering = ["conference", "order"]
 
        verbose_name = _("sponsor level")
 
        verbose_name_plural = _("sponsor levels")
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        return self.name
 

	
 
    def sponsors(self):
 
        return self.sponsor_set.filter(active=True).order_by("added")
 

	
 

	
 
@python_2_unicode_compatible
 
class Sponsor(models.Model):
 

	
 
    applicant = models.ForeignKey(User, related_name="sponsorships", verbose_name=_("applicant"),
 
                                  null=True)
...
 
@@ -54,9 +58,9 @@ class Sponsor(models.Model):
 
                                     editable=False)
 

	
 
    objects = SponsorManager()
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        return self.name
 

	
 
    class Meta:
 
        verbose_name = _("sponsor")
...
 
@@ -165,8 +169,9 @@ CONTENT_TYPE_CHOICES = [
 
    ("listing_text_%s" % lang, "Listing Text (%s)" % label) for lang, label in settings.LANGUAGES
 
]
 

	
 

	
 
@python_2_unicode_compatible
 
class Benefit(models.Model):
 

	
 
    name = models.CharField(_("name"), max_length=100)
 
    description = models.TextField(_("description"), blank=True)
...
 
@@ -174,12 +179,13 @@ class Benefit(models.Model):
 
                            max_length=10, default="simple")
 
    content_type = models.CharField(_("content type"), choices=CONTENT_TYPE_CHOICES,
 
                                    max_length=20, default="simple")
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        return self.name
 

	
 

	
 
@python_2_unicode_compatible
 
class BenefitLevel(models.Model):
 

	
 
    benefit = models.ForeignKey(Benefit, related_name="benefit_levels", verbose_name=_("benefit"))
 
    level = models.ForeignKey(SponsorLevel, related_name="benefit_levels", verbose_name=_("level"))
...
 
@@ -190,12 +196,13 @@ class BenefitLevel(models.Model):
 

	
 
    class Meta:
 
        ordering = ["level"]
 

	
 
    def __unicode__(self):
 
        return u"%s - %s" % (self.level, self.benefit)
 
    def __str__(self):
 
        return "%s - %s" % (self.level, self.benefit)
 

	
 

	
 
@python_2_unicode_compatible
 
class SponsorBenefit(models.Model):
 

	
 
    sponsor = models.ForeignKey(Sponsor, related_name="sponsor_benefits", verbose_name=_("sponsor"))
 
    benefit = models.ForeignKey(Benefit, related_name="sponsor_benefits", verbose_name=_("benefit"))
...
 
@@ -212,10 +219,10 @@ class SponsorBenefit(models.Model):
 

	
 
    class Meta:
 
        ordering = ["-active"]
 

	
 
    def __unicode__(self):
 
        return u"%s - %s" % (self.sponsor, self.benefit)
 
    def __str__(self):
 
        return "%s - %s" % (self.sponsor, self.benefit)
 

	
 
    def clean(self):
 
        num_words = len(self.text.split())
 
        if self.max_words and num_words > self.max_words:
symposion/sponsorship/views.py
Show inline comments
 
from __future__ import unicode_literals
 
from cStringIO import StringIO
 
import itertools
 
import logging
 
import os
symposion/teams/forms.py
Show inline comments
 
from __future__ import unicode_literals
 
from django import forms
 

	
 
from django.utils.html import escape
 
from django.utils.safestring import mark_safe
symposion/teams/models.py
Show inline comments
 
from __future__ import unicode_literals
 
import datetime
 

	
 
from django.db import models
 

	
 
import reversion
 

	
 
from django.contrib.auth.models import Permission, User
 
from django.utils.encoding import python_2_unicode_compatible
 

	
 

	
 
TEAM_ACCESS_CHOICES = [
 
    ("open", "open"),
...
 
@@ -13,8 +15,9 @@ TEAM_ACCESS_CHOICES = [
 
    ("invitation", "by invitation")
 
]
 

	
 

	
 
@python_2_unicode_compatible
 
class Team(models.Model):
 

	
 
    slug = models.SlugField(unique=True)
 
    name = models.CharField(max_length=100)
...
 
@@ -33,9 +36,9 @@ class Team(models.Model):
 
    @models.permalink
 
    def get_absolute_url(self):
 
        return ("team_detail", [self.slug])
 

	
 
    def __unicode__(self):
 
    def __str__(self):
 
        return self.name
 

	
 
    def get_state_for_user(self, user):
 
        try:
symposion/teams/views.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.http import Http404, HttpResponseNotAllowed
 
from django.shortcuts import render, redirect, get_object_or_404
 

	
 
from django.contrib.auth.decorators import login_required
symposion/views.py
Show inline comments
 
from __future__ import unicode_literals
 
import hashlib
 
import random
 

	
 
from django.shortcuts import render, redirect
0 comments (0 inline, 0 general)