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
...
 
@@ -3,23 +3,25 @@ import os
 
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
 

	
 
from taggit.managers import TaggableManager
 

	
 
import reversion
 

	
 
from .managers import PublishedPageManager
 

	
 

	
 
@python_2_unicode_compatible
 
class Page(models.Model):
 

	
 
    STATUS_CHOICES = (
 
        (1, _("Draft")),
 
        (2, _("Public")),
 
    )
...
 
@@ -32,13 +34,13 @@ class Page(models.Model):
 
    created = models.DateTimeField(editable=False, default=datetime.datetime.now)
 
    updated = models.DateTimeField(editable=False, default=datetime.datetime.now)
 
    tags = TaggableManager(blank=True)
 

	
 
    published = PublishedPageManager()
 

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

	
 
    @models.permalink
 
    def get_absolute_url(self):
 
        return ("cms_page", [self.path])
 

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

	
 

	
 
class ConferenceConfig(AppConfig):
 
    name = "symposion.conference"
 
    label = "symposion_conference"
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.
 
    """
 

	
 
    title = models.CharField(_("title"), max_length=100)
...
 
@@ -18,13 +21,13 @@ class Conference(models.Model):
 
    start_date = models.DateField(_("start date"), null=True, blank=True)
 
    end_date = models.DateField(_("end date"), null=True, blank=True)
 

	
 
    # 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)
 
        if self.id in CONFERENCE_CACHE:
 
            del CONFERENCE_CACHE[self.id]
...
 
@@ -39,12 +42,13 @@ class Conference(models.Model):
 

	
 
    class Meta(object):
 
        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
 
    scheduling process.
 
    """
...
 
@@ -55,14 +59,14 @@ class Section(models.Model):
 
    slug = models.SlugField()
 

	
 
    # 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")
 
        ordering = ["start_date"]
 

	
symposion/markdown_parser.py
Show inline comments
 
from __future__ import unicode_literals
 
from html5lib import html5parser, sanitizer
 

	
 
import markdown
 

	
 

	
 
def parse(text):
symposion/proposals/actions.py
Show inline comments
 
from __future__ import unicode_literals
 
import csv
 

	
 
from django.http import HttpResponse
 

	
 

	
 
def export_as_csv_action(description="Export selected objects as CSV file",
symposion/proposals/apps.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.apps import AppConfig
 

	
 

	
 
class ProposalsConfig(AppConfig):
 
    name = "symposion.proposals"
 
    label = "symposion_proposals"
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
 
# from markitup.widgets import MarkItUpWidget
 

	
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
 
from django.core.exceptions import ObjectDoesNotExist
 
from django.core.exceptions import ValidationError
...
 
@@ -18,12 +20,13 @@ from markitup.fields import MarkupField
 
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.
 

	
 
    a section is available for proposals iff:
 
      * it is after start (if there is one) and
...
 
@@ -52,16 +55,17 @@ class ProposalSection(models.Model):
 
        if self.start and self.start > now():
 
            return False
 
        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
 

	
 
    Note that if you have different deadlines, reviewers, etc. you'll want
 
    to distinguish the section as well as the kind.
...
 
@@ -69,16 +73,17 @@ class ProposalKind(models.Model):
 

	
 
    section = models.ForeignKey(Section, related_name="proposal_kinds")
 

	
 
    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()
 

	
 
    kind = models.ForeignKey(ProposalKind)
 

	
...
 
@@ -152,15 +157,19 @@ class ProposalBase(models.Model):
 
            "title": self.title,
 
            "speaker": self.speaker.name,
 
            "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
 
    SPEAKING_STATUS_DECLINED = 3
 

	
...
 
@@ -174,13 +183,13 @@ class AdditionalSpeaker(models.Model):
 
    proposalbase = models.ForeignKey(ProposalBase)
 
    status = models.IntegerField(choices=SPEAKING_STATUS, default=SPEAKING_STATUS_PENDING)
 

	
 
    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
 
        else:
 
            return self.speaker.name
symposion/proposals/views.py
Show inline comments
 
from __future__ import unicode_literals
 
import hashlib
 
import random
 
import sys
 

	
 
from django.conf import settings
 
from django.core.exceptions import ObjectDoesNotExist
symposion/reviews/apps.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.apps import AppConfig
 

	
 

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

	
 
from markitup.widgets import MarkItUpWidget
 

	
 
from symposion.reviews.models import Review, Comment, ProposalMessage, VOTES
 

	
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
 
from django.db.models import Q
 
from django.db.models.signals import post_save
...
 
@@ -24,14 +25,14 @@ class ProposalScoreExpression(object):
 
        return self
 

	
 

	
 
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."),
 
        (MINUS_ZERO, u"−0 — Weak proposal, but I will not argue strongly against acceptance."),
 
        (MINUS_ONE, u"−1 — Serious issues and I will argue to reject this proposal."),
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.
 

	
 
    If ``speaker`` is ``True`` then the user can be one of the speakers for the
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
 

	
 

	
 
class DayInline(admin.StackedInline):
symposion/schedule/apps.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.apps import AppConfig
 

	
 

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

	
 
from datetime import datetime
 

	
 
from django import forms
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
 

	
 

	
 
@transaction.commit_on_success
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.
 
    """
 

	
 
    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)
 
    start = models.TimeField()
 
    end = models.TimeField()
...
 
@@ -121,36 +128,38 @@ class Slot(models.Model):
 
            (self.end_datetime - self.start_datetime).total_seconds() / 60)
 

	
 
    @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)
 
    description = MarkupField()
 
    abstract = MarkupField()
...
 
@@ -174,19 +183,20 @@ class Presentation(models.Model):
 
    def speakers(self):
 
        yield self.speaker
 
        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")
 

	
 
    def sorted_slots(self):
...
 
@@ -203,24 +213,25 @@ class Session(models.Model):
 
        slots = self.sorted_slots()
 
        if slots:
 
            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
 

	
 
    SESSION_ROLE_TYPES = [
...
 
@@ -235,9 +246,9 @@ class SessionRole(models.Model):
 

	
 
    submitted = models.DateTimeField(default=datetime.datetime.now)
 

	
 
    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
 

	
 
from symposion.schedule.models import Room, Slot, SlotRoom
 

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

	
 

	
 
urlpatterns = patterns(
 
    "symposion.schedule.views",
 
    url(r"^$", "schedule_conference", name="schedule_conference"),
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
 
from django.shortcuts import render, get_object_or_404, redirect
 
from django.template import loader, Context
symposion/speakers/admin.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.contrib import admin
 

	
 
from symposion.speakers.models import Speaker
 

	
 

	
 
admin.site.register(Speaker,
symposion/speakers/apps.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.apps import AppConfig
 

	
 

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

	
 
from markitup.widgets import MarkItUpWidget
 

	
 
from symposion.speakers.models import Speaker
 

	
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
 

	
 
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"),
 
        (2, "Two")
 
    ]
...
 
@@ -31,17 +34,17 @@ class Speaker(models.Model):
 
        editable=False
 
    )
 

	
 
    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")
 

	
 
    @property
 
    def email(self):
symposion/speakers/urls.py
Show inline comments
 
from __future__ import unicode_literals
 
from django.conf.urls import patterns, url
 

	
 

	
 
urlpatterns = patterns(
 
    "symposion.speakers.views",
 
    url(r"^create/$", "speaker_create", name="speaker_create"),
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
 

	
 
from django.contrib import messages
 
from django.contrib.auth.decorators import login_required
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 _
 

	
 
from symposion.sponsorship.models import SponsorLevel, Sponsor, Benefit, BenefitLevel, \
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
 

	
 
from symposion.sponsorship.models import Sponsor, SponsorBenefit
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
 

	
 
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)
 
    order = models.IntegerField(_("order"), default=0)
 
    cost = models.PositiveIntegerField(_("cost"))
...
 
@@ -24,19 +27,20 @@ class SponsorLevel(models.Model):
 

	
 
    class Meta:
 
        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)
 

	
 
    name = models.CharField(_("Sponsor Name"), max_length=100)
...
 
@@ -52,13 +56,13 @@ class Sponsor(models.Model):
 
    # Denormalization (this assumes only one logo)
 
    sponsor_logo = models.ForeignKey("SponsorBenefit", related_name="+", null=True, blank=True,
 
                                     editable=False)
 

	
 
    objects = SponsorManager()
 

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

	
 
    class Meta:
 
        verbose_name = _("sponsor")
 
        verbose_name_plural = _("sponsors")
 

	
...
 
@@ -163,41 +167,44 @@ CONTENT_TYPE_CHOICES = [
 
    ("simple", "Simple"),
 
] + [
 
    ("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)
 
    type = models.CharField(_("type"), choices=BENEFIT_TYPE_CHOICES,
 
                            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"))
 

	
 
    # default limits for this benefit at given level
 
    max_words = models.PositiveIntegerField(_("max words"), blank=True, null=True)
 
    other_limits = models.CharField(_("other limits"), max_length=200, blank=True)
 

	
 
    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"))
 
    active = models.BooleanField(default=True)
 

	
...
 
@@ -210,14 +217,14 @@ class SponsorBenefit(models.Model):
 
    text = models.TextField(_("text"), blank=True)
 
    upload = models.FileField(_("file"), blank=True, upload_to="sponsor_files")
 

	
 
    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:
 
            raise ValidationError(
 
                "Sponsorship level only allows for %s words, you provided %d." % (
symposion/sponsorship/views.py
Show inline comments
 
from __future__ import unicode_literals
 
from cStringIO import StringIO
 
import itertools
 
import logging
 
import os
 
import time
 
from zipfile import ZipFile, ZipInfo
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
 

	
 
from django.contrib.auth.models import User
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"),
 
    ("application", "by application"),
 
    ("invitation", "by invitation")
 
]
 

	
 

	
 
@python_2_unicode_compatible
 
class Team(models.Model):
 

	
 
    slug = models.SlugField(unique=True)
 
    name = models.CharField(max_length=100)
 
    description = models.TextField(blank=True)
 
    access = models.CharField(max_length=20, choices=TEAM_ACCESS_CHOICES)
...
 
@@ -31,13 +34,13 @@ class Team(models.Model):
 
    created = models.DateTimeField(default=datetime.datetime.now, editable=False)
 

	
 
    @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:
 
            return self.memberships.get(user=user).state
 
        except Membership.DoesNotExist:
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
 
from django.contrib import messages
 

	
symposion/views.py
Show inline comments
 
from __future__ import unicode_literals
 
import hashlib
 
import random
 

	
 
from django.shortcuts import render, redirect
 

	
 
from django.contrib.auth.models import User
0 comments (0 inline, 0 general)