Changeset - 252697b842c0
[Not reviewed]
! ! !
Joel Addison - 3 years ago 2020-11-22 13:58:14
joel@addison.net.au
Update to Django 2.2

Upgrade site and modules to Django 2.2. Remove and replace obsolete
functionality with current equivalents. Update requirements to latest
versions where possible. Remove unused dependencies.
78 files changed with 646 insertions and 364 deletions:
0 comments (0 inline, 0 general)
constraints.txt
Show inline comments
 
django<1.12,>=1.11
 
pysaml2==4.8.0
 
django<3.0,>=2.2
 
pysaml2>=5.3.0
docker/Dockerfile
Show inline comments
 
FROM python:3.6-stretch as symposion_base
 
FROM python:3.8-buster as symposion_base
 

	
...
 
@@ -27,2 +27,3 @@ COPY constraints.txt requirements.txt /reqs/
 
RUN set -ex \
 
    && pip install -U pip \
 
    && pip install --no-cache-dir -r /reqs/requirements.txt -c /reqs/constraints.txt \
docker/laptop-mode-env
Show inline comments
...
 
@@ -7,2 +7,2 @@ DATABASE_URL=sqlite:////tmp/symposion.sqlite
 
SYMPOSION_DEV_MODE=LAPTOP
 
SYMPOSION_APP_DEBUG=1
...
 
\ No newline at end of file
 
SYMPOSION_APP_DEBUG=1
pinaxcon/devmode_settings.py
Show inline comments
...
 
@@ -10 +10,3 @@ ROOT_URLCONF = "pinaxcon.devmode_urls"
 
DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
 

	
 
INTERNAL_IPS = ['*']
pinaxcon/devmode_urls.py
Show inline comments
 
from django.conf.urls import include, url
 
from django.contrib.auth.views import login, logout
 
    
 
from django.contrib.auth.views import LoginView, LogoutView
 
from django.urls import include, path
 

	
 
from pinaxcon import urls
...
 
@@ -6,4 +6,4 @@ from pinaxcon import urls
 
urlpatterns = [
 
    url(r'^accounts/logout', logout, {'template_name': 'admin/logout.html'}),
 
    url(r'^accounts/login', login, {'template_name': 'admin/login.html'}),
 
    path('accounts/logout', LogoutView.as_view(template_name='admin/logout.html')),
 
    path('accounts/login', LoginView.as_view(template_name='admin/login.html')),
 
]
pinaxcon/monkey_patch.py
Show inline comments
...
 
@@ -6,4 +6,9 @@ class MonkeyPatchMiddleware(object):
 

	
 
    def process_request(self, request):
 
    def __init__(self, get_response):
 
        self.get_response = get_response
 

	
 
    def __call__(self, request):
 
        do_monkey_patch()
 
        response = self.get_response(request)
 
        return response
 

	
...
 
@@ -55,3 +60,3 @@ def patch_stripe_payment_form():  # noqa: C901
 
                user = value.user
 
                if not user.is_authenticated():
 
                if not user.is_authenticated:
 
                    break
pinaxcon/raffle/models.py
Show inline comments
 
from django.conf import settings
 
from django.db import models
...
 
@@ -28,7 +29,14 @@ class Prize(PrizeMixin, models.Model):
 
    description = models.CharField(max_length=255)
 
    raffle = models.ForeignKey('pinaxcon_raffle.Raffle', related_name='prizes')
 
    raffle = models.ForeignKey(
 
        'pinaxcon_raffle.Raffle',
 
        related_name='prizes',
 
        on_delete=models.CASCADE,
 
    )
 
    order = models.PositiveIntegerField()
 
    winning_ticket = models.OneToOneField(
 
        'pinaxcon_raffle.DrawnTicket', null=True,
 
        blank=True, related_name='+', on_delete=models.PROTECT
 
        'pinaxcon_raffle.DrawnTicket',
 
        null=True,
 
        blank=True,
 
        related_name='+',
 
        on_delete=models.PROTECT,
 
    )
...
 
@@ -47,5 +55,12 @@ class PrizeAudit(models.Model):
 
    reason = models.CharField(max_length=255)
 
    prize = models.ForeignKey('pinaxcon_raffle.Prize', related_name='audit_events')
 
    prize = models.ForeignKey(
 
        'pinaxcon_raffle.Prize',
 
        related_name='audit_events',
 
        on_delete=models.CASCADE,
 
    )
 

	
 
    user = models.ForeignKey('auth.User')
 
    user = models.ForeignKey(
 
        settings.AUTH_USER_MODEL,
 
        on_delete=models.CASCADE,
 
    )
 
    timestamp = models.DateTimeField(auto_now_add=True)
...
 
@@ -64,4 +79,11 @@ class Draw(models.Model):
 
    """
 
    raffle = models.ForeignKey('pinaxcon_raffle.Raffle', related_name='draws')
 
    drawn_by = models.ForeignKey('auth.User')
 
    raffle = models.ForeignKey(
 
        'pinaxcon_raffle.Raffle',
 
        related_name='draws',
 
        on_delete=models.CASCADE,
 
    )
 
    drawn_by = models.ForeignKey(
 
        settings.AUTH_USER_MODEL,
 
        on_delete=models.CASCADE,
 
    )
 
    drawn_time = models.DateTimeField(auto_now_add=True)
...
 
@@ -80,7 +102,16 @@ class DrawnTicket(models.Model):
 

	
 
    draw = models.ForeignKey('pinaxcon_raffle.Draw')
 
    prize = models.ForeignKey('pinaxcon_raffle.Prize')
 
    lineitem = models.ForeignKey('registrasion.LineItem')
 
    draw = models.ForeignKey(
 
        'pinaxcon_raffle.Draw',
 
        on_delete=models.CASCADE,
 
    )
 
    prize = models.ForeignKey(
 
        'pinaxcon_raffle.Prize',
 
        on_delete=models.CASCADE,
 
    )
 
    lineitem = models.ForeignKey(
 
        'registrasion.LineItem',
 
        on_delete=models.CASCADE,
 
    )
 

	
 
    def __str__(self):
 
        return f"{self.ticket}: {self.draw.raffle}"
...
 
\ No newline at end of file
 
        return f"{self.ticket}: {self.draw.raffle}"
pinaxcon/registrasion/management/commands/dummy_presentations.py
Show inline comments
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 
from django.core.management.base import BaseCommand
...
 
@@ -10,2 +10,4 @@ from pinaxcon.proposals.models import TalkProposal
 

	
 
User = get_user_model()
 

	
 

	
pinaxcon/settings.py
Show inline comments
...
 
@@ -10,2 +10,3 @@ import saml2.saml
 
from datetime import date, datetime, timedelta
 
import pytz
 

	
...
 
@@ -126,3 +127,3 @@ ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '*']
 

	
 
TIME_ZONE = "Australia/Brisbane"
 
TIME_ZONE = "Australia/Melbourne"
 
DATE_FORMAT = "j F Y"
...
 
@@ -178,3 +179,4 @@ TEMPLATES = [
 

	
 
MIDDLEWARE_CLASSES = [
 
MIDDLEWARE = [
 
    "whitenoise.middleware.WhiteNoiseMiddleware",
 
    "django.contrib.sessions.middleware.SessionMiddleware",
...
 
@@ -183,3 +185,2 @@ MIDDLEWARE_CLASSES = [
 
    "django.contrib.auth.middleware.AuthenticationMiddleware",
 
    "django.contrib.auth.middleware.SessionAuthenticationMiddleware",
 
    "django.contrib.messages.middleware.MessageMiddleware",
...
 
@@ -202,2 +203,3 @@ WSGI_APPLICATION = "pinaxcon.wsgi.application"
 
INSTALLED_APPS = [
 
    "whitenoise.runserver_nostatic",
 
    "django.contrib.admin",
...
 
@@ -226,2 +228,3 @@ INSTALLED_APPS = [
 
    "sitetree",
 
    "django_jsonfield_backport",
 
    "pinax.eventlog",
...
 
@@ -285,5 +288,8 @@ DEBUG_TOOLBAR_CONFIG = {
 
    'INTERCEPT_REDIRECTS': False,
 
    'SHOW_TOOLBAR_CALLBACK': lambda x: DEBUG,
 
}
 

	
 
INTERNAL_IPS = [
 
    '127.0.0.1',
 
]
 

	
 
from debug_toolbar.panels.logging import collector
...
 
@@ -504,5 +510,6 @@ class PenguinDinnerCat(Category):
 

	
 
LCA_START = datetime(2021, 1, 23)
 
LCA_END = datetime(2021, 1, 25)
 
EARLY_BIRD_DEADLINE = datetime(2020, 12, 1)
 
_TZINFO = pytz.timezone(TIME_ZONE)
 
LCA_START = datetime(2021, 1, 23, tzinfo=_TZINFO)
 
LCA_END = datetime(2021, 1, 25, tzinfo=_TZINFO)
 
EARLY_BIRD_DEADLINE = datetime(2020, 12, 1, tzinfo=_TZINFO)
 
PENGUIN_DINNER_TICKET_DATE = date(2021, 1, 23)
pinaxcon/templates/403_csrf.html
Show inline comments
 
{% extends "site_base.html" %}
 
{% load staticfiles %}
 
{% load static %}
 

	
pinaxcon/templates/404.html
Show inline comments
 
{% extends "site_base.html" %}
 
{% load staticfiles %}
 
{% load static %}
 

	
pinaxcon/templates/dashboard.html
Show inline comments
 
{% extends "site_base.html" %}
 
{% load staticfiles %}
 
{% load static %}
 
{% load i18n %}
...
 
@@ -8,3 +8,2 @@
 
{% load lca2018_tags %}
 
{% load staticfiles %}
 

	
pinaxcon/templates/raffle.html
Show inline comments
...
 
@@ -3,3 +3,3 @@
 
{% load lca2018_tags %}
 
{% load staticfiles %}
 
{% load static %}
 

	
pinaxcon/templates/raffle_draw.html
Show inline comments
...
 
@@ -3,3 +3,3 @@
 
{% load lca2018_tags %}
 
{% load staticfiles %}
 
{% load static %}
 

	
pinaxcon/templates/registrasion/base.html
Show inline comments
 
{% extends "site_base.html" %}
 
{% load staticfiles %}
 
{% load static %}
 
{% load lca2018_tags %}
pinaxcon/templates/registrasion/invoice.html
Show inline comments
...
 
@@ -3,3 +3,3 @@
 
{% load lca2018_tags %}
 
{% load staticfiles %}
 
{% load static %}
 

	
pinaxcon/templates/site_base.html
Show inline comments
 
{% load staticfiles %}
 
{% load static %}
 
{% load i18n %}
pinaxcon/templates/symposion/dashboard/_categories.html
Show inline comments
...
 
@@ -7,3 +7,3 @@
 
{% load lca2019_tags %}
 
{% load staticfiles %}
 
{% load static %}
 
{% load waffle_tags %}
pinaxcon/templates/symposion/proposals/base.html
Show inline comments
 
{% extends "site_base.html" %}
 
{% load staticfiles %}
 
{% load static %}
 

	
pinaxcon/templates/symposion/reviews/base.html
Show inline comments
 
{% extends "site_base.html" %}
 
{% load staticfiles %}
 
{% load static %}
 

	
pinaxcon/templates/symposion/reviews/review_list.html
Show inline comments
...
 
@@ -15,5 +15,7 @@
 
    {% elif reviewed == 'user_reviewed' %}
 
    	<h4>Proposals you have reviewed</h4>
 
		<h4>Proposals you have reviewed</h4>
 
	{% elif reviewed == 'user_not_reviewed' %}
 
		<h4>Proposals you have not reviewed</h4>
 
    {% else %}
 
    	<h4>Proposals you have not yet reviewed</h4>
 
    	<h4>Proposals reviewed by selected reviewer</h4>
 
    {% endif %}
pinaxcon/templates/symposion/reviews/review_review.html
Show inline comments
 
{% extends "site_base.html" %}
 
{% load staticfiles %}
 
{% load static %}
 

	
pinaxcon/templates/symposion/schedule/presentation_detail.html
Show inline comments
...
 
@@ -5,3 +5,3 @@
 
{% load sitetree %}
 
{% load staticfiles %}
 
{% load static %}
 
{% load thumbnail %}
pinaxcon/templates/symposion/schedule/session_detail.html
Show inline comments
...
 
@@ -4,3 +4,3 @@
 
{% load sitetree %}
 
{% load staticfiles %}
 
{% load static %}
 
{% load thumbnail %}
pinaxcon/templates/symposion/schedule/session_list.html
Show inline comments
...
 
@@ -4,3 +4,3 @@
 
{% load sitetree %}
 
{% load staticfiles %}
 
{% load static %}
 
{% load thumbnail %}
pinaxcon/templatetags/lca2018_tags.py
Show inline comments
...
 
@@ -17,3 +17,3 @@ register = template.Library()
 

	
 
@register.assignment_tag()
 
@register.simple_tag()
 
def classname(ob):
pinaxcon/urls.py
Show inline comments
 
import debug_toolbar
 
from django.conf import settings
 
from django.conf.urls import include, url
 
from django.conf.urls.static import static
...
 
@@ -5,2 +5,3 @@ from django.views.generic import RedirectView
 
from django.views.generic import TemplateView
 
from django.urls import include, path
 
from django.contrib.flatpages.views import flatpage
...
 
@@ -13,29 +14,28 @@ import symposion.views
 
urlpatterns = [
 
    url(r'^saml2/', include('djangosaml2.urls')),
 
    url(r"^admin/", include(admin.site.urls)),
 
    path('saml2/', include('djangosaml2.urls')),
 
    path('admin/', admin.site.urls),
 

	
 
    url(r"^speaker/", include("symposion.speakers.urls")),
 
    url(r"^proposals/", include("symposion.proposals.urls")),
 
    url(r"^reviews/", include("symposion.reviews.urls")),
 
    url(r"^schedule/", include("symposion.schedule.urls")),
 
    url(r"^conference/", include("symposion.conference.urls")),
 
    path("speaker/", include("symposion.speakers.urls")),
 
    path("proposals/", include("symposion.proposals.urls")),
 
    path("reviews/", include("symposion.reviews.urls")),
 
    path("schedule/", include("symposion.schedule.urls")),
 
    path("conference/", include("symposion.conference.urls")),
 

	
 
    url(r"^teams/", include("symposion.teams.urls")),
 
    url(r'^raffle/', include("pinaxcon.raffle.urls")),
 
    path("teams/", include("symposion.teams.urls")),
 
    path('raffle/', include("pinaxcon.raffle.urls")),
 

	
 
    # Required by registrasion
 
    url(r'^tickets/payments/', include('registripe.urls')),
 
    url(r'^tickets/', include('registrasion.urls')),
 
    url(r'^nested_admin/', include('nested_admin.urls')),
 
    url(r'^checkin/', include('regidesk.urls')),
 
    url(r'^pages/', include('django.contrib.flatpages.urls')),
 

	
 
    url(r'^dashboard/', symposion.views.dashboard, name="dashboard"),
 
    url(r'^boardingpass', RedirectView.as_view(pattern_name="regidesk:boardingpass")),
 
]
 
    path('tickets/payments/', include('registripe.urls')),
 
    path('tickets/', include('registrasion.urls')),
 
    path('nested_admin/', include('nested_admin.urls')),
 
    path('checkin/', include('regidesk.urls')),
 
    path('pages/', include('django.contrib.flatpages.urls')),
 

	
 
    path('dashboard/', symposion.views.dashboard, name="dashboard"),
 
    path('boardingpass', RedirectView.as_view(pattern_name="regidesk:boardingpass")),
 

	
 
if settings.DEBUG:
 
    import debug_toolbar
 
    urlpatterns.insert(0, url(r'^__debug__/', include(debug_toolbar.urls)))
 
    # Debug Toolbar. Always include to ensure tests work.
 
    path('__debug__/', include(debug_toolbar.urls)),
 
]
 

	
 
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)#
...
 
\ No newline at end of file
 
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
pinaxcon/wsgi.py
Show inline comments
...
 
@@ -7,4 +7,2 @@ from django.core.wsgi import get_wsgi_application  # noqa
 

	
 
from dj_static import Cling, MediaCling  # noqa
 

	
 
application = Cling(MediaCling(get_wsgi_application()))
 
application = get_wsgi_application()
requirements.txt
Show inline comments
 
asn1crypto==0.24.0
 
bleach==2.1.3
 
cachetools==2.1.0
 
cairocffi==0.8.1
 
CairoSVG==2.1.2
 
certifi==2018.4.16
 
cffi==1.11.5
 
chardet==3.0.4
 
coverage==4.0.3
 
cryptography==2.3
 
cssselect2==0.2.1
 
dataclasses==0.6
 
decorator==4.3.0
 
defusedxml==0.5.0
 
dj-database-url==0.4.2
 
dj-static==0.0.6
 
Django==1.11.25
 
django-appconf==1.0.1
 
Django>=2.2
 
pinax-theme-bootstrap==8.0.1
 
pinax-eventlog[django-lts]==5.1.0
 
django-formset-js==0.5.0
 
whitenoise==5.2.0
 
dj-database-url==0.5.0
 
pylibmc==1.6.1
 
django-debug-toolbar==3.1.1
 
django-bootstrap-form==3.4
 
django-settings-export~=1.2.1
 
django-capture-tag==1.0
 
django-compressor==2.3
 
django-countries==5.3.1
 
django-crispy-forms==1.7.2
 
django-debug-toolbar==1.9.1
 
django-formset-js==0.5.0
 
django-gapc-storage==0.5.1
 
django-ical==1.4
 
django-jquery-js==3.1.1
 
django-model-utils==3.1.2
 
django-nested-admin==2.2.6
 
django-nose==1.4.5
 
django-reversion==1.10.1
 
django-sass-processor==0.7.3
 
django-settings-export==1.2.1
 
django-sitetree==1.10.0
 
django-taggit==0.18.0
 
django-timezone-field==2.1
 
django-waffle==0.14.0
 
djangosaml2==0.17.2
 
easy-thumbnails==2.5
 
future==0.16.0
 
google-api-python-client==1.7.0
 
google-auth==1.5.1
 
google-auth-httplib2==0.0.3
 
html5lib==1.0.1
 
httplib2==0.11.3
 
icalendar==4.0.2
 
idna==2.7
 
jsonfield==2.0.2
 
libsass==0.19.3
 
lxml==4.0.0
 
mysqlclient==1.3.13
 
nose==1.3.7
 
oauth2client==4.1.2
 
Paste==2.0.3
 
Pillow==5.2.0
 
pinax-eventlog==1.1.1
 
pinax-stripe==3.2.1
 
pinax-theme-bootstrap==7.10.2
 
pyasn1==0.4.4
 
pyasn1-modules==0.2.2
 
pycparser==2.18
 
pycryptodomex==3.6.4
 
pylibmc==1.5.1
 
pyOpenSSL==18.0.0
 
pypng==0.0.18
 
PyQRCode==1.2.1
 
pysaml2==4.8.0
 
python-dateutil==2.7.3
 
pytz==2018.4
 
rcssmin==1.0.6
 
repoze.who==2.3
 
requests==2.19.1
 
rjsmin==1.1.0
 
rsa==3.4.2
 
six==1.11.0
 
sqlparse==0.2.4
 
static3==0.7.0
 
stripe==1.38.0
 
tinycss2==0.6.1
 
uritemplate==3.0.0
 
urllib3==1.23
 
uWSGI==2.0.17.1
 
webencodings==0.5.1
 
WebOb==1.8.2
 
zope.interface==4.5.0
 
djangosaml2==0.50.0
 
django-gapc-storage==0.5.2
 
django-waffle==2.0.0
 

	
 
# database
 
mysqlclient==2.0.1
 

	
 
# For testing
 
django-nose==1.4.7
 
coverage==5.3
 
factory_boy==3.1.0
 

	
 
# Symposion reqs
 
django-appconf==1.0.4
 
django-model-utils==4.0.0
 
django-reversion==3.0.8
 
django-sitetree==1.16.0
 
django-taggit==1.3.0
 
django-timezone-field==4.0
 
easy-thumbnails==2.7.0
 
bleach==3.2.1
 
pytz>=2020.1
 
django-ical==1.7.1
 

	
 
# Registrasion reqs
 
django-nested-admin==3.3.2
 
CairoSVG==2.4.2
 

	
 
# Registripe
 
django-countries>=6.1.3
 
pinax-stripe==4.4.0
 
requests==2.24.0
 
stripe==2.55.0
 

	
 
# SASS Compiler and template tags
 
libsass==0.20.1
 
django-sass-processor==0.8.2
 
django-compressor==2.4
 

	
 
django-crispy-forms==1.9.2
vendor/regidesk/regidesk/forms.py
Show inline comments
...
 
@@ -3,4 +3,2 @@ from regidesk import models
 

	
 
from django import forms
 
from django.core.urlresolvers import reverse
 
import functools
...
 
@@ -8,3 +6,2 @@ import functools
 
from django import forms
 
from django.core.urlresolvers import reverse
 
from django.core.exceptions import ValidationError
...
 
@@ -12,2 +9,3 @@ from django.db.models import F, Q
 
from django.forms import widgets
 
from django.urls import reverse
 
from django.utils import timezone
vendor/regidesk/regidesk/management/commands/print_badges.py
Show inline comments
...
 
@@ -4,3 +4,3 @@ from django.core.management.base import BaseCommand, CommandError
 

	
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 
from registrasion.views import _convert_img as convert_img
...
 
@@ -8,2 +8,5 @@ from registrasion.views import render_badge_svg
 

	
 
User = get_user_model()
 

	
 

	
 
class Command(BaseCommand):
vendor/regidesk/regidesk/models.py
Show inline comments
...
 
@@ -14,3 +14,3 @@ from django.db.models import Count
 
from django.db.models.signals import post_save
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 
import pyqrcode
...
 
@@ -22,2 +22,4 @@ from registrasion.util import generate_access_code as generate_code
 

	
 
User = get_user_model()
 

	
 

	
...
 
@@ -62,3 +64,3 @@ class CheckIn(models.Model):
 

	
 
    user = models.OneToOneField(User)
 
    user = models.OneToOneField(User, on_delete=models.CASCADE)
 
    boardingpass = models.OneToOneField(BoardingPass, null=True,
vendor/regidesk/regidesk/templates/regidesk/base.html
Show inline comments
 
{% extends "site_base.html" %}
 
{% load staticfiles %}
 
{% load static %}
 

	
...
 
@@ -41,2 +41,2 @@
 
</script>
 
{% endblock %}
...
 
\ No newline at end of file
 
{% endblock %}
vendor/regidesk/regidesk/views.py
Show inline comments
...
 
@@ -11,3 +11,4 @@ from django.contrib.auth.decorators import permission_required, user_passes_test
 
from django.contrib.auth.mixins import PermissionRequiredMixin
 
from django.contrib.auth.models import User, Group
 
from django.contrib.auth.models import Group
 
from django.contrib.auth import get_user_model
 
from django.contrib.sites.models import Site
...
 
@@ -34,6 +35,6 @@ from regidesk.models import BoardingPass, BoardingPassTemplate, CheckIn
 

	
 

	
 

	
 
User = get_user_model()
 
AttendeeProfile = util.get_object_from_name(settings.ATTENDEE_PROFILE_MODEL)
 

	
 

	
 
def _staff_only(user):
vendor/regidesk/requirements.txt
Show inline comments
 
django-countries>=4.0
 
requests>=2.11.1
 
django-countries>=6.1.3
 
requests>=2.24.0
 
pypng
vendor/registrasion/registrasion/admin.py
Show inline comments
...
 
@@ -46,2 +46,3 @@ class DiscountForProductInline(admin.TabularInline):
 
    verbose_name_plural = _("Products included in discount")
 
    sortable_options = []
 

	
...
 
@@ -52,2 +53,3 @@ class DiscountForCategoryInline(admin.TabularInline):
 
    verbose_name_plural = _("Categories included in discount")
 
    sortable_options = []
 

	
...
 
@@ -139,3 +141,3 @@ class VoucherFlagInline(nested_admin.NestedStackedInline):
 
@admin.register(inventory.Voucher)
 
class VoucherAdmin(nested_admin.NestedAdmin):
 
class VoucherAdmin(nested_admin.NestedModelAdmin):
 

	
...
 
@@ -180,3 +182,3 @@ class VoucherAdmin(nested_admin.NestedAdmin):
 
class ProductFlagAdmin(
 
        nested_admin.NestedAdmin,
 
        nested_admin.NestedModelAdmin,
 
        EffectsDisplayMixin):
...
 
@@ -196,3 +198,3 @@ class ProductFlagAdmin(
 
class CategoryFlagAdmin(
 
        nested_admin.NestedAdmin,
 
        nested_admin.NestedModelAdmin,
 
        EffectsDisplayMixin):
...
 
@@ -208,3 +210,3 @@ class CategoryFlagAdmin(
 
@admin.register(conditions.SpeakerFlag)
 
class SpeakerFlagAdmin(nested_admin.NestedAdmin, EffectsDisplayMixin):
 
class SpeakerFlagAdmin(nested_admin.NestedModelAdmin, EffectsDisplayMixin):
 

	
vendor/registrasion/registrasion/contrib/badger.py
Show inline comments
...
 
@@ -26,3 +26,4 @@ from django.core.management.base import BaseCommand
 

	
 
from django.contrib.auth.models import User, Group
 
from django.contrib.auth.models import Group
 
from django.contrib.auth import get_user_model
 
from django.db.utils import OperationalError, ProgrammingError
...
 
@@ -37,2 +38,4 @@ from symposion.speakers.models import Speaker
 

	
 
User = get_user_model()
 

	
 
# A few unicode encodings ...
vendor/registrasion/registrasion/controllers/batch.py
Show inline comments
...
 
@@ -3,3 +3,5 @@ import functools
 

	
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 

	
 
User = get_user_model()
 

	
vendor/registrasion/registrasion/controllers/item.py
Show inline comments
...
 
@@ -8,3 +8,3 @@ from registrasion.models import inventory
 

	
 
from collections import Iterable
 
from collections.abc import Iterable
 
from collections import namedtuple
vendor/registrasion/registrasion/models/commerce.py
Show inline comments
...
 
@@ -3,3 +3,3 @@ from . import inventory
 

	
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 
from django.core.exceptions import ValidationError
...
 
@@ -12,2 +12,4 @@ from model_utils.managers import InheritanceManager
 

	
 
User = get_user_model()
 

	
 

	
...
 
@@ -40,3 +42,3 @@ class Cart(models.Model):
 

	
 
    user = models.ForeignKey(User)
 
    user = models.ForeignKey(User, on_delete=models.CASCADE)
 
    # ProductItems (foreign key)
...
 
@@ -78,4 +80,4 @@ class ProductItem(models.Model):
 

	
 
    cart = models.ForeignKey(Cart)
 
    product = models.ForeignKey(inventory.Product)
 
    cart = models.ForeignKey(Cart, on_delete=models.CASCADE)
 
    product = models.ForeignKey(inventory.Product, on_delete=models.CASCADE)
 
    quantity = models.PositiveIntegerField(db_index=True)
...
 
@@ -95,5 +97,6 @@ class DiscountItem(models.Model):
 

	
 
    cart = models.ForeignKey(Cart)
 
    product = models.ForeignKey(inventory.Product)
 
    discount = models.ForeignKey(conditions.DiscountBase)
 
    cart = models.ForeignKey(Cart, on_delete=models.CASCADE)
 
    product = models.ForeignKey(inventory.Product, on_delete=models.CASCADE)
 
    discount = models.ForeignKey(conditions.DiscountBase,
 
            on_delete=models.CASCADE)
 
    quantity = models.PositiveIntegerField()
...
 
@@ -191,4 +194,4 @@ class Invoice(models.Model):
 
    # Invoice Number
 
    user = models.ForeignKey(User)
 
    cart = models.ForeignKey(Cart, null=True)
 
    user = models.ForeignKey(User, on_delete=models.CASCADE)
 
    cart = models.ForeignKey(Cart, null=True, on_delete=models.CASCADE)
 
    cart_revision = models.IntegerField(
...
 
@@ -244,3 +247,3 @@ class LineItem(models.Model):
 

	
 
    invoice = models.ForeignKey(Invoice)
 
    invoice = models.ForeignKey(Invoice, on_delete=models.CASCADE)
 
    description = models.CharField(max_length=255)
...
 
@@ -248,3 +251,4 @@ class LineItem(models.Model):
 
    price = models.DecimalField(max_digits=8, decimal_places=2)
 
    product = models.ForeignKey(inventory.Product, null=True, blank=True)
 
    product = models.ForeignKey(inventory.Product, null=True, blank=True,
 
            on_delete=models.CASCADE)
 

	
...
 
@@ -277,3 +281,3 @@ class PaymentBase(models.Model):
 

	
 
    invoice = models.ForeignKey(Invoice)
 
    invoice = models.ForeignKey(Invoice, on_delete=models.CASCADE)
 
    time = models.DateTimeField(default=timezone.now)
...
 
@@ -289,3 +293,3 @@ class ManualPayment(PaymentBase):
 

	
 
    entered_by = models.ForeignKey(User)
 
    entered_by = models.ForeignKey(User, on_delete=models.CASCADE)
 

	
...
 
@@ -366,3 +370,3 @@ class CreditNoteApplication(CleanOnSave, PaymentBase):
 

	
 
    parent = models.OneToOneField(CreditNote)
 
    parent = models.OneToOneField(CreditNote, on_delete=models.CASCADE)
 

	
...
 
@@ -393,3 +397,3 @@ class CreditNoteRefund(CleanOnSave, models.Model):
 

	
 
    parent = models.OneToOneField(CreditNote)
 
    parent = models.OneToOneField(CreditNote, on_delete=models.CASCADE)
 
    time = models.DateTimeField(default=timezone.now)
...
 
@@ -404,2 +408,2 @@ class ManualCreditNoteRefund(CreditNoteRefund):
 

	
 
    entered_by = models.ForeignKey(User)
 
    entered_by = models.ForeignKey(User, on_delete=models.CASCADE)
vendor/registrasion/registrasion/models/conditions.py
Show inline comments
...
 
@@ -12,4 +12,2 @@ from model_utils.managers import InheritanceManager
 

	
 
from symposion import proposals
 

	
 

	
...
 
@@ -101,3 +99,3 @@ class SpeakerCondition(models.Model):
 
    proposal_kind = models.ManyToManyField(
 
        proposals.models.ProposalKind,
 
        "symposion_proposals.ProposalKind",
 
        help_text=_("The types of proposals that these users may be "
...
 
@@ -522,2 +520,3 @@ class CategoryFlag(FlagBase):
 
                    "condition is met."),
 
        on_delete=models.CASCADE,
 
    )
vendor/registrasion/registrasion/models/inventory.py
Show inline comments
...
 
@@ -158,3 +158,4 @@ class Product(models.Model):
 
        Category,
 
        verbose_name=_("Product category")
 
        verbose_name=_("Product category"),
 
        on_delete=models.CASCADE,
 
    )
vendor/registrasion/registrasion/models/people.py
Show inline comments
...
 
@@ -3,3 +3,3 @@ from registrasion import util
 
from django.conf import settings
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 
from django.core.exceptions import ObjectDoesNotExist
...
 
@@ -11,2 +11,5 @@ from registrasion.models.commerce import Invoice, ProductItem
 

	
 
User = get_user_model()
 

	
 

	
 
# User models
vendor/registrasion/registrasion/reporting/reports.py
Show inline comments
...
 
@@ -4,4 +4,4 @@ from django.contrib.auth.decorators import user_passes_test
 
from django.shortcuts import render
 
from django.core.urlresolvers import reverse
 
from django.http import HttpResponse
 
from django.urls import reverse
 
from functools import wraps
vendor/registrasion/registrasion/reporting/views.py
Show inline comments
...
 
@@ -8,4 +8,3 @@ from django.conf import settings
 
from django.contrib.auth.decorators import user_passes_test
 
from django.contrib.auth.models import User
 
from django.core.urlresolvers import reverse
 
from django.contrib.auth import get_user_model
 
from django.db import models
...
 
@@ -17,2 +16,3 @@ from django.db.models.fields import CharField
 
from django.shortcuts import render
 
from django.urls import reverse
 

	
...
 
@@ -41,2 +41,3 @@ def CURRENCY():
 

	
 
User = get_user_model()
 
AttendeeProfile = util.get_object_from_name(settings.ATTENDEE_PROFILE_MODEL)
vendor/registrasion/registrasion/templatetags/registrasion_tags.py
Show inline comments
...
 
@@ -7,6 +7,3 @@ from django.conf import settings
 
from django.db.models import Sum
 
try:
 
    from urllib import urlencode
 
except ImportError:
 
    from urllib.parse import urlencode
 
from urllib.parse import urlencode
 

	
...
 
@@ -26,3 +23,3 @@ def user_for_context(context):
 

	
 
@register.assignment_tag(takes_context=True)
 
@register.simple_tag(takes_context=True)
 
def available_categories(context):
...
 
@@ -38,3 +35,3 @@ def available_categories(context):
 

	
 
@register.assignment_tag(takes_context=True)
 
@register.simple_tag(takes_context=True)
 
def missing_categories(context):
...
 
@@ -54,3 +51,3 @@ def missing_categories(context):
 

	
 
@register.assignment_tag(takes_context=True)
 
@register.simple_tag(takes_context=True)
 
def available_credit(context):
...
 
@@ -71,3 +68,3 @@ def available_credit(context):
 

	
 
@register.assignment_tag(takes_context=True)
 
@register.simple_tag(takes_context=True)
 
def invoices(context):
...
 
@@ -80,3 +77,3 @@ def invoices(context):
 

	
 
@register.assignment_tag(takes_context=True)
 
@register.simple_tag(takes_context=True)
 
def items_pending(context):
...
 
@@ -91,3 +88,3 @@ def items_pending(context):
 

	
 
@register.assignment_tag(takes_context=True)
 
@register.simple_tag(takes_context=True)
 
def items_purchased(context, category=None):
...
 
@@ -104,3 +101,3 @@ def items_purchased(context, category=None):
 

	
 
@register.assignment_tag(takes_context=True)
 
@register.simple_tag(takes_context=True)
 
def total_items_purchased(context, category=None):
...
 
@@ -115,3 +112,3 @@ def total_items_purchased(context, category=None):
 

	
 
@register.assignment_tag(takes_context=True)
 
@register.simple_tag(takes_context=True)
 
def report_as_csv(context, section):
...
 
@@ -128,3 +125,3 @@ def report_as_csv(context, section):
 

	
 
@register.assignment_tag(takes_context=True)
 
@register.simple_tag(takes_context=True)
 
def sold_out_and_unregistered(context):
...
 
@@ -188,3 +185,3 @@ def include_if_exists(parser, token):
 
    except ValueError:
 
        raise (template.TemplateSyntaxError,
 
        raise template.TemplateSyntaxError(
 
            "%r tag requires a single argument" % token.contents.split()[0])
vendor/registrasion/registrasion/tests/test_batch.py
Show inline comments
...
 
@@ -129,3 +129,3 @@ class BatchTestCase(RegistrationCartTestCase):
 
            ender = get_ender(self.USER_1)
 
        self.assertEquals(1, ender.end_count)
 
        self.assertEqual(1, ender.end_count)
 

	
...
 
@@ -136,2 +136,2 @@ class BatchTestCase(RegistrationCartTestCase):
 
                ender = get_ender(self.USER_1)
 
        self.assertEquals(1, ender.end_count)
 
        self.assertEqual(1, ender.end_count)
vendor/registrasion/registrasion/tests/test_cart.py
Show inline comments
...
 
@@ -4,3 +4,3 @@ import pytz
 
from decimal import Decimal
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 
from django.core.exceptions import ObjectDoesNotExist
...
 
@@ -21,2 +21,3 @@ from registrasion.tests.patches import MixInPatches
 
UTC = pytz.timezone('UTC')
 
User = get_user_model()
 

	
...
 
@@ -87,3 +88,3 @@ class RegistrationCartTestCase(MixInPatches, TestCase):
 
                description="This is a test product.",
 
                category=cls.categories[i / 2],  # 2 products per category
 
                category=cls.categories[i // 2],  # 2 products per category
 
                price=Decimal("10.00"),
...
 
@@ -194,3 +195,3 @@ class BasicCartTests(RegistrationCartTestCase):
 
        item = items[0]
 
        self.assertEquals(2, item.quantity)
 
        self.assertEqual(2, item.quantity)
 

	
vendor/registrasion/registrasion/tests/test_credit_note.py
Show inline comments
...
 
@@ -116,3 +116,3 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
 
        # That credit note should be in the unclaimed pile
 
        self.assertEquals(1, commerce.CreditNote.unclaimed().count())
 
        self.assertEqual(1, commerce.CreditNote.unclaimed().count())
 

	
...
 
@@ -128,3 +128,3 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
 
        # That invoice should not show up as unclaimed any more
 
        self.assertEquals(0, commerce.CreditNote.unclaimed().count())
 
        self.assertEqual(0, commerce.CreditNote.unclaimed().count())
 

	
...
 
@@ -143,3 +143,3 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
 

	
 
        self.assertEquals(1, commerce.CreditNote.unclaimed().count())
 
        self.assertEqual(1, commerce.CreditNote.unclaimed().count())
 

	
...
 
@@ -152,3 +152,3 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
 
        # unclaimed should still be 1.
 
        self.assertEquals(1, commerce.CreditNote.unclaimed().count())
 
        self.assertEqual(1, commerce.CreditNote.unclaimed().count())
 

	
...
 
@@ -160,3 +160,3 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
 
        # minus the cost of cart 2.
 
        self.assertEquals(
 
        self.assertEqual(
 
            invoice.invoice.value - invoice2.invoice.value,
...
 
@@ -212,3 +212,3 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
 

	
 
        self.assertEquals(1, commerce.CreditNote.unclaimed().count())
 
        self.assertEqual(1, commerce.CreditNote.unclaimed().count())
 

	
...
 
@@ -219,3 +219,3 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
 
        # Refunding a credit note should mark it as claimed
 
        self.assertEquals(0, commerce.CreditNote.unclaimed().count())
 
        self.assertEqual(0, commerce.CreditNote.unclaimed().count())
 

	
...
 
@@ -240,3 +240,3 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
 

	
 
        self.assertEquals(1, commerce.CreditNote.unclaimed().count())
 
        self.assertEqual(1, commerce.CreditNote.unclaimed().count())
 

	
...
 
@@ -253,3 +253,3 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
 

	
 
        self.assertEquals(0, commerce.CreditNote.unclaimed().count())
 
        self.assertEqual(0, commerce.CreditNote.unclaimed().count())
 

	
...
 
@@ -329,3 +329,3 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
 
        # The first invoice should be refunded
 
        self.assertEquals(
 
        self.assertEqual(
 
            commerce.Invoice.STATUS_VOID,
...
 
@@ -335,3 +335,3 @@ class CreditNoteTestCase(TestHelperMixin, RegistrationCartTestCase):
 
        # Both credit notes should be for the same amount
 
        self.assertEquals(
 
        self.assertEqual(
 
            cn.credit_note.value,
vendor/registrasion/registrasion/tests/test_invoice.py
Show inline comments
...
 
@@ -100,3 +100,4 @@ class InvoiceTestCase(TestHelperMixin, RegistrationCartTestCase):
 
        invoice = self._invoice_containing_prod_1(2)
 
        for i in xrange(0, invoice.invoice.value):
 
        invoice_value = int(invoice.invoice.value)
 
        for i in range(0, invoice_value):
 
            self.assertTrue(
...
 
@@ -177,3 +178,3 @@ class InvoiceTestCase(TestHelperMixin, RegistrationCartTestCase):
 
        cart.refresh_from_db()
 
        self.assertEquals(commerce.Cart.STATUS_RELEASED, cart.status)
 
        self.assertEqual(commerce.Cart.STATUS_RELEASED, cart.status)
 

	
...
 
@@ -324,3 +325,3 @@ class InvoiceTestCase(TestHelperMixin, RegistrationCartTestCase):
 

	
 
        self.assertEquals(
 
        self.assertEqual(
 
            inv.invoice.value,
...
 
@@ -329,3 +330,3 @@ class InvoiceTestCase(TestHelperMixin, RegistrationCartTestCase):
 

	
 
        self.assertEquals(
 
        self.assertEqual(
 
            len(inv.invoice.lineitem_set.all()),
...
 
@@ -338,7 +339,7 @@ class InvoiceTestCase(TestHelperMixin, RegistrationCartTestCase):
 
        invoice = self._invoice_containing_prod_1(1)
 
        self.assertEquals(1, len(self.emails))
 
        self.assertEqual(1, len(self.emails))
 
        email = self.emails[0]
 
        self.assertEquals([self.USER_1.email], email["to"])
 
        self.assertEquals("invoice_created", email["kind"])
 
        self.assertEquals(invoice.invoice, email["context"]["invoice"])
 
        self.assertEqual([self.USER_1.email], email["to"])
 
        self.assertEqual("invoice_created", email["kind"])
 
        self.assertEqual(invoice.invoice, email["context"]["invoice"])
 

	
...
 
@@ -347,13 +348,13 @@ class InvoiceTestCase(TestHelperMixin, RegistrationCartTestCase):
 

	
 
        self.assertEquals(1, len(self.emails))
 
        self.assertEqual(1, len(self.emails))
 
        invoice.pay("Partial", invoice.invoice.value - 1)
 
        # Should have an "invoice_created" email and nothing else.
 
        self.assertEquals(1, len(self.emails))
 
        self.assertEqual(1, len(self.emails))
 
        invoice.pay("Remainder", 1)
 
        self.assertEquals(2, len(self.emails))
 
        self.assertEqual(2, len(self.emails))
 

	
 
        email = self.emails[1]
 
        self.assertEquals([self.USER_1.email], email["to"])
 
        self.assertEquals("invoice_updated", email["kind"])
 
        self.assertEquals(invoice.invoice, email["context"]["invoice"])
 
        self.assertEqual([self.USER_1.email], email["to"])
 
        self.assertEqual("invoice_updated", email["kind"])
 
        self.assertEqual(invoice.invoice, email["context"]["invoice"])
 

	
...
 
@@ -362,11 +363,11 @@ class InvoiceTestCase(TestHelperMixin, RegistrationCartTestCase):
 

	
 
        self.assertEquals(1, len(self.emails))
 
        self.assertEqual(1, len(self.emails))
 
        invoice.pay("Payment", invoice.invoice.value)
 
        self.assertEquals(2, len(self.emails))
 
        self.assertEqual(2, len(self.emails))
 
        invoice.refund()
 
        self.assertEquals(3, len(self.emails))
 
        self.assertEqual(3, len(self.emails))
 

	
 
        email = self.emails[2]
 
        self.assertEquals([self.USER_1.email], email["to"])
 
        self.assertEquals("invoice_updated", email["kind"])
 
        self.assertEquals(invoice.invoice, email["context"]["invoice"])
 
        self.assertEqual([self.USER_1.email], email["to"])
 
        self.assertEqual("invoice_updated", email["kind"])
 
        self.assertEqual(invoice.invoice, email["context"]["invoice"])
vendor/registrasion/registrasion/tests/test_speaker.py
Show inline comments
...
 
@@ -69,3 +69,3 @@ class SpeakerTestCase(RegistrationCartTestCase):
 
            abstract="Abstract",
 
            description="Description",
 
            #description="Description",
 
            speaker=speaker_1,
...
 
@@ -82,3 +82,3 @@ class SpeakerTestCase(RegistrationCartTestCase):
 
            abstract="Abstract",
 
            description="Description",
 
            #description="Description",
 
            speaker=speaker_1,
vendor/registrasion/registrasion/views.py
Show inline comments
...
 
@@ -30,3 +30,3 @@ from django.contrib.auth.decorators import login_required
 
from django.contrib.auth.decorators import user_passes_test
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 
from django.contrib import messages
...
 
@@ -52,2 +52,4 @@ from registrasion.contrib.badger import (
 

	
 
User = get_user_model()
 

	
 
_GuidedRegistrationSection = namedtuple(
vendor/registrasion/requirements/base.txt
Show inline comments
 
django-nested-admin==2.2.6
 
django-nested-admin==3.3.2
 
#symposion==1.0b2.dev3
 
lxml==4.0.0
 
lxml==4.6.1
vendor/registripe/registripe/forms.py
Show inline comments
...
 
@@ -3,4 +3,2 @@ from registripe import models
 

	
 
from django import forms
 
from django.core.urlresolvers import reverse
 
import functools
...
 
@@ -8,3 +6,2 @@ import functools
 
from django import forms
 
from django.core.urlresolvers import reverse
 
from django.core.exceptions import ValidationError
...
 
@@ -12,2 +9,3 @@ from django.db.models import F, Q
 
from django.forms import widgets
 
from django.urls import reverse
 
from django.utils import timezone
...
 
@@ -23,3 +21,3 @@ class StripeCardElement(forms.widgets.TextInput):
 

	
 
    def render(self, name, value, attrs=None):
 
    def render(self, name, value, attrs=None, renderer=None):
 
        element = '''
...
 
@@ -38,3 +36,3 @@ class StripeTokenWidget(forms.widgets.HiddenInput):
 

	
 
    def render(self, name, value, attrs=None):
 
    def render(self, name, value, attrs=None, renderer=None):
 

	
vendor/registripe/registripe/models.py
Show inline comments
...
 
@@ -9,3 +9,3 @@ class StripePayment(commerce.PaymentBase):
 

	
 
    charge = models.ForeignKey(Charge)
 
    charge = models.ForeignKey(Charge, on_delete=models.CASCADE)
 

	
...
 
@@ -13,2 +13,2 @@ class StripeCreditNoteRefund(commerce.CreditNoteRefund):
 

	
 
    charge = models.ForeignKey(Charge)
 
    charge = models.ForeignKey(Charge, on_delete=models.CASCADE)
vendor/registripe/registripe/templates/registrasion/stripe/link_to_refunds_.html
Show inline comments
 
{% comment %}
 
  This is used in the default invoice.html file to display Stripe funcationality if the app is loaded.
 
  This is used in the default invoice.html file to display Stripe functionality if the app is loaded.
 
{% endcomment %}
vendor/registripe/requirements.txt
Show inline comments
 
django-countries>=4.0
 
pinax-stripe==3.2.1
 
requests>=2.11.1
 
stripe==1.38.0
 
django-countries>=6.1.3
 
pinax-stripe==4.4.0
 
requests>=2.24.0
 
stripe==2.55.0
vendor/symposion/conference/models.py
Show inline comments
...
 
@@ -51,3 +51,7 @@ class Section(models.Model):
 

	
 
    conference = models.ForeignKey(Conference, verbose_name=_("Conference"))
 
    conference = models.ForeignKey(
 
        Conference,
 
        verbose_name=_("Conference"),
 
        on_delete=models.CASCADE,
 
    )
 

	
vendor/symposion/conference/views.py
Show inline comments
...
 
@@ -4,3 +4,5 @@ from django.shortcuts import render
 
from django.contrib.auth.decorators import login_required
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 

	
 
User = get_user_model()
 

	
vendor/symposion/proposals/models.py
Show inline comments
...
 
@@ -3,5 +3,5 @@ import uuid
 

	
 
from django.core.urlresolvers import reverse
 
from django.db import models
 
from django.db.models import Q
 
from django.urls import reverse
 
from django.utils.translation import ugettext_lazy as _
...
 
@@ -9,3 +9,3 @@ from django.utils.timezone import now
 

	
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 
from django.core.exceptions import ObjectDoesNotExist
...
 
@@ -21,2 +21,4 @@ from symposion.speakers.models import Speaker
 

	
 
User = get_user_model()
 

	
 

	
...
 
@@ -32,3 +34,7 @@ class ProposalSection(models.Model):
 

	
 
    section = models.OneToOneField(Section, verbose_name=_("Section"))
 
    section = models.OneToOneField(
 
        Section,
 
        verbose_name=_("Section"),
 
        on_delete=models.CASCADE,
 
    )
 

	
...
 
@@ -68,3 +74,8 @@ class ProposalKind(models.Model):
 

	
 
    section = models.ForeignKey(Section, related_name="proposal_kinds", verbose_name=_("Section"))
 
    section = models.ForeignKey(
 
        Section,
 
        related_name="proposal_kinds",
 
        verbose_name=_("Section"),
 
        on_delete=models.CASCADE,
 
    )
 

	
...
 
@@ -81,3 +92,7 @@ class ProposalBase(models.Model):
 

	
 
    kind = models.ForeignKey(ProposalKind, verbose_name=_("Kind"))
 
    kind = models.ForeignKey(
 
        ProposalKind,
 
        verbose_name=_("Kind"),
 
        on_delete=models.CASCADE,
 
    )
 

	
...
 
@@ -136,3 +151,8 @@ class ProposalBase(models.Model):
 
    )
 
    speaker = models.ForeignKey(Speaker, related_name="proposals", verbose_name=_("Speaker"))
 
    speaker = models.ForeignKey(
 
        Speaker,
 
        related_name="proposals",
 
        verbose_name=_("Speaker"),
 
        on_delete=models.CASCADE,
 
    )
 

	
...
 
@@ -215,4 +235,12 @@ class AdditionalSpeaker(models.Model):
 

	
 
    speaker = models.ForeignKey(Speaker, verbose_name=_("Speaker"))
 
    proposalbase = models.ForeignKey(ProposalBase, verbose_name=_("Proposalbase"))
 
    speaker = models.ForeignKey(
 
        Speaker,
 
        verbose_name=_("Speaker"),
 
        on_delete=models.CASCADE,
 
    )
 
    proposalbase = models.ForeignKey(
 
        ProposalBase,
 
        verbose_name=_("Proposalbase"),
 
        on_delete=models.CASCADE,
 
    )
 
    status = models.IntegerField(choices=SPEAKING_STATUS, default=SPEAKING_STATUS_PENDING, verbose_name=_("Status"))
...
 
@@ -241,5 +269,14 @@ class SupportingDocument(models.Model):
 

	
 
    proposal = models.ForeignKey(ProposalBase, related_name="supporting_documents", verbose_name=_("Proposal"))
 
    proposal = models.ForeignKey(
 
        ProposalBase,
 
        related_name="supporting_documents",
 
        verbose_name=_("Proposal"),
 
        on_delete=models.CASCADE,
 
    )
 

	
 
    uploaded_by = models.ForeignKey(User, verbose_name=_("Uploaded by"))
 
    uploaded_by = models.ForeignKey(
 
        User,
 
        verbose_name=_("Uploaded by"),
 
        on_delete=models.CASCADE,
 
    )
 

	
vendor/symposion/proposals/views.py
Show inline comments
...
 
@@ -7,3 +7,2 @@ from django.contrib.auth.decorators import login_required
 
from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
 
from django.core.urlresolvers import reverse
 
from django.db.models import Q
...
 
@@ -11,2 +10,3 @@ from django.http import Http404, HttpResponse, HttpResponseForbidden
 
from django.shortcuts import render, redirect, get_object_or_404
 
from django.urls import reverse
 
from django.views import static
...
 
@@ -14,3 +14,3 @@ from django.views import static
 
from django.contrib import messages
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 

	
...
 
@@ -29,2 +29,4 @@ from symposion.proposals.forms import (
 

	
 
User = get_user_model()
 

	
 

	
...
 
@@ -38,3 +40,3 @@ def get_form(name):
 
def proposal_submit(request):
 
    if not request.user.is_authenticated():
 
    if not request.user.is_authenticated:
 
        messages.info(request, _("To submit a proposal, please "
vendor/symposion/reviews/models.py
Show inline comments
...
 
@@ -12,3 +12,3 @@ from django.db.models.signals import post_save
 

	
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 
from django.utils.translation import ugettext_lazy as _
...
 
@@ -20,2 +20,4 @@ from symposion.schedule.models import Presentation
 

	
 
User = get_user_model()
 

	
 

	
...
 
@@ -53,4 +55,12 @@ class ReviewAssignment(models.Model):
 

	
 
    proposal = models.ForeignKey(ProposalBase, verbose_name=_("Proposal"))
 
    user = models.ForeignKey(User, verbose_name=_("User"))
 
    proposal = models.ForeignKey(
 
        ProposalBase,
 
        verbose_name=_("Proposal"),
 
        on_delete=models.CASCADE,
 
    )
 
    user = models.ForeignKey(
 
        User,
 
        verbose_name=_("User"),
 
        on_delete=models.CASCADE,
 
    )
 

	
...
 
@@ -93,4 +103,13 @@ class ReviewAssignment(models.Model):
 
class ProposalMessage(models.Model):
 
    proposal = models.ForeignKey(ProposalBase, related_name="messages", verbose_name=_("Proposal"))
 
    user = models.ForeignKey(User, verbose_name=_("User"))
 
    proposal = models.ForeignKey(
 
        ProposalBase,
 
        related_name="messages",
 
        verbose_name=_("Proposal"),
 
        on_delete=models.CASCADE,
 
    )
 
    user = models.ForeignKey(
 
        User,
 
        verbose_name=_("User"),
 
        on_delete=models.CASCADE,
 
    )
 

	
...
 
@@ -113,4 +132,13 @@ class Review(models.Model):
 

	
 
    proposal = models.ForeignKey(ProposalBase, related_name="reviews", verbose_name=_("Proposal"))
 
    user = models.ForeignKey(User, verbose_name=_("User"))
 
    proposal = models.ForeignKey(
 
        ProposalBase,
 
        related_name="reviews",
 
        verbose_name=_("Proposal"),
 
        on_delete=models.CASCADE,
 
    )
 
    user = models.ForeignKey(
 
        User,
 
        verbose_name=_("User"),
 
        on_delete=models.CASCADE,
 
    )
 

	
...
 
@@ -210,4 +238,13 @@ class LatestVote(models.Model):
 

	
 
    proposal = models.ForeignKey(ProposalBase, related_name="votes", verbose_name=_("Proposal"))
 
    user = models.ForeignKey(User, verbose_name=_("User"))
 
    proposal = models.ForeignKey(
 
        ProposalBase,
 
        related_name="votes",
 
        verbose_name=_("Proposal"),
 
        on_delete=models.CASCADE,
 
    )
 
    user = models.ForeignKey(
 
        User,
 
        verbose_name=_("User"),
 
        on_delete=models.CASCADE,
 
    )
 

	
...
 
@@ -234,3 +271,8 @@ class LatestVote(models.Model):
 
class ProposalResult(models.Model):
 
    proposal = models.OneToOneField(ProposalBase, related_name="result", verbose_name=_("Proposal"))
 
    proposal = models.OneToOneField(
 
        ProposalBase,
 
        related_name="result",
 
        verbose_name=_("Proposal"),
 
        on_delete=models.CASCADE,
 
    )
 
    score = models.DecimalField(max_digits=5, decimal_places=2, default=Decimal("0.00"), verbose_name=_("Score"))
...
 
@@ -299,4 +341,13 @@ class ProposalResult(models.Model):
 
class Comment(models.Model):
 
    proposal = models.ForeignKey(ProposalBase, related_name="comments", verbose_name=_("Proposal"))
 
    commenter = models.ForeignKey(User, verbose_name=_("Commenter"))
 
    proposal = models.ForeignKey(
 
        ProposalBase,
 
        related_name="comments",
 
        verbose_name=_("Proposal"),
 
        on_delete=models.CASCADE,
 
    )
 
    commenter = models.ForeignKey(
 
        User,
 
        verbose_name=_("Commenter"),
 
        on_delete=models.CASCADE,
 
    )
 
    text = models.TextField(verbose_name=_("Text"))
...
 
@@ -331,5 +382,15 @@ class ResultNotification(models.Model):
 

	
 
    proposal = models.ForeignKey(ProposalBase, related_name="notifications", verbose_name=_("Proposal"))
 
    template = models.ForeignKey(NotificationTemplate, null=True, blank=True,
 
                                 on_delete=models.SET_NULL, verbose_name=_("Template"))
 
    proposal = models.ForeignKey(
 
        ProposalBase,
 
        related_name="notifications",
 
        verbose_name=_("Proposal"),
 
        on_delete=models.CASCADE,
 
    )
 
    template = models.ForeignKey(
 
        NotificationTemplate,
 
        null=True,
 
        blank=True,
 
        on_delete=models.SET_NULL,
 
        verbose_name=_("Template")
 
    )
 
    timestamp = models.DateTimeField(default=datetime.now, verbose_name=_("Timestamp"))
vendor/symposion/reviews/templatetags/review_tags.py
Show inline comments
...
 
@@ -8,3 +8,3 @@ register = template.Library()
 

	
 
@register.assignment_tag(takes_context=True)
 
@register.simple_tag(takes_context=True)
 
def review_assignments(context):
vendor/symposion/reviews/views.py
Show inline comments
...
 
@@ -270,2 +270,4 @@ def review_list(request, section_slug, user_pk):
 

	
 
    section = get_object_or_404(ProposalSection, section__slug=section_slug)
 

	
 
    queryset = ProposalBase.objects.select_related("speaker__user", "result")
...
 
@@ -282,2 +284,3 @@ def review_list(request, section_slug, user_pk):
 
        "proposals": proposals,
 
        "section": section,
 
    }
vendor/symposion/schedule/forms.py
Show inline comments
...
 
@@ -75,2 +75,4 @@ class ScheduleSectionForm(forms.Form):
 
            kwargs.pop('encoding')
 
        else:
 
            self.encoding = "utf-8"
 
        super(ScheduleSectionForm, self).__init__(*args, **kwargs)
vendor/symposion/schedule/models.py
Show inline comments
...
 
@@ -3,3 +3,3 @@ import datetime
 
from django.core.exceptions import ObjectDoesNotExist
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 
from django.db import models
...
 
@@ -13,2 +13,4 @@ from symposion.speakers.models import Speaker
 

	
 
User = get_user_model()
 

	
 

	
...
 
@@ -17,3 +19,7 @@ class Schedule(models.Model):
 

	
 
    section = models.OneToOneField(Section, verbose_name=_("Section"))
 
    section = models.OneToOneField(
 
        Section,
 
        verbose_name=_("Section"),
 
        on_delete=models.CASCADE,
 
    )
 
    published = models.BooleanField(default=True, verbose_name=_("Published"))
...
 
@@ -37,3 +43,7 @@ class Day(models.Model):
 

	
 
    schedule = models.ForeignKey(Schedule, verbose_name=_("Schedule"))
 
    schedule = models.ForeignKey(
 
        Schedule,
 
        verbose_name=_("Schedule"),
 
        on_delete=models.CASCADE,
 
    )
 
    date = models.DateField(verbose_name=_("Date"))
...
 
@@ -55,3 +65,7 @@ class Room(models.Model):
 

	
 
    schedule = models.ForeignKey(Schedule, verbose_name=_("Schedule"))
 
    schedule = models.ForeignKey(
 
        Schedule,
 
        verbose_name=_("Schedule"),
 
        on_delete=models.CASCADE,
 
    )
 
    name = models.CharField(max_length=65, verbose_name=_("Name"))
...
 
@@ -72,4 +86,4 @@ class Track(models.Model):
 
    name = models.CharField(max_length=80, verbose_name=_("Track"))
 
    room = models.ForeignKey(Room)
 
    day = models.ForeignKey(Day)
 
    room = models.ForeignKey(Room, on_delete=models.CASCADE)
 
    day = models.ForeignKey(Day, on_delete=models.CASCADE)
 

	
...
 
@@ -90,3 +104,7 @@ class SlotKind(models.Model):
 

	
 
    schedule = models.ForeignKey(Schedule, verbose_name=_("schedule"))
 
    schedule = models.ForeignKey(
 
        Schedule,
 
        verbose_name=_("schedule"),
 
        on_delete=models.CASCADE,
 
    )
 
    label = models.CharField(max_length=50, verbose_name=_("Label"))
...
 
@@ -105,4 +123,12 @@ class Slot(models.Model):
 
    name = models.CharField(max_length=512, editable=False)
 
    day = models.ForeignKey(Day, verbose_name=_("Day"))
 
    kind = models.ForeignKey(SlotKind, verbose_name=_("Kind"))
 
    day = models.ForeignKey(
 
        Day,
 
        verbose_name=_("Day"),
 
        on_delete=models.CASCADE,
 
    )
 
    kind = models.ForeignKey(
 
        SlotKind,
 
        verbose_name=_("Kind"),
 
        on_delete=models.CASCADE,
 
    )
 
    start = models.TimeField(verbose_name=_("Start"))
...
 
@@ -196,4 +222,12 @@ class SlotRoom(models.Model):
 

	
 
    slot = models.ForeignKey(Slot, verbose_name=_("Slot"))
 
    room = models.ForeignKey(Room, verbose_name=_("Room"))
 
    slot = models.ForeignKey(
 
        Slot,
 
        verbose_name=_("Slot"),
 
        on_delete=models.CASCADE,
 
    )
 
    room = models.ForeignKey(
 
        Room,
 
        verbose_name=_("Room"),
 
        on_delete=models.CASCADE,
 
    )
 

	
...
 
@@ -212,3 +246,10 @@ class Presentation(models.Model):
 

	
 
    slot = models.OneToOneField(Slot, null=True, blank=True, related_name="content_ptr", verbose_name=_("Slot"))
 
    slot = models.OneToOneField(
 
        Slot,
 
        null=True,
 
        blank=True,
 
        related_name="content_ptr",
 
        verbose_name=_("Slot"),
 
        on_delete=models.CASCADE,
 
    )
 
    title = models.CharField(max_length=100, verbose_name=_("Title"))
...
 
@@ -216,3 +257,8 @@ class Presentation(models.Model):
 
    abstract_html = models.TextField(blank=True)
 
    speaker = models.ForeignKey(Speaker, related_name="presentations", verbose_name=_("Speaker"))
 
    speaker = models.ForeignKey(
 
        Speaker,
 
        related_name="presentations",
 
        verbose_name=_("Speaker"),
 
        on_delete=models.CASCADE,
 
    )
 
    additional_speakers = models.ManyToManyField(Speaker, related_name="copresentations",
...
 
@@ -224,4 +270,14 @@ class Presentation(models.Model):
 
    cancelled = models.BooleanField(default=False, verbose_name=_("Cancelled"))
 
    proposal_base = models.OneToOneField(ProposalBase, related_name="presentation", verbose_name=_("Proposal base"))
 
    section = models.ForeignKey(Section, related_name="presentations", verbose_name=_("Section"))
 
    proposal_base = models.OneToOneField(
 
        ProposalBase,
 
        related_name="presentation",
 
        verbose_name=_("Proposal base"),
 
        on_delete=models.CASCADE,
 
    )
 
    section = models.ForeignKey(
 
        Section,
 
        related_name="presentations",
 
        verbose_name=_("Section"),
 
        on_delete=models.CASCADE,
 
    )
 

	
...
 
@@ -258,3 +314,8 @@ class Session(models.Model):
 

	
 
    day = models.ForeignKey(Day, related_name="sessions", verbose_name=_("Day"))
 
    day = models.ForeignKey(
 
        Day,
 
        related_name="sessions",
 
        verbose_name=_("Day"),
 
        on_delete=models.CASCADE,
 
    )
 
    slots = models.ManyToManyField(Slot, related_name="sessions", verbose_name=_("Slots"))
...
 
@@ -320,4 +381,12 @@ class SessionRole(models.Model):
 

	
 
    session = models.ForeignKey(Session, verbose_name=_("Session"))
 
    user = models.ForeignKey(User, verbose_name=_("User"))
 
    session = models.ForeignKey(
 
        Session,
 
        verbose_name=_("Session"),
 
        on_delete=models.CASCADE,
 
    )
 
    user = models.ForeignKey(
 
        User,
 
        verbose_name=_("User"),
 
        on_delete=models.CASCADE,
 
    )
 
    role = models.IntegerField(choices=SESSION_ROLE_TYPES, verbose_name=_("Role"))
vendor/symposion/schedule/tests/factories.py
Show inline comments
...
 
@@ -11,3 +11,3 @@ from symposion.conference.models import Section, Conference
 

	
 
class ConferenceFactory(factory.DjangoModelFactory):
 
class ConferenceFactory(factory.django.DjangoModelFactory):
 
    title = fuzzy.FuzzyText()
...
 
@@ -23,3 +23,3 @@ class ConferenceFactory(factory.DjangoModelFactory):
 

	
 
class SectionFactory(factory.DjangoModelFactory):
 
class SectionFactory(factory.django.DjangoModelFactory):
 
    conference = factory.SubFactory(ConferenceFactory)
...
 
@@ -32,3 +32,3 @@ class SectionFactory(factory.DjangoModelFactory):
 

	
 
class ScheduleFactory(factory.DjangoModelFactory):
 
class ScheduleFactory(factory.django.DjangoModelFactory):
 
    section = factory.SubFactory(SectionFactory)
...
 
@@ -41,3 +41,3 @@ class ScheduleFactory(factory.DjangoModelFactory):
 

	
 
class SlotKindFactory(factory.DjangoModelFactory):
 
class SlotKindFactory(factory.django.DjangoModelFactory):
 
    schedule = factory.SubFactory(ScheduleFactory)
...
 
@@ -49,3 +49,3 @@ class SlotKindFactory(factory.DjangoModelFactory):
 

	
 
class DayFactory(factory.DjangoModelFactory):
 
class DayFactory(factory.django.DjangoModelFactory):
 
    schedule = factory.SubFactory(ScheduleFactory)
...
 
@@ -57,3 +57,3 @@ class DayFactory(factory.DjangoModelFactory):
 

	
 
class SlotFactory(factory.DjangoModelFactory):
 
class SlotFactory(factory.django.DjangoModelFactory):
 
    day = factory.SubFactory(DayFactory)
vendor/symposion/schedule/tests/test_views_session.py
Show inline comments
...
 
@@ -3,4 +3,4 @@ from datetime import date
 
from django.conf import settings
 
from django.contrib.auth.models import User
 
from django.core.urlresolvers import reverse
 
from django.contrib.auth import get_user_model
 
from django.urls import reverse
 
from django.test import TestCase
...
 
@@ -10,2 +10,4 @@ from symposion.schedule.models import Day, Schedule, Session
 

	
 
User = get_user_model()
 

	
 

	
vendor/symposion/schedule/views.py
Show inline comments
...
 
@@ -3,5 +3,5 @@ import pytz
 

	
 
from django.core.urlresolvers import reverse
 
from django.http import Http404, HttpResponse
 
from django.shortcuts import render, get_object_or_404, redirect
 
from django.urls import reverse
 
from django.template import loader, Context
...
 
@@ -9,3 +9,3 @@ from django.conf import settings
 

	
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 
from django.contrib import messages
...
 
@@ -23,2 +23,4 @@ from pinaxcon.templatetags.lca2018_tags import speaker_photo
 

	
 
User = get_user_model()
 

	
 

	
...
 
@@ -371,3 +373,3 @@ def session_detail(request, session_id):
 
    else:
 
        if request.user.is_authenticated():
 
        if request.user.is_authenticated:
 
            # did the current user previously try to apply and got rejected?
...
 
@@ -382,3 +384,3 @@ def session_detail(request, session_id):
 
    else:
 
        if request.user.is_authenticated():
 
        if request.user.is_authenticated:
 
            # did the current user previously try to apply and got rejected?
...
 
@@ -387,3 +389,3 @@ def session_detail(request, session_id):
 

	
 
    if request.method == "POST" and request.user.is_authenticated():
 
    if request.method == "POST" and request.user.is_authenticated:
 
        if not hasattr(request.user, "attendee") or not request.user.attendee.completed_registration:
vendor/symposion/speakers/models.py
Show inline comments
...
 
@@ -2,7 +2,7 @@ import datetime
 

	
 
from django.core.urlresolvers import reverse
 
from django.db import models
 
from django.urls import reverse
 
from django.utils.translation import ugettext_lazy as _
 

	
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 

	
...
 
@@ -11,2 +11,4 @@ from symposion.text_parser import parse
 

	
 
User = get_user_model()
 

	
 

	
...
 
@@ -14,3 +16,9 @@ class Speaker(models.Model):
 

	
 
    user = models.OneToOneField(User, null=True, related_name="speaker_profile", verbose_name=_("User"))
 
    user = models.OneToOneField(
 
        User,
 
        null=True,
 
        related_name="speaker_profile",
 
        verbose_name=_("User"),
 
        on_delete=models.CASCADE,
 
    )
 
    name = models.CharField(verbose_name=_("Name"), max_length=100,
vendor/symposion/speakers/views.py
Show inline comments
...
 
@@ -6,3 +6,3 @@ from django.contrib import messages
 
from django.contrib.auth.decorators import login_required
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 
from django.utils.translation import ugettext_lazy as _
...
 
@@ -13,2 +13,4 @@ from symposion.speakers.models import Speaker
 

	
 
User = get_user_model()
 

	
 

	
vendor/symposion/sponsorship/models.py
Show inline comments
...
 
@@ -4,8 +4,8 @@ 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.urls import reverse
 
from django.utils.translation import ugettext_lazy as _
 

	
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 

	
...
 
@@ -14,2 +14,4 @@ from symposion.sponsorship.managers import SponsorManager
 

	
 
User = get_user_model()
 

	
 

	
...
 
@@ -46,3 +48,7 @@ class SponsorLevel(models.Model):
 

	
 
    conference = models.ForeignKey(Conference, verbose_name=_("Conference"))
 
    conference = models.ForeignKey(
 
        Conference,
 
        verbose_name=_("Conference"),
 
        on_delete=models.CASCADE,
 
    )
 
    name = models.CharField(_("Name"), max_length=100)
...
 
@@ -66,4 +72,9 @@ class Sponsor(models.Model):
 

	
 
    applicant = models.ForeignKey(User, related_name="sponsorships", verbose_name=_("Applicant"),
 
                                  null=True)
 
    applicant = models.ForeignKey(
 
        User,
 
        related_name="sponsorships",
 
        verbose_name=_("Applicant"),
 
        null=True,
 
        on_delete=models.CASCADE,
 
    )
 

	
...
 
@@ -75,3 +86,7 @@ class Sponsor(models.Model):
 
    contact_email = models.EmailField(_("Contact Email"))
 
    level = models.ForeignKey(SponsorLevel, verbose_name=_("level"))
 
    level = models.ForeignKey(
 
        SponsorLevel,
 
        verbose_name=_("level"),
 
        on_delete=models.CASCADE,
 
    )
 
    added = models.DateTimeField(_("added"), default=datetime.datetime.now)
...
 
@@ -80,4 +95,11 @@ class Sponsor(models.Model):
 
    # Denormalization (this assumes only one logo)
 
    sponsor_logo = models.ForeignKey("SponsorBenefit", related_name="+", null=True, blank=True,
 
                                     editable=False, verbose_name=_("Sponsor logo"))
 
    sponsor_logo = models.ForeignKey(
 
        "SponsorBenefit",
 
        related_name="+",
 
        null=True,
 
        blank=True,
 
        editable=False,
 
        verbose_name=_("Sponsor logo"),
 
        on_delete=models.CASCADE,
 
    )
 

	
...
 
@@ -244,4 +266,14 @@ 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"))
 
    benefit = models.ForeignKey(
 
        Benefit,
 
        related_name="benefit_levels",
 
        verbose_name=_("Benefit"),
 
        on_delete=models.CASCADE,
 
    )
 
    level = models.ForeignKey(
 
        SponsorLevel,
 
        related_name="benefit_levels",
 
        verbose_name=_("Level"),
 
        on_delete=models.CASCADE,
 
    )
 

	
...
 
@@ -262,4 +294,14 @@ 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"))
 
    sponsor = models.ForeignKey(
 
        Sponsor,
 
        related_name="sponsor_benefits",
 
        verbose_name=_("Sponsor"),
 
        on_delete=models.CASCADE,
 
    )
 
    benefit = models.ForeignKey(
 
        Benefit,
 
        related_name="sponsor_benefits",
 
        verbose_name=_("Benefit"),
 
        on_delete=models.CASCADE,
 
    )
 
    active = models.BooleanField(default=True, verbose_name=_("Active"))
vendor/symposion/sponsorship/tests.py
Show inline comments
 
from cStringIO import StringIO
 
from io import StringIO
 
import os
...
 
@@ -7,7 +7,7 @@ from zipfile import ZipFile
 
from django.conf import settings
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 
from django.core.exceptions import ValidationError
 
from django.core.urlresolvers import reverse
 
from django.test import TestCase
 
from django.test.utils import override_settings
 
from django.urls import reverse
 

	
...
 
@@ -17,2 +17,4 @@ from symposion.conference.models import current_conference
 

	
 
User = get_user_model()
 

	
 

	
vendor/symposion/teams/backends.py
Show inline comments
...
 
@@ -7,3 +7,3 @@ class TeamPermissionsBackend(object):
 

	
 
    def authenticate(self, username=None, password=None):
 
    def authenticate(self, request, username=None, password=None):
 
        return None
...
 
@@ -15,3 +15,3 @@ class TeamPermissionsBackend(object):
 
        """
 
        if user_obj.is_anonymous() or obj is not None:
 
        if user_obj.is_anonymous or obj is not None:
 
            return set()
vendor/symposion/teams/forms.py
Show inline comments
...
 
@@ -6,3 +6,3 @@ from django.utils.translation import ugettext_lazy as _
 

	
 
from django.contrib.auth.models import User
 
from django.contrib.auth import get_user_model
 

	
...
 
@@ -10,2 +10,4 @@ from symposion.teams.models import Membership
 

	
 
User = get_user_model()
 

	
 

	
vendor/symposion/teams/migrations/0001_initial.py
Show inline comments
...
 
@@ -4,2 +4,3 @@ import datetime
 
from django.conf import settings
 
import django.db.models.deletion
 

	
...
 
@@ -46,3 +47,3 @@ class Migration(migrations.Migration):
 
            name='team',
 
            field=models.ForeignKey(verbose_name='Team', to='teams.Team', related_name='memberships'),
 
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, verbose_name='Team', to='teams.Team', related_name='memberships'),
 
        ),
...
 
@@ -51,3 +52,3 @@ class Migration(migrations.Migration):
 
            name='user',
 
            field=models.ForeignKey(verbose_name='User', to=settings.AUTH_USER_MODEL, related_name='memberships'),
 
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, verbose_name='User', to=settings.AUTH_USER_MODEL, related_name='memberships'),
 
        ),
vendor/symposion/teams/models.py
Show inline comments
...
 
@@ -4,4 +4,6 @@ from django.db import models
 
from django.utils.translation import ugettext_lazy as _
 
from django.urls import reverse
 

	
 
from django.contrib.auth.models import Permission, User
 
from django.contrib.auth.models import Permission
 
from django.contrib.auth import get_user_model
 

	
...
 
@@ -9,2 +11,4 @@ from reversion import revisions as reversion
 

	
 
User = get_user_model()
 

	
 

	
...
 
@@ -38,5 +42,4 @@ class Team(models.Model):
 

	
 
    @models.permalink
 
    def get_absolute_url(self):
 
        return ("team_detail", [self.slug])
 
        return reverse("team_detail", args=[self.slug])
 

	
...
 
@@ -80,6 +83,14 @@ class Membership(models.Model):
 

	
 
    user = models.ForeignKey(User, related_name="memberships",
 
                             verbose_name=_("User"))
 
    team = models.ForeignKey(Team, related_name="memberships",
 
                             verbose_name=_("Team"))
 
    user = models.ForeignKey(
 
        User,
 
        related_name="memberships",
 
        verbose_name=_("User"),
 
        on_delete=models.CASCADE,
 
    )
 
    team = models.ForeignKey(
 
        Team,
 
        related_name="memberships",
 
        verbose_name=_("Team"),
 
        on_delete=models.CASCADE,
 
    )
 
    state = models.CharField(max_length=20, choices=MEMBERSHIP_STATE_CHOICES,
vendor/symposion/utils/mail.py
Show inline comments
...
 
@@ -11,3 +11,3 @@ from django.contrib.sites.models import Site
 
class Sender(object):
 
    ''' Class for sending e-mails under a templete prefix. '''
 
    ''' Class for sending e-mails under a template prefix. '''
 

	
0 comments (0 inline, 0 general)