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

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

@ -13,7 +13,7 @@ def bceid_required(function=None):
def _dec(view_func):
def _view(request, *args, **kwargs):
if not request.user.is_authenticated():
if not request.user.is_authenticated:
return redirect(base_url + '/login')
return view_func(request, *args, **kwargs)
@ -34,7 +34,7 @@ def intercept(function=None):
def _dec(view_func):
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.responses.filter(**terms).exists()):
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
class BasicAuthMiddleware(object):
class BasicAuthMiddleware:
"""
Simple Basic Authentication module to password protect test environments
based on : https://djangosnippets.org/snippets/2468/
@ -14,6 +14,18 @@ class BasicAuthMiddleware(object):
implementation allows environment variables to be used to store
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):
# allow all OpenShift health checks


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

@ -19,9 +19,11 @@ class AnonymousUser():
display_name = ''
has_accepted_terms = False
@property
def is_authenticated(self):
return False
@property
def is_anonymous(self):
return True
@ -29,7 +31,7 @@ class 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
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
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
"""


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

@ -31,7 +31,7 @@ class Migration(migrations.Migration):
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
('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(
@ -46,8 +46,8 @@ class Migration(migrations.Migration):
fields=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=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(
@ -58,11 +58,11 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='formquestions',
name='legal_form',
field=models.ForeignKey(to='core.LegalForm'),
field=models.ForeignKey(to='core.LegalForm', on_delete=models.CASCADE),
),
migrations.AddField(
model_name='formquestions',
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=[
('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=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(


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

@ -35,7 +35,7 @@ class Migration(migrations.Migration):
migrations.AddField(
model_name='userresponse',
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,
),
]

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

@ -24,11 +24,11 @@ class Migration(migrations.Migration):
migrations.AlterField(
model_name='userresponse',
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(
model_name='userresponse',
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)
""" Flag for accepting terms of service """
@property
def is_authenticated(self):
return True
@property
def is_anonymous(self):
return False
@ -91,10 +93,10 @@ class UserResponse(models.Model):
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 """
question = models.ForeignKey(Question, related_name='responses')
question = models.ForeignKey(Question, related_name='responses', on_delete=models.CASCADE)
""" Originating question """
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' %}
{% load staticfiles %}
{% load static %}
{% 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' %}
{% load staticfiles %}
{% load static %}
{% load input_field %}
{% load step_order %}
{% 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:
date = datetime.strptime(value, '%d/%m/%Y')
value = date.strftime('%b %d, %Y')
if context['request'].user.is_authenticated():
if context['request'].user.is_authenticated:
UserResponse.objects.filter(
bceid_user=context['request'].user, question=name
).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:
# 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)
else:
# only prequalification questions can be answered when you
@ -36,7 +36,7 @@ class UserResponseHandler(APIView):
status=status.HTTP_511_NETWORK_AUTHENTICATION_REQUIRED)
save_to_session(request, question, value)
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')
request.user.save()
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.shortcuts import render, redirect
from django.utils import timezone
from django.template import RequestContext
from edivorce.apps.core.utils.derived import get_derived_data
from ..decorators import bceid_required, intercept
@ -38,7 +37,7 @@ def prequalification(request, 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)
else:
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
"""
if request.user.is_authenticated():
if request.user.is_authenticated:
return redirect(settings.PROXY_BASE_URL + settings.FORCE_SCRIPT_NAME[:-1] + '/overview')
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'):
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......
# 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
@ -209,18 +208,18 @@ def question(request, step, sub_step=None):
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
"""
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
"""
return render(request, '500.html', status=500)
return render(request, template_name, status=500)
def legal(request):


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

@ -25,26 +25,26 @@ def current(request):
raise Http404()
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.delete()
request.session.flush()
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.save()
request.user.responses.filter(question__key='want_which_orders').delete()
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.save()
return redirect(reverse('current'))
context = {
'hide_nav': True,
'is_anonymous': request.user.is_anonymous(),
'is_anonymous': request.user.is_anonymous,
}
return render(request, 'dashboard/current.html', context=context)

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

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


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

@ -8,7 +8,7 @@ def openshift_db_config():
engines = {
'sqlite': 'django.db.backends.sqlite3',
'postgresql': 'django.db.backends.postgresql_psycopg2',
'postgresql': 'django.db.backends.postgresql',
'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']:
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')))


+ 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