diff --git a/PyRIGS/decorators.py b/PyRIGS/decorators.py index f9bb4c20..448839c8 100644 --- a/PyRIGS/decorators.py +++ b/PyRIGS/decorators.py @@ -1,7 +1,7 @@ from django.contrib.auth import REDIRECT_FIELD_NAME from django.shortcuts import render from django.http import HttpResponseRedirect -from django.core.urlresolvers import reverse +from django.urls import reverse from RIGS import models @@ -23,7 +23,7 @@ def user_passes_test_with_403(test_func, login_url=None, oembed_view=None): def _checklogin(request, *args, **kwargs): if test_func(request.user): return view_func(request, *args, **kwargs) - elif not request.user.is_authenticated(): + elif not request.user.is_authenticated: if oembed_view is not None: context = {} context['oembed_url'] = "{0}://{1}{2}".format(request.scheme, request.META['HTTP_HOST'], reverse(oembed_view, kwargs=kwargs)) diff --git a/PyRIGS/settings.py b/PyRIGS/settings.py index d1a220f3..393bbbb5 100644 --- a/PyRIGS/settings.py +++ b/PyRIGS/settings.py @@ -66,7 +66,7 @@ INSTALLED_APPS = ( 'raven.contrib.django.raven_compat', ) -MIDDLEWARE_CLASSES = ( +MIDDLEWARE = ( 'raven.contrib.django.raven_compat.middleware.SentryResponseErrorIdMiddleware', 'django.middleware.security.SecurityMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware', @@ -75,7 +75,6 @@ MIDDLEWARE_CLASSES = ( 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', - 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ) diff --git a/PyRIGS/urls.py b/PyRIGS/urls.py index 65bf2e63..5cc85548 100644 --- a/PyRIGS/urls.py +++ b/PyRIGS/urls.py @@ -17,7 +17,7 @@ urlpatterns = [ url('^user/', include('django.contrib.auth.urls')), url('^user/', include('registration.backends.default.urls')), - url(r'^admin/', include(admin.site.urls)), + url(r'^admin/', admin.site.urls), ] if settings.DEBUG: diff --git a/RIGS/finance.py b/RIGS/finance.py index 9edce71d..b64b2e71 100644 --- a/RIGS/finance.py +++ b/RIGS/finance.py @@ -2,7 +2,7 @@ import datetime import re from django.contrib import messages -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy from django.http import Http404, HttpResponseRedirect from django.http import HttpResponse from django.shortcuts import get_object_or_404 diff --git a/RIGS/ical.py b/RIGS/ical.py index c098a449..6317f1fb 100644 --- a/RIGS/ical.py +++ b/RIGS/ical.py @@ -1,7 +1,7 @@ from RIGS import models, forms from django_ical.views import ICalFeed from django.db.models import Q -from django.core.urlresolvers import reverse_lazy, reverse, NoReverseMatch +from django.urls import reverse_lazy, reverse, NoReverseMatch from django.utils import timezone from django.conf import settings diff --git a/RIGS/migrations/0002_modelcomment_person.py b/RIGS/migrations/0002_modelcomment_person.py index 27cb744c..28a37290 100644 --- a/RIGS/migrations/0002_modelcomment_person.py +++ b/RIGS/migrations/0002_modelcomment_person.py @@ -18,7 +18,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('postedAt', models.DateTimeField(auto_now=True)), ('message', models.TextField()), - ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)), + ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)), ], options={ }, diff --git a/RIGS/migrations/0008_auto_20141105_1908.py b/RIGS/migrations/0008_auto_20141105_1908.py index 93203ff3..141e9570 100644 --- a/RIGS/migrations/0008_auto_20141105_1908.py +++ b/RIGS/migrations/0008_auto_20141105_1908.py @@ -33,11 +33,11 @@ class Migration(migrations.Migration): ('payment_method', models.CharField(blank=True, null=True, max_length=255)), ('payment_received', models.CharField(blank=True, null=True, max_length=255)), ('purchase_order', models.CharField(blank=True, null=True, max_length=255)), - ('based_on', models.ForeignKey(to='RIGS.Event', related_name='future_events')), - ('checked_in_by', models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='event_checked_in')), - ('mic', models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='event_mic')), - ('organisation', models.ForeignKey(to='RIGS.Organisation')), - ('person', models.ForeignKey(to='RIGS.Person')), + ('based_on', models.ForeignKey(to='RIGS.Event', related_name='future_events', on_delete=models.CASCADE)), + ('checked_in_by', models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='event_checked_in', on_delete=models.CASCADE)), + ('mic', models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='event_mic', on_delete=models.CASCADE)), + ('organisation', models.ForeignKey(to='RIGS.Organisation', on_delete=models.CASCADE)), + ('person', models.ForeignKey(to='RIGS.Person', on_delete=models.CASCADE)), ], options={ }, @@ -52,7 +52,7 @@ class Migration(migrations.Migration): ('quantity', models.IntegerField()), ('cost', models.DecimalField(max_digits=10, decimal_places=2)), ('order', models.IntegerField()), - ('event', models.ForeignKey(to='RIGS.Event', related_name='item')), + ('event', models.ForeignKey(to='RIGS.Event', related_name='item', on_delete=models.CASCADE)), ], options={ }, @@ -75,7 +75,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='event', name='venue', - field=models.ForeignKey(to='RIGS.Venue'), + field=models.ForeignKey(to='RIGS.Venue', on_delete=models.CASCADE), preserve_default=True, ), ] diff --git a/RIGS/migrations/0009_auto_20141105_1916.py b/RIGS/migrations/0009_auto_20141105_1916.py index 2ea37023..7ce3a310 100644 --- a/RIGS/migrations/0009_auto_20141105_1916.py +++ b/RIGS/migrations/0009_auto_20141105_1916.py @@ -14,26 +14,26 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='event', name='based_on', - field=models.ForeignKey(to='RIGS.Event', related_name='future_events', blank=True, null=True), + field=models.ForeignKey(to='RIGS.Event', related_name='future_events', blank=True, null=True, on_delete=models.CASCADE), preserve_default=True, ), migrations.AlterField( model_name='event', name='checked_in_by', field=models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='event_checked_in', blank=True, - null=True), + null=True, on_delete=models.CASCADE), preserve_default=True, ), migrations.AlterField( model_name='event', name='mic', - field=models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='event_mic', blank=True, null=True), + field=models.ForeignKey(to=settings.AUTH_USER_MODEL, related_name='event_mic', blank=True, null=True, on_delete=models.CASCADE), preserve_default=True, ), migrations.AlterField( model_name='event', name='organisation', - field=models.ForeignKey(to='RIGS.Organisation', blank=True, null=True), + field=models.ForeignKey(to='RIGS.Organisation', blank=True, null=True, on_delete=models.CASCADE), preserve_default=True, ), migrations.AlterField( diff --git a/RIGS/migrations/0010_auto_20141105_2219.py b/RIGS/migrations/0010_auto_20141105_2219.py index 6576c412..88d3db5d 100644 --- a/RIGS/migrations/0010_auto_20141105_2219.py +++ b/RIGS/migrations/0010_auto_20141105_2219.py @@ -19,8 +19,8 @@ class Migration(migrations.Migration): ('run', models.BooleanField(default=False)), ('derig', models.BooleanField(default=False)), ('notes', models.TextField(blank=True, null=True)), - ('event', models.ForeignKey(related_name='crew', to='RIGS.Event')), - ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)), + ('event', models.ForeignKey(related_name='crew', to='RIGS.Event', on_delete=models.CASCADE)), + ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)), ], options={ }, @@ -35,7 +35,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='eventitem', name='event', - field=models.ForeignKey(related_name='items', to='RIGS.Event'), + field=models.ForeignKey(related_name='items', to='RIGS.Event', on_delete=models.CASCADE), preserve_default=True, ), ] diff --git a/RIGS/migrations/0013_auto_20141202_0041.py b/RIGS/migrations/0013_auto_20141202_0041.py index 002a715e..66519d3d 100644 --- a/RIGS/migrations/0013_auto_20141202_0041.py +++ b/RIGS/migrations/0013_auto_20141202_0041.py @@ -14,7 +14,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='event', name='person', - field=models.ForeignKey(blank=True, null=True, to='RIGS.Person'), + field=models.ForeignKey(blank=True, null=True, to='RIGS.Person', on_delete=models.CASCADE), preserve_default=True, ), ] diff --git a/RIGS/migrations/0014_auto_20141208_0220.py b/RIGS/migrations/0014_auto_20141208_0220.py index 54df0a7b..389a8e89 100644 --- a/RIGS/migrations/0014_auto_20141208_0220.py +++ b/RIGS/migrations/0014_auto_20141208_0220.py @@ -14,13 +14,13 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='event', name='venue', - field=models.ForeignKey(blank=True, to='RIGS.Venue', null=True), + field=models.ForeignKey(blank=True, to='RIGS.Venue', null=True, on_delete=models.CASCADE), preserve_default=True, ), migrations.AlterField( model_name='eventitem', name='event', - field=models.ForeignKey(related_name='items', blank=True, to='RIGS.Event'), + field=models.ForeignKey(related_name='items', blank=True, to='RIGS.Event', on_delete=models.CASCADE), preserve_default=True, ), ] diff --git a/RIGS/migrations/0016_auto_20150127_1905.py b/RIGS/migrations/0016_auto_20150127_1905.py index 82551163..7c75e473 100644 --- a/RIGS/migrations/0016_auto_20150127_1905.py +++ b/RIGS/migrations/0016_auto_20150127_1905.py @@ -18,7 +18,7 @@ class Migration(migrations.Migration): ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('invoice_date', models.DateField(auto_now_add=True)), ('void', models.BooleanField()), - ('event', models.OneToOneField(to='RIGS.Event')), + ('event', models.OneToOneField(to='RIGS.Event', on_delete=models.CASCADE)), ], options={ }, @@ -31,7 +31,7 @@ class Migration(migrations.Migration): ('date', models.DateField()), ('amount', models.DecimalField(help_text=b'Please use ex. VAT', max_digits=10, decimal_places=2)), ('method', models.CharField(max_length=2, choices=[(b'C', b'Cash'), (b'I', b'Internal'), (b'E', b'External'), (b'SU', b'SU Core'), (b'M', b'Members')])), - ('invoice', models.ForeignKey(to='RIGS.Invoice')), + ('invoice', models.ForeignKey(to='RIGS.Invoice', on_delete=models.CASCADE)), ], options={ }, @@ -40,7 +40,7 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='event', name='mic', - field=models.ForeignKey(related_name='event_mic', verbose_name=b'MIC', blank=True, to=settings.AUTH_USER_MODEL, null=True), + field=models.ForeignKey(related_name='event_mic', verbose_name=b'MIC', blank=True, to=settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE), preserve_default=True, ), ] diff --git a/RIGS/migrations/0025_eventauthorisation.py b/RIGS/migrations/0025_eventauthorisation.py index 07262127..9d6be0e7 100644 --- a/RIGS/migrations/0025_eventauthorisation.py +++ b/RIGS/migrations/0025_eventauthorisation.py @@ -21,7 +21,7 @@ class Migration(migrations.Migration): ('account_code', models.CharField(max_length=50, null=True, blank=True)), ('amount', models.DecimalField(verbose_name=b'authorisation amount', max_digits=10, decimal_places=2)), ('created_at', models.DateTimeField(auto_now_add=True)), - ('event', models.ForeignKey(related_name='authroisations', to='RIGS.Event')), + ('event', models.ForeignKey(related_name='authroisations', to='RIGS.Event', on_delete=models.CASCADE)), ], ), ] diff --git a/RIGS/migrations/0027_eventauthorisation_event_singular.py b/RIGS/migrations/0027_eventauthorisation_event_singular.py index 60a3595f..d9259914 100644 --- a/RIGS/migrations/0027_eventauthorisation_event_singular.py +++ b/RIGS/migrations/0027_eventauthorisation_event_singular.py @@ -14,6 +14,6 @@ class Migration(migrations.Migration): migrations.AlterField( model_name='eventauthorisation', name='event', - field=models.OneToOneField(related_name='authorisation', to='RIGS.Event'), + field=models.OneToOneField(related_name='authorisation', to='RIGS.Event', on_delete=models.CASCADE), ), ] diff --git a/RIGS/migrations/0029_eventauthorisation_sent_by.py b/RIGS/migrations/0029_eventauthorisation_sent_by.py index 4dec7d71..58ac9ab7 100644 --- a/RIGS/migrations/0029_eventauthorisation_sent_by.py +++ b/RIGS/migrations/0029_eventauthorisation_sent_by.py @@ -15,7 +15,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='eventauthorisation', name='sent_by', - field=models.ForeignKey(default=1, to=settings.AUTH_USER_MODEL), + field=models.ForeignKey(default=1, to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE), preserve_default=False, ), ] diff --git a/RIGS/migrations/0030_auth_request_sending.py b/RIGS/migrations/0030_auth_request_sending.py index 3b02bffc..db439e3a 100644 --- a/RIGS/migrations/0030_auth_request_sending.py +++ b/RIGS/migrations/0030_auth_request_sending.py @@ -20,7 +20,7 @@ class Migration(migrations.Migration): migrations.AddField( model_name='event', name='auth_request_by', - field=models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True), + field=models.ForeignKey(blank=True, to=settings.AUTH_USER_MODEL, null=True, on_delete=models.CASCADE), ), migrations.AddField( model_name='event', diff --git a/RIGS/migrations/0033_auto_20180325_0016.py b/RIGS/migrations/0033_auto_20180325_0016.py new file mode 100644 index 00000000..d88bd79f --- /dev/null +++ b/RIGS/migrations/0033_auto_20180325_0016.py @@ -0,0 +1,18 @@ +# Generated by Django 2.0.3 on 2018-03-25 00:16 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('RIGS', '0032_auto_20170904_2355'), + ] + + operations = [ + migrations.AlterField( + model_name='profile', + name='last_name', + field=models.CharField(blank=True, max_length=150, verbose_name='last name'), + ), + ] diff --git a/RIGS/models.py b/RIGS/models.py index b35fa108..a4eaffad 100644 --- a/RIGS/models.py +++ b/RIGS/models.py @@ -18,7 +18,7 @@ from collections import Counter from decimal import Decimal from django.core.exceptions import ValidationError -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy # Create your models here. @@ -302,9 +302,9 @@ class Event(models.Model, RevisionMixin): ) name = models.CharField(max_length=255) - person = models.ForeignKey('Person', null=True, blank=True) - organisation = models.ForeignKey('Organisation', blank=True, null=True) - venue = models.ForeignKey('Venue', blank=True, null=True) + person = models.ForeignKey('Person', null=True, blank=True, on_delete=models.CASCADE) + organisation = models.ForeignKey('Organisation', blank=True, null=True, on_delete=models.CASCADE) + venue = models.ForeignKey('Venue', blank=True, null=True, on_delete=models.CASCADE) description = models.TextField(blank=True, null=True) notes = models.TextField(blank=True, null=True) status = models.IntegerField(choices=EVENT_STATUS_CHOICES, default=PROVISIONAL) @@ -323,9 +323,9 @@ class Event(models.Model, RevisionMixin): meet_info = models.CharField(max_length=255, blank=True, null=True) # Crew management - checked_in_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='event_checked_in', blank=True, null=True) + checked_in_by = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='event_checked_in', blank=True, null=True, on_delete=models.CASCADE) mic = models.ForeignKey(settings.AUTH_USER_MODEL, related_name='event_mic', blank=True, null=True, - verbose_name="MIC") + verbose_name="MIC", on_delete=models.CASCADE) # Monies payment_method = models.CharField(max_length=255, blank=True, null=True) @@ -334,7 +334,7 @@ class Event(models.Model, RevisionMixin): collector = models.CharField(max_length=255, blank=True, null=True, verbose_name='collected by') # Authorisation request details - auth_request_by = models.ForeignKey('Profile', null=True, blank=True) + auth_request_by = models.ForeignKey('Profile', null=True, blank=True, on_delete=models.CASCADE) auth_request_at = models.DateTimeField(null=True, blank=True) auth_request_to = models.EmailField(null=True, blank=True) @@ -485,7 +485,7 @@ class Event(models.Model, RevisionMixin): class EventItem(models.Model): - event = models.ForeignKey('Event', related_name='items', blank=True) + event = models.ForeignKey('Event', related_name='items', blank=True, on_delete=models.CASCADE) name = models.CharField(max_length=255) description = models.TextField(blank=True, null=True) quantity = models.IntegerField() @@ -504,8 +504,8 @@ class EventItem(models.Model): class EventCrew(models.Model): - event = models.ForeignKey('Event', related_name='crew') - user = models.ForeignKey(settings.AUTH_USER_MODEL) + event = models.ForeignKey('Event', related_name='crew', on_delete=models.CASCADE) + user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) rig = models.BooleanField(default=False) run = models.BooleanField(default=False) derig = models.BooleanField(default=False) @@ -514,13 +514,13 @@ class EventCrew(models.Model): @reversion.register class EventAuthorisation(models.Model, RevisionMixin): - event = models.OneToOneField('Event', related_name='authorisation') + event = models.OneToOneField('Event', related_name='authorisation', on_delete=models.CASCADE) email = models.EmailField() name = models.CharField(max_length=255) uni_id = models.CharField(max_length=10, blank=True, null=True, verbose_name="University ID") account_code = models.CharField(max_length=50, blank=True, null=True) amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name="authorisation amount") - sent_by = models.ForeignKey('RIGS.Profile') + sent_by = models.ForeignKey('RIGS.Profile', on_delete=models.CASCADE) def get_absolute_url(self): return reverse_lazy('event_detail', kwargs={'pk': self.event.pk}) @@ -532,7 +532,7 @@ class EventAuthorisation(models.Model, RevisionMixin): @python_2_unicode_compatible class Invoice(models.Model): - event = models.OneToOneField('Event') + event = models.OneToOneField('Event', on_delete=models.CASCADE) invoice_date = models.DateField(auto_now_add=True) void = models.BooleanField(default=False) @@ -584,7 +584,7 @@ class Payment(models.Model): (ADJUSTMENT, 'TEC Adjustment'), ) - invoice = models.ForeignKey('Invoice') + invoice = models.ForeignKey('Invoice', on_delete=models.CASCADE) date = models.DateField() amount = models.DecimalField(max_digits=10, decimal_places=2, help_text='Please use ex. VAT') method = models.CharField(max_length=2, choices=METHODS, null=True, blank=True) diff --git a/RIGS/rigboard.py b/RIGS/rigboard.py index 4176eeb7..82bb29dc 100644 --- a/RIGS/rigboard.py +++ b/RIGS/rigboard.py @@ -6,12 +6,12 @@ import urllib.parse from django.contrib.staticfiles.storage import staticfiles_storage from django.core.mail import EmailMessage, EmailMultiAlternatives from django.views import generic -from django.core.urlresolvers import reverse_lazy +from django.urls import reverse_lazy from django.shortcuts import get_object_or_404 from django.template import RequestContext from django.template.loader import get_template from django.conf import settings -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core import signing from django.http import HttpResponse from django.core.exceptions import SuspiciousOperation diff --git a/RIGS/test_functional.py b/RIGS/test_functional.py index 85ffbd4c..6006e995 100644 --- a/RIGS/test_functional.py +++ b/RIGS/test_functional.py @@ -18,7 +18,7 @@ from selenium.webdriver.support.ui import WebDriverWait from RIGS import models from reversion import revisions as reversion -from django.core.urlresolvers import reverse +from django.urls import reverse from django.core import mail, signing diff --git a/RIGS/test_unit.py b/RIGS/test_unit.py index cd97f056..4a020292 100644 --- a/RIGS/test_unit.py +++ b/RIGS/test_unit.py @@ -2,7 +2,7 @@ from datetime import date from django.core.exceptions import ObjectDoesNotExist from django.core.management import call_command -from django.core.urlresolvers import reverse +from django.urls import reverse from django.test import TestCase from django.test.utils import override_settings diff --git a/RIGS/views.py b/RIGS/views.py index 851cf0fb..53a2a20d 100644 --- a/RIGS/views.py +++ b/RIGS/views.py @@ -1,7 +1,7 @@ from django.core.exceptions import PermissionDenied from django.http.response import HttpResponseRedirect from django.http import HttpResponse -from django.core.urlresolvers import reverse_lazy, reverse, NoReverseMatch +from django.urls import reverse_lazy, reverse, NoReverseMatch from django.views import generic from django.db.models import Q from django.shortcuts import get_object_or_404 @@ -34,7 +34,7 @@ class Index(generic.TemplateView): def login(request, **kwargs): - if request.user.is_authenticated(): + if request.user.is_authenticated: next = request.GET.get('next', '/') return HttpResponseRedirect(next) else: @@ -49,7 +49,7 @@ def login(request, **kwargs): # check for it before logging the user in @csrf_exempt def login_embed(request, **kwargs): - if request.user.is_authenticated(): + if request.user.is_authenticated: next = request.GET.get('next', '/') return HttpResponseRedirect(next) else: diff --git a/requirements.txt b/requirements.txt index 604dac87..a7dde000 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,28 +1,29 @@ beautifulsoup4==4.6.0 contextlib2==0.5.5 diff-match-patch==20121119 -dj-database-url==0.4.2 +dj-database-url==0.5.0 dj-static==0.0.6 -Django==1.11.7 +Django==2.0.3 django-debug-toolbar==1.9.1 django-ical==1.4 -django-recaptcha==1.3.1 -django-registration-redux==1.9 -django-reversion==2.0.11 +django-recaptcha==1.4.0 +django-registration-redux==2.2 +django-reversion==2.0.13 django-toolbelt==0.0.1 premailer==3.1.1 -django-widget-tweaks==1.4.1 +#django-widget-tweaks==1.4.1 +git+git://github.com/jazzband/django-widget-tweaks.git@1.4.2 gunicorn==19.7.1 -icalendar==4.0.0 -lxml==4.1.1 -Markdown==2.6.9 -Pillow==4.3.0 -psycopg2==2.7.3.2 +icalendar==4.0.1 +lxml==4.2.1 +Markdown==2.6.11 +Pillow==5.0.0 +psycopg2==2.7.4 Pygments==2.2.0 PyPDF2==1.26.0 -python-dateutil==2.6.1 -pytz==2017.3 -raven==6.3.0 +python-dateutil==2.7.1 +pytz==2018.3 +raven==6.6.0 reportlab==3.4.0 selenium==3.11.0 simplejson==3.13.2 @@ -31,7 +32,7 @@ sqlparse==0.2.4 static3==0.7.0 svg2rlg==0.3 yolk==0.4.3 -z3c.rml==3.2.0 +z3c.rml==3.3.0 zope.event==4.3.0 zope.interface==4.4.3 -zope.schema==4.5.0 +zope.schema==4.5.0 \ No newline at end of file