From 1ff5c95193cc6ad40b8c88ad860311f5d1b550cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Valenta?= <git@imaniti.org> Date: Wed, 20 Sep 2023 11:39:44 +0200 Subject: [PATCH] integrate new Nastenka API --- contracts/admin.py | 40 +++++++++++++------ .../commands/import_old_contracts.py | 3 +- ...tract_after_approval_nastenka_notice_id.py | 13 +++--- ...in_progress_nastenka_notice_id_and_more.py | 30 ++++++++++++++ contracts/models.py | 8 +++- contracts/settings.py | 2 + package-lock.json | 12 +++--- registry/settings/base.py | 7 +++- 8 files changed, 87 insertions(+), 28 deletions(-) create mode 100644 contracts/migrations/0069_contract_work_in_progress_nastenka_notice_id_and_more.py diff --git a/contracts/admin.py b/contracts/admin.py index 52dda10..6240321 100644 --- a/contracts/admin.py +++ b/contracts/admin.py @@ -314,7 +314,6 @@ class ContractAdmin( def save_model(self, request, obj, form, change): is_new = obj.created_by is None - print(is_new) # Need to generate primary keys first parent_save_response = super().save_model(request, obj, form, change) @@ -338,7 +337,7 @@ class ContractAdmin( from users.models import User headers = { - "Authorization": f"Token {settings.NASTENKA_API_TOKEN}", + "Authorization": f"Token {Contract.settings.nastenka_api_key}", "Content-Type": "application/json", } @@ -361,11 +360,17 @@ class ContractAdmin( } ), headers=headers, - ).raise_for_status() + ) + + notice.raise_for_status() + notice = notice.json() + + obj.work_in_progress_nastenka_notice_id = uuid.UUID(notice["id"]) + obj.save() if obj.after_approval_nastenka_notice_id is not None: - requests.delete( - f"{settings.NASTENKA_API_URL}/{obj.after_approval_nastenka_notice_id}", + requests.post( + f"{settings.NASTENKA_API_URL}/{obj.after_approval_nastenka_notice_id}/all-hidden", headers=headers, ).raise_for_status() @@ -373,8 +378,8 @@ class ContractAdmin( obj.save() if obj.to_be_approved_nastenka_notice_id is not None: - requests.delete( - f"{settings.NASTENKA_API_URL}/{obj.to_be_approved_nastenka_notice_id}", + requests.post( + f"{settings.NASTENKA_API_URL}/{obj.to_be_approved_nastenka_notice_id}/all-hidden", headers=headers, ).raise_for_status() @@ -390,7 +395,9 @@ class ContractAdmin( try: sso_ids = [] - for user in User.objects.filter(is_staff=True).all(): + for user in User.objects.filter( + models.Q(is_staff=True) & ~models.Q(sso_id="") + ).all(): if user.has_perm("contracts.approve"): sso_ids.append(user.sso_id) @@ -416,6 +423,15 @@ class ContractAdmin( obj.to_be_approved_nastenka_notice_id = uuid.UUID(notice["id"]) obj.save() + + if obj.work_in_progress_nastenka_notice_id is not None: + requests.post( + f"{settings.NASTENKA_API_URL}/{obj.work_in_progress_nastenka_notice_id}/all-hidden", + headers=headers, + ).raise_for_status() + + obj.work_in_progress_nastenka_notice_id = None + obj.save() except Exception as exception: logger.error( 'Failed to send out notice "to be approved" NástÄ›nka notification: %s', @@ -449,8 +465,8 @@ class ContractAdmin( obj.save() if obj.to_be_approved_nastenka_notice_id is not None: - requests.delete( - f"{settings.NASTENKA_API_URL}/{obj.to_be_approved_nastenka_notice_id}", + requests.post( + f"{settings.NASTENKA_API_URL}/{obj.to_be_approved_nastenka_notice_id}/all-hidden", headers=headers, ).raise_for_status() @@ -489,8 +505,8 @@ class ContractAdmin( obj.save() if obj.to_be_approved_nastenka_notice_id is not None: - requests.delete( - f"{settings.NASTENKA_API_URL}/{obj.to_be_approved_nastenka_notice_id}", + requests.post( + f"{settings.NASTENKA_API_URL}/{obj.to_be_approved_nastenka_notice_id}/all-hidden", headers=headers, ).raise_for_status() diff --git a/contracts/management/commands/import_old_contracts.py b/contracts/management/commands/import_old_contracts.py index 312f625..ea613d2 100644 --- a/contracts/management/commands/import_old_contracts.py +++ b/contracts/management/commands/import_old_contracts.py @@ -10,9 +10,8 @@ from django.conf import settings from django.core.files import File from django.core.management.base import BaseCommand from django.db import models -from postal.parser import parse_address - from git import Repo +from postal.parser import parse_address from ...models import ( Contract, diff --git a/contracts/migrations/0068_contract_after_approval_nastenka_notice_id.py b/contracts/migrations/0068_contract_after_approval_nastenka_notice_id.py index b72787e..265f5da 100644 --- a/contracts/migrations/0068_contract_after_approval_nastenka_notice_id.py +++ b/contracts/migrations/0068_contract_after_approval_nastenka_notice_id.py @@ -4,15 +4,18 @@ from django.db import migrations, models class Migration(migrations.Migration): - dependencies = [ - ('contracts', '0067_alter_contractee_options_alter_signee_options'), + ("contracts", "0067_alter_contractee_options_alter_signee_options"), ] operations = [ migrations.AddField( - model_name='contract', - name='after_approval_nastenka_notice_id', - field=models.UUIDField(blank=True, null=True, verbose_name='ID oznámenĂ o schválenĂ / vrácenĂ v NástÄ›nce'), + model_name="contract", + name="after_approval_nastenka_notice_id", + field=models.UUIDField( + blank=True, + null=True, + verbose_name="ID oznámenĂ o schválenĂ / vrácenĂ v NástÄ›nce", + ), ), ] diff --git a/contracts/migrations/0069_contract_work_in_progress_nastenka_notice_id_and_more.py b/contracts/migrations/0069_contract_work_in_progress_nastenka_notice_id_and_more.py new file mode 100644 index 0000000..fbaf08e --- /dev/null +++ b/contracts/migrations/0069_contract_work_in_progress_nastenka_notice_id_and_more.py @@ -0,0 +1,30 @@ +# Generated by Django 4.1.4 on 2023-09-19 20:33 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("contracts", "0068_contract_after_approval_nastenka_notice_id"), + ] + + operations = [ + migrations.AddField( + model_name="contract", + name="work_in_progress_nastenka_notice_id", + field=models.UUIDField( + blank=True, + null=True, + verbose_name="ID oznámenĂ o vrácenĂ k ĂşpravÄ› v NástÄ›nce", + ), + ), + migrations.AlterField( + model_name="contract", + name="after_approval_nastenka_notice_id", + field=models.UUIDField( + blank=True, + null=True, + verbose_name="ID oznámenĂ o schválenĂ / zamĂtnutĂ v NástÄ›nce", + ), + ), + ] diff --git a/contracts/models.py b/contracts/models.py index 17e70ac..185427b 100644 --- a/contracts/models.py +++ b/contracts/models.py @@ -698,10 +698,16 @@ class Contract(NameStrMixin, models.Model): blank=True, null=True, verbose_name="ID oznámenĂ o novĂ© smlouvÄ› v NástÄ›nce" ) + work_in_progress_nastenka_notice_id = models.UUIDField( + blank=True, + null=True, + verbose_name="ID oznámenĂ o vrácenĂ k ĂşpravÄ› v NástÄ›nce", + ) + after_approval_nastenka_notice_id = models.UUIDField( blank=True, null=True, - verbose_name="ID oznámenĂ o schválenĂ / vrácenĂ v NástÄ›nce", + verbose_name="ID oznámenĂ o schválenĂ / zamĂtnutĂ v NástÄ›nce", ) @property diff --git a/contracts/settings.py b/contracts/settings.py index 8cd2d50..922e586 100644 --- a/contracts/settings.py +++ b/contracts/settings.py @@ -8,3 +8,5 @@ class ContractSettings(dbsettings.Group): help_text="Poporuje formátovánĂ skrze Markdown.", widget=forms.Textarea, ) + + nastenka_api_key = dbsettings.StringValue("API Token pro NástÄ›nku") diff --git a/package-lock.json b/package-lock.json index b57b2e4..183b077 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1663,9 +1663,9 @@ } }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3336,9 +3336,9 @@ } }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "requires": { "lru-cache": "^6.0.0" } diff --git a/registry/settings/base.py b/registry/settings/base.py index 083ea5d..469be13 100644 --- a/registry/settings/base.py +++ b/registry/settings/base.py @@ -201,7 +201,10 @@ USE_X_FORWARDED_HOST = True SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https") X_FRAME_OPTIONS = "SAMEORIGIN" -SILENCED_SYSTEM_CHECKS = ["security.W019"] +SILENCED_SYSTEM_CHECKS = [ + "security.W019", + "auth.W004", +] ## Admin @@ -247,7 +250,7 @@ if SENTRY_DSN != "": ## App-specific -NASTENKA_API_URL = env.str("NASTENKA_API_URL") +NASTENKA_API_URL = "http://localhost:8009/contracts/api/notices" NASTENKA_API_TOKEN = env.str("NASTENKA_API_TOKEN") DEFAULT_CONTRACTEE_NAME = env.str("DEFAULT_CONTRACTEE_NAME") -- GitLab