Browse Source

Update code for Python 3.8 and Django 2.2

pull/160/head
ariannedee 5 years ago
parent
commit
3d17635338
20 changed files with 82 additions and 51 deletions
  1. +4
    -1
      edivorce/apps/core/authenticators.py
  2. +2
    -2
      edivorce/apps/core/decorators.py
  3. +13
    -1
      edivorce/apps/core/middleware/basicauth_middleware.py
  4. +14
    -1
      edivorce/apps/core/middleware/bceid_middleware.py
  5. +5
    -5
      edivorce/apps/core/migrations/0001_initial.py
  6. +2
    -2
      edivorce/apps/core/migrations/0005_auto_20170131_0004.py
  7. +1
    -1
      edivorce/apps/core/migrations/0007_auto_20170210_1702.py
  8. +2
    -2
      edivorce/apps/core/migrations/0016_auto_20171114_2151.py
  9. +4
    -2
      edivorce/apps/core/models.py
  10. +2
    -2
      edivorce/apps/core/static/css/main.css
  11. +1
    -1
      edivorce/apps/core/templates/acknowledgements.html
  12. +1
    -1
      edivorce/apps/core/templates/question/06_children_what_for.html
  13. +1
    -1
      edivorce/apps/core/templatetags/input_field.py
  14. +2
    -2
      edivorce/apps/core/views/api.py
  15. +7
    -8
      edivorce/apps/core/views/main.py
  16. +4
    -4
      edivorce/apps/core/views/system.py
  17. +1
    -1
      edivorce/settings/base.py
  18. +1
    -1
      edivorce/settings/openshift.py
  19. +2
    -0
      edivorce/urls.py
  20. +13
    -13
      requirements.txt

+ 4
- 1
edivorce/apps/core/authenticators.py View File

@ -10,5 +10,8 @@ class BCeIDAuthentication(authentication.BaseAuthentication):
""" """
def authenticate(self, request): def authenticate(self, request):
request.user = request._user # pylint: disable=protected-access
try:
request.user = request._user # pylint: disable=protected-access
except:
request.user = request._request.user # pylint: disable=protected-access
return (request.user, None) return (request.user, None)

+ 2
- 2
edivorce/apps/core/decorators.py View File

@ -13,7 +13,7 @@ def bceid_required(function=None):
def _dec(view_func): def _dec(view_func):
def _view(request, *args, **kwargs): def _view(request, *args, **kwargs):
if not request.user.is_authenticated():
if not request.user.is_authenticated:
return redirect(base_url + '/login') return redirect(base_url + '/login')
return view_func(request, *args, **kwargs) return view_func(request, *args, **kwargs)
@ -34,7 +34,7 @@ def intercept(function=None):
def _dec(view_func): def _dec(view_func):
def _view(request, *args, **kwargs): def _view(request, *args, **kwargs):
if (request.user.is_authenticated() and
if (request.user.is_authenticated and
not request.user.has_seen_orders_page and not request.user.has_seen_orders_page and
not request.user.responses.filter(**terms).exists()): not request.user.responses.filter(**terms).exists()):
request.user.has_seen_orders_page = True request.user.has_seen_orders_page = True


+ 13
- 1
edivorce/apps/core/middleware/basicauth_middleware.py View File

@ -6,7 +6,7 @@ from django.conf import settings
from django.template.loader import render_to_string from django.template.loader import render_to_string
class BasicAuthMiddleware(object):
class BasicAuthMiddleware:
""" """
Simple Basic Authentication module to password protect test environments Simple Basic Authentication module to password protect test environments
based on : https://djangosnippets.org/snippets/2468/ based on : https://djangosnippets.org/snippets/2468/
@ -14,6 +14,18 @@ class BasicAuthMiddleware(object):
implementation allows environment variables to be used to store implementation allows environment variables to be used to store
username + password username + password
""" """
def __init__(self, get_response=None):
self.get_response = get_response
super().__init__()
def __call__(self, request):
response = None
if hasattr(self, 'process_request'):
response = self.process_request(request)
if not response:
response = self.get_response(request)
return response
def process_request(self, request): def process_request(self, request):
# allow all OpenShift health checks # allow all OpenShift health checks


+ 14
- 1
edivorce/apps/core/middleware/bceid_middleware.py View File

@ -19,9 +19,11 @@ class AnonymousUser():
display_name = '' display_name = ''
has_accepted_terms = False has_accepted_terms = False
@property
def is_authenticated(self): def is_authenticated(self):
return False return False
@property
def is_anonymous(self): def is_anonymous(self):
return True return True
@ -29,7 +31,7 @@ class AnonymousUser():
anonymous_user = AnonymousUser() anonymous_user = AnonymousUser()
class BceidMiddleware(object): # pylint: disable=too-few-public-methods
class BceidMiddleware: # pylint: disable=too-few-public-methods
""" """
Simple authentication middleware for operating in the BC Government Simple authentication middleware for operating in the BC Government
OpenShift environment, with SiteMinder integration. OpenShift environment, with SiteMinder integration.
@ -67,6 +69,17 @@ class BceidMiddleware(object): # pylint: disable=too-few-public-methods
In a local development environment, we generate a guid based on the login In a local development environment, we generate a guid based on the login
name and treat that guid/login name as guid/display name. name and treat that guid/login name as guid/display name.
""" """
def __init__(self, get_response=None):
self.get_response = get_response
super().__init__()
def __call__(self, request):
response = None
if hasattr(self, 'process_request'):
response = self.process_request(request)
if not response:
response = self.get_response(request)
return response
def process_request(self, request): # pylint: disable=too-many-branches def process_request(self, request): # pylint: disable=too-many-branches
""" """


+ 5
- 5
edivorce/apps/core/migrations/0001_initial.py View File

@ -31,7 +31,7 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('bceid', models.CharField(max_length=100)), ('bceid', models.CharField(max_length=100)),
('user', models.OneToOneField(to=settings.AUTH_USER_MODEL)),
('user', models.OneToOneField(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
], ],
), ),
migrations.CreateModel( migrations.CreateModel(
@ -46,8 +46,8 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('value', models.TextField(blank=True)), ('value', models.TextField(blank=True)),
('question', models.ForeignKey(to='core.Question')),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
('question', models.ForeignKey(to='core.Question', on_delete=models.CASCADE)),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
], ],
), ),
migrations.AddField( migrations.AddField(
@ -58,11 +58,11 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='formquestions', model_name='formquestions',
name='legal_form', name='legal_form',
field=models.ForeignKey(to='core.LegalForm'),
field=models.ForeignKey(to='core.LegalForm', on_delete=models.CASCADE),
), ),
migrations.AddField( migrations.AddField(
model_name='formquestions', model_name='formquestions',
name='question', name='question',
field=models.ForeignKey(to='core.Question'),
field=models.ForeignKey(to='core.Question', on_delete=models.CASCADE),
), ),
] ]

+ 2
- 2
edivorce/apps/core/migrations/0005_auto_20170131_0004.py View File

@ -18,8 +18,8 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('value', models.TextField(blank=True)), ('value', models.TextField(blank=True)),
('question', models.ForeignKey(to='core.Question')),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
('question', models.ForeignKey(to='core.Question', on_delete=models.CASCADE)),
('user', models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.CASCADE)),
], ],
), ),
migrations.RemoveField( migrations.RemoveField(


+ 1
- 1
edivorce/apps/core/migrations/0007_auto_20170210_1702.py View File

@ -35,7 +35,7 @@ class Migration(migrations.Migration):
migrations.AddField( migrations.AddField(
model_name='userresponse', model_name='userresponse',
name='bceid_user', name='bceid_user',
field=models.ForeignKey(default=1, to='core.BceidUser'),
field=models.ForeignKey(default=1, to='core.BceidUser', on_delete=models.CASCADE),
preserve_default=False, preserve_default=False,
), ),
] ]

+ 2
- 2
edivorce/apps/core/migrations/0016_auto_20171114_2151.py View File

@ -24,11 +24,11 @@ class Migration(migrations.Migration):
migrations.AlterField( migrations.AlterField(
model_name='userresponse', model_name='userresponse',
name='bceid_user', name='bceid_user',
field=models.ForeignKey(related_name='responses', to='core.BceidUser'),
field=models.ForeignKey(related_name='responses', to='core.BceidUser', on_delete=models.CASCADE),
), ),
migrations.AlterField( migrations.AlterField(
model_name='userresponse', model_name='userresponse',
name='question', name='question',
field=models.ForeignKey(related_name='responses', to='core.Question'),
field=models.ForeignKey(related_name='responses', to='core.Question', on_delete=models.CASCADE),
), ),
] ]

+ 4
- 2
edivorce/apps/core/models.py View File

@ -31,9 +31,11 @@ class BceidUser(models.Model):
has_accepted_terms = models.BooleanField(default=False) has_accepted_terms = models.BooleanField(default=False)
""" Flag for accepting terms of service """ """ Flag for accepting terms of service """
@property
def is_authenticated(self): def is_authenticated(self):
return True return True
@property
def is_anonymous(self): def is_anonymous(self):
return False return False
@ -91,10 +93,10 @@ class UserResponse(models.Model):
User input User input
""" """
bceid_user = models.ForeignKey(BceidUser, related_name='responses')
bceid_user = models.ForeignKey(BceidUser, related_name='responses', on_delete=models.CASCADE)
""" User providing response """ """ User providing response """
question = models.ForeignKey(Question, related_name='responses')
question = models.ForeignKey(Question, related_name='responses', on_delete=models.CASCADE)
""" Originating question """ """ Originating question """
value = models.TextField(blank=True) value = models.TextField(blank=True)


+ 2
- 2
edivorce/apps/core/static/css/main.css
File diff suppressed because it is too large
View File


+ 1
- 1
edivorce/apps/core/templates/acknowledgements.html View File

@ -1,5 +1,5 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load staticfiles %}
{% load static %}
{% block title %}{{ block.super }}: Acknowledgements{% endblock %} {% block title %}{{ block.super }}: Acknowledgements{% endblock %}


+ 1
- 1
edivorce/apps/core/templates/question/06_children_what_for.html View File

@ -1,5 +1,5 @@
{% extends 'base.html' %} {% extends 'base.html' %}
{% load staticfiles %}
{% load static %}
{% load input_field %} {% load input_field %}
{% load step_order %} {% load step_order %}
{% load load_json %} {% load load_json %}


+ 1
- 1
edivorce/apps/core/templatetags/input_field.py View File

@ -81,7 +81,7 @@ def input_field(context, type, name='', value='', multiple='', **kwargs):
try: try:
date = datetime.strptime(value, '%d/%m/%Y') date = datetime.strptime(value, '%d/%m/%Y')
value = date.strftime('%b %d, %Y') value = date.strftime('%b %d, %Y')
if context['request'].user.is_authenticated():
if context['request'].user.is_authenticated:
UserResponse.objects.filter( UserResponse.objects.filter(
bceid_user=context['request'].user, question=name bceid_user=context['request'].user, question=name
).update(value=value) ).update(value=value)


+ 2
- 2
edivorce/apps/core/views/api.py View File

@ -26,7 +26,7 @@ class UserResponseHandler(APIView):
if question is not None: if question is not None:
# As a result of discussion, decide to escape < and > only # As a result of discussion, decide to escape < and > only
if request.user.is_authenticated():
if request.user.is_authenticated:
save_to_db(serializer, question, value, request.user) save_to_db(serializer, question, value, request.user)
else: else:
# only prequalification questions can be answered when you # only prequalification questions can be answered when you
@ -36,7 +36,7 @@ class UserResponseHandler(APIView):
status=status.HTTP_511_NETWORK_AUTHENTICATION_REQUIRED) status=status.HTTP_511_NETWORK_AUTHENTICATION_REQUIRED)
save_to_session(request, question, value) save_to_session(request, question, value)
else: else:
if request.user.is_authenticated() and hasattr(request.user, question_key):
if request.user.is_authenticated and hasattr(request.user, question_key):
setattr(request.user, question_key, value == 'true') setattr(request.user, question_key, value == 'true')
request.user.save() request.user.save()
user_attribute_updated = True user_attribute_updated = True


+ 7
- 8
edivorce/apps/core/views/main.py View File

@ -3,7 +3,6 @@ import datetime
from django.conf import settings from django.conf import settings
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.utils import timezone from django.utils import timezone
from django.template import RequestContext
from edivorce.apps.core.utils.derived import get_derived_data from edivorce.apps.core.utils.derived import get_derived_data
from ..decorators import bceid_required, intercept from ..decorators import bceid_required, intercept
@ -38,7 +37,7 @@ def prequalification(request, step):
""" """
template = 'prequalification/step_%s.html' % step template = 'prequalification/step_%s.html' % step
if not request.user.is_authenticated():
if not request.user.is_authenticated:
responses_dict = get_responses_from_session(request) responses_dict = get_responses_from_session(request)
else: else:
responses_dict = get_responses_from_db(request.user) responses_dict = get_responses_from_db(request.user)
@ -53,7 +52,7 @@ def success(request):
""" """
This page is shown if the user passes the qualification test This page is shown if the user passes the qualification test
""" """
if request.user.is_authenticated():
if request.user.is_authenticated:
return redirect(settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1] + '/overview') return redirect(settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1] + '/overview')
prequal_responses = get_responses_from_session_grouped_by_steps(request)['prequalification'] prequal_responses = get_responses_from_session_grouped_by_steps(request)['prequalification']
@ -107,7 +106,7 @@ def login(request):
if settings.DEPLOYMENT_TYPE in ['localdev', 'minishift'] and not request.session.get('fake_bceid_guid'): if settings.DEPLOYMENT_TYPE in ['localdev', 'minishift'] and not request.session.get('fake_bceid_guid'):
return redirect(settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1] + '/bceid') return redirect(settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1] + '/bceid')
if not request.user.is_authenticated():
if not request.user.is_authenticated:
# Fix for weird siteminder behaviour...... # Fix for weird siteminder behaviour......
# If a user is logged into an IDIR then they can see the login page but # If a user is logged into an IDIR then they can see the login page but
# the SMGOV headers are missing. If this is the case, then log them out # the SMGOV headers are missing. If this is the case, then log them out
@ -209,18 +208,18 @@ def question(request, step, sub_step=None):
return render(request, template_name=template, context=responses_dict) return render(request, template_name=template, context=responses_dict)
def page_not_found(request):
def page_not_found(request, exception, template_name='404.html'):
""" """
404 Error Page 404 Error Page
""" """
return render(request, '404.html', status=404)
return render(request, template_name, status=404)
def server_error(request):
def server_error(request, template_name='500.html'):
""" """
500 Error Page 500 Error Page
""" """
return render(request, '500.html', status=500)
return render(request, template_name, status=500)
def legal(request): def legal(request):


+ 4
- 4
edivorce/apps/core/views/system.py View File

@ -25,26 +25,26 @@ def current(request):
raise Http404() raise Http404()
if request.GET.get('reset', False): if request.GET.get('reset', False):
if not request.user.is_anonymous():
if not request.user.is_anonymous:
request.user.responses.all().delete() request.user.responses.all().delete()
request.user.delete() request.user.delete()
request.session.flush() request.session.flush()
return redirect(reverse('current')) return redirect(reverse('current'))
if request.GET.get('intercept', False) and request.user.is_authenticated():
if request.GET.get('intercept', False) and request.user.is_authenticated:
request.user.has_seen_orders_page = False request.user.has_seen_orders_page = False
request.user.save() request.user.save()
request.user.responses.filter(question__key='want_which_orders').delete() request.user.responses.filter(question__key='want_which_orders').delete()
return redirect(reverse('current')) return redirect(reverse('current'))
if request.GET.get('terms', False) and request.user.is_authenticated():
if request.GET.get('terms', False) and request.user.is_authenticated:
request.user.has_accepted_terms = not request.user.has_accepted_terms request.user.has_accepted_terms = not request.user.has_accepted_terms
request.user.save() request.user.save()
return redirect(reverse('current')) return redirect(reverse('current'))
context = { context = {
'hide_nav': True, 'hide_nav': True,
'is_anonymous': request.user.is_anonymous(),
'is_anonymous': request.user.is_anonymous,
} }
return render(request, 'dashboard/current.html', context=context) return render(request, 'dashboard/current.html', context=context)

+ 1
- 1
edivorce/settings/base.py View File

@ -49,7 +49,7 @@ INSTALLED_APPS = (
'sass_processor', 'sass_processor',
) )
MIDDLEWARE_CLASSES = (
MIDDLEWARE = (
'edivorce.apps.core.middleware.basicauth_middleware.BasicAuthMiddleware', 'edivorce.apps.core.middleware.basicauth_middleware.BasicAuthMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware', 'debug_toolbar.middleware.DebugToolbarMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware',


+ 1
- 1
edivorce/settings/openshift.py View File

@ -8,7 +8,7 @@ def openshift_db_config():
engines = { engines = {
'sqlite': 'django.db.backends.sqlite3', 'sqlite': 'django.db.backends.sqlite3',
'postgresql': 'django.db.backends.postgresql_psycopg2',
'postgresql': 'django.db.backends.postgresql',
'mysql': 'django.db.backends.mysql', 'mysql': 'django.db.backends.mysql',
} }


+ 2
- 0
edivorce/urls.py View File

@ -11,6 +11,8 @@ if settings.ENVIRONMENT in ['localdev', 'dev', 'test', 'minishift']:
if settings.ENVIRONMENT in ['localdev', 'minishift']: if settings.ENVIRONMENT in ['localdev', 'minishift']:
urlpatterns.append(url(r'^admin/', admin.site.urls)) urlpatterns.append(url(r'^admin/', admin.site.urls))
urlpatterns.append(url(r'^404/$', main.page_not_found, {'exception': Exception()}))
urlpatterns.append(url(r'^500/$', main.server_error))
urlpatterns.append(url(r'^', include('edivorce.apps.core.urls'))) urlpatterns.append(url(r'^', include('edivorce.apps.core.urls')))


+ 13
- 13
requirements.txt View File

@ -1,13 +1,13 @@
Django<1.12
django-compressor==2.1
django-crispy-forms==1.6.1
django-debug-toolbar==1.9
django-sass-processor==0.5.5
djangorestframework==3.5.3
gunicorn==19.4.5
libsass==0.13.3
psycopg2==2.7.3
requests==2.13.0
six==1.10.0
Unipath==1.1
whitenoise==3.0
Django>=2.2,<3.0
django-compressor>=2.4,<3.0
django-crispy-forms>=1.9,<2.0
django-debug-toolbar>=2.2,<3.0
django-sass-processor>=0.8,<1.0
djangorestframework>=3.11,<4.0
gunicorn>=20.0,<21.0
libsass>=0.20.0<1.0
psycopg2>=2.8,<3.0
requests>=2.24,<3.0
six>=1.15,<2.0
Unipath>=1.1,<2.0
whitenoise>=5.1,<6.0

Loading…
Cancel
Save