#55 Celery parcel updating

* adds celery to project
* adds celery background task for updating parcels
* adds parcel calculation to creating of new geometries as well
* tests outstanding!!!
This commit is contained in:
mpeltriaux 2022-01-06 12:08:38 +01:00
parent e618d454e2
commit d6d15185ea
13 changed files with 506 additions and 81 deletions

View File

@ -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.

View File

@ -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))

View File

@ -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',)

25
konova/celery.py Normal file
View File

@ -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}')

View File

@ -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

View File

@ -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 + "/.."

14
konova/tasks.py Normal file
View File

@ -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

View File

@ -3,6 +3,13 @@
<h3>{% trans 'Spatial reference' %}</h3>
</div>
<div class="table-container w-100 scroll-300">
{% if parcels|length == 0 %}
<article class="alert alert-info">
{% blocktrans %}
If the geometry is not empty, the parcels are currently recalculated. Please refresh this page in a few moments.
{% endblocktrans %}
</article>
{% else %}
<table class="table table-hover">
<thead>
<tr>
@ -26,4 +33,5 @@
</tbody>
</table>
{% endif %}
</div>

View File

@ -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 = ""):

View File

@ -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")

Binary file not shown.

View File

@ -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 <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\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 "<a href=\"{}\">Check it out</a>"
msgstr "<a href=\"{}\">Schauen Sie rein</a>"
#: 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!"

View File

@ -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