diff --git a/README.md b/README.md index 6a3e2d8c..44971474 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,14 @@ Konova is the successor of KSP. It's build using the python webframework Django, the database postgresql and the css library bootstrap as well as the icon package fontawesome for a modern look, following best practices from the industry. +## Background processes +Konova uses celery for background processing. To start the worker you need to run +```shell +$ celery -A konova worker -l INFO +``` +More info can be found [here](https://docs.celeryproject.org/en/stable/getting-started/first-steps-with-celery.html#running-the-celery-worker-server). +Redis must be installed. + ## Technical documentation Technical documention is provided in the projects git wiki. diff --git a/codelist/management/commands/update_codelist.py b/codelist/management/commands/update_codelist.py index 44b4b908..5bb55b6a 100644 --- a/codelist/management/commands/update_codelist.py +++ b/codelist/management/commands/update_codelist.py @@ -15,6 +15,7 @@ from codelist.settings import CODELIST_INTERVENTION_HANDLER_ID, CODELIST_CONSERV CODELIST_COMPENSATION_ACTION_ID, CODELIST_COMPENSATION_ACTION_CLASS_ID, CODELIST_COMPENSATION_ADDITIONAL_TYPE_ID, \ CODELIST_BASE_URL, CODELIST_PROCESS_TYPE_ID from konova.management.commands.setup import BaseKonovaCommand +from konova.settings import PROXIES bool_map = { "true": True, @@ -43,7 +44,7 @@ class Command(BaseKonovaCommand): for list_id in codelist_ids: _url = CODELIST_BASE_URL + "/" + str(list_id) - result = requests.get(url=_url) + result = requests.get(url=_url, proxies=PROXIES) if result.status_code != 200: self._write_error("Error on codelist url '{}'".format(_url)) diff --git a/konova/__init__.py b/konova/__init__.py index e69de29b..15d7c508 100644 --- a/konova/__init__.py +++ b/konova/__init__.py @@ -0,0 +1,5 @@ +# This will make sure the app is always imported when +# Django starts so that shared_task will use this app. +from .celery import app as celery_app + +__all__ = ('celery_app',) diff --git a/konova/celery.py b/konova/celery.py new file mode 100644 index 00000000..478f2844 --- /dev/null +++ b/konova/celery.py @@ -0,0 +1,25 @@ +import os + +from celery import Celery + +# Set the default Django settings module for the 'celery' program. +os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'konova.settings') + +app = Celery('konova') + +# Using a string here means the worker doesn't have to serialize +# the configuration object to child processes. +# - namespace='CELERY' means all celery-related configuration keys +# should have a `CELERY_` prefix. +app.config_from_object('django.conf:settings', namespace='CELERY') + +# Load task modules from all registered Django apps. +app.autodiscover_tasks() + +# Declare redis as broker +app.conf.broker_url = 'redis://localhost:6379/0' + + +@app.task(bind=True) +def debug_task(self): + print(f'Request: {self.request!r}') diff --git a/konova/forms.py b/konova/forms.py index e9d9c8d7..c4dff7d7 100644 --- a/konova/forms.py +++ b/konova/forms.py @@ -23,6 +23,7 @@ from django.utils.translation import gettext_lazy as _ from konova.contexts import BaseContext from konova.models import BaseObject, Geometry, RecordableObjectMixin from konova.settings import DEFAULT_SRID +from konova.tasks import celery_update_parcels from konova.utils.message_templates import FORM_INVALID from user.models import UserActionLogEntry @@ -287,7 +288,7 @@ class SimpleGeomForm(BaseForm): geometry = self.instance.geometry geometry.geom = self.cleaned_data.get("geom", MultiPolygon(srid=DEFAULT_SRID)) geometry.modified = action - geometry.update_parcels() + geometry.save() except LookupError: # No geometry or linked instance holding a geometry exist --> create a new one! @@ -295,6 +296,8 @@ class SimpleGeomForm(BaseForm): geom=self.cleaned_data.get("geom", MultiPolygon(srid=DEFAULT_SRID)), created=action, ) + # Start the parcel update procedure in a background process + celery_update_parcels.delay(geometry.id) return geometry diff --git a/konova/settings.py b/konova/settings.py index f24e7f8a..38b972c8 100644 --- a/konova/settings.py +++ b/konova/settings.py @@ -14,6 +14,12 @@ from django.utils.translation import gettext_lazy as _ # Load other settings from konova.sub_settings.django_settings import * +proxy = "CHANGE_ME" +PROXIES = { + "http": proxy, + "https": proxy, +} + # ALLOWED FILE UPLOAD DEFINITIONS # Default: Upload into upper folder of code MEDIA_ROOT = BASE_DIR + "/.." diff --git a/konova/tasks.py b/konova/tasks.py new file mode 100644 index 00000000..b0108a4b --- /dev/null +++ b/konova/tasks.py @@ -0,0 +1,14 @@ +from celery import shared_task +from django.core.exceptions import ObjectDoesNotExist + +from konova.models import Geometry + + +@shared_task +def celery_update_parcels(geometry_id: str): + try: + geom = Geometry.objects.get(id=geometry_id) + geom.parcels.clear() + geom.update_parcels() + except ObjectDoesNotExist: + return diff --git a/konova/templates/konova/includes/parcels.html b/konova/templates/konova/includes/parcels.html index e15fa3d0..d73d4610 100644 --- a/konova/templates/konova/includes/parcels.html +++ b/konova/templates/konova/includes/parcels.html @@ -3,6 +3,13 @@

{% trans 'Spatial reference' %}

+ {% if parcels|length == 0 %} +
+ {% blocktrans %} + If the geometry is not empty, the parcels are currently recalculated. Please refresh this page in a few moments. + {% endblocktrans %} +
+ {% else %} @@ -26,4 +33,5 @@
+ {% endif %}
\ No newline at end of file diff --git a/konova/utils/messenger.py b/konova/utils/messenger.py index 86a10bd6..8169d5e6 100644 --- a/konova/utils/messenger.py +++ b/konova/utils/messenger.py @@ -11,7 +11,7 @@ import requests from django.contrib.auth.models import User from django.utils.translation import gettext_lazy as _ -from konova.settings import SSO_SERVER_BASE, SSO_PUBLIC_KEY +from konova.settings import SSO_SERVER_BASE, SSO_PUBLIC_KEY, PROXIES from konova.sub_settings.context_settings import BASE_TITLE_SHORT @@ -52,7 +52,8 @@ class Messenger: requests.post( self.server_url, data=data, - headers=headers + headers=headers, + proxies=PROXIES ) def send_object_checked(self, obj_identifier: str, performing_user: User, detail_view_url: str = ""): diff --git a/konova/utils/wfs/spatial.py b/konova/utils/wfs/spatial.py index 6d0ddda9..11d8e39a 100644 --- a/konova/utils/wfs/spatial.py +++ b/konova/utils/wfs/spatial.py @@ -12,7 +12,7 @@ import xmltodict from django.contrib.gis.db.models.functions import AsGML, Transform from requests.auth import HTTPDigestAuth -from konova.settings import DEFAULT_SRID_RLP, PARCEL_WFS_USER, PARCEL_WFS_PW +from konova.settings import DEFAULT_SRID_RLP, PARCEL_WFS_USER, PARCEL_WFS_PW, PROXIES class AbstractWFSFetcher: @@ -148,7 +148,8 @@ class ParcelWFSFetcher(AbstractWFSFetcher): response = requests.post( url=self.base_url, data=post_body, - auth=self.auth_digest_obj + auth=self.auth_digest_obj, + proxies=PROXIES, ) content = response.content.decode("utf-8") diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index b03903cb..f9f5bf9c 100644 Binary files a/locale/de/LC_MESSAGES/django.mo and b/locale/de/LC_MESSAGES/django.mo differ diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index fbfccf67..dd3d8092 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -11,15 +11,15 @@ #: intervention/forms/forms.py:52 intervention/forms/forms.py:154 #: intervention/forms/forms.py:166 intervention/forms/modalForms.py:125 #: intervention/forms/modalForms.py:138 intervention/forms/modalForms.py:151 -#: konova/forms.py:139 konova/forms.py:240 konova/forms.py:309 -#: konova/forms.py:336 konova/forms.py:346 konova/forms.py:359 -#: konova/forms.py:371 konova/forms.py:389 user/forms.py:38 +#: konova/forms.py:140 konova/forms.py:241 konova/forms.py:312 +#: konova/forms.py:339 konova/forms.py:349 konova/forms.py:362 +#: konova/forms.py:374 konova/forms.py:392 user/forms.py:38 #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2022-01-05 14:04+0100\n" +"POT-Creation-Date: 2022-01-06 12:04+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -40,7 +40,7 @@ msgstr "Bis" #: analysis/forms.py:47 compensation/forms/forms.py:77 #: compensation/templates/compensation/detail/eco_account/view.html:58 #: compensation/templates/compensation/report/eco_account/report.html:16 -#: compensation/utils/quality.py:100 ema/templates/ema/detail/view.html:42 +#: compensation/utils/quality.py:100 ema/templates/ema/detail/view.html:49 #: ema/templates/ema/report/report.html:16 ema/utils/quality.py:26 #: intervention/forms/forms.py:100 #: intervention/templates/intervention/detail/view.html:56 @@ -68,7 +68,7 @@ msgstr "Bericht generieren" msgid "Select a timespan and the desired conservation office" msgstr "Wählen Sie die Zeitspanne und die gewünschte Eintragungsstelle" -#: analysis/forms.py:69 konova/forms.py:187 +#: analysis/forms.py:69 konova/forms.py:188 msgid "Continue" msgstr "Weiter" @@ -149,7 +149,7 @@ msgstr "Geprüft" #: compensation/templates/compensation/detail/compensation/view.html:77 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:31 #: compensation/templates/compensation/detail/eco_account/view.html:44 -#: ema/tables.py:38 ema/templates/ema/detail/view.html:28 +#: ema/tables.py:38 ema/templates/ema/detail/view.html:35 #: intervention/tables.py:39 #: intervention/templates/intervention/detail/view.html:82 #: user/models/user_action.py:20 @@ -322,14 +322,14 @@ msgstr "Automatisch generiert" #: compensation/templates/compensation/report/compensation/report.html:12 #: compensation/templates/compensation/report/eco_account/report.html:12 #: ema/tables.py:33 ema/templates/ema/detail/includes/documents.html:28 -#: ema/templates/ema/detail/view.html:24 +#: ema/templates/ema/detail/view.html:31 #: ema/templates/ema/report/report.html:12 intervention/forms/forms.py:38 #: intervention/tables.py:28 #: intervention/templates/intervention/detail/includes/compensations.html:33 #: intervention/templates/intervention/detail/includes/documents.html:28 #: intervention/templates/intervention/detail/view.html:31 #: intervention/templates/intervention/report/report.html:12 -#: konova/forms.py:335 +#: konova/forms.py:338 msgid "Title" msgstr "Bezeichnung" @@ -356,7 +356,7 @@ msgstr "Kompensation XY; Flur ABC" #: intervention/templates/intervention/detail/includes/documents.html:31 #: intervention/templates/intervention/detail/includes/payments.html:34 #: intervention/templates/intervention/detail/includes/revocation.html:38 -#: konova/forms.py:370 konova/templates/konova/includes/comment_card.html:16 +#: konova/forms.py:373 konova/templates/konova/includes/comment_card.html:16 msgid "Comment" msgstr "Kommentar" @@ -367,7 +367,7 @@ msgstr "Zusätzlicher Kommentar" #: compensation/forms/forms.py:93 #: compensation/templates/compensation/detail/eco_account/view.html:62 #: compensation/templates/compensation/report/eco_account/report.html:20 -#: compensation/utils/quality.py:102 ema/templates/ema/detail/view.html:46 +#: compensation/utils/quality.py:102 ema/templates/ema/detail/view.html:53 #: ema/templates/ema/report/report.html:20 ema/utils/quality.py:28 #: intervention/forms/forms.py:128 #: intervention/templates/intervention/detail/view.html:60 @@ -472,7 +472,7 @@ msgstr "Zahlung wird an diesem Datum erwartet" #: compensation/forms/modalForms.py:62 compensation/forms/modalForms.py:239 #: compensation/forms/modalForms.py:317 intervention/forms/modalForms.py:152 -#: konova/forms.py:372 +#: konova/forms.py:375 msgid "Additional comment, maximum {} letters" msgstr "Zusätzlicher Kommentar, maximal {} Zeichen" @@ -504,7 +504,7 @@ msgstr "Neuer Zustand" msgid "Insert data for the new state" msgstr "Geben Sie die Daten des neuen Zustandes ein" -#: compensation/forms/modalForms.py:155 konova/forms.py:189 +#: compensation/forms/modalForms.py:155 konova/forms.py:190 msgid "Object removed" msgstr "Objekt entfernt" @@ -660,7 +660,7 @@ msgstr "Am {} von {} geprüft worden" #: compensation/templates/compensation/detail/compensation/view.html:80 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:56 #: compensation/templates/compensation/detail/eco_account/view.html:47 -#: ema/tables.py:101 ema/templates/ema/detail/view.html:31 +#: ema/tables.py:101 ema/templates/ema/detail/view.html:38 #: intervention/tables.py:131 #: intervention/templates/intervention/detail/view.html:85 msgid "Not recorded yet" @@ -793,7 +793,7 @@ msgstr "Dokumente" #: compensation/templates/compensation/detail/eco_account/includes/documents.html:14 #: ema/templates/ema/detail/includes/documents.html:14 #: intervention/templates/intervention/detail/includes/documents.html:14 -#: konova/forms.py:388 +#: konova/forms.py:391 msgid "Add new document" msgstr "Neues Dokument hinzufügen" @@ -889,7 +889,7 @@ msgstr "Geprüft am " #: compensation/templates/compensation/detail/compensation/view.html:84 #: compensation/templates/compensation/detail/eco_account/includes/deductions.html:54 #: compensation/templates/compensation/detail/eco_account/view.html:51 -#: ema/templates/ema/detail/view.html:35 +#: ema/templates/ema/detail/view.html:42 #: intervention/templates/intervention/detail/view.html:75 #: intervention/templates/intervention/detail/view.html:89 msgid "by" @@ -897,7 +897,7 @@ msgstr "von" #: compensation/templates/compensation/detail/compensation/view.html:84 #: compensation/templates/compensation/detail/eco_account/view.html:51 -#: ema/templates/ema/detail/view.html:35 +#: ema/templates/ema/detail/view.html:42 #: intervention/templates/intervention/detail/view.html:89 msgid "Recorded on " msgstr "Verzeichnet am" @@ -906,7 +906,7 @@ msgstr "Verzeichnet am" #: compensation/templates/compensation/detail/eco_account/view.html:74 #: compensation/templates/compensation/report/compensation/report.html:24 #: compensation/templates/compensation/report/eco_account/report.html:41 -#: ema/templates/ema/detail/view.html:54 +#: ema/templates/ema/detail/view.html:61 #: ema/templates/ema/report/report.html:28 #: intervention/templates/intervention/detail/view.html:108 #: intervention/templates/intervention/report/report.html:91 @@ -915,7 +915,7 @@ msgstr "Zuletzt bearbeitet" #: compensation/templates/compensation/detail/compensation/view.html:99 #: compensation/templates/compensation/detail/eco_account/view.html:82 -#: ema/templates/ema/detail/view.html:69 intervention/forms/modalForms.py:52 +#: ema/templates/ema/detail/view.html:76 intervention/forms/modalForms.py:52 #: intervention/templates/intervention/detail/view.html:116 msgid "Shared with" msgstr "Freigegeben für" @@ -976,8 +976,8 @@ msgstr "Keine Flächenmenge für Abbuchungen eingegeben. Bitte bearbeiten." #: compensation/templates/compensation/detail/eco_account/view.html:61 #: compensation/templates/compensation/detail/eco_account/view.html:65 #: compensation/templates/compensation/detail/eco_account/view.html:69 -#: ema/templates/ema/detail/view.html:41 ema/templates/ema/detail/view.html:45 -#: ema/templates/ema/detail/view.html:49 +#: ema/templates/ema/detail/view.html:48 ema/templates/ema/detail/view.html:52 +#: ema/templates/ema/detail/view.html:56 #: intervention/templates/intervention/detail/view.html:30 #: intervention/templates/intervention/detail/view.html:34 #: intervention/templates/intervention/detail/view.html:38 @@ -993,7 +993,7 @@ msgstr "fehlt" #: compensation/templates/compensation/detail/eco_account/view.html:70 #: compensation/templates/compensation/report/eco_account/report.html:24 -#: ema/templates/ema/detail/view.html:50 +#: ema/templates/ema/detail/view.html:57 #: ema/templates/ema/report/report.html:24 msgid "Action handler" msgstr "Maßnahmenträger" @@ -1005,17 +1005,17 @@ msgstr "Maßnahmenträger" msgid "Report" msgstr "Bericht" -#: compensation/templates/compensation/report/compensation/report.html:42 -#: compensation/templates/compensation/report/eco_account/report.html:59 -#: ema/templates/ema/report/report.html:46 -#: intervention/templates/intervention/report/report.html:105 +#: compensation/templates/compensation/report/compensation/report.html:45 +#: compensation/templates/compensation/report/eco_account/report.html:62 +#: ema/templates/ema/report/report.html:49 +#: intervention/templates/intervention/report/report.html:108 msgid "Open in browser" msgstr "Im Browser öffnen" -#: compensation/templates/compensation/report/compensation/report.html:46 -#: compensation/templates/compensation/report/eco_account/report.html:63 -#: ema/templates/ema/report/report.html:50 -#: intervention/templates/intervention/report/report.html:109 +#: compensation/templates/compensation/report/compensation/report.html:49 +#: compensation/templates/compensation/report/eco_account/report.html:66 +#: ema/templates/ema/report/report.html:53 +#: intervention/templates/intervention/report/report.html:112 msgid "View in LANIS" msgstr "In LANIS öffnen" @@ -1057,7 +1057,7 @@ msgid "Compensation {} edited" msgstr "Kompensation {} bearbeitet" #: compensation/views/compensation.py:230 compensation/views/eco_account.py:309 -#: ema/views.py:181 intervention/views.py:477 +#: ema/views.py:183 intervention/views.py:477 msgid "Log" msgstr "Log" @@ -1066,32 +1066,32 @@ msgid "Compensation removed" msgstr "Kompensation entfernt" #: compensation/views/compensation.py:274 compensation/views/eco_account.py:461 -#: ema/views.py:348 intervention/views.py:129 +#: ema/views.py:350 intervention/views.py:129 msgid "Document added" msgstr "Dokument hinzugefügt" #: compensation/views/compensation.py:343 compensation/views/eco_account.py:355 -#: ema/views.py:286 +#: ema/views.py:288 msgid "State added" msgstr "Zustand hinzugefügt" #: compensation/views/compensation.py:364 compensation/views/eco_account.py:376 -#: ema/views.py:307 +#: ema/views.py:309 msgid "Action added" msgstr "Maßnahme hinzugefügt" #: compensation/views/compensation.py:385 compensation/views/eco_account.py:441 -#: ema/views.py:328 +#: ema/views.py:330 msgid "Deadline added" msgstr "Frist/Termin hinzugefügt" #: compensation/views/compensation.py:407 compensation/views/eco_account.py:398 -#: ema/views.py:418 +#: ema/views.py:420 msgid "State removed" msgstr "Zustand gelöscht" #: compensation/views/compensation.py:429 compensation/views/eco_account.py:420 -#: ema/views.py:440 +#: ema/views.py:442 msgid "Action removed" msgstr "Maßnahme entfernt" @@ -1111,12 +1111,12 @@ msgstr "Ökokonto entfernt" msgid "Deduction removed" msgstr "Abbuchung entfernt" -#: compensation/views/eco_account.py:330 ema/views.py:261 +#: compensation/views/eco_account.py:330 ema/views.py:263 #: intervention/views.py:519 msgid "{} unrecorded" msgstr "{} entzeichnet" -#: compensation/views/eco_account.py:330 ema/views.py:261 +#: compensation/views/eco_account.py:330 ema/views.py:263 #: intervention/views.py:519 msgid "{} recorded" msgstr "{} verzeichnet" @@ -1125,22 +1125,22 @@ msgstr "{} verzeichnet" msgid "Deduction added" msgstr "Abbuchung hinzugefügt" -#: compensation/views/eco_account.py:614 ema/views.py:516 +#: compensation/views/eco_account.py:616 ema/views.py:520 #: intervention/views.py:375 msgid "{} has already been shared with you" msgstr "{} wurde bereits für Sie freigegeben" -#: compensation/views/eco_account.py:619 ema/views.py:521 +#: compensation/views/eco_account.py:621 ema/views.py:525 #: intervention/views.py:380 msgid "{} has been shared with you" msgstr "{} ist nun für Sie freigegeben" -#: compensation/views/eco_account.py:626 ema/views.py:528 +#: compensation/views/eco_account.py:628 ema/views.py:532 #: intervention/views.py:387 msgid "Share link invalid" msgstr "Freigabelink ungültig" -#: compensation/views/eco_account.py:649 ema/views.py:551 +#: compensation/views/eco_account.py:651 ema/views.py:555 #: intervention/views.py:410 msgid "Share settings updated" msgstr "Freigabe Einstellungen aktualisiert" @@ -1177,7 +1177,7 @@ msgstr "" msgid "EMA" msgstr "" -#: ema/templates/ema/detail/view.html:12 +#: ema/templates/ema/detail/view.html:19 msgid "Payment funded compensation" msgstr "Ersatzzahlungsmaßnahme" @@ -1185,11 +1185,11 @@ msgstr "Ersatzzahlungsmaßnahme" msgid "EMA {} added" msgstr "EMA {} hinzugefügt" -#: ema/views.py:210 +#: ema/views.py:212 msgid "EMA {} edited" msgstr "EMA {} bearbeitet" -#: ema/views.py:242 +#: ema/views.py:244 msgid "EMA removed" msgstr "EMA entfernt" @@ -1333,7 +1333,7 @@ msgstr "Kompensationen und Zahlungen geprüft" msgid "Run check" msgstr "Prüfung vornehmen" -#: intervention/forms/modalForms.py:196 konova/forms.py:454 +#: intervention/forms/modalForms.py:196 konova/forms.py:457 msgid "" "I, {} {}, confirm that all necessary control steps have been performed by " "myself." @@ -1517,81 +1517,81 @@ msgstr "" "somit nichts eingeben, bearbeiten oder sonstige Aktionen ausführen. " "Kontaktieren Sie bitte einen Administrator. +++" -#: konova/forms.py:36 templates/form/collapsable/form.html:62 +#: konova/forms.py:37 templates/form/collapsable/form.html:62 msgid "Save" msgstr "Speichern" -#: konova/forms.py:68 +#: konova/forms.py:69 msgid "Not editable" msgstr "Nicht editierbar" -#: konova/forms.py:138 konova/forms.py:308 +#: konova/forms.py:139 konova/forms.py:311 msgid "Confirm" msgstr "Bestätige" -#: konova/forms.py:150 konova/forms.py:317 +#: konova/forms.py:151 konova/forms.py:320 msgid "Remove" msgstr "Löschen" -#: konova/forms.py:152 +#: konova/forms.py:153 msgid "You are about to remove {} {}" msgstr "Sie sind dabei {} {} zu löschen" -#: konova/forms.py:239 konova/utils/quality.py:44 konova/utils/quality.py:46 +#: konova/forms.py:240 konova/utils/quality.py:44 konova/utils/quality.py:46 #: templates/form/collapsable/form.html:45 msgid "Geometry" msgstr "Geometrie" -#: konova/forms.py:318 +#: konova/forms.py:321 msgid "Are you sure?" msgstr "Sind Sie sicher?" -#: konova/forms.py:345 +#: konova/forms.py:348 msgid "Created on" msgstr "Erstellt" -#: konova/forms.py:347 +#: konova/forms.py:350 msgid "When has this file been created? Important for photos." msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?" -#: konova/forms.py:358 +#: konova/forms.py:361 #: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231 msgid "File" msgstr "Datei" -#: konova/forms.py:360 +#: konova/forms.py:363 msgid "Allowed formats: pdf, jpg, png. Max size 15 MB." msgstr "Formate: pdf, jpg, png. Maximal 15 MB." -#: konova/forms.py:406 +#: konova/forms.py:409 msgid "Unsupported file type" msgstr "Dateiformat nicht unterstützt" -#: konova/forms.py:413 +#: konova/forms.py:416 msgid "File too large" msgstr "Datei zu groß" -#: konova/forms.py:422 +#: konova/forms.py:425 msgid "Added document" msgstr "Dokument hinzugefügt" -#: konova/forms.py:445 +#: konova/forms.py:448 msgid "Confirm record" msgstr "Verzeichnen bestätigen" -#: konova/forms.py:453 +#: konova/forms.py:456 msgid "Record data" msgstr "Daten verzeichnen" -#: konova/forms.py:460 +#: konova/forms.py:463 msgid "Confirm unrecord" msgstr "Entzeichnen bestätigen" -#: konova/forms.py:461 +#: konova/forms.py:464 msgid "Unrecord data" msgstr "Daten entzeichnen" -#: konova/forms.py:462 +#: konova/forms.py:465 msgid "I, {} {}, confirm that this data must be unrecorded." msgstr "" "Ich, {} {}, bestätige, dass diese Daten wieder entzeichnet werden müssen." @@ -1667,23 +1667,35 @@ msgstr "Abbuchen" msgid "Spatial reference" msgstr "Raumreferenz" -#: konova/templates/konova/includes/parcels.html:9 +#: konova/templates/konova/includes/parcels.html:8 +msgid "" +"\n" +" If the geometry is not empty, the parcels are currently " +"recalculated. Please refresh this page in a few moments.\n" +" " +msgstr "" +"\n" +"Falls die Geometrie nicht leer ist, werden die Flurstücke aktuell berechnet. " +"Bitte laden Sie diese Seite in ein paar Augenblicken erneut... \n" +" " + +#: konova/templates/konova/includes/parcels.html:16 msgid "Kreis" msgstr "Kreis" -#: konova/templates/konova/includes/parcels.html:10 +#: konova/templates/konova/includes/parcels.html:17 msgid "Gemarkung" msgstr "Gemarkung" -#: konova/templates/konova/includes/parcels.html:11 +#: konova/templates/konova/includes/parcels.html:18 msgid "Parcel" msgstr "Flur" -#: konova/templates/konova/includes/parcels.html:12 +#: konova/templates/konova/includes/parcels.html:19 msgid "Parcel counter" msgstr "Flurstückzähler" -#: konova/templates/konova/includes/parcels.html:13 +#: konova/templates/konova/includes/parcels.html:20 msgid "Parcel number" msgstr "Flurstücknenner" @@ -1769,15 +1781,15 @@ msgstr "Maßnahme hinzufügen" msgid "Geometry conflict detected with {}" msgstr "Geometriekonflikt mit folgenden Einträgen erkannt: {}" -#: konova/utils/messenger.py:69 +#: konova/utils/messenger.py:70 msgid "{} checked" msgstr "{} geprüft" -#: konova/utils/messenger.py:71 +#: konova/utils/messenger.py:72 msgid "Check it out" msgstr "Schauen Sie rein" -#: konova/utils/messenger.py:72 +#: konova/utils/messenger.py:73 msgid "{} has been checked successfully by user {}! {}" msgstr "{} wurde erfolgreich vom Nutzer {} geprüft! {}" @@ -2051,6 +2063,315 @@ msgstr "Benachrichtigungen bearbeitet" msgid "close" msgstr "Schließen" +#: venv/lib/python3.7/site-packages/click/_termui_impl.py:496 +#, python-brace-format +msgid "{editor}: Editing failed" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/_termui_impl.py:500 +#, python-brace-format +msgid "{editor}: Editing failed: {e}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/_unicodefun.py:20 +msgid "" +"Click will abort further execution because Python was configured to use " +"ASCII as encoding for the environment. Consult https://click.palletsprojects." +"com/unicode-support/ for mitigation steps." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/_unicodefun.py:56 +msgid "" +"Additional information: on this system no suitable UTF-8 locales were " +"discovered. This most likely requires resolving by reconfiguring the locale " +"system." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/_unicodefun.py:65 +msgid "" +"This system supports the C.UTF-8 locale which is recommended. You might be " +"able to resolve your issue by exporting the following environment variables:" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/_unicodefun.py:75 +#, python-brace-format +msgid "" +"This system lists some UTF-8 supporting locales that you can pick from. The " +"following suitable locales were discovered: {locales}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/_unicodefun.py:93 +msgid "" +"Click discovered that you exported a UTF-8 locale but the locale system " +"could not pick up from it because it does not exist. The exported locale is " +"{locale!r} but it is not supported." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/core.py:1095 +msgid "Aborted!" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/core.py:1279 +#: venv/lib/python3.7/site-packages/click/decorators.py:434 +msgid "Show this message and exit." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/core.py:1308 +#: venv/lib/python3.7/site-packages/click/core.py:1334 +#, python-brace-format +msgid "(Deprecated) {text}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/core.py:1351 +msgid "Options" +msgstr "Optionen" + +#: venv/lib/python3.7/site-packages/click/core.py:1375 +#, python-brace-format +msgid "Got unexpected extra argument ({args})" +msgid_plural "Got unexpected extra arguments ({args})" +msgstr[0] "" +msgstr[1] "" + +#: venv/lib/python3.7/site-packages/click/core.py:1390 +msgid "DeprecationWarning: The command {name!r} is deprecated." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/core.py:1607 +msgid "Commands" +msgstr "Befehle" + +#: venv/lib/python3.7/site-packages/click/core.py:1639 +msgid "Missing command." +msgstr "Befehl fehlt" + +#: venv/lib/python3.7/site-packages/click/core.py:1717 +msgid "No such command {name!r}." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/core.py:2258 +msgid "Value must be an iterable." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/core.py:2278 +#, python-brace-format +msgid "Takes {nargs} values but 1 was given." +msgid_plural "Takes {nargs} values but {len} were given." +msgstr[0] "" +msgstr[1] "" + +#: venv/lib/python3.7/site-packages/click/core.py:2701 +#, python-brace-format +msgid "env var: {var}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/core.py:2724 +msgid "(dynamic)" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/core.py:2735 +#, python-brace-format +msgid "default: {default}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/core.py:2748 +msgid "required" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/decorators.py:339 +#, python-format +msgid "%(prog)s, version %(version)s" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/decorators.py:403 +msgid "Show the version and exit." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/exceptions.py:43 +#: venv/lib/python3.7/site-packages/click/exceptions.py:79 +#, python-brace-format +msgid "Error: {message}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/exceptions.py:71 +#, python-brace-format +msgid "Try '{command} {option}' for help." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/exceptions.py:120 +#, python-brace-format +msgid "Invalid value: {message}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/exceptions.py:122 +#, python-brace-format +msgid "Invalid value for {param_hint}: {message}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/exceptions.py:178 +msgid "Missing argument" +msgstr "Argument fehlt" + +#: venv/lib/python3.7/site-packages/click/exceptions.py:180 +msgid "Missing option" +msgstr "Option fehlt" + +#: venv/lib/python3.7/site-packages/click/exceptions.py:182 +msgid "Missing parameter" +msgstr "Parameter fehlt" + +#: venv/lib/python3.7/site-packages/click/exceptions.py:184 +#, python-brace-format +msgid "Missing {param_type}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/exceptions.py:191 +#, python-brace-format +msgid "Missing parameter: {param_name}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/exceptions.py:211 +#, python-brace-format +msgid "No such option: {name}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/exceptions.py:223 +#, python-brace-format +msgid "Did you mean {possibility}?" +msgid_plural "(Possible options: {possibilities})" +msgstr[0] "" +msgstr[1] "" + +#: venv/lib/python3.7/site-packages/click/exceptions.py:261 +msgid "unknown error" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/exceptions.py:268 +msgid "Could not open file {filename!r}: {message}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/parser.py:231 +msgid "Argument {name!r} takes {nargs} values." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/parser.py:413 +msgid "Option {name!r} does not take a value." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/parser.py:474 +msgid "Option {name!r} requires an argument." +msgid_plural "Option {name!r} requires {nargs} arguments." +msgstr[0] "" +msgstr[1] "" + +#: venv/lib/python3.7/site-packages/click/shell_completion.py:316 +msgid "Shell completion is not supported for Bash versions older than 4.4." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/shell_completion.py:322 +msgid "Couldn't detect Bash version, shell completion is not supported." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/termui.py:161 +msgid "Repeat for confirmation" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/termui.py:178 +msgid "Error: The value you entered was invalid." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/termui.py:180 +#, python-brace-format +msgid "Error: {e.message}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/termui.py:191 +msgid "Error: The two entered values do not match." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/termui.py:247 +msgid "Error: invalid input" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/termui.py:798 +msgid "Press any key to continue..." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:258 +#, python-brace-format +msgid "" +"Choose from:\n" +"\t{choices}" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:290 +msgid "{value!r} is not {choice}." +msgid_plural "{value!r} is not one of {choices}." +msgstr[0] "" +msgstr[1] "" + +#: venv/lib/python3.7/site-packages/click/types.py:380 +msgid "{value!r} does not match the format {format}." +msgid_plural "{value!r} does not match the formats {formats}." +msgstr[0] "" +msgstr[1] "" + +#: venv/lib/python3.7/site-packages/click/types.py:402 +msgid "{value!r} is not a valid {number_type}." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:458 +#, python-brace-format +msgid "{value} is not in the range {range}." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:599 +msgid "{value!r} is not a valid boolean." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:623 +msgid "{value!r} is not a valid UUID." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:801 +msgid "file" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:803 +msgid "directory" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:805 +msgid "path" +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:851 +msgid "{name} {filename!r} does not exist." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:860 +msgid "{name} {filename!r} is a file." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:868 +msgid "{name} {filename!r} is a directory." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:876 +msgid "{name} {filename!r} is not writable." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:884 +msgid "{name} {filename!r} is not readable." +msgstr "" + +#: venv/lib/python3.7/site-packages/click/types.py:951 +#, python-brace-format +msgid "{len_type} values are required, but {len_value} was given." +msgid_plural "{len_type} values are required, but {len_value} were given." +msgstr[0] "" +msgstr[1] "" + #: venv/lib/python3.7/site-packages/django/contrib/messages/apps.py:7 msgid "Messages" msgstr "Nachrichten" @@ -3224,6 +3545,21 @@ msgstr "" msgid "A fontawesome icon field" msgstr "" +#: venv/lib/python3.7/site-packages/kombu/transport/qpid.py:1310 +#, python-format +msgid "Attempting to connect to qpid with SASL mechanism %s" +msgstr "" + +#: venv/lib/python3.7/site-packages/kombu/transport/qpid.py:1315 +#, python-format +msgid "Connected to qpid with SASL mechanism %s" +msgstr "" + +#: venv/lib/python3.7/site-packages/kombu/transport/qpid.py:1333 +#, python-format +msgid "Unable to connect to qpid with SASL mechanism %s" +msgstr "" + #~ msgid "No file given!" #~ msgstr "Keine Datei angegeben!" diff --git a/requirements.txt b/requirements.txt index 620316ba..c7a6fa46 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,7 +1,16 @@ +amqp==5.0.9 asgiref==3.3.1 beautifulsoup4==4.9.3 +billiard==3.6.4.0 +cached-property==1.5.2 +celery==5.2.3 certifi==2020.11.8 chardet==3.0.4 +click==8.0.3 +click-didyoumean==0.3.0 +click-plugins==1.1.1 +click-repl==0.2.0 +Deprecated==1.2.13 Django==3.1.3 django-autocomplete-light==3.8.2 django-bootstrap-modal-forms==2.2.0 @@ -15,19 +24,27 @@ et-xmlfile==1.1.0 idna==2.10 importlib-metadata==2.1.1 itsdangerous==0.24 +kombu==5.2.3 openpyxl==3.0.9 OWSLib==0.25.0 +packaging==21.3 +prompt-toolkit==3.0.24 psycopg2-binary==2.9.1 +pyparsing==3.0.6 pyproj==3.2.1 python-dateutil==2.8.2 -pytz==2020.4 +pytz==2021.3 PyYAML==6.0 qrcode==7.3.1 +redis==4.1.0 requests==2.25.0 six==1.15.0 soupsieve==2.2.1 sqlparse==0.4.1 urllib3==1.26.2 +vine==5.0.0 +wcwidth==0.2.5 webservices==0.7 +wrapt==1.13.3 xmltodict==0.12.0 zipp==3.4.1