Implement some suggestions from the Doctor

This commit is contained in:
2023-05-20 17:02:33 +01:00
parent 0b22669a29
commit 90ae87b1b2
12 changed files with 39 additions and 33 deletions

View File

@@ -218,8 +218,6 @@ TIME_ZONE = 'Europe/London'
FORMAT_MODULE_PATH = 'PyRIGS.formats' FORMAT_MODULE_PATH = 'PyRIGS.formats'
USE_I18N = True
USE_L10N = True USE_L10N = True
USE_TZ = 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' AUTHORISATION_NOTIFICATION_ADDRESS = 'productions@nottinghamtec.co.uk'
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField' 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

View File

@@ -63,7 +63,7 @@ def screenshot_failure(func):
if not pathlib.Path("screenshots").is_dir(): if not pathlib.Path("screenshots").is_dir():
os.mkdir("screenshots") os.mkdir("screenshots")
self.driver.save_screenshot(screenshot_file) 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 raise e
return wrapper_func return wrapper_func

View File

@@ -59,8 +59,8 @@ class TestSampleDataGenerator(TestCase):
assert Asset.objects.all().count() > 50 assert Asset.objects.all().count() > 50
assert Event.objects.all().count() > 100 assert Event.objects.all().count() > 100
call_command('deleteSampleData') call_command('deleteSampleData')
assert Asset.objects.all().count() == 0 assert not Asset.objects.all().exists()
assert Event.objects.all().count() == 0 assert not Event.objects.all().exists()
@override_settings(DEBUG=True) @override_settings(DEBUG=True)
@@ -76,9 +76,9 @@ def test_unauthenticated(client): # Nothing should be available to the unauthen
assertTemplateUsed(response, 'login_redirect.html') assertTemplateUsed(response, 'login_redirect.html')
else: else:
if "embed" in str(url): 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: else:
expected_url = "{0}?next={1}".format(reverse('login'), request_url) expected_url = f"{reverse('login')}?next={request_url}"
assertRedirects(response, expected_url) assertRedirects(response, expected_url)
call_command('deleteSampleData') call_command('deleteSampleData')

View File

@@ -131,7 +131,7 @@ class BaseClientEventAuthorisationForm(forms.ModelForm):
def clean(self): def clean(self):
if self.cleaned_data.get('amount') != self.instance.event.total: 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).') 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: class Meta:
abstract = True abstract = True
@@ -179,7 +179,7 @@ class EventRiskAssessmentForm(forms.ModelForm):
unexpected_values.append(f"<li>{self._meta.model._meta.get_field(field).help_text}</li>") unexpected_values.append(f"<li>{self._meta.model._meta.get_field(field).help_text}</li>")
if len(unexpected_values) > 0 and not self.cleaned_data.get('supervisor_consulted'): if len(unexpected_values) > 0 and not self.cleaned_data.get('supervisor_consulted'):
raise forms.ValidationError(f"Your answers to these questions: <ul>{''.join([str(elem) for elem in unexpected_values])}</ul> require consulting with a supervisor.", code='unusual_answers') raise forms.ValidationError(f"Your answers to these questions: <ul>{''.join([str(elem) for elem in unexpected_values])}</ul> require consulting with a supervisor.", code='unusual_answers')
return super(EventRiskAssessmentForm, self).clean() return super().clean()
class Meta: class Meta:
model = models.RiskAssessment model = models.RiskAssessment

View File

@@ -171,7 +171,7 @@ def title_spaced(string):
@register.filter(needs_autoescape=True) @register.filter(needs_autoescape=True)
def namewithnotes(obj, url, autoescape=True): def namewithnotes(obj, url, autoescape=True):
if hasattr(obj, 'notes') and obj.notes is not None and len(obj.notes) > 0: if hasattr(obj, 'notes') and obj.notes is not None and len(obj.notes) > 0:
return mark_safe(obj.name + " <a href='{}'><span class='fas fa-sticky-note'></span></a>".format(reverse(url, kwargs={'pk': obj.pk}))) return mark_safe(obj.name + f" <a href='{reverse(url, kwargs={'pk': obj.pk})}'><span class='fas fa-sticky-note'></span></a>")
else: else:
return obj.name return obj.name
@@ -183,7 +183,7 @@ def linkornone(target, namespace=None, autoescape=True):
link = namespace + "://" + target link = namespace + "://" + target
else: else:
link = target link = target
return mark_safe("<a href='{}' target='_blank'><span class='overflow-ellipsis'>{}</span></a>".format(link, str(target))) return mark_safe(f"<a href='{link}' target='_blank'><span class='overflow-ellipsis'>{target}</span></a>")
else: else:
return "None" return "None"

View File

@@ -114,7 +114,7 @@ class CreateEvent(FormPage):
} }
def select_event_type(self, type_name): 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): def item_row(self, ID):
return rigs_regions.ItemRow(self, self.find_element(By.ID, "item-" + ID)) return rigs_regions.ItemRow(self, self.find_element(By.ID, "item-" + ID))

View File

@@ -259,7 +259,7 @@ class TestPrintPaperwork(TestCase):
def test_login_redirect(client, django_user_model): def test_login_redirect(client, django_user_model):
request_url = reverse('event_embed', kwargs={'pk': 1}) 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 # Request the page and check it redirects
response = client.get(request_url, follow=True) response = client.get(request_url, follow=True)
@@ -372,7 +372,8 @@ def test_ra_redirect(admin_client, admin_user, ra):
class TestMarkdownTemplateTags(TestCase): 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): def test_html_safe(self):
html = markdown_filter(self.markdown) html = markdown_filter(self.markdown)

View File

@@ -73,7 +73,7 @@ class EventRiskAssessmentEdit(generic.UpdateView):
return reverse('ra_detail', kwargs={'pk': self.object.pk}) return reverse('ra_detail', kwargs={'pk': self.object.pk})
def get_context_data(self, **kwargs): 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') rpk = self.kwargs.get('pk')
ra = models.RiskAssessment.objects.get(pk=rpk) ra = models.RiskAssessment.objects.get(pk=rpk)
context['event'] = ra.event context['event'] = ra.event
@@ -88,7 +88,7 @@ class EventRiskAssessmentDetail(generic.DetailView):
template_name = 'hs/risk_assessment_detail.html' template_name = 'hs/risk_assessment_detail.html'
def get_context_data(self, **kwargs): 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 <a href='{self.object.event.get_absolute_url()}'>{self.object.event.display_id} {self.object.event.name}</a>" context['page_title'] = f"Risk Assessment for Event <a href='{self.object.event.get_absolute_url()}'>{self.object.event.display_id} {self.object.event.name}</a>"
return context return context
@@ -98,7 +98,7 @@ class EventChecklistDetail(generic.DetailView):
template_name = 'hs/event_checklist_detail.html' template_name = 'hs/event_checklist_detail.html'
def get_context_data(self, **kwargs): 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 <a href='{self.object.event.get_absolute_url()}'>{self.object.event.display_id} {self.object.event.name}</a>" context['page_title'] = f"Event Checklist for Event <a href='{self.object.event.get_absolute_url()}'>{self.object.event.display_id} {self.object.event.name}</a>"
return context return context
@@ -116,7 +116,7 @@ class EventChecklistEdit(generic.UpdateView):
return reverse('ec_detail', kwargs={'pk': self.object.pk}) return reverse('ec_detail', kwargs={'pk': self.object.pk})
def get_context_data(self, **kwargs): 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') pk = self.kwargs.get('pk')
ec = models.EventChecklist.objects.get(pk=pk) ec = models.EventChecklist.objects.get(pk=pk)
context['event'] = ec.event 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') 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): 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' context['page_title'] = 'H&S Overview'
return context return context

View File

@@ -369,7 +369,7 @@ class TrainingLevelQualification(models.Model, RevisionMixin):
return str(self) return str(self)
def get_absolute_url(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: class Meta:
unique_together = ["trainee", "level"] unique_together = ["trainee", "level"]

View File

@@ -43,7 +43,7 @@ def confirm_button(user, trainee, level):
if level.user_has_requirements(trainee): if level.user_has_requirements(trainee):
string = "<span class='badge badge-warning p-2'>Awaiting Confirmation</span>" string = "<span class='badge badge-warning p-2'>Awaiting Confirmation</span>"
if models.Trainee.objects.get(pk=user.pk).is_supervisor or user.has_perm('training.add_traininglevelqualification'): if models.Trainee.objects.get(pk=user.pk).is_supervisor or user.has_perm('training.add_traininglevelqualification'):
string += "<a class='btn btn-info' href='{}'>Confirm</a>".format(reverse('confirm_level', kwargs={'pk': trainee.pk, 'level_pk': level.pk})) string += f"<a class='btn btn-info' href='{reverse('confirm_level', kwargs={'pk': trainee.pk, 'level_pk': level.pk})}'>Confirm</a>"
return mark_safe(string) return mark_safe(string)
else: else:
return "" return ""

View File

@@ -30,15 +30,15 @@ for app in [apps.get_app_config(label) for label in ("RIGS", "assets", "training
modelname = model.__name__.lower() modelname = model.__name__.lower()
if appname == 'rigboard': if appname == 'rigboard':
urlpatterns += [ urlpatterns += [
path('{}/<str:pk>/history/'.format(modelname), path(f'{modelname}/<str:pk>/history/',
permission_required_with_403('{}.change_{}'.format(app.label, modelname))( permission_required_with_403(f'{app.label}.change_{modelname}')(
views.VersionHistory.as_view()), views.VersionHistory.as_view()),
name='{}_history'.format(modelname), kwargs={'model': model, 'app': appname, }), name=f'{modelname}_history', kwargs={'model': model, 'app': appname, }),
] ]
else: else:
urlpatterns += [ urlpatterns += [
path('{}/{}/<str:pk>/history/'.format(appname, modelname), path(f'{appname}/{modelname}/<str:pk>/history/',
permission_required_with_403('{}.change_{}'.format(app.label, modelname))( permission_required_with_403('{app.label}.change_{modelname}')(
views.VersionHistory.as_view()), views.VersionHistory.as_view()),
name='{}_history'.format(modelname), kwargs={'model': model, 'app': appname, }), name=f'{modelname}_history', kwargs={'model': model, 'app': appname, }),
] ]

View File

@@ -27,10 +27,10 @@ class VersionHistory(generic.ListView):
return get_object_or_404(self.kwargs['model'], pk=self.kwargs['pk']) return get_object_or_404(self.kwargs['model'], pk=self.kwargs['pk'])
def get_context_data(self, **kwargs): 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() context['object'] = self.get_object()
if self.kwargs['app'] != 'rigboard': if self.kwargs['app'] != 'rigboard':
context['override'] = 'base_{}.html'.format(self.kwargs['app']) context['override'] = f'base_{self.kwargs["app"]}.html'
return context 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") 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): def get_context_data(self, **kwargs):
context = super(ActivityTable, self).get_context_data(**kwargs) context = super().get_context_data(**kwargs)
context['page_title'] = "{} Activity Stream".format(title(self.kwargs['app'])) context['page_title'] = f"{title(self.kwargs['app'])} Activity Stream"
if self.kwargs['app'] != 'rigboard': if self.kwargs['app'] != 'rigboard':
context['override'] = 'base_{}.html'.format(self.kwargs['app']) context['override'] = f'base_{self.kwargs["app"]}.html'
return context return context
@@ -77,7 +77,7 @@ class ActivityFeed(generic.ListView): # Appears on homepage
def get_context_data(self, **kwargs): def get_context_data(self, **kwargs):
# Call the base implementation first to get a context # 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" context['page_title'] = "Activity Feed"
maxTimeDelta = datetime.timedelta(hours=1) maxTimeDelta = datetime.timedelta(hours=1)