diff --git a/junction/conferences/migrations/0016_auto_20200410_1926.py b/junction/conferences/migrations/0016_auto_20200410_1926.py new file mode 100644 index 00000000..bfcdfd5b --- /dev/null +++ b/junction/conferences/migrations/0016_auto_20200410_1926.py @@ -0,0 +1,48 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.17 on 2020-04-10 13:56 +from __future__ import unicode_literals + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("conferences", "0015_auto_20200322_1904"), + ] + + operations = [ + migrations.AddField( + model_name="historicalconferenceproposalreviewer", + name="history_change_reason", + field=models.CharField(max_length=100, null=True), + ), + migrations.AlterField( + model_name="historicalconferenceproposalreviewer", + name="created_by", + field=models.ForeignKey( + blank=True, + db_constraint=False, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + related_name="+", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + migrations.AlterField( + model_name="historicalconferenceproposalreviewer", + name="modified_by", + field=models.ForeignKey( + blank=True, + db_constraint=False, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + related_name="+", + to=settings.AUTH_USER_MODEL, + verbose_name="Modified By", + ), + ), + ] diff --git a/junction/conferences/permissions.py b/junction/conferences/permissions.py index 6e4fdc34..ab00abce 100644 --- a/junction/conferences/permissions.py +++ b/junction/conferences/permissions.py @@ -6,7 +6,7 @@ def is_reviewer(user, conference): """Returns a boolean indicating if a given user is a conference reviewer. """ - if not user.is_authenticated(): + if not user.is_authenticated: return False qs = ConferenceProposalReviewer.objects.filter( diff --git a/junction/conferences/views.py b/junction/conferences/views.py index 06107676..af0e4f97 100644 --- a/junction/conferences/views.py +++ b/junction/conferences/views.py @@ -5,7 +5,8 @@ from django.http.response import HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.views.decorators.http import require_http_methods -from rest_framework import filters, viewsets +from django_filters import rest_framework as filters +from rest_framework import viewsets from .models import Conference, ConferenceVenue, Room from .serializers import ConferenceSerializer, RoomSerializer, VenueSerializer @@ -25,7 +26,7 @@ class RoomView(viewsets.ReadOnlyModelViewSet): queryset = Room.objects.all() serializer_class = RoomSerializer filter_backend = (filters.DjangoFilterBackend,) - filter_fields = ("venue",) + filterset_fields = ("venue",) @require_http_methods(["GET"]) diff --git a/junction/devices/migrations/0001_initial.py b/junction/devices/migrations/0001_initial.py index 10d09b29..5d4121cc 100644 --- a/junction/devices/migrations/0001_initial.py +++ b/junction/devices/migrations/0001_initial.py @@ -1,7 +1,6 @@ # -*- coding: utf-8 -*- from __future__ import unicode_literals -import uuidfield.fields from django.db import migrations, models import junction.devices.models @@ -34,12 +33,7 @@ class Migration(migrations.Migration): auto_now=True, verbose_name="Last Modified At" ), ), - ( - "uuid", - uuidfield.fields.UUIDField( - unique=True, max_length=32, db_index=True - ), - ), + ("uuid", models.UUIDField(max_length=32, unique=True, db_index=True)), ("is_verified", models.BooleanField(default=False)), ("verification_code", models.IntegerField()), ( diff --git a/junction/devices/models.py b/junction/devices/models.py index 4f4effc0..10a53b4e 100644 --- a/junction/devices/models.py +++ b/junction/devices/models.py @@ -1,10 +1,8 @@ # -*- coding: utf-8 -*- - import datetime from django.db import models from django.utils.timezone import now -from uuidfield import UUIDField from junction.base.models import TimeAuditModel @@ -14,7 +12,7 @@ def expiry_time(expiry_mins=60): class Device(TimeAuditModel): - uuid = UUIDField(version=1, hyphenate=True, unique=True, db_index=True) + uuid = models.UUIDField(unique=True, max_length=32, db_index=True) # Verification is_verified = models.BooleanField(default=False) diff --git a/junction/proposals/forms.py b/junction/proposals/forms.py index 07b6f7ed..6b7b736a 100644 --- a/junction/proposals/forms.py +++ b/junction/proposals/forms.py @@ -66,7 +66,7 @@ def _get_proposal_section_reviewer_vote_choices(conference): return values -class HorizRadioRenderer(forms.RadioSelect.renderer): +class HorizRadioRenderer(forms.RadioSelect): """ This overrides widget method to put radio buttons horizontally instead of vertically. diff --git a/junction/proposals/migrations/0028_auto_20200507_1202.py b/junction/proposals/migrations/0028_auto_20200507_1202.py new file mode 100644 index 00000000..382ebf50 --- /dev/null +++ b/junction/proposals/migrations/0028_auto_20200507_1202.py @@ -0,0 +1,84 @@ +# -*- coding: utf-8 -*- +# Generated by Django 1.11.17 on 2020-05-07 06:32 +from __future__ import unicode_literals + +import django.db.models.deletion +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("proposals", "0027_auto_20200502_0540"), + ] + + operations = [ + migrations.AddField( + model_name="historicalproposal", + name="history_change_reason", + field=models.CharField(max_length=100, null=True), + ), + migrations.AddField( + model_name="historicalproposalsectionreviewervote", + name="history_change_reason", + field=models.CharField(max_length=100, null=True), + ), + migrations.AlterField( + model_name="historicalproposal", + name="author", + field=models.ForeignKey( + blank=True, + db_constraint=False, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + related_name="+", + to=settings.AUTH_USER_MODEL, + verbose_name="Primary Speaker", + ), + ), + migrations.AlterField( + model_name="historicalproposal", + name="proposal_section", + field=models.ForeignKey( + blank=True, + db_constraint=False, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + related_name="+", + to="proposals.ProposalSection", + verbose_name="Proposal Section", + ), + ), + migrations.AlterField( + model_name="historicalproposal", + name="proposal_type", + field=models.ForeignKey( + blank=True, + db_constraint=False, + null=True, + on_delete=django.db.models.deletion.DO_NOTHING, + related_name="+", + to="proposals.ProposalType", + verbose_name="Proposal Type", + ), + ), + migrations.AlterField( + model_name="historicalproposal", + name="video_url", + field=models.URLField( + blank=True, + default="", + help_text="Short 1-2 min video describing your talk", + ), + ), + migrations.AlterField( + model_name="proposal", + name="video_url", + field=models.URLField( + blank=True, + default="", + help_text="Short 1-2 min video describing your talk", + ), + ), + ] diff --git a/junction/proposals/permissions.py b/junction/proposals/permissions.py index ee316880..8d678809 100644 --- a/junction/proposals/permissions.py +++ b/junction/proposals/permissions.py @@ -13,11 +13,11 @@ def is_proposal_voting_allowed(proposal): def is_proposal_author(user, proposal): - return user.is_authenticated() and proposal.author == user + return user.is_authenticated and proposal.author == user def is_proposal_reviewer(user, conference): - authenticated = user.is_authenticated() + authenticated = user.is_authenticated is_reviewer = ConferenceProposalReviewer.objects.filter( reviewer=user.id, conference=conference, active=True ).exists() @@ -26,7 +26,7 @@ def is_proposal_reviewer(user, conference): def is_proposal_section_reviewer(user, conference, proposal): return ( - user.is_authenticated() + user.is_authenticated and ProposalSectionReviewer.objects.filter( conference_reviewer__reviewer=user, conference_reviewer__conference=conference, diff --git a/junction/proposals/views.py b/junction/proposals/views.py index d5862751..5a1d5cc9 100644 --- a/junction/proposals/views.py +++ b/junction/proposals/views.py @@ -11,8 +11,9 @@ from django.http.response import HttpResponse, HttpResponseRedirect from django.shortcuts import get_object_or_404, render from django.views.decorators.http import require_http_methods +from django_filters import rest_framework as filters from hashids import Hashids -from rest_framework import filters, viewsets +from rest_framework import viewsets from rest_framework.response import Response from junction.base.constants import ( @@ -39,7 +40,12 @@ class ProposalView(viewsets.ReadOnlyModelViewSet): queryset = Proposal.objects.filter(status=2) serializer_class = serializers.ProposalSerializer filter_backend = (filters.DjangoFilterBackend,) - filter_fields = ("conference", "review_status", "proposal_type", "proposal_section") + filterset_fields = ( + "conference", + "review_status", + "proposal_type", + "proposal_section", + ) def get_queryset(self): data = super(ProposalView, self).get_queryset() @@ -233,7 +239,7 @@ def detail_proposal(request, conference_slug, slug, hashid=None): if public_voting_setting: public_voting_setting_value = public_voting_setting.value try: - if request.user.is_authenticated(): + if request.user.is_authenticated: proposal_vote = ProposalVote.objects.get( proposal=proposal, voter=request.user ) diff --git a/junction/schedule/views.py b/junction/schedule/views.py index a2c204fa..a8ff827f 100644 --- a/junction/schedule/views.py +++ b/junction/schedule/views.py @@ -6,7 +6,8 @@ from django.http import HttpResponse from django.shortcuts import Http404, render from django.template.loader import render_to_string -from rest_framework import filters, viewsets +from django_filters import rest_framework as filters +from rest_framework import viewsets from rest_framework.response import Response from .models import ScheduleItem @@ -17,7 +18,7 @@ class ScheduleView(viewsets.ReadOnlyModelViewSet): queryset = ScheduleItem.objects.all() serializer_class = ScheduleSerializer filter_backend = (filters.DjangoFilterBackend,) - filter_fields = ("room", "conference", "event_date") + filterset_fields = ("room", "conference", "event_date") def get_queryset(self): data = ( diff --git a/junction/tickets/models.py b/junction/tickets/models.py index 506de26d..c775c037 100644 --- a/junction/tickets/models.py +++ b/junction/tickets/models.py @@ -24,4 +24,4 @@ class Ticket(AuditModel): others = JSONField() def __str__(self): - return self.name, self.email, self.ticket_no + return "{} : {} : {}".format(self.name, self.email, self.ticket_no) diff --git a/requirements.txt b/requirements.txt index 12db2c8b..83f0aaa8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,7 @@ -Django==1.9 -celery==3.1.20 -djangorestframework==3.4 -django-filter==1.0.1 +Django==1.11.17 +celery==4.4.2 +djangorestframework==3.11.0 +django-filter==2.2.0 # Persistent Store # ------------------------------------------------- @@ -35,20 +35,20 @@ mock==2.0.0 # Django all auth needs # Admin # ------------------------------------------------- -django_simple_history==1.8.0 +django_simple_history==2.8.0 # Frontend Helpers # ------------------------------------------------- -django-bootstrap3==7.1.0 -django-bootstrap-breadcrumbs==0.8 +django-bootstrap3==11.0.0 +django-bootstrap-breadcrumbs==0.9.2 django-flat-theme==1.1.3 # Markdown Editor # ------------------------------------------------- -django-markdown==0.8.4 -django-pagedown==0.1. +django-markdown-app==0.9.3.1 +django-pagedown==1.0.6 mdx-linkify==0.6 -Markdown==2.6.6 +Markdown==2.6.7 markdown2==2.3.1 # Server diff --git a/settings/common.py b/settings/common.py index 36d473d3..9f16c156 100644 --- a/settings/common.py +++ b/settings/common.py @@ -214,10 +214,6 @@ # Make sure DB request held on for minimim 5 minutes CONN_MAX_AGE = 300 -REST_FRAMEWORK = { - "DEFAULT_FILTER_BACKENDS": ("rest_framework.filters.DjangoFilterBackend",) -} - EXPLARA_API_TOKEN = "shjbalkfbdskjlbdskljbdskaljfb" QR_CODES_DIR = ROOT_DIR + "/qr_files" diff --git a/settings/dev.py.sample b/settings/dev.py.sample index 8d6455a0..d41d0829 100644 --- a/settings/dev.py.sample +++ b/settings/dev.py.sample @@ -18,7 +18,7 @@ DATABASES = { ACCOUNT_DEFAULT_HTTP_PROTOCOL = 'http' TEMPLATES[0]['OPTIONS']['context_processors'].extend([ - "django.core.context_processors.debug", + "django.template.context_processors.debug", ]) EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' diff --git a/settings/test_settings.py b/settings/test_settings.py index eb331501..78e09c47 100644 --- a/settings/test_settings.py +++ b/settings/test_settings.py @@ -16,7 +16,7 @@ } TEMPLATES[0]["OPTIONS"]["context_processors"].extend( - ["django.core.context_processors.debug",] + ["django.template.context_processors.debug",] ) EMAIL_BACKEND = "django.core.mail.backends.console.EmailBackend" diff --git a/tools/requirements-test.txt b/tools/requirements-test.txt index c0eae20c..10f8091b 100644 --- a/tools/requirements-test.txt +++ b/tools/requirements-test.txt @@ -1,6 +1,6 @@ factory-boy==2.11.1 -pytest-django==3.4.8 +pytest-django==3.9.0 pytest-cov==2.6.1 coverage==5.0.4