diff --git a/PyRIGS/settings.py b/PyRIGS/settings.py
index 7f371f3d..54a3d228 100644
--- a/PyRIGS/settings.py
+++ b/PyRIGS/settings.py
@@ -218,8 +218,6 @@ TIME_ZONE = 'Europe/London'
FORMAT_MODULE_PATH = 'PyRIGS.formats'
-USE_I18N = True
-
USE_L10N = True
USE_TZ = True
@@ -264,3 +262,10 @@ TERMS_OF_HIRE_URL = "http://www.nottinghamtec.co.uk/terms.pdf"
AUTHORISATION_NOTIFICATION_ADDRESS = 'productions@nottinghamtec.co.uk'
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
+
+SECURE_HSTS_SECONDS = 3600
+SECURE_HSTS_INCLUDE_SUBDOMAINS = True
+SECURE_CONTENT_TYPE_NOSNIFF = True
+SESSION_COOKIE_SECURE = env('SESSION_COOKIE_SECURE_ENABLED', True)
+CSRF_COOKIE_SECURE = env('CSRF_COOKIE_SECURE_ENABLED', True)
+SECURE_HSTS_PRELOAD = True
diff --git a/PyRIGS/tests/base.py b/PyRIGS/tests/base.py
index d1669d5e..bcf1824c 100644
--- a/PyRIGS/tests/base.py
+++ b/PyRIGS/tests/base.py
@@ -63,7 +63,7 @@ def screenshot_failure(func):
if not pathlib.Path("screenshots").is_dir():
os.mkdir("screenshots")
self.driver.save_screenshot(screenshot_file)
- print("Error in test {} is at path {}".format(screenshot_name, screenshot_file), file=sys.stderr)
+ print(f"Error in test {screenshot_name} is at path {screenshot_file}", file=sys.stderr)
raise e
return wrapper_func
diff --git a/PyRIGS/tests/test_unit.py b/PyRIGS/tests/test_unit.py
index 3ab38567..12207d7d 100644
--- a/PyRIGS/tests/test_unit.py
+++ b/PyRIGS/tests/test_unit.py
@@ -59,8 +59,8 @@ class TestSampleDataGenerator(TestCase):
assert Asset.objects.all().count() > 50
assert Event.objects.all().count() > 100
call_command('deleteSampleData')
- assert Asset.objects.all().count() == 0
- assert Event.objects.all().count() == 0
+ assert not Asset.objects.all().exists()
+ assert not Event.objects.all().exists()
@override_settings(DEBUG=True)
@@ -76,9 +76,9 @@ def test_unauthenticated(client): # Nothing should be available to the unauthen
assertTemplateUsed(response, 'login_redirect.html')
else:
if "embed" in str(url):
- expected_url = "{0}?next={1}".format(reverse('login_embed'), request_url)
+ expected_url = f"{reverse('login_embed')}?next={request_url}"
else:
- expected_url = "{0}?next={1}".format(reverse('login'), request_url)
+ expected_url = f"{reverse('login')}?next={request_url}"
assertRedirects(response, expected_url)
call_command('deleteSampleData')
diff --git a/RIGS/forms.py b/RIGS/forms.py
index 2f548632..9a5f60b6 100644
--- a/RIGS/forms.py
+++ b/RIGS/forms.py
@@ -131,7 +131,7 @@ class BaseClientEventAuthorisationForm(forms.ModelForm):
def clean(self):
if self.cleaned_data.get('amount') != self.instance.event.total:
self.add_error('amount', 'The amount authorised must equal the total for the event (inc VAT).')
- return super(BaseClientEventAuthorisationForm, self).clean()
+ return super().clean()
class Meta:
abstract = True
@@ -179,7 +179,7 @@ class EventRiskAssessmentForm(forms.ModelForm):
unexpected_values.append(f"
{self._meta.model._meta.get_field(field).help_text}")
if len(unexpected_values) > 0 and not self.cleaned_data.get('supervisor_consulted'):
raise forms.ValidationError(f"Your answers to these questions: {''.join([str(elem) for elem in unexpected_values])}
require consulting with a supervisor.", code='unusual_answers')
- return super(EventRiskAssessmentForm, self).clean()
+ return super().clean()
class Meta:
model = models.RiskAssessment
diff --git a/RIGS/templatetags/filters.py b/RIGS/templatetags/filters.py
index b2480d40..73a8c148 100644
--- a/RIGS/templatetags/filters.py
+++ b/RIGS/templatetags/filters.py
@@ -171,7 +171,7 @@ def title_spaced(string):
@register.filter(needs_autoescape=True)
def namewithnotes(obj, url, autoescape=True):
if hasattr(obj, 'notes') and obj.notes is not None and len(obj.notes) > 0:
- return mark_safe(obj.name + " ".format(reverse(url, kwargs={'pk': obj.pk})))
+ return mark_safe(obj.name + f" ")
else:
return obj.name
@@ -183,7 +183,7 @@ def linkornone(target, namespace=None, autoescape=True):
link = namespace + "://" + target
else:
link = target
- return mark_safe("{}".format(link, str(target)))
+ return mark_safe(f"{target}")
else:
return "None"
diff --git a/RIGS/tests/pages.py b/RIGS/tests/pages.py
index 7745c0c1..a2765830 100644
--- a/RIGS/tests/pages.py
+++ b/RIGS/tests/pages.py
@@ -114,7 +114,7 @@ class CreateEvent(FormPage):
}
def select_event_type(self, type_name):
- self.find_element(By.XPATH, '//button[.="{}"]'.format(type_name)).click()
+ self.find_element(By.XPATH, f'//button[.="{type_name}"]').click()
def item_row(self, ID):
return rigs_regions.ItemRow(self, self.find_element(By.ID, "item-" + ID))
diff --git a/RIGS/tests/test_unit.py b/RIGS/tests/test_unit.py
index 3c038e46..461fcaca 100644
--- a/RIGS/tests/test_unit.py
+++ b/RIGS/tests/test_unit.py
@@ -259,7 +259,7 @@ class TestPrintPaperwork(TestCase):
def test_login_redirect(client, django_user_model):
request_url = reverse('event_embed', kwargs={'pk': 1})
- expected_url = "{0}?next={1}".format(reverse('login_embed'), request_url)
+ expected_url = f"{reverse('login_embed')}?next={request_url}"
# Request the page and check it redirects
response = client.get(request_url, follow=True)
@@ -372,7 +372,8 @@ def test_ra_redirect(admin_client, admin_user, ra):
class TestMarkdownTemplateTags(TestCase):
- markdown = open(os.path.join(settings.BASE_DIR, "RIGS/tests/sample.md")).read()
+ with open(os.path.join(settings.BASE_DIR, "RIGS/tests/sample.md")) as f:
+ markdown = f.read()
def test_html_safe(self):
html = markdown_filter(self.markdown)
diff --git a/RIGS/views/hs.py b/RIGS/views/hs.py
index 622b5ad7..225be858 100644
--- a/RIGS/views/hs.py
+++ b/RIGS/views/hs.py
@@ -73,7 +73,7 @@ class EventRiskAssessmentEdit(generic.UpdateView):
return reverse('ra_detail', kwargs={'pk': self.object.pk})
def get_context_data(self, **kwargs):
- context = super(EventRiskAssessmentEdit, self).get_context_data(**kwargs)
+ context = super().get_context_data(**kwargs)
rpk = self.kwargs.get('pk')
ra = models.RiskAssessment.objects.get(pk=rpk)
context['event'] = ra.event
@@ -88,7 +88,7 @@ class EventRiskAssessmentDetail(generic.DetailView):
template_name = 'hs/risk_assessment_detail.html'
def get_context_data(self, **kwargs):
- context = super(EventRiskAssessmentDetail, self).get_context_data(**kwargs)
+ context = super().get_context_data(**kwargs)
context['page_title'] = f"Risk Assessment for Event {self.object.event.display_id} {self.object.event.name}"
return context
@@ -98,7 +98,7 @@ class EventChecklistDetail(generic.DetailView):
template_name = 'hs/event_checklist_detail.html'
def get_context_data(self, **kwargs):
- context = super(EventChecklistDetail, self).get_context_data(**kwargs)
+ context = super().get_context_data(**kwargs)
context['page_title'] = f"Event Checklist for Event {self.object.event.display_id} {self.object.event.name}"
return context
@@ -116,7 +116,7 @@ class EventChecklistEdit(generic.UpdateView):
return reverse('ec_detail', kwargs={'pk': self.object.pk})
def get_context_data(self, **kwargs):
- context = super(EventChecklistEdit, self).get_context_data(**kwargs)
+ context = super().get_context_data(**kwargs)
pk = self.kwargs.get('pk')
ec = models.EventChecklist.objects.get(pk=pk)
context['event'] = ec.event
@@ -223,7 +223,7 @@ class HSList(generic.ListView):
return models.Event.objects.all().exclude(status=models.Event.CANCELLED).order_by('-start_date').select_related('riskassessment').prefetch_related('checklists')
def get_context_data(self, **kwargs):
- context = super(HSList, self).get_context_data(**kwargs)
+ context = super().get_context_data(**kwargs)
context['page_title'] = 'H&S Overview'
return context
diff --git a/training/models.py b/training/models.py
index 9f6fddc8..694af080 100644
--- a/training/models.py
+++ b/training/models.py
@@ -369,7 +369,7 @@ class TrainingLevelQualification(models.Model, RevisionMixin):
return str(self)
def get_absolute_url(self):
- return reverse('trainee_detail', kwargs={'pk': self.trainee.pk})
+ return reverse('trainee_detail', kwargs={'pk': self.trainee_id})
class Meta:
unique_together = ["trainee", "level"]
diff --git a/training/templatetags/tags.py b/training/templatetags/tags.py
index a43ee8fe..30c18fbc 100644
--- a/training/templatetags/tags.py
+++ b/training/templatetags/tags.py
@@ -43,7 +43,7 @@ def confirm_button(user, trainee, level):
if level.user_has_requirements(trainee):
string = "Awaiting Confirmation"
if models.Trainee.objects.get(pk=user.pk).is_supervisor or user.has_perm('training.add_traininglevelqualification'):
- string += "Confirm".format(reverse('confirm_level', kwargs={'pk': trainee.pk, 'level_pk': level.pk}))
+ string += f"Confirm"
return mark_safe(string)
else:
return ""
diff --git a/versioning/urls.py b/versioning/urls.py
index f0551eb0..65081497 100644
--- a/versioning/urls.py
+++ b/versioning/urls.py
@@ -30,15 +30,15 @@ for app in [apps.get_app_config(label) for label in ("RIGS", "assets", "training
modelname = model.__name__.lower()
if appname == 'rigboard':
urlpatterns += [
- path('{}//history/'.format(modelname),
- permission_required_with_403('{}.change_{}'.format(app.label, modelname))(
+ path(f'{modelname}//history/',
+ permission_required_with_403(f'{app.label}.change_{modelname}')(
views.VersionHistory.as_view()),
- name='{}_history'.format(modelname), kwargs={'model': model, 'app': appname, }),
+ name=f'{modelname}_history', kwargs={'model': model, 'app': appname, }),
]
else:
urlpatterns += [
- path('{}/{}//history/'.format(appname, modelname),
- permission_required_with_403('{}.change_{}'.format(app.label, modelname))(
+ path(f'{appname}/{modelname}//history/',
+ permission_required_with_403('{app.label}.change_{modelname}')(
views.VersionHistory.as_view()),
- name='{}_history'.format(modelname), kwargs={'model': model, 'app': appname, }),
+ name=f'{modelname}_history', kwargs={'model': model, 'app': appname, }),
]
diff --git a/versioning/views.py b/versioning/views.py
index d9353971..354d7ccd 100644
--- a/versioning/views.py
+++ b/versioning/views.py
@@ -27,10 +27,10 @@ class VersionHistory(generic.ListView):
return get_object_or_404(self.kwargs['model'], pk=self.kwargs['pk'])
def get_context_data(self, **kwargs):
- context = super(VersionHistory, self).get_context_data(**kwargs)
+ context = super().get_context_data(**kwargs)
context['object'] = self.get_object()
if self.kwargs['app'] != 'rigboard':
- context['override'] = 'base_{}.html'.format(self.kwargs['app'])
+ context['override'] = f'base_{self.kwargs["app"]}.html'
return context
@@ -59,10 +59,10 @@ class ActivityTable(generic.ListView):
return RIGSVersion.objects.get_for_multiple_models(filter_models(self.kwargs.get('models'), self.request.user)).order_by("-revision__date_created")
def get_context_data(self, **kwargs):
- context = super(ActivityTable, self).get_context_data(**kwargs)
- context['page_title'] = "{} Activity Stream".format(title(self.kwargs['app']))
+ context = super().get_context_data(**kwargs)
+ context['page_title'] = f"{title(self.kwargs['app'])} Activity Stream"
if self.kwargs['app'] != 'rigboard':
- context['override'] = 'base_{}.html'.format(self.kwargs['app'])
+ context['override'] = f'base_{self.kwargs["app"]}.html'
return context
@@ -77,7 +77,7 @@ class ActivityFeed(generic.ListView): # Appears on homepage
def get_context_data(self, **kwargs):
# Call the base implementation first to get a context
- context = super(ActivityFeed, self).get_context_data(**kwargs)
+ context = super().get_context_data(**kwargs)
context['page_title'] = "Activity Feed"
maxTimeDelta = datetime.timedelta(hours=1)