From 0117091f3e02bf26c08dbccc3917cb6ba517c235 Mon Sep 17 00:00:00 2001 From: Arona Jones Date: Sat, 19 Nov 2022 15:34:15 +0000 Subject: [PATCH 1/9] FEAT #513: Implement email reminders to complete risk assessments (#514) * FEAT #513: Implement email reminders to complete risk assessments * Add missing f-string tag --- PyRIGS/settings.py | 5 ++- RIGS/management/commands/send_reminders.py | 38 +++++++++++++++++++ RIGS/signals.py | 10 ++--- .../{ => email}/admin_awaiting_approval.html | 0 .../{ => email}/admin_awaiting_approval.txt | 0 .../eventauthorisation_client_request.html | 0 .../eventauthorisation_client_request.txt | 0 .../eventauthorisation_client_success.html | 0 .../eventauthorisation_client_success.txt | 0 .../email/eventauthorisation_mic_success.txt | 5 +++ RIGS/templates/email/ra_reminder.html | 16 ++++++++ RIGS/templates/email/ra_reminder.txt | 9 +++++ .../eventauthorisation_mic_success.txt | 5 --- RIGS/views/rigboard.py | 6 +-- 14 files changed, 79 insertions(+), 15 deletions(-) create mode 100644 RIGS/management/commands/send_reminders.py rename RIGS/templates/{ => email}/admin_awaiting_approval.html (100%) rename RIGS/templates/{ => email}/admin_awaiting_approval.txt (100%) rename RIGS/templates/{ => email}/eventauthorisation_client_request.html (100%) rename RIGS/templates/{ => email}/eventauthorisation_client_request.txt (100%) rename RIGS/templates/{ => email}/eventauthorisation_client_success.html (100%) rename RIGS/templates/{ => email}/eventauthorisation_client_success.txt (100%) create mode 100644 RIGS/templates/email/eventauthorisation_mic_success.txt create mode 100644 RIGS/templates/email/ra_reminder.html create mode 100644 RIGS/templates/email/ra_reminder.txt delete mode 100644 RIGS/templates/eventauthorisation_mic_success.txt diff --git a/PyRIGS/settings.py b/PyRIGS/settings.py index 5db9bf8d..13eb9748 100644 --- a/PyRIGS/settings.py +++ b/PyRIGS/settings.py @@ -42,8 +42,9 @@ if not DEBUG: INTERNAL_IPS = ['127.0.0.1'] -ADMINS = [('Tom Price', 'tomtom5152@gmail.com'), ('IT Manager', 'it@nottinghamtec.co.uk'), - ('Arona Jones', 'arona.jones@nottinghamtec.co.uk')] +DOMAIN = env('DOMAIN', default='example.com') + +ADMINS = [('IT Manager', f'it@{DOMAIN}'), ('Arona Jones', f'arona.jones@{DOMAIN}')] if DEBUG: ADMINS.append(('Testing Superuser', 'superuser@example.com')) diff --git a/RIGS/management/commands/send_reminders.py b/RIGS/management/commands/send_reminders.py new file mode 100644 index 00000000..1334b5cc --- /dev/null +++ b/RIGS/management/commands/send_reminders.py @@ -0,0 +1,38 @@ +import premailer +import datetime + +from django.template.loader import get_template +from django.contrib.staticfiles import finders +from django.conf import settings +from django.core.management.base import BaseCommand, CommandError +from django.core.mail import EmailMultiAlternatives +from django.utils import timezone +from django.urls import reverse + +from RIGS import models + + +class Command(BaseCommand): + help = 'Sends email reminders as required. Triggered daily through heroku-scheduler in production.' + + def handle(self, *args, **options): + events = models.Event.objects.current_events().select_related('riskassessment') + for event in events: + earliest_time = event.earliest_time if isinstance(event.earliest_time, datetime.datetime) else timezone.make_aware(datetime.datetime.combine(event.earliest_time, datetime.time(00, 00))) + # 48 hours = 172800 seconds + if not event.cancelled and not event.dry_hire and (earliest_time - timezone.now()).total_seconds() <= 172800 and not hasattr(event, 'riskassessment'): + context = { + "event": event, + "url": "https://" + settings.DOMAIN + reverse('event_ra', kwargs={'pk': event.pk}) + } + target = event.mic.email if event.mic else f"productions@{settings.DOMAIN}" + msg = EmailMultiAlternatives( + f"{event} - Risk Assessment Incomplete", + get_template("email/ra_reminder.txt").render(context), + to=[target], + reply_to=[f"h.s.manager@{settings.DOMAIN}"], + ) + css = finders.find('css/email.css') + html = premailer.Premailer(get_template("email/ra_reminder.html").render(context), external_styles=css).transform() + msg.attach_alternative(html, 'text/html') + msg.send() diff --git a/RIGS/signals.py b/RIGS/signals.py index 1a9aee51..46793c71 100644 --- a/RIGS/signals.py +++ b/RIGS/signals.py @@ -58,13 +58,13 @@ def send_eventauthorisation_success_email(instance): client_email = EmailMultiAlternatives( subject, - get_template("eventauthorisation_client_success.txt").render(context), + get_template("email/eventauthorisation_client_success.txt").render(context), to=[instance.email], reply_to=[settings.AUTHORISATION_NOTIFICATION_ADDRESS], ) css = finders.find('css/email.css') - html = Premailer(get_template("eventauthorisation_client_success.html").render(context), + html = Premailer(get_template("email/eventauthorisation_client_success.html").render(context), external_styles=css).transform() client_email.attach_alternative(html, 'text/html') @@ -82,7 +82,7 @@ def send_eventauthorisation_success_email(instance): mic_email = EmailMessage( subject, - get_template("eventauthorisation_mic_success.txt").render(context), + get_template("email/eventauthorisation_mic_success.txt").render(context), to=[mic_email_address] ) @@ -117,12 +117,12 @@ def send_admin_awaiting_approval_email(user, request, **kwargs): email = EmailMultiAlternatives( f"{context['number_of_users']} new users awaiting approval on RIGS", - get_template("admin_awaiting_approval.txt").render(context), + get_template("email/admin_awaiting_approval.txt").render(context), to=[admin.email], reply_to=[user.email], ) css = finders.find('css/email.css') - html = Premailer(get_template("admin_awaiting_approval.html").render(context), + html = Premailer(get_template("email/admin_awaiting_approval.html").render(context), external_styles=css).transform() email.attach_alternative(html, 'text/html') email.send() diff --git a/RIGS/templates/admin_awaiting_approval.html b/RIGS/templates/email/admin_awaiting_approval.html similarity index 100% rename from RIGS/templates/admin_awaiting_approval.html rename to RIGS/templates/email/admin_awaiting_approval.html diff --git a/RIGS/templates/admin_awaiting_approval.txt b/RIGS/templates/email/admin_awaiting_approval.txt similarity index 100% rename from RIGS/templates/admin_awaiting_approval.txt rename to RIGS/templates/email/admin_awaiting_approval.txt diff --git a/RIGS/templates/eventauthorisation_client_request.html b/RIGS/templates/email/eventauthorisation_client_request.html similarity index 100% rename from RIGS/templates/eventauthorisation_client_request.html rename to RIGS/templates/email/eventauthorisation_client_request.html diff --git a/RIGS/templates/eventauthorisation_client_request.txt b/RIGS/templates/email/eventauthorisation_client_request.txt similarity index 100% rename from RIGS/templates/eventauthorisation_client_request.txt rename to RIGS/templates/email/eventauthorisation_client_request.txt diff --git a/RIGS/templates/eventauthorisation_client_success.html b/RIGS/templates/email/eventauthorisation_client_success.html similarity index 100% rename from RIGS/templates/eventauthorisation_client_success.html rename to RIGS/templates/email/eventauthorisation_client_success.html diff --git a/RIGS/templates/eventauthorisation_client_success.txt b/RIGS/templates/email/eventauthorisation_client_success.txt similarity index 100% rename from RIGS/templates/eventauthorisation_client_success.txt rename to RIGS/templates/email/eventauthorisation_client_success.txt diff --git a/RIGS/templates/email/eventauthorisation_mic_success.txt b/RIGS/templates/email/eventauthorisation_mic_success.txt new file mode 100644 index 00000000..b4309dd4 --- /dev/null +++ b/RIGS/templates/email/eventauthorisation_mic_success.txt @@ -0,0 +1,5 @@ +Hi {{object.event.mic.get_full_name|default_if_none:"somebody"}}, + +Just to let you know your event N{{object.eventdisplay_id}} has been successfully authorised for £{{object.amount}} by {{object.name}} as of {{object.event.last_edited_at}}. + +The TEC Rig Information Gathering System diff --git a/RIGS/templates/email/ra_reminder.html b/RIGS/templates/email/ra_reminder.html new file mode 100644 index 00000000..e32eae11 --- /dev/null +++ b/RIGS/templates/email/ra_reminder.html @@ -0,0 +1,16 @@ +{% extends 'base_client_email.html' %} + +{% block content %} +

Hi {{event.mic.get_full_name|default_if_none:"Productions Manager"}},

+ + {% if event.mic %} +

Just to let you know your event {{event.display_id}} requires a pre-event risk assessment completing prior to the event. Please do so as soon as possible.

+ {% else %} +

This is a reminder that event {{event.display_id}} requires a MIC assigning and a risk assessment completing.

+ {% endif %} + +

Fill it out here:

+ Create Risk Assessment + +

TEC PA & Lighting

+{% endblock %} diff --git a/RIGS/templates/email/ra_reminder.txt b/RIGS/templates/email/ra_reminder.txt new file mode 100644 index 00000000..9b66e761 --- /dev/null +++ b/RIGS/templates/email/ra_reminder.txt @@ -0,0 +1,9 @@ +Hi {{event.mic.get_full_name|default_if_none:"Productions Manager"}}, + +{% if event.mic %} +Just to let you know your event {{event.display_id}} requires a risk assessment completing prior to the event. Please do so as soon as possible. +{% else %} +This is a reminder that event {{event.display_id}} requires a MIC assigning and a risk assessment completing. +{% endif %} + +The TEC Rig Information Gathering System diff --git a/RIGS/templates/eventauthorisation_mic_success.txt b/RIGS/templates/eventauthorisation_mic_success.txt deleted file mode 100644 index 43ddd5e1..00000000 --- a/RIGS/templates/eventauthorisation_mic_success.txt +++ /dev/null @@ -1,5 +0,0 @@ -Hi {{object.event.mic.get_full_name|default_if_none:"somebody"}}, - -Just to let you know your event N{{object.event.pk|stringformat:"05d"}} has been successfully authorised for £{{object.amount}} by {{object.name}} as of {{object.event.last_edited_at}}. - -The TEC Rig Information Gathering System diff --git a/RIGS/views/rigboard.py b/RIGS/views/rigboard.py index 1a146c47..d60f0c2b 100644 --- a/RIGS/views/rigboard.py +++ b/RIGS/views/rigboard.py @@ -342,12 +342,12 @@ class EventAuthorisationRequest(generic.FormView, generic.detail.SingleObjectMix msg = EmailMultiAlternatives( f"{self.object.display_id} | {self.object.name} - Event Authorisation Request", - get_template("eventauthorisation_client_request.txt").render(context), + get_template("email/eventauthorisation_client_request.txt").render(context), to=[email], reply_to=[self.request.user.email], ) css = finders.find('css/email.css') - html = premailer.Premailer(get_template("eventauthorisation_client_request.html").render(context), + html = premailer.Premailer(get_template("email/eventauthorisation_client_request.html").render(context), external_styles=css).transform() msg.attach_alternative(html, 'text/html') @@ -357,7 +357,7 @@ class EventAuthorisationRequest(generic.FormView, generic.detail.SingleObjectMix class EventAuthoriseRequestEmailPreview(generic.DetailView): - template_name = "eventauthorisation_client_request.html" + template_name = "email/eventauthorisation_client_request.html" model = models.Event def render_to_response(self, context, **response_kwargs): From fa5792914af74174be9064cf0c64cf4424e5949e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Nov 2022 17:33:14 +0000 Subject: [PATCH 2/9] Build(deps): Bump engine.io from 6.2.0 to 6.2.1 (#515) Bumps [engine.io](https://github.com/socketio/engine.io) from 6.2.0 to 6.2.1. - [Release notes](https://github.com/socketio/engine.io/releases) - [Changelog](https://github.com/socketio/engine.io/blob/main/CHANGELOG.md) - [Commits](https://github.com/socketio/engine.io/compare/6.2.0...6.2.1) --- updated-dependencies: - dependency-name: engine.io dependency-type: indirect ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 17e7a529..b849474a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2233,9 +2233,9 @@ } }, "node_modules/engine.io": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", - "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", + "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", "dev": true, "dependencies": { "@types/cookie": "^0.4.1", @@ -10924,9 +10924,9 @@ } }, "engine.io": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.0.tgz", - "integrity": "sha512-4KzwW3F3bk+KlzSOY57fj/Jx6LyRQ1nbcyIadehl+AnXjKT7gDO0ORdRi/84ixvMKTym6ZKuxvbzN62HDDU1Lg==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.2.1.tgz", + "integrity": "sha512-ECceEFcAaNRybd3lsGQKas3ZlMVjN3cyWwMP25D2i0zWfyiytVbTpRPa34qrr+FHddtpBVOmq4H/DCv1O0lZRA==", "dev": true, "requires": { "@types/cookie": "^0.4.1", From a24e6d44957a54ae813d5ada1445dac7ea97862f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 22 Nov 2022 17:33:42 +0000 Subject: [PATCH 3/9] Build(deps): Bump pillow from 9.0.1 to 9.3.0 (#516) Bumps [pillow](https://github.com/python-pillow/Pillow) from 9.0.1 to 9.3.0. - [Release notes](https://github.com/python-pillow/Pillow/releases) - [Changelog](https://github.com/python-pillow/Pillow/blob/main/CHANGES.rst) - [Commits](https://github.com/python-pillow/Pillow/compare/9.0.1...9.3.0) --- updated-dependencies: - dependency-name: pillow dependency-type: direct:production ... Signed-off-by: dependabot[bot] Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Pipfile | 2 +- Pipfile.lock | 151 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 110 insertions(+), 43 deletions(-) diff --git a/Pipfile b/Pipfile index bdf78da9..3e8e57fe 100644 --- a/Pipfile +++ b/Pipfile @@ -34,7 +34,7 @@ idna = "~=2.10" Markdown = "~=3.3.3" msgpack = "~=1.0.2" pep517 = "~=0.9.1" -Pillow = "~=9.0.0" +Pillow = "~=9.3.0" premailer = "~=3.7.0" progress = "~=1.5" psutil = "~=5.8.0" diff --git a/Pipfile.lock b/Pipfile.lock index d78ef139..0bf8a787 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "ddd57e08cdeb2bb155b7ef2924c56190bac2ccd4511febaafcca8cd62a1fe5f2" + "sha256": "8b1245d65cdfb7ee133cb029a31ccd2331214d5ef97cbbad3e47c2e050fcb67f" }, "pipfile-spec": 6, "requires": { @@ -158,6 +158,7 @@ "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14", "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382" ], + "markers": "python_version >= '3.6'", "version": "==2022.9.24" }, "chardet": { @@ -345,6 +346,7 @@ "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d", "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.1" }, "icalendar": { @@ -369,7 +371,6 @@ "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43" ], "index": "pypi", - "markers": "python_version < '3.10'", "version": "==5.0.0" }, "lxml": { @@ -445,6 +446,7 @@ "sha256:fe17d10b97fdf58155f858606bddb4e037b805a60ae023c009f760d8361a4eb8", "sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==4.9.1" }, "markdown": { @@ -518,6 +520,7 @@ "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" ], + "markers": "python_version >= '3.6'", "version": "==21.3" }, "pep517": { @@ -562,58 +565,87 @@ "sha256:e0e66d49f8a85a4e0f915d42471643a5020bcdbef02586e49328ed417c13326a", "sha256:e3dbcecc145d46d37738a407e0ddcce7cfb76d3e116ab3ba9c80f4dd14e71a3d", "sha256:e99a90279a8254fa149d56cd307f94908c7844b2b8b42b61d241259804e40643", + "sha256:ed0c7b4dcb0fec1cdcb4d7a054dd96204fec42fe7c12414ab3235ab16fb4042b", "sha256:efc497cd01c55c5dbdd8a81766e317f44f728b3ceb65d7b6c6a064772c60e1c7", - "sha256:f35cecdab44cb01377e93a60a475bf4437854d98cb94379fcd65c6daa1c9a37e" + "sha256:f35cecdab44cb01377e93a60a475bf4437854d98cb94379fcd65c6daa1c9a37e", + "sha256:f9174a555b94b55d5666264fb3d03858e3faebd8f80f0fa30f0c525266f5bc64" ], "index": "pypi", "version": "==6.2.4" }, "pillow": { "hashes": [ - "sha256:011233e0c42a4a7836498e98c1acf5e744c96a67dd5032a6f666cc1fb97eab97", - "sha256:0f29d831e2151e0b7b39981756d201f7108d3d215896212ffe2e992d06bfe049", - "sha256:12875d118f21cf35604176872447cdb57b07126750a33748bac15e77f90f1f9c", - "sha256:14d4b1341ac07ae07eb2cc682f459bec932a380c3b122f5540432d8977e64eae", - "sha256:1c3c33ac69cf059bbb9d1a71eeaba76781b450bc307e2291f8a4764d779a6b28", - "sha256:1d19397351f73a88904ad1aee421e800fe4bbcd1aeee6435fb62d0a05ccd1030", - "sha256:253e8a302a96df6927310a9d44e6103055e8fb96a6822f8b7f514bb7ef77de56", - "sha256:2632d0f846b7c7600edf53c48f8f9f1e13e62f66a6dbc15191029d950bfed976", - "sha256:335ace1a22325395c4ea88e00ba3dc89ca029bd66bd5a3c382d53e44f0ccd77e", - "sha256:413ce0bbf9fc6278b2d63309dfeefe452835e1c78398efb431bab0672fe9274e", - "sha256:5100b45a4638e3c00e4d2320d3193bdabb2d75e79793af7c3eb139e4f569f16f", - "sha256:514ceac913076feefbeaf89771fd6febde78b0c4c1b23aaeab082c41c694e81b", - "sha256:528a2a692c65dd5cafc130de286030af251d2ee0483a5bf50c9348aefe834e8a", - "sha256:6295f6763749b89c994fcb6d8a7f7ce03c3992e695f89f00b741b4580b199b7e", - "sha256:6c8bc8238a7dfdaf7a75f5ec5a663f4173f8c367e5a39f87e720495e1eed75fa", - "sha256:718856856ba31f14f13ba885ff13874be7fefc53984d2832458f12c38205f7f7", - "sha256:7f7609a718b177bf171ac93cea9fd2ddc0e03e84d8fa4e887bdfc39671d46b00", - "sha256:80ca33961ced9c63358056bd08403ff866512038883e74f3a4bf88ad3eb66838", - "sha256:80fe64a6deb6fcfdf7b8386f2cf216d329be6f2781f7d90304351811fb591360", - "sha256:81c4b81611e3a3cb30e59b0cf05b888c675f97e3adb2c8672c3154047980726b", - "sha256:855c583f268edde09474b081e3ddcd5cf3b20c12f26e0d434e1386cc5d318e7a", - "sha256:9bfdb82cdfeccec50aad441afc332faf8606dfa5e8efd18a6692b5d6e79f00fd", - "sha256:a5d24e1d674dd9d72c66ad3ea9131322819ff86250b30dc5821cbafcfa0b96b4", - "sha256:a9f44cd7e162ac6191491d7249cceb02b8116b0f7e847ee33f739d7cb1ea1f70", - "sha256:b5b3f092fe345c03bca1e0b687dfbb39364b21ebb8ba90e3fa707374b7915204", - "sha256:b9618823bd237c0d2575283f2939655f54d51b4527ec3972907a927acbcc5bfc", - "sha256:cef9c85ccbe9bee00909758936ea841ef12035296c748aaceee535969e27d31b", - "sha256:d21237d0cd37acded35154e29aec853e945950321dd2ffd1a7d86fe686814669", - "sha256:d3c5c79ab7dfce6d88f1ba639b77e77a17ea33a01b07b99840d6ed08031cb2a7", - "sha256:d9d7942b624b04b895cb95af03a23407f17646815495ce4547f0e60e0b06f58e", - "sha256:db6d9fac65bd08cea7f3540b899977c6dee9edad959fa4eaf305940d9cbd861c", - "sha256:ede5af4a2702444a832a800b8eb7f0a7a1c0eed55b644642e049c98d589e5092", - "sha256:effb7749713d5317478bb3acb3f81d9d7c7f86726d41c1facca068a04cf5bb4c", - "sha256:f154d173286a5d1863637a7dcd8c3437bb557520b01bddb0be0258dcb72696b5", - "sha256:f25ed6e28ddf50de7e7ea99d7a976d6a9c415f03adcaac9c41ff6ff41b6d86ac" + "sha256:03150abd92771742d4a8cd6f2fa6246d847dcd2e332a18d0c15cc75bf6703040", + "sha256:073adb2ae23431d3b9bcbcff3fe698b62ed47211d0716b067385538a1b0f28b8", + "sha256:0b07fffc13f474264c336298d1b4ce01d9c5a011415b79d4ee5527bb69ae6f65", + "sha256:0b7257127d646ff8676ec8a15520013a698d1fdc48bc2a79ba4e53df792526f2", + "sha256:12ce4932caf2ddf3e41d17fc9c02d67126935a44b86df6a206cf0d7161548627", + "sha256:15c42fb9dea42465dfd902fb0ecf584b8848ceb28b41ee2b58f866411be33f07", + "sha256:18498994b29e1cf86d505edcb7edbe814d133d2232d256db8c7a8ceb34d18cef", + "sha256:1c7c8ae3864846fc95f4611c78129301e203aaa2af813b703c55d10cc1628535", + "sha256:22b012ea2d065fd163ca096f4e37e47cd8b59cf4b0fd47bfca6abb93df70b34c", + "sha256:276a5ca930c913f714e372b2591a22c4bd3b81a418c0f6635ba832daec1cbcfc", + "sha256:2e0918e03aa0c72ea56edbb00d4d664294815aa11291a11504a377ea018330d3", + "sha256:3033fbe1feb1b59394615a1cafaee85e49d01b51d54de0cbf6aa8e64182518a1", + "sha256:3168434d303babf495d4ba58fc22d6604f6e2afb97adc6a423e917dab828939c", + "sha256:32a44128c4bdca7f31de5be641187367fe2a450ad83b833ef78910397db491aa", + "sha256:3dd6caf940756101205dffc5367babf288a30043d35f80936f9bfb37f8355b32", + "sha256:40e1ce476a7804b0fb74bcfa80b0a2206ea6a882938eaba917f7a0f004b42502", + "sha256:41e0051336807468be450d52b8edd12ac60bebaa97fe10c8b660f116e50b30e4", + "sha256:4390e9ce199fc1951fcfa65795f239a8a4944117b5935a9317fb320e7767b40f", + "sha256:502526a2cbfa431d9fc2a079bdd9061a2397b842bb6bc4239bb176da00993812", + "sha256:51e0e543a33ed92db9f5ef69a0356e0b1a7a6b6a71b80df99f1d181ae5875636", + "sha256:57751894f6618fd4308ed8e0c36c333e2f5469744c34729a27532b3db106ee20", + "sha256:5d77adcd56a42d00cc1be30843d3426aa4e660cab4a61021dc84467123f7a00c", + "sha256:655a83b0058ba47c7c52e4e2df5ecf484c1b0b0349805896dd350cbc416bdd91", + "sha256:68943d632f1f9e3dce98908e873b3a090f6cba1cbb1b892a9e8d97c938871fbe", + "sha256:6c738585d7a9961d8c2821a1eb3dcb978d14e238be3d70f0a706f7fa9316946b", + "sha256:73bd195e43f3fadecfc50c682f5055ec32ee2c933243cafbfdec69ab1aa87cad", + "sha256:772a91fc0e03eaf922c63badeca75e91baa80fe2f5f87bdaed4280662aad25c9", + "sha256:77ec3e7be99629898c9a6d24a09de089fa5356ee408cdffffe62d67bb75fdd72", + "sha256:7db8b751ad307d7cf238f02101e8e36a128a6cb199326e867d1398067381bff4", + "sha256:801ec82e4188e935c7f5e22e006d01611d6b41661bba9fe45b60e7ac1a8f84de", + "sha256:82409ffe29d70fd733ff3c1025a602abb3e67405d41b9403b00b01debc4c9a29", + "sha256:828989c45c245518065a110434246c44a56a8b2b2f6347d1409c787e6e4651ee", + "sha256:829f97c8e258593b9daa80638aee3789b7df9da5cf1336035016d76f03b8860c", + "sha256:871b72c3643e516db4ecf20efe735deb27fe30ca17800e661d769faab45a18d7", + "sha256:89dca0ce00a2b49024df6325925555d406b14aa3efc2f752dbb5940c52c56b11", + "sha256:90fb88843d3902fe7c9586d439d1e8c05258f41da473952aa8b328d8b907498c", + "sha256:97aabc5c50312afa5e0a2b07c17d4ac5e865b250986f8afe2b02d772567a380c", + "sha256:9aaa107275d8527e9d6e7670b64aabaaa36e5b6bd71a1015ddd21da0d4e06448", + "sha256:9f47eabcd2ded7698106b05c2c338672d16a6f2a485e74481f524e2a23c2794b", + "sha256:a0a06a052c5f37b4ed81c613a455a81f9a3a69429b4fd7bb913c3fa98abefc20", + "sha256:ab388aaa3f6ce52ac1cb8e122c4bd46657c15905904b3120a6248b5b8b0bc228", + "sha256:ad58d27a5b0262c0c19b47d54c5802db9b34d38bbf886665b626aff83c74bacd", + "sha256:ae5331c23ce118c53b172fa64a4c037eb83c9165aba3a7ba9ddd3ec9fa64a699", + "sha256:af0372acb5d3598f36ec0914deed2a63f6bcdb7b606da04dc19a88d31bf0c05b", + "sha256:afa4107d1b306cdf8953edde0534562607fe8811b6c4d9a486298ad31de733b2", + "sha256:b03ae6f1a1878233ac620c98f3459f79fd77c7e3c2b20d460284e1fb370557d4", + "sha256:b0915e734b33a474d76c28e07292f196cdf2a590a0d25bcc06e64e545f2d146c", + "sha256:b4012d06c846dc2b80651b120e2cdd787b013deb39c09f407727ba90015c684f", + "sha256:b472b5ea442148d1c3e2209f20f1e0bb0eb556538690fa70b5e1f79fa0ba8dc2", + "sha256:b59430236b8e58840a0dfb4099a0e8717ffb779c952426a69ae435ca1f57210c", + "sha256:b90f7616ea170e92820775ed47e136208e04c967271c9ef615b6fbd08d9af0e3", + "sha256:b9a65733d103311331875c1dca05cb4606997fd33d6acfed695b1232ba1df193", + "sha256:bac18ab8d2d1e6b4ce25e3424f709aceef668347db8637c2296bcf41acb7cf48", + "sha256:bca31dd6014cb8b0b2db1e46081b0ca7d936f856da3b39744aef499db5d84d02", + "sha256:be55f8457cd1eac957af0c3f5ece7bc3f033f89b114ef30f710882717670b2a8", + "sha256:c7025dce65566eb6e89f56c9509d4f628fddcedb131d9465cacd3d8bac337e7e", + "sha256:c935a22a557a560108d780f9a0fc426dd7459940dc54faa49d83249c8d3e760f", + "sha256:dbb8e7f2abee51cef77673be97760abff1674ed32847ce04b4af90f610144c7b", + "sha256:e6ea6b856a74d560d9326c0f5895ef8050126acfdc7ca08ad703eb0081e82b74", + "sha256:ebf2029c1f464c59b8bdbe5143c79fa2045a581ac53679733d3a91d400ff9efb", + "sha256:f1ff2ee69f10f13a9596480335f406dd1f70c3650349e2be67ca3139280cade0" ], "index": "pypi", - "version": "==9.0.1" + "version": "==9.3.0" }, "pluggy": { "hashes": [ "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" ], + "markers": "python_version >= '3.6'", "version": "==1.0.0" }, "premailer": { @@ -832,6 +864,14 @@ "index": "pypi", "version": "==1.11.0" }, + "setuptools": { + "hashes": [ + "sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840", + "sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d" + ], + "markers": "python_version >= '3.7'", + "version": "==65.6.0" + }, "simplejson": { "hashes": [ "sha256:04e31fa6ac8e326480703fb6ded1488bfa6f1d3f760d32e29dbf66d0838982ce", @@ -913,7 +953,6 @@ "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d" ], "index": "pypi", - "markers": "python_version >= '3.0'", "version": "==2.3.2.post1" }, "sqlparse": { @@ -951,6 +990,7 @@ "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" ], + "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.10.2" }, "tornado": { @@ -976,7 +1016,6 @@ "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" ], "index": "pypi", - "markers": "python_version >= '3.6'", "version": "==1.26.12" }, "webencodings": { @@ -1214,6 +1253,7 @@ "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b", "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144" ], + "markers": "python_version >= '3.5'", "version": "==1.10" }, "attrs": { @@ -1221,6 +1261,7 @@ "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6", "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c" ], + "markers": "python_version >= '3.5'", "version": "==22.1.0" }, "certifi": { @@ -1228,6 +1269,7 @@ "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14", "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382" ], + "markers": "python_version >= '3.6'", "version": "==2022.9.24" }, "charset-normalizer": { @@ -1235,9 +1277,13 @@ "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845", "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f" ], + "markers": "python_version >= '3.6'", "version": "==2.1.1" }, "coverage": { + "extras": [ + "toml" + ], "hashes": [ "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", @@ -1290,6 +1336,7 @@ "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84", "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987" ], + "markers": "python_version >= '3.7'", "version": "==6.5.0" }, "coveralls": { @@ -1327,6 +1374,7 @@ "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5", "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142" ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.9.0" }, "h11": { @@ -1334,6 +1382,7 @@ "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" ], + "markers": "python_version >= '3.7'", "version": "==0.14.0" }, "idna": { @@ -1356,6 +1405,7 @@ "sha256:6f82bd3de45da303cf1f771ecafa1633750a358436a8bb60e06a1ceb745d2672", "sha256:c4ab89a56575d6d38a05aa16daeaa333109c1f96167aba8901ab18b6b5e0f7f5" ], + "markers": "python_version >= '3.7'", "version": "==1.2.0" }, "packaging": { @@ -1363,6 +1413,7 @@ "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" ], + "markers": "python_version >= '3.6'", "version": "==21.3" }, "pluggy": { @@ -1370,6 +1421,7 @@ "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" ], + "markers": "python_version >= '3.6'", "version": "==1.0.0" }, "psutil": { @@ -1479,6 +1531,9 @@ "version": "==3.3.2" }, "pytest-xdist": { + "extras": [ + "psutil" + ], "hashes": [ "sha256:688da9b814370e891ba5de650c9327d1a9d861721a524eb917e620eec3e90291", "sha256:9feb9a18e1790696ea23e1434fa73b325ed4998b0e9fcb221f16fd1945e6df1b" @@ -1502,6 +1557,14 @@ "index": "pypi", "version": "==3.141.0" }, + "setuptools": { + "hashes": [ + "sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840", + "sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d" + ], + "markers": "python_version >= '3.7'", + "version": "==65.6.0" + }, "six": { "hashes": [ "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", @@ -1515,6 +1578,7 @@ "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101", "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384" ], + "markers": "python_version >= '3.7'", "version": "==1.3.0" }, "sortedcontainers": { @@ -1536,6 +1600,7 @@ "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" ], + "markers": "python_version < '3.11'", "version": "==2.0.1" }, "trio": { @@ -1543,6 +1608,7 @@ "sha256:ce68f1c5400a47b137c5a4de72c7c901bd4e7a24fbdebfe9b41de8c6c04eaacf", "sha256:f1dd0780a89bfc880c7c7994519cb53f62aacb2c25ff487001c0052bd721cdf0" ], + "markers": "python_version >= '3.7'", "version": "==0.22.0" }, "trio-websocket": { @@ -1550,6 +1616,7 @@ "sha256:5b558f6e83cc20a37c3b61202476c5295d1addf57bd65543364e0337e37ed2bc", "sha256:a3d34de8fac26023eee701ed1e7bf4da9a8326b61a62934ec9e53b64970fd8fe" ], + "markers": "python_version >= '3.5'", "version": "==0.9.2" }, "urllib3": { @@ -1558,7 +1625,6 @@ "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" ], "index": "pypi", - "markers": "python_version >= '3.6'", "version": "==1.26.12" }, "wsproto": { @@ -1566,6 +1632,7 @@ "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065", "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736" ], + "markers": "python_version >= '3.7'", "version": "==1.2.0" }, "zope.component": { From d69543e309f3d32fb2451084d09c4a08bc50223e Mon Sep 17 00:00:00 2001 From: Arona Jones Date: Sat, 26 Nov 2022 12:54:42 +0000 Subject: [PATCH 4/9] FIX: Only require login to view training profiles Previously required a specific permission only granted to keyholders --- training/urls.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/training/urls.py b/training/urls.py index 4fefe353..de0dd2e6 100644 --- a/training/urls.py +++ b/training/urls.py @@ -2,7 +2,6 @@ from django.urls import path from django.contrib.auth.decorators import login_required from training.decorators import is_supervisor -from PyRIGS.decorators import permission_required_with_403 from training import views, models from versioning.views import VersionHistory @@ -12,10 +11,9 @@ urlpatterns = [ path('item//qualified_users/', login_required(views.ItemQualifications.as_view()), name='item_qualification'), path('trainee/list/', login_required(views.TraineeList.as_view()), name='trainee_list'), - path('trainee//', - permission_required_with_403('RIGS.view_profile')(views.TraineeDetail.as_view()), + path('trainee//', login_required(views.TraineeDetail.as_view()), name='trainee_detail'), - path('trainee//history', permission_required_with_403('RIGS.view_profile')(VersionHistory.as_view()), name='trainee_history', kwargs={'model': models.Trainee, 'app': 'training'}), # Not picked up automatically because proxy model (I think) + path('trainee//history', login_required(VersionHistory.as_view()), name='trainee_history', kwargs={'model': models.Trainee, 'app': 'training'}), # Not picked up automatically because proxy model (I think) path('trainee//add_qualification/', is_supervisor()(views.AddQualification.as_view()), name='add_qualification'), path('trainee/edit_qualification//', is_supervisor()(views.EditQualification.as_view()), From fa1dc316398de7f134f75d93ef3314e47728213f Mon Sep 17 00:00:00 2001 From: Arona Jones Date: Sat, 26 Nov 2022 12:58:15 +0000 Subject: [PATCH 5/9] FIX: Only require login for viewing RAs/ECs --- RIGS/urls.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/RIGS/urls.py b/RIGS/urls.py index b67e3c93..4f4577da 100644 --- a/RIGS/urls.py +++ b/RIGS/urls.py @@ -75,7 +75,7 @@ urlpatterns = [ path('event//ra/', permission_required_with_403('RIGS.add_riskassessment')(views.EventRiskAssessmentCreate.as_view()), name='event_ra'), - path('event/ra//', permission_required_with_403('RIGS.view_riskassessment')(views.EventRiskAssessmentDetail.as_view()), + path('event/ra//', login_required(views.EventRiskAssessmentDetail.as_view()), name='ra_detail'), path('event/ra//edit/', permission_required_with_403('RIGS.change_riskassessment')(views.EventRiskAssessmentEdit.as_view()), name='ra_edit'), @@ -87,7 +87,7 @@ urlpatterns = [ path('event//checklist/', permission_required_with_403('RIGS.add_eventchecklist')(views.EventChecklistCreate.as_view()), name='event_ec'), - path('event/checklist//', permission_required_with_403('RIGS.view_eventchecklist')(views.EventChecklistDetail.as_view()), + path('event/checklist//', login_required(views.EventChecklistDetail.as_view()), name='ec_detail'), path('event/checklist//edit/', permission_required_with_403('RIGS.change_eventchecklist')(views.EventChecklistEdit.as_view()), name='ec_edit'), From 626779ef25a31b0f2389f05f706f08f907d1537a Mon Sep 17 00:00:00 2001 From: FreneticScribbler Date: Mon, 5 Dec 2022 21:30:24 +0000 Subject: [PATCH 6/9] Turn off RA reminders for non-rigs --- RIGS/management/commands/send_reminders.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RIGS/management/commands/send_reminders.py b/RIGS/management/commands/send_reminders.py index 1334b5cc..4f38d734 100644 --- a/RIGS/management/commands/send_reminders.py +++ b/RIGS/management/commands/send_reminders.py @@ -20,7 +20,7 @@ class Command(BaseCommand): for event in events: earliest_time = event.earliest_time if isinstance(event.earliest_time, datetime.datetime) else timezone.make_aware(datetime.datetime.combine(event.earliest_time, datetime.time(00, 00))) # 48 hours = 172800 seconds - if not event.cancelled and not event.dry_hire and (earliest_time - timezone.now()).total_seconds() <= 172800 and not hasattr(event, 'riskassessment'): + if event.is_rig and not event.cancelled and not event.dry_hire and (earliest_time - timezone.now()).total_seconds() <= 172800 and not hasattr(event, 'riskassessment'): context = { "event": event, "url": "https://" + settings.DOMAIN + reverse('event_ra', kwargs={'pk': event.pk}) From e3d8cf89785c7178379c5b19384848f023fa2ce2 Mon Sep 17 00:00:00 2001 From: FreneticScribbler Date: Sun, 11 Dec 2022 00:19:32 +0000 Subject: [PATCH 7/9] Dependency update --- Pipfile | 2 +- Pipfile.lock | 209 +++++++++++++++++----------------------------- package-lock.json | 12 +-- 3 files changed, 85 insertions(+), 138 deletions(-) diff --git a/Pipfile b/Pipfile index 3e8e57fe..71085f8c 100644 --- a/Pipfile +++ b/Pipfile @@ -27,7 +27,7 @@ django-registration-redux = "~=2.9" django-reversion = "~=3.0.9" django-widget-tweaks = "~=1.4.8" django-htmlmin = "~=0.11.0" -envparse = "~=0.2.0" +envparse = "*" gunicorn = "~=20.0.4" icalendar = "~=4.0.7" idna = "~=2.10" diff --git a/Pipfile.lock b/Pipfile.lock index 0bf8a787..dc213e09 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "8b1245d65cdfb7ee133cb029a31ccd2331214d5ef97cbbad3e47c2e050fcb67f" + "sha256": "2e2fb4b609c10fc42db6bbd69ca73800629fbcaceec664e1fcc79d4b37bc0eb1" }, "pipfile-spec": 6, "requires": { @@ -155,11 +155,10 @@ }, "certifi": { "hashes": [ - "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14", - "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382" + "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", + "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" ], - "markers": "python_version >= '3.6'", - "version": "==2022.9.24" + "version": "==2022.12.7" }, "chardet": { "hashes": [ @@ -241,11 +240,11 @@ }, "django-debug-toolbar": { "hashes": [ - "sha256:1e3acad24e3d351ba45c6fa2072e4164820307332a776b16c9f06d1f89503465", - "sha256:80de23066b624d3970fd296cf02d61988e5d56c31aa0dc4a428970b46e2883a8" + "sha256:24ef1a7d44d25e60d7951e378454c6509bf536dce7e7d9d36e7c387db499bc27", + "sha256:879f8a4672d41621c06a4d322dcffa630fc4df056cada6e417ed01db0e5e0478" ], "index": "pypi", - "version": "==3.7.0" + "version": "==3.8.1" }, "django-filter": { "hashes": [ @@ -346,7 +345,6 @@ "sha256:0d78f8fde1c230e99fe37986a60526d7049ed4bf8a9fadbad5f00e22e58e041d", "sha256:b2e5b40261e20f354d198eae92afc10d750afb487ed5e50f9c4eaf07c184146f" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.1" }, "icalendar": { @@ -367,11 +365,12 @@ }, "importlib-metadata": { "hashes": [ - "sha256:da31db32b304314d044d3c12c79bd59e307889b287ad12ff387b3500835fc2ab", - "sha256:ddb0e35065e8938f867ed4928d0ae5bf2a53b7773871bfe6bcc7e4fcdc7dea43" + "sha256:d5059f9f1e8e41f80e9c56c2ee58811450c31984dfa625329ffd7c0dad88a73b", + "sha256:d84d17e21670ec07990e1044a99efe8d615d860fd176fc29ef5c306068fda313" ], "index": "pypi", - "version": "==5.0.0" + "markers": "python_version < '3.10'", + "version": "==5.1.0" }, "lxml": { "hashes": [ @@ -446,7 +445,6 @@ "sha256:fe17d10b97fdf58155f858606bddb4e037b805a60ae023c009f760d8361a4eb8", "sha256:fe749b052bb7233fe5d072fcb549221a8cb1a16725c47c37e42b0b9cb3ff2c3f" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==4.9.1" }, "markdown": { @@ -517,11 +515,10 @@ }, "packaging": { "hashes": [ - "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", - "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" + "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3", + "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3" ], - "markers": "python_version >= '3.6'", - "version": "==21.3" + "version": "==22.0" }, "pep517": { "hashes": [ @@ -533,45 +530,45 @@ }, "pikepdf": { "hashes": [ - "sha256:0207442d9b943efec7eb07ea5b3f138d90cc61429a3c3243902ac909cb508fb2", - "sha256:0709832cc49ef51f004975e6e9bdc6daee8a8d68de621d428f13c95a83952e7f", - "sha256:07448689cc4c1e249e26ae694a2060210948e61035356cca3a5b8baf3a6a147d", - "sha256:0bbf45e702bb0556d705e1a4b5da391921e024cc1e6823675f2ea200acec1199", - "sha256:1376f3f4b1c34ac089a644af2e499ca713e4e4ec17035362350c0ec78ca6286e", - "sha256:15725f1bf572abb9a675f61874da66dc22144e74f374f7e8d023558e8c9c3f38", - "sha256:18383d8e6a620c52974b75034ad99c423f80468a434b52de456bb74d5ab51360", - "sha256:1dedbb95bb2c67d6923c91cdcd5a92703d10e4c4825d85cd7b8b474039978741", - "sha256:2035b39d2e5c97b6d9ede632f514403888e3f47d2b1e8b69b98420766ccb898b", - "sha256:2dd952e678dfc523f2c481c3d0a29b9823f07024f73dea7e9c03d2ac6592a61c", - "sha256:3d06dabf16592bb7975e1124000212c3c3bab1e97ed3f7c6534ea92efe9b621a", - "sha256:40999c3f48e5d0259662f6f708694d3ace43b01b4a2a197cfed5cf230557b116", - "sha256:46c7c9a7128d1751eedbe769dbc6c0a7983eccded74fd7d1e236d83a50c9cc58", - "sha256:529d4d099eecbdaa3e06490a032954ce96feae2596c1ea22f961dbf791444a3c", - "sha256:5887799a29510b53c7015b05d7276ee2e0f0ff1d782c75c3a3d1d9f68013665e", - "sha256:5c2de883986ef25e2e9b8ded8e5c285cb390950742164ce1bf116158009cd9c9", - "sha256:62a8c05876b9c7af4cad0ba9a8f22c77775bcceb118c35d682735955f5485297", - "sha256:6df4510606546c9c995afe3f799c506fe90798602b0628affffb7e1516fa1062", - "sha256:746897cbfc0c200de6be428a4e92dee72d0e03e1ff00d56006ee94fb59be199d", - "sha256:801100d8b4b885a203e76bc7266296f909944d621e6a0ac480fa2a0a0e0b1bb4", - "sha256:823f8b1cbad1182709d81afa32c23ac37b9c8ed33bdbc2b41f674be9420dc108", - "sha256:94057ca79525ba5eb5cc9c42337364f0e9e5f239887c0457dffb4ba3e6ac0187", - "sha256:9b1ba16cc5eb243c5e684c220752358a8e1e28a4e02ecdf2c3d24646f29c623f", - "sha256:9c9d75bb77dfe9b6f8915bc5339cfb0db427c3cb7cd75aa419b1da3c82f122ed", - "sha256:a0b78071d5fcd6b2288da469e89c030475095349dd57d82f5c40c37600d02e14", - "sha256:a1679c7d5b374895b6196784a75b8122ca0bb9248f5d97cd5ed77c569e264e88", - "sha256:ab8d610ca732a6369479605817cc55ee6f62d5b105ffe7e3749c3785c383631e", - "sha256:aff2ce52f0ab4ea8a1fbe57b06982b9fa9f997dd6bbec4b141091a1e71145a63", - "sha256:bc9b625f5ed454f445bf5012682b24d334adc9f853d41e44cfee7c52ddf92666", - "sha256:e0e66d49f8a85a4e0f915d42471643a5020bcdbef02586e49328ed417c13326a", - "sha256:e3dbcecc145d46d37738a407e0ddcce7cfb76d3e116ab3ba9c80f4dd14e71a3d", - "sha256:e99a90279a8254fa149d56cd307f94908c7844b2b8b42b61d241259804e40643", - "sha256:ed0c7b4dcb0fec1cdcb4d7a054dd96204fec42fe7c12414ab3235ab16fb4042b", - "sha256:efc497cd01c55c5dbdd8a81766e317f44f728b3ceb65d7b6c6a064772c60e1c7", - "sha256:f35cecdab44cb01377e93a60a475bf4437854d98cb94379fcd65c6daa1c9a37e", - "sha256:f9174a555b94b55d5666264fb3d03858e3faebd8f80f0fa30f0c525266f5bc64" + "sha256:08ca2566c3ddcb633bbfb90c9e2b7134f222ab48f642f056c266fd69a4c0844e", + "sha256:15eff12d7b5dc4eeeb9fbe5148d5e93cdc9f632a352d7df5191409837cdada6f", + "sha256:24717a49cab8cf0ccb360ae38fefe4b09e23d394086ef6da740071165a2542d8", + "sha256:2c1a3a1ae0d787a6819ffb9d456b0ccbf2b8d48ad8b0748f765a6a306b92184b", + "sha256:2c653bc771cc6065642f5a734ecb771ff16b5412cf05a5c3435072ac01f84fbe", + "sha256:2e9c9cc68bc123b88007b321a494ab054c3ce378ee2f77bba1b90c8bdaaad59e", + "sha256:32a7775f8b2117e72fa101427edf4526f0886e785146a7bfdf2a877d27f94dbf", + "sha256:4675c743ac873d8a1ff9d06c1d5fab15e9ca66aa1abf73fcbca4b86c976b214e", + "sha256:4800fd878876d9a780e2d1125e971d680a0de466440bd6bcbc54ac7cfb925fd6", + "sha256:5b1271b200ece3e16ffa97c76ff93c057d3676f2ecee89ae52efd5e4804874ab", + "sha256:5b1c975d02e75aa8a0e09679ed23f85b6eddf91ac7c85189dc18f1ef8599ce70", + "sha256:5b295d9579081ab46ce7bb463eccbc62e0c60cbe546f29c0a9135abd5cf76a24", + "sha256:5f040aa7d9327b6d9087848dc8e35d2b8515bf17a04e2bdb20f8c51931810213", + "sha256:62d724e37a2f004f63615513d3f877334e679dd43b6c55cdfe9b8af56ff52400", + "sha256:6452fa9d10b15bb60b2343b7ac08123e0c5b87f852250538d32bf556f09b8c3a", + "sha256:66679ee6b364b3b9659a72697e053554e2f4c231371173745b59114f00a821e5", + "sha256:6b21fde29bd006cb0889e05a0407f0825b5650ae22272ba70720fc68a2e44a0e", + "sha256:788df6789df19a381976f6644b78a65da92c5d4fd45714682a1cffb0cd3ff410", + "sha256:7a6de8d04df3dc4f37ddbdfdbecdb4c3d20d479699260902ec06fa531cbfbae6", + "sha256:80a4546f59bb38121c20fc37305a388b8f9d561c6bbcc77a3415afdd8a7ab16d", + "sha256:856e527970fa2516858662906173004568a38f95b46ef95c8231c529f3e71581", + "sha256:8874d4d38b2da71837352576c5ec10c03b2a7976124b95721564d8c456c9824b", + "sha256:913437609c3e5b9109a2fe1100f52bdcead4e56e8c83ca8a9c3b520cd7720016", + "sha256:91fd023805733163927ae04b16d48374f04f03f204f2cfa45d442b052314de83", + "sha256:9d9fe5e3fbd54a45fe7678c08d24c1e8347a1e48adcb4f32c6c25ef380f056ca", + "sha256:a98fcebb4303b8b2f5cde0d56f2406a53e74a9ad4bc1e1bc12bdc2b3dd4def1f", + "sha256:aa7d3831fa016634f2ead255717644ba2dddf462117b8558b783ac2ba94583bb", + "sha256:ae0ba99841d80107becaec6ed067b63c455f51a9bb83b0e88efd3a098753735b", + "sha256:b77e2e134315d25dd004b4ffbd2d5032352da164b21bc3bd92768379610fa2b5", + "sha256:c5a2710aacb1fa25edd77feba51dcadf85a9b735f2190e8b45edf0e1e79b5d1d", + "sha256:c768e55caf96024218866a5b5f95fdded2ef001b2d5463d1c89e57d07bdab928", + "sha256:d55b1d8eb3b17e55682b91c042c48e2d0c67be4c1e30b7e539a82e03977eed29", + "sha256:d57a35b3ed3f8ef98aa528d4981d1376ccc1ba64ab937f2ac2ed0aadee1d5911", + "sha256:e35110f69406e5b9cf6330d16106877372f6aa955fdc1a920d53babcd6a5ae3d", + "sha256:e3ff858d504312ea07519121d3ecdf1b5bc40541f957d2b85d271a2ca6284b70", + "sha256:f721cd86d8ddf0624306fcd1fed3e086387fcb2e32baeafbd1ba92a7c40c5563" ], "index": "pypi", - "version": "==6.2.4" + "version": "==6.2.5" }, "pillow": { "hashes": [ @@ -645,7 +642,6 @@ "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" ], - "markers": "python_version >= '3.6'", "version": "==1.0.0" }, "premailer": { @@ -843,10 +839,11 @@ }, "retrying": { "hashes": [ - "sha256:08c039560a6da2fe4f2c426d0766e284d3b736e355f8dd24b37367b0bb41973b" + "sha256:345da8c5765bd982b1d1915deb9102fd3d1f7ad16bd84a9700b85f64d24e8f3e", + "sha256:8cc4d43cb8e1125e0ff3344e9de678fefd85db3b750b81b2240dc0183af37b35" ], "index": "pypi", - "version": "==1.3.3" + "version": "==1.3.4" }, "selenium": { "hashes": [ @@ -858,19 +855,11 @@ }, "sentry-sdk": { "hashes": [ - "sha256:e7b78a1ddf97a5f715a50ab8c3f7a93f78b114c67307785ee828ef67a5d6f117", - "sha256:f467e6c7fac23d4d42bc83eb049c400f756cd2d65ab44f0cc1165d0c7c3d40bc" + "sha256:675f6279b6bb1fea09fd61751061f9a90dca3b5929ef631dd50dc8b3aeb245e9", + "sha256:8b4ff696c0bdcceb3f70bbb87a57ba84fd3168b1332d493fcd16c137f709578c" ], "index": "pypi", - "version": "==1.11.0" - }, - "setuptools": { - "hashes": [ - "sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840", - "sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d" - ], - "markers": "python_version >= '3.7'", - "version": "==65.6.0" + "version": "==1.11.1" }, "simplejson": { "hashes": [ @@ -953,6 +942,7 @@ "sha256:fc53893b3da2c33de295667a0e19f078c14bf86544af307354de5fcf12a3f30d" ], "index": "pypi", + "markers": "python_version >= '3.0'", "version": "==2.3.2.post1" }, "sqlparse": { @@ -990,7 +980,6 @@ "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f" ], - "markers": "python_version >= '2.6' and python_version not in '3.0, 3.1, 3.2, 3.3'", "version": "==0.10.2" }, "tornado": { @@ -1012,11 +1001,12 @@ }, "urllib3": { "hashes": [ - "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e", - "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" + "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc", + "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8" ], "index": "pypi", - "version": "==1.26.12" + "markers": "python_version >= '3.6'", + "version": "==1.26.13" }, "webencodings": { "hashes": [ @@ -1253,7 +1243,6 @@ "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b", "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144" ], - "markers": "python_version >= '3.5'", "version": "==1.10" }, "attrs": { @@ -1261,29 +1250,23 @@ "sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6", "sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c" ], - "markers": "python_version >= '3.5'", "version": "==22.1.0" }, "certifi": { "hashes": [ - "sha256:0d9c601124e5a6ba9712dbc60d9c53c21e34f5f641fe83002317394311bdce14", - "sha256:90c1a32f1d68f940488354e36370f6cca89f0f106db09518524c88d6ed83f382" + "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", + "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" ], - "markers": "python_version >= '3.6'", - "version": "==2022.9.24" + "version": "==2022.12.7" }, "charset-normalizer": { "hashes": [ "sha256:5a3d016c7c547f69d6f81fb0db9449ce888b418b5b9952cc5e6e66843e9dd845", "sha256:83e9a75d1911279afd89352c68b45348559d1fc0506b054b346651b5e7fee29f" ], - "markers": "python_version >= '3.6'", "version": "==2.1.1" }, "coverage": { - "extras": [ - "toml" - ], "hashes": [ "sha256:027018943386e7b942fa832372ebc120155fd970837489896099f5cfa2890f79", "sha256:11b990d520ea75e7ee8dcab5bc908072aaada194a794db9f6d7d5cfd19661e5a", @@ -1336,7 +1319,6 @@ "sha256:f642e90754ee3e06b0e7e51bce3379590e76b7f76b708e1a71ff043f87025c84", "sha256:fc2af30ed0d5ae0b1abdb4ebdce598eafd5b35397d4d75deb341a614d333d987" ], - "markers": "python_version >= '3.7'", "version": "==6.5.0" }, "coveralls": { @@ -1349,11 +1331,11 @@ }, "django-coverage-plugin": { "hashes": [ - "sha256:3b0aa1ed26b52c5844c88510995f4a4b60b4fb0679970d11f82654bb8a2bd16a", - "sha256:f662efe592bf98baf2e540312059c918daa8d8379244a2a6b6f984c4a1dda015" + "sha256:245ecd6e91e5be7a66e0f811fd57091c46b55c0eb85c7fe1a1e4aebca9842a5f", + "sha256:c063d8d49ba2da30fe95d91cf3f0f9f659b55c3f80d4a029d619b2b3144b1206" ], "index": "pypi", - "version": "==2.0.4" + "version": "==3.0.0" }, "docopt": { "hashes": [ @@ -1374,7 +1356,6 @@ "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5", "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142" ], - "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", "version": "==1.9.0" }, "h11": { @@ -1382,7 +1363,6 @@ "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d", "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761" ], - "markers": "python_version >= '3.7'", "version": "==0.14.0" }, "idna": { @@ -1405,23 +1385,20 @@ "sha256:6f82bd3de45da303cf1f771ecafa1633750a358436a8bb60e06a1ceb745d2672", "sha256:c4ab89a56575d6d38a05aa16daeaa333109c1f96167aba8901ab18b6b5e0f7f5" ], - "markers": "python_version >= '3.7'", "version": "==1.2.0" }, "packaging": { "hashes": [ - "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb", - "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522" + "sha256:2198ec20bd4c017b8f9717e00f0c8714076fc2fd93816750ab48e2c41de2cfd3", + "sha256:957e2148ba0e1a3b282772e791ef1d8083648bc131c8ab0c1feba110ce1146c3" ], - "markers": "python_version >= '3.6'", - "version": "==21.3" + "version": "==22.0" }, "pluggy": { "hashes": [ "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" ], - "markers": "python_version >= '3.6'", "version": "==1.0.0" }, "psutil": { @@ -1466,14 +1443,6 @@ "index": "pypi", "version": "==2.9.1" }, - "pyparsing": { - "hashes": [ - "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1", - "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b" - ], - "index": "pypi", - "version": "==2.4.7" - }, "pypom": { "hashes": [ "sha256:5da52cf447e62f43a0cfa47dfe52eb822eff07b2fdad759f930d1d227c15220b", @@ -1531,15 +1500,12 @@ "version": "==3.3.2" }, "pytest-xdist": { - "extras": [ - "psutil" - ], "hashes": [ - "sha256:688da9b814370e891ba5de650c9327d1a9d861721a524eb917e620eec3e90291", - "sha256:9feb9a18e1790696ea23e1434fa73b325ed4998b0e9fcb221f16fd1945e6df1b" + "sha256:40fdb8f3544921c5dfcd486ac080ce22870e71d82ced6d2e78fa97c2addd480c", + "sha256:70a76f191d8a1d2d6be69fc440cdf85f3e4c03c08b520fd5dc5d338d6cf07d89" ], "index": "pypi", - "version": "==3.0.2" + "version": "==3.1.0" }, "requests": { "hashes": [ @@ -1557,28 +1523,11 @@ "index": "pypi", "version": "==3.141.0" }, - "setuptools": { - "hashes": [ - "sha256:6211d2f5eddad8757bd0484923ca7c0a6302ebc4ab32ea5e94357176e0ca0840", - "sha256:d1eebf881c6114e51df1664bc2c9133d022f78d12d5f4f665b9191f084e2862d" - ], - "markers": "python_version >= '3.7'", - "version": "==65.6.0" - }, - "six": { - "hashes": [ - "sha256:30639c035cdb23534cd4aa2dd52c3bf48f06e5f4a941509c8bafd8ce11080259", - "sha256:8b74bedcbbbaca38ff6d7491d76f2b06b3592611af620f8426e82dddb04a5ced" - ], - "index": "pypi", - "version": "==1.15.0" - }, "sniffio": { "hashes": [ "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101", "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384" ], - "markers": "python_version >= '3.7'", "version": "==1.3.0" }, "sortedcontainers": { @@ -1608,7 +1557,6 @@ "sha256:ce68f1c5400a47b137c5a4de72c7c901bd4e7a24fbdebfe9b41de8c6c04eaacf", "sha256:f1dd0780a89bfc880c7c7994519cb53f62aacb2c25ff487001c0052bd721cdf0" ], - "markers": "python_version >= '3.7'", "version": "==0.22.0" }, "trio-websocket": { @@ -1616,23 +1564,22 @@ "sha256:5b558f6e83cc20a37c3b61202476c5295d1addf57bd65543364e0337e37ed2bc", "sha256:a3d34de8fac26023eee701ed1e7bf4da9a8326b61a62934ec9e53b64970fd8fe" ], - "markers": "python_version >= '3.5'", "version": "==0.9.2" }, "urllib3": { "hashes": [ - "sha256:3fa96cf423e6987997fc326ae8df396db2a8b7c667747d47ddd8ecba91f4a74e", - "sha256:b930dd878d5a8afb066a637fbb35144fe7901e3b209d1cd4f524bd0e9deee997" + "sha256:47cc05d99aaa09c9e72ed5809b60e7ba354e64b59c9c173ac3018642d8bb41fc", + "sha256:c083dd0dce68dbfbe1129d5271cb90f9447dea7d52097c6e0126120c521ddea8" ], "index": "pypi", - "version": "==1.26.12" + "markers": "python_version >= '3.6'", + "version": "==1.26.13" }, "wsproto": { "hashes": [ "sha256:ad565f26ecb92588a3e43bc3d96164de84cd9902482b130d0ddbaa9664a85065", "sha256:b9acddd652b585d75b20477888c56642fdade28bdfd3579aa24a4d2c037dd736" ], - "markers": "python_version >= '3.7'", "version": "==1.2.0" }, "zope.component": { diff --git a/package-lock.json b/package-lock.json index b849474a..c2b8c794 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1931,9 +1931,9 @@ } }, "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", "engines": { "node": ">=0.10" } @@ -10687,9 +10687,9 @@ } }, "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==" }, "default-compare": { "version": "1.0.0", From a4a28a6130a86a884d18edf8cd870ad4af628d87 Mon Sep 17 00:00:00 2001 From: FreneticScribbler Date: Sun, 11 Dec 2022 00:29:30 +0000 Subject: [PATCH 8/9] Add nickname field to assets Seems necessary given all the lights and some of the amps and distros have names :-) --- assets/migrations/0027_asset_nickname.py | 18 ++++++++++++++++++ assets/models.py | 3 ++- .../templates/partials/asset_detail_form.html | 9 ++++++++- 3 files changed, 28 insertions(+), 2 deletions(-) create mode 100644 assets/migrations/0027_asset_nickname.py diff --git a/assets/migrations/0027_asset_nickname.py b/assets/migrations/0027_asset_nickname.py new file mode 100644 index 00000000..630d2367 --- /dev/null +++ b/assets/migrations/0027_asset_nickname.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.16 on 2022-12-11 00:26 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('assets', '0026_auto_20220526_1623'), + ] + + operations = [ + migrations.AddField( + model_name='asset', + name='nickname', + field=models.CharField(blank=True, max_length=120), + ), + ] diff --git a/assets/models.py b/assets/models.py index 365fd5d6..ef535fa4 100644 --- a/assets/models.py +++ b/assets/models.py @@ -95,7 +95,7 @@ class AssetManager(models.Manager): def search(self, query=None): qs = self.get_queryset() if query is not None: - or_lookup = (Q(asset_id__exact=query.upper()) | Q(description__icontains=query) | Q(serial_number__exact=query)) + or_lookup = (Q(asset_id__exact=query.upper()) | Q(description__icontains=query) | Q(serial_number__exact=query) | Q(nickname__icontains=query)) qs = qs.filter(or_lookup).distinct() # distinct() is often necessary with Q lookups return qs @@ -125,6 +125,7 @@ class Asset(models.Model, RevisionMixin): purchase_price = models.DecimalField(blank=True, null=True, decimal_places=2, max_digits=10, validators=[validate_positive]) replacement_cost = models.DecimalField(null=True, decimal_places=2, max_digits=10, validators=[validate_positive]) comments = models.TextField(blank=True) + nickname = models.CharField(max_length=120, blank=True) # Audit last_audited_at = models.DateTimeField(blank=True, null=True) diff --git a/assets/templates/partials/asset_detail_form.html b/assets/templates/partials/asset_detail_form.html index 970bfce9..8b382d34 100644 --- a/assets/templates/partials/asset_detail_form.html +++ b/assets/templates/partials/asset_detail_form.html @@ -21,6 +21,10 @@ {% render_field form.description|add_class:'form-control' value=object.description %} +
+ + {% render_field form.nickname|add_class:'form-control' value=object.nickname %} +
{% render_field form.category|add_class:'form-control'%} @@ -45,7 +49,10 @@ {% else %}
Asset ID
{{ object.asset_id }}
- + {% if object.nickname %} +
Nickname
+
"{{ object.nickname }}"
+ {% endif %}
Description
{{ object.description }}
From a7bf990666f8c66ea0cc24dc7510adc4cdaed5cd Mon Sep 17 00:00:00 2001 From: Arona Jones Date: Sun, 11 Dec 2022 00:51:19 +0000 Subject: [PATCH 9/9] FIX: Do not specify minor version of python in CI --- .github/workflows/django.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/django.yml b/.github/workflows/django.yml index f698098f..67d99cea 100644 --- a/.github/workflows/django.yml +++ b/.github/workflows/django.yml @@ -17,7 +17,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v2 with: - python-version: 3.9.1 + python-version: 3.9 - uses: actions/cache@v2 id: pcache with: