Eco account unit tests
* adds eco account unit tests * adds validity check to eco account form to check on existing deductions and potential conflict with reduced deductable surface * improves geojson handling on SimpleGeomForm * adds/updates translation
This commit is contained in:
parent
5684b9b6d9
commit
3fa76063d0
@ -172,6 +172,23 @@ class EditEcoAccountForm(NewEcoAccountForm):
|
||||
disabled_fields
|
||||
)
|
||||
|
||||
def is_valid(self):
|
||||
valid = super().is_valid()
|
||||
|
||||
deductable_surface = self.cleaned_data.get("surface")
|
||||
deduction_surface_sum = self.instance.get_deductions_surface()
|
||||
if deductable_surface < deduction_surface_sum:
|
||||
self.add_error(
|
||||
"surface",
|
||||
_("{}m² have been deducted from this eco account so far. The given value of {} would be too low.").format(
|
||||
deduction_surface_sum,
|
||||
deductable_surface
|
||||
)
|
||||
)
|
||||
valid &= False
|
||||
|
||||
return valid
|
||||
|
||||
def save(self, user: User, geom_form: SimpleGeomForm):
|
||||
with transaction.atomic():
|
||||
# Fetch data from cleaned POST values
|
||||
|
@ -59,20 +59,6 @@ class EcoAccount(AbstractCompensation, ShareableObjectMixin, RecordableObjectMix
|
||||
def __str__(self):
|
||||
return f"{self.identifier} ({self.title})"
|
||||
|
||||
def clean(self):
|
||||
# Deductable surface can not be larger than added states after surface
|
||||
after_state_sum = self.get_surface_after_states()
|
||||
if self.deductable_surface > after_state_sum:
|
||||
raise ValidationError(_("Deductable surface can not be larger than existing surfaces in after states"))
|
||||
|
||||
# Deductable surface can not be lower than amount of already deducted surfaces
|
||||
# User needs to contact deducting user in case of further problems
|
||||
deducted_sum = self.get_deductions_surface()
|
||||
if self.deductable_surface < deducted_sum:
|
||||
raise ValidationError(
|
||||
_("Deductable surface can not be smaller than the sum of already existing deductions. Please contact the responsible users for the deductions!")
|
||||
)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if self.identifier is None or len(self.identifier) == 0:
|
||||
# Create new identifier if none was given
|
||||
|
7
compensation/tests/ecoaccount/unit/__init__.py
Normal file
7
compensation/tests/ecoaccount/unit/__init__.py
Normal file
@ -0,0 +1,7 @@
|
||||
"""
|
||||
Author: Michel Peltriaux
|
||||
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
|
||||
Contact: ksp-servicestelle@sgdnord.rlp.de
|
||||
Created on: 30.08.23
|
||||
|
||||
"""
|
128
compensation/tests/ecoaccount/unit/test_models.py
Normal file
128
compensation/tests/ecoaccount/unit/test_models.py
Normal file
@ -0,0 +1,128 @@
|
||||
"""
|
||||
Author: Michel Peltriaux
|
||||
Organization: Struktur- und Genehmigungsdirektion Nord, Rhineland-Palatinate, Germany
|
||||
Contact: ksp-servicestelle@sgdnord.rlp.de
|
||||
Created on: 30.08.23
|
||||
|
||||
"""
|
||||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.urls import reverse
|
||||
|
||||
from compensation.models import EcoAccountDocument
|
||||
from konova.tests.test_views import BaseTestCase
|
||||
from konova.utils.message_templates import DOCUMENT_REMOVED_TEMPLATE, DEDUCTION_REMOVED
|
||||
from user.models import UserAction
|
||||
|
||||
|
||||
class EcoAccountTestCase(BaseTestCase):
|
||||
|
||||
def setUp(self) -> None:
|
||||
super().setUp()
|
||||
|
||||
def test_str(self):
|
||||
self.assertEqual(str(self.eco_account), f"{self.eco_account.identifier} ({self.eco_account.title})")
|
||||
|
||||
def test_save(self):
|
||||
old_id = self.eco_account.identifier
|
||||
self.assertIsNotNone(self.eco_account.identifier)
|
||||
self.eco_account.identifier = None
|
||||
self.eco_account.save()
|
||||
self.assertIsNotNone(self.eco_account.identifier)
|
||||
self.assertNotEqual(old_id, self.eco_account.identifier)
|
||||
|
||||
def test_property_deductions_surface_sum(self):
|
||||
self.assertEqual(
|
||||
self.eco_account.deductions_surface_sum,
|
||||
self.eco_account.get_deductions_surface()
|
||||
)
|
||||
|
||||
def test_get_documents(self):
|
||||
docs = self.eco_account.get_documents()
|
||||
self.assertEqual(docs.count(), 0)
|
||||
doc = self.create_dummy_document(EcoAccountDocument, self.eco_account)
|
||||
self.assertIn(doc, self.eco_account.get_documents())
|
||||
|
||||
def test_get_share_link(self):
|
||||
self.assertEqual(
|
||||
self.eco_account.get_share_link(),
|
||||
reverse(
|
||||
"compensation:acc:share-token",
|
||||
args=(self.eco_account.id, self.eco_account.access_token)
|
||||
)
|
||||
)
|
||||
|
||||
def test_get_deductable_rest_relative(self):
|
||||
self.assertEqual(self.eco_account.deductions.count(), 0)
|
||||
self.eco_account.deductable_surface = 5.0
|
||||
self.eco_account.save()
|
||||
self.eco_account.update_deductable_rest()
|
||||
|
||||
self.assertEqual(self.eco_account.get_deductable_rest_relative(), 100)
|
||||
self.eco_account.deductable_surface = None
|
||||
self.eco_account.save()
|
||||
self.assertEqual(self.eco_account.get_deductable_rest_relative(), 0)
|
||||
|
||||
|
||||
class EcoAccountDocumentTestCase(BaseTestCase):
|
||||
def setUp(self) -> None:
|
||||
super().setUp()
|
||||
|
||||
def test_delete(self):
|
||||
doc = self.create_dummy_document(
|
||||
EcoAccountDocument,
|
||||
self.eco_account
|
||||
)
|
||||
doc_title = doc.title
|
||||
docs = self.eco_account.get_documents()
|
||||
self.assertIn(doc, docs)
|
||||
|
||||
doc.delete(user=self.superuser)
|
||||
last_log = self.eco_account.log.first()
|
||||
self.assertEqual(last_log.user, self.superuser)
|
||||
self.assertEqual(last_log.action, UserAction.EDITED)
|
||||
self.assertEqual(last_log.comment, DOCUMENT_REMOVED_TEMPLATE.format(
|
||||
doc_title
|
||||
))
|
||||
try:
|
||||
doc.refresh_from_db()
|
||||
self.fail("Document should not have been fetchable")
|
||||
except ObjectDoesNotExist:
|
||||
pass
|
||||
|
||||
|
||||
class EcoAccountDeductionTestCase(BaseTestCase):
|
||||
def setUp(self) -> None:
|
||||
super().setUp()
|
||||
|
||||
def test_str(self):
|
||||
self.assertEqual(str(self.deduction), f"{self.deduction.surface} of {self.deduction.account}")
|
||||
|
||||
def test_delete(self):
|
||||
self.deduction.account = self.eco_account
|
||||
self.deduction.intervention = self.intervention
|
||||
self.deduction.save()
|
||||
|
||||
self.eco_account.update_deductable_rest()
|
||||
old_deductable_rest = self.eco_account.deductable_rest
|
||||
deduction_surface = self.deduction.surface
|
||||
|
||||
self.deduction.delete(self.superuser)
|
||||
|
||||
last_log_intervention = self.intervention.log.first()
|
||||
last_log_account = self.eco_account.log.first()
|
||||
logs = [
|
||||
last_log_intervention,
|
||||
last_log_account,
|
||||
]
|
||||
for log in logs:
|
||||
self.assertEqual(log.action, UserAction.EDITED)
|
||||
self.assertEqual(log.user, self.superuser)
|
||||
self.assertEqual(log.comment, DEDUCTION_REMOVED)
|
||||
|
||||
self.assertLess(old_deductable_rest, self.eco_account.deductable_rest)
|
||||
self.assertEqual(old_deductable_rest + deduction_surface, self.eco_account.deductable_rest)
|
||||
try:
|
||||
self.deduction.refresh_from_db()
|
||||
self.fail("Deduction still fetchable after deleting")
|
||||
except ObjectDoesNotExist:
|
||||
pass
|
@ -150,7 +150,9 @@ def edit_view(request: HttpRequest, id: str):
|
||||
data_form = EditEcoAccountForm(request.POST or None, instance=acc)
|
||||
geom_form = SimpleGeomForm(request.POST or None, read_only=False, instance=acc)
|
||||
if request.method == "POST":
|
||||
if data_form.is_valid() and geom_form.is_valid():
|
||||
data_form_valid = data_form.is_valid()
|
||||
geom_form_valid = geom_form.is_valid()
|
||||
if data_form_valid and geom_form_valid:
|
||||
# The data form takes the geom form for processing, as well as the performing user
|
||||
acc = data_form.save(request.user, geom_form)
|
||||
messages.success(request, _("Eco-Account {} edited").format(acc.identifier))
|
||||
|
@ -8,10 +8,10 @@ Created on: 15.08.22
|
||||
import json
|
||||
|
||||
from django.contrib.gis import gdal
|
||||
from django.contrib.gis.forms import MultiPolygonField
|
||||
from django.contrib.gis.geos import MultiPolygon, Polygon
|
||||
from django.contrib.gis.geos.prototypes.io import WKTWriter
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
from django.forms import JSONField
|
||||
|
||||
from konova.forms.base_form import BaseForm
|
||||
from konova.models import Geometry
|
||||
@ -27,8 +27,7 @@ class SimpleGeomForm(BaseForm):
|
||||
"""
|
||||
read_only = True
|
||||
geometry_simplified = False
|
||||
geom = MultiPolygonField(
|
||||
srid=DEFAULT_SRID_RLP,
|
||||
geom = JSONField(
|
||||
label=_("Geometry"),
|
||||
help_text=_(""),
|
||||
label_suffix="",
|
||||
|
Binary file not shown.
@ -43,7 +43,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2023-07-10 10:16+0200\n"
|
||||
"POT-Creation-Date: 2023-08-30 13:24+0200\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"
|
||||
@ -96,15 +96,16 @@ msgstr "Verantwortliche Stelle"
|
||||
msgid "Click for selection"
|
||||
msgstr "Auswählen..."
|
||||
|
||||
#: analysis/forms.py:70
|
||||
#: analysis/forms.py:70 analysis/tests/unit/test_forms.py:25
|
||||
msgid "Generate report"
|
||||
msgstr "Bericht generieren"
|
||||
|
||||
#: analysis/forms.py:71
|
||||
#: analysis/forms.py:71 analysis/tests/unit/test_forms.py:26
|
||||
msgid "Select a timespan and the desired conservation office"
|
||||
msgstr "Wählen Sie die Zeitspanne und die gewünschte Eintragungsstelle"
|
||||
|
||||
#: analysis/forms.py:74 konova/forms/modals/base_form.py:30
|
||||
#: analysis/forms.py:74 analysis/tests/unit/test_forms.py:29
|
||||
#: konova/forms/modals/base_form.py:30
|
||||
msgid "Continue"
|
||||
msgstr "Weiter"
|
||||
|
||||
@ -484,7 +485,15 @@ msgstr "Ökokonto XY; Flur ABC"
|
||||
msgid "Edit Eco-Account"
|
||||
msgstr "Ökokonto bearbeiten"
|
||||
|
||||
#: compensation/forms/eco_account.py:232
|
||||
#: compensation/forms/eco_account.py:183
|
||||
msgid ""
|
||||
"{}m² have been deducted from this eco account so far. The given value of {} "
|
||||
"would be too low."
|
||||
msgstr ""
|
||||
"{}n² wurden bereits von diesem Ökokonto abgebucht. Der eingegebene Wert von {} "
|
||||
"wäre daher zu klein."
|
||||
|
||||
#: compensation/forms/eco_account.py:249
|
||||
msgid "The account can not be removed, since there are still deductions."
|
||||
msgstr ""
|
||||
"Das Ökokonto kann nicht entfernt werden, da hierzu noch Abbuchungen "
|
||||
@ -597,16 +606,19 @@ msgid "Insert the amount"
|
||||
msgstr "Menge eingeben"
|
||||
|
||||
#: compensation/forms/modals/compensation_action.py:94
|
||||
#: compensation/tests/compensation/unit/test_forms.py:42
|
||||
msgid "New action"
|
||||
msgstr "Neue Maßnahme"
|
||||
|
||||
#: compensation/forms/modals/compensation_action.py:95
|
||||
#: compensation/tests/compensation/unit/test_forms.py:43
|
||||
msgid "Insert data for the new action"
|
||||
msgstr "Geben Sie die Daten der neuen Maßnahme ein"
|
||||
|
||||
#: compensation/forms/modals/compensation_action.py:119
|
||||
#: compensation/templates/compensation/detail/compensation/includes/actions.html:68
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/actions.html:67
|
||||
#: compensation/tests/compensation/unit/test_forms.py:84
|
||||
#: ema/templates/ema/detail/includes/actions.html:65
|
||||
msgid "Edit action"
|
||||
msgstr "Maßnahme bearbeiten"
|
||||
@ -640,18 +652,21 @@ msgid "Additional comment, maximum {} letters"
|
||||
msgstr "Zusätzlicher Kommentar, maximal {} Zeichen"
|
||||
|
||||
#: compensation/forms/modals/deadline.py:65
|
||||
#: konova/tests/unit/test_deadline.py:29
|
||||
msgid "New deadline"
|
||||
msgstr "Neue Frist"
|
||||
|
||||
#: compensation/forms/modals/deadline.py:66
|
||||
#: konova/tests/unit/test_deadline.py:30
|
||||
msgid "Insert data for the new deadline"
|
||||
msgstr "Geben Sie die Daten der neuen Frist ein"
|
||||
|
||||
#: compensation/forms/modals/deadline.py:75
|
||||
#: compensation/forms/modals/deadline.py:78
|
||||
#: konova/tests/unit/test_deadline.py:57
|
||||
msgid "Please explain this 'other' type of deadline."
|
||||
msgstr "Bitte erklären Sie um welchen 'sonstigen' Termin es sich handelt."
|
||||
|
||||
#: compensation/forms/modals/deadline.py:92
|
||||
#: compensation/forms/modals/deadline.py:95
|
||||
#: compensation/templates/compensation/detail/compensation/includes/deadlines.html:64
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/deadlines.html:62
|
||||
#: ema/templates/ema/detail/includes/deadlines.html:62
|
||||
@ -706,10 +721,12 @@ msgid "in m²"
|
||||
msgstr ""
|
||||
|
||||
#: compensation/forms/modals/state.py:72
|
||||
#: compensation/tests/compensation/unit/test_forms.py:175
|
||||
msgid "New state"
|
||||
msgstr "Neuer Zustand"
|
||||
|
||||
#: compensation/forms/modals/state.py:73
|
||||
#: compensation/tests/compensation/unit/test_forms.py:176
|
||||
msgid "Insert data for the new state"
|
||||
msgstr "Geben Sie die Daten des neuen Zustandes ein"
|
||||
|
||||
@ -722,6 +739,7 @@ msgstr "Objekt entfernt"
|
||||
#: compensation/templates/compensation/detail/compensation/includes/states-before.html:62
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/states-after.html:62
|
||||
#: compensation/templates/compensation/detail/eco_account/includes/states-before.html:62
|
||||
#: compensation/tests/compensation/unit/test_forms.py:236
|
||||
#: ema/templates/ema/detail/includes/states-after.html:60
|
||||
#: ema/templates/ema/detail/includes/states-before.html:60
|
||||
msgid "Edit state"
|
||||
@ -755,21 +773,6 @@ msgstr ""
|
||||
msgid "Pieces"
|
||||
msgstr "Stück"
|
||||
|
||||
#: compensation/models/eco_account.py:62
|
||||
msgid ""
|
||||
"Deductable surface can not be larger than existing surfaces in after states"
|
||||
msgstr ""
|
||||
"Die abbuchbare Fläche darf die Gesamtfläche der Zielzustände nicht "
|
||||
"überschreiten"
|
||||
|
||||
#: compensation/models/eco_account.py:69
|
||||
msgid ""
|
||||
"Deductable surface can not be smaller than the sum of already existing "
|
||||
"deductions. Please contact the responsible users for the deductions!"
|
||||
msgstr ""
|
||||
"Es wurde bereits mehr Fläche abgebucht, als Sie nun als abbuchbar einstellen "
|
||||
"wollen. Kontaktieren Sie die für die Abbuchungen verantwortlichen Nutzer!"
|
||||
|
||||
#: compensation/tables/compensation.py:33 compensation/tables/eco_account.py:34
|
||||
#: ema/tables.py:36 intervention/tables.py:33
|
||||
#: konova/filters/mixins/geo_reference.py:42
|
||||
@ -1424,6 +1427,7 @@ msgid "Binding on"
|
||||
msgstr "Datum Bestandskraft bzw. Rechtskraft"
|
||||
|
||||
#: intervention/forms/intervention.py:216
|
||||
#: intervention/tests/unit/test_forms.py:27
|
||||
#: intervention/views/intervention.py:105
|
||||
msgid "New intervention"
|
||||
msgstr "Neuer Eingriff"
|
||||
@ -1802,7 +1806,6 @@ msgstr "Wann wurde diese Datei erstellt oder das Foto aufgenommen?"
|
||||
|
||||
#: konova/forms/modals/document_form.py:49
|
||||
#: venv/lib/python3.7/site-packages/django/db/models/fields/files.py:231
|
||||
#: venv_py3.9/lib/python3.9/site-packages/django/db/models/fields/files.py:231
|
||||
msgid "File"
|
||||
msgstr "Datei"
|
||||
|
||||
@ -2234,15 +2237,11 @@ msgstr "Dokument bearbeitet"
|
||||
msgid "Edited general data"
|
||||
msgstr "Allgemeine Daten bearbeitet"
|
||||
|
||||
#: konova/utils/message_templates.py:82
|
||||
msgid "Added deadline"
|
||||
msgstr "Frist/Termin hinzugefügt"
|
||||
|
||||
#: konova/utils/message_templates.py:85
|
||||
#: konova/utils/message_templates.py:84
|
||||
msgid "Geometry conflict detected with {}"
|
||||
msgstr "Geometriekonflikt mit folgenden Einträgen erkannt: {}"
|
||||
|
||||
#: konova/utils/message_templates.py:86
|
||||
#: konova/utils/message_templates.py:85
|
||||
msgid ""
|
||||
"The geometry contained more than {} vertices. It had to be simplified to "
|
||||
"match the allowed limit of {} vertices."
|
||||
@ -2250,20 +2249,20 @@ msgstr ""
|
||||
"Die Geometrie enthielt mehr als {} Eckpunkte. Sie musste vereinfacht werden "
|
||||
"um die Obergrenze von {} erlaubten Eckpunkten einzuhalten."
|
||||
|
||||
#: konova/utils/message_templates.py:89
|
||||
#: konova/utils/message_templates.py:88
|
||||
msgid "This intervention has {} revocations"
|
||||
msgstr "Dem Eingriff liegen {} Widersprüche vor"
|
||||
|
||||
#: konova/utils/message_templates.py:92
|
||||
#: konova/utils/message_templates.py:91
|
||||
msgid "Checked on {} by {}"
|
||||
msgstr "Am {} von {} geprüft worden"
|
||||
|
||||
#: konova/utils/message_templates.py:93
|
||||
#: konova/utils/message_templates.py:92
|
||||
msgid "Data has changed since last check on {} by {}"
|
||||
msgstr ""
|
||||
"Daten wurden nach der letzten Prüfung geändert. Letzte Prüfung am {} durch {}"
|
||||
|
||||
#: konova/utils/message_templates.py:94
|
||||
#: konova/utils/message_templates.py:93
|
||||
msgid "Current data not checked yet"
|
||||
msgstr "Momentane Daten noch nicht geprüft"
|
||||
|
||||
@ -2297,7 +2296,7 @@ msgstr ""
|
||||
"Dieses Datum ist unrealistisch. Geben Sie bitte das korrekte Datum ein "
|
||||
"(>1950)."
|
||||
|
||||
#: konova/views/home.py:74 templates/navbars/navbar.html:16
|
||||
#: konova/views/home.py:75 templates/navbars/navbar.html:16
|
||||
msgid "Home"
|
||||
msgstr "Home"
|
||||
|
||||
@ -2305,7 +2304,7 @@ msgstr "Home"
|
||||
msgid "Log"
|
||||
msgstr "Log"
|
||||
|
||||
#: konova/views/map_proxy.py:71
|
||||
#: konova/views/map_proxy.py:70
|
||||
msgid ""
|
||||
"The external service is currently unavailable.<br>Please try again in a few "
|
||||
"moments..."
|
||||
@ -3118,26 +3117,20 @@ msgstr "Team verlassen"
|
||||
#: venv/lib/python3.7/site-packages/bootstrap4/components.py:17
|
||||
#: venv/lib/python3.7/site-packages/bootstrap4/templates/bootstrap4/form_errors.html:3
|
||||
#: venv/lib/python3.7/site-packages/bootstrap4/templates/bootstrap4/messages.html:4
|
||||
#: venv_py3.9/lib/python3.9/site-packages/bootstrap4/components.py:17
|
||||
#: venv_py3.9/lib/python3.9/site-packages/bootstrap4/templates/bootstrap4/form_errors.html:3
|
||||
#: venv_py3.9/lib/python3.9/site-packages/bootstrap4/templates/bootstrap4/messages.html:4
|
||||
msgid "close"
|
||||
msgstr "Schließen"
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/_termui_impl.py:496
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/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."
|
||||
@ -3145,7 +3138,6 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/_unicodefun.py:56
|
||||
#: venv_py3.9/lib/python3.9/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 "
|
||||
@ -3153,14 +3145,12 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/_unicodefun.py:65
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/_unicodefun.py:75
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"This system lists some UTF-8 supporting locales that you can pick from. The "
|
||||
@ -3168,7 +3158,6 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/_unicodefun.py:93
|
||||
#: venv_py3.9/lib/python3.9/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 "
|
||||
@ -3176,32 +3165,25 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/core.py:1095
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1279
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1308
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1334
|
||||
#, python-brace-format
|
||||
msgid "(Deprecated) {text}"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/core.py:1351
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1351
|
||||
msgid "Options"
|
||||
msgstr "Optionen"
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/core.py:1375
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1375
|
||||
#, python-brace-format
|
||||
msgid "Got unexpected extra argument ({args})"
|
||||
msgid_plural "Got unexpected extra arguments ({args})"
|
||||
@ -3209,32 +3191,26 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/core.py:1390
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1607
|
||||
msgid "Commands"
|
||||
msgstr "Befehle"
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/core.py:1639
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1639
|
||||
msgid "Missing command."
|
||||
msgstr "Befehl fehlt"
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/core.py:1717
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:1717
|
||||
msgid "No such command {name!r}."
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/core.py:2258
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2258
|
||||
msgid "Value must be an iterable."
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/core.py:2278
|
||||
#: venv_py3.9/lib/python3.9/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."
|
||||
@ -3242,99 +3218,81 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/core.py:2701
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2701
|
||||
#, python-brace-format
|
||||
msgid "env var: {var}"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/core.py:2724
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2724
|
||||
msgid "(dynamic)"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/core.py:2735
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2735
|
||||
#, python-brace-format
|
||||
msgid "default: {default}"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/core.py:2748
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/core.py:2748
|
||||
msgid "required"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/decorators.py:339
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:43
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:79
|
||||
#, python-brace-format
|
||||
msgid "Error: {message}"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/exceptions.py:71
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:120
|
||||
#, python-brace-format
|
||||
msgid "Invalid value: {message}"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/exceptions.py:122
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:178
|
||||
msgid "Missing argument"
|
||||
msgstr "Argument fehlt"
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/exceptions.py:180
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:180
|
||||
msgid "Missing option"
|
||||
msgstr "Option fehlt"
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/exceptions.py:182
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:182
|
||||
msgid "Missing parameter"
|
||||
msgstr "Parameter fehlt"
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/exceptions.py:184
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:184
|
||||
#, python-brace-format
|
||||
msgid "Missing {param_type}"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/exceptions.py:191
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:223
|
||||
#, python-brace-format
|
||||
msgid "Did you mean {possibility}?"
|
||||
msgid_plural "(Possible options: {possibilities})"
|
||||
@ -3342,75 +3300,61 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/exceptions.py:261
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/exceptions.py:261
|
||||
msgid "unknown error"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/exceptions.py:268
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/parser.py:231
|
||||
msgid "Argument {name!r} takes {nargs} values."
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/parser.py:413
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:161
|
||||
msgid "Repeat for confirmation"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/termui.py:178
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:180
|
||||
#, python-brace-format
|
||||
msgid "Error: {e.message}"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/termui.py:191
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:247
|
||||
msgid "Error: invalid input"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/termui.py:798
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/termui.py:798
|
||||
msgid "Press any key to continue..."
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/types.py:258
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:258
|
||||
#, python-brace-format
|
||||
msgid ""
|
||||
"Choose from:\n"
|
||||
@ -3418,82 +3362,67 @@ msgid ""
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/types.py:290
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/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
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:801
|
||||
msgid "file"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/types.py:803
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:803
|
||||
msgid "directory"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/types.py:805
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:805
|
||||
msgid "path"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/types.py:851
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:851
|
||||
msgid "{name} {filename!r} does not exist."
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/types.py:860
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:860
|
||||
msgid "{name} {filename!r} is a file."
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/types.py:868
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:868
|
||||
msgid "{name} {filename!r} is a directory."
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/types.py:876
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:876
|
||||
msgid "{name} {filename!r} is not writable."
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/types.py:884
|
||||
#: venv_py3.9/lib/python3.9/site-packages/click/types.py:884
|
||||
msgid "{name} {filename!r} is not readable."
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/click/types.py:951
|
||||
#: venv_py3.9/lib/python3.9/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."
|
||||
@ -3501,22 +3430,18 @@ msgstr[0] ""
|
||||
msgstr[1] ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/django/contrib/messages/apps.py:7
|
||||
#: venv_py3.9/lib/python3.9/site-packages/django/contrib/messages/apps.py:7
|
||||
msgid "Messages"
|
||||
msgstr "Nachrichten"
|
||||
|
||||
#: venv/lib/python3.7/site-packages/django/contrib/sitemaps/apps.py:7
|
||||
#: venv_py3.9/lib/python3.9/site-packages/django/contrib/sitemaps/apps.py:7
|
||||
msgid "Site Maps"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/django/contrib/staticfiles/apps.py:9
|
||||
#: venv_py3.9/lib/python3.9/site-packages/django/contrib/staticfiles/apps.py:9
|
||||
msgid "Static Files"
|
||||
msgstr ""
|
||||
|
||||
#: venv/lib/python3.7/site-packages/django/contrib/syndication/apps.py:7
|
||||
#: venv_py3.9/lib/python3.9/site-packages/django/contrib/syndication/apps.py:7
|
||||
msgid "Syndication"
|
||||
msgstr ""
|
||||
|
||||
@ -4688,6 +4613,24 @@ msgstr ""
|
||||
msgid "Unable to connect to qpid with SASL mechanism %s"
|
||||
msgstr ""
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Deductable surface can not be larger than existing surfaces in after "
|
||||
#~ "states"
|
||||
#~ msgstr ""
|
||||
#~ "Die abbuchbare Fläche darf die Gesamtfläche der Zielzustände nicht "
|
||||
#~ "überschreiten"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Deductable surface can not be smaller than the sum of already existing "
|
||||
#~ "deductions. Please contact the responsible users for the deductions!"
|
||||
#~ msgstr ""
|
||||
#~ "Es wurde bereits mehr Fläche abgebucht, als Sie nun als abbuchbar "
|
||||
#~ "einstellen wollen. Kontaktieren Sie die für die Abbuchungen "
|
||||
#~ "verantwortlichen Nutzer!"
|
||||
|
||||
#~ msgid "Added deadline"
|
||||
#~ msgstr "Frist/Termin hinzugefügt"
|
||||
|
||||
#~ msgid "Change default configuration for your KSP map"
|
||||
#~ msgstr "Karteneinstellungen ändern"
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user