diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 54f064594cd7f467ed5cf9e0f45893424e7fd210..5005d704718e7d21c322d8014288df3fb898a44c 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -12,45 +12,94 @@ Unreleased Added ~~~~~ -* OpenID connect scope and accompanying claim `groups` -* Support config files in JSON format +* Provide an ``ExtensiblePolymorphicModel`` to support the features of extensible models for polymorphic models and vice-versa. Changed ~~~~~~~ -* Do not log or e-mail ALLOWED_HOSTS violations * Replace dev.sh helper script with tox environments. +`2.0`_ - 2021-10-29 +------------------- + +Changed +~~~~~~~ + +* Refactor views/forms for creating/editing persons. + Fixed ~~~~~ -* Show link to imprint in footer -* Fix API for adding OAuth scopes in AppConfigs +* Fix order of submit buttons in login form and restructure login template + to make 2FA work correctly. +* Fix page title bug on the impersonate page. +* Users were able to edit the linked user if self-editing was activated. +* Users weren't able to edit the allowed fields although they were configured correctly. +* Provide `style.css` and icon files without any authentication to avoid caching issues. + Removed ~~~~~~~ -* Dropped data anonymization (django-hattori) support for now +* Remove mass linking of persons to accounts, bevcause the view had performance issues, + but was practically unused. -`2.0rc5`_ - 2021-08-25 +`2.0rc7`_ - 2021-10-18 +---------------------- + +Fixed +~~~~~ + +* Configuration mechanisms for OpenID Connect were broken. +* Set a fixed version for django-sass-processor to avoid a bug with searching ``style.css`` in the wrong storage. +* Correct the z-index of the navbar to display the main title again on mobile devices. + +Removed +~~~~~~~ + +* Leftovers from a functionality already dropped in the development process + (custom authentication backends and alternative login views). + +`2.0rc6`_ - 2021-10-11 ---------------------- Added ~~~~~ +* OpenID Connect scope and accompanying claim ``groups`` +* Support config files in JSON format * Allow apps to dynamically generate OAuth scopes +Changed +~~~~~~~ + +* Do not log or e-mail ALLOWED_HOSTS violations +* Update translations. +* Use initial superuser settings as default contact and from addresses + Fixed ~~~~~ -* The view for getting the progress of celery tasks didn't respect that there can be anonymous users. -* Updated django to latest 3.2.x +* Show link to imprint in footer +* Fix API for adding OAuth scopes in AppConfigs +* Deleting persons is possible again. +* Removed wrong changelog section Removed ~~~~~~~ -* `OAUTH2_SCOPES` setting in apps is not supported anymore. Use `get_all_scopes` method - on `AppConfig` class instead. +* Dropped data anonymization (django-hattori) support for now +* ``OAUTH2_SCOPES`` setting in apps is not supported anymore. Use ``get_all_scopes`` method + on ``AppConfig`` class instead. + +`2.0rc5`_ - 2021-08-25 +---------------------- + +Fixed +~~~~~ + +* The view for getting the progress of celery tasks didn't respect that there can be anonymous users. +* Updated django to latest 3.2.x `2.0rc4`_ - 2021-08-01 @@ -104,9 +153,6 @@ Added * Add option to disable dashboard auto updating as a user and sitewide. -`2.0rc1` - 2021-06-23 ----------------------- - Changed ~~~~~~~ @@ -178,14 +224,14 @@ Added * Allow defining several search configs for LDAP users and groups * Use setuptools entrypoints to find apps * Add django-cachalot as query cache -* Add `syncable_fields` property to `ExtensibleModel to discover fields +* Add ``syncable_fields`` property to ``ExtensibleModel`` to discover fields sync backends can write to -* Add `aleksis-admin` script to wrap django-admin with pre-configured settings +* Add ``aleksis-admin`` script to wrap django-admin with pre-configured settings * Auto-create persons for users if matching attributes are found -* Add `django-allauth` to allow authentication using OAuth, user registration, +* Add ``django-allauth`` to allow authentication using OAuth, user registration, password changes and password reset * Add OAuth2 and OpenID Connect provider support -* Add `django-uwsgi` to use uWSGI and Celery in development +* Add ``django-uwsgi`` to use uWSGI and Celery in development * Add loading page for displaying Celery task progress * Implement generic PDF generation using Chromium * Support Amazon S3 storage for /media files @@ -223,7 +269,7 @@ Changed * Default search index backend is now Whoosh with Redis storage * Re-style search result page * Move notifications to separate page with indicator in menu -* Move to `BigAutoField` for all AlekSIS apps +* Move to ``BigAutoField`` for all AlekSIS apps * Require Django 3.2 and Python 3.9 * Person and group lists can now be filtered * Allow displaying the default widget to anonymous users @@ -375,3 +421,6 @@ Fixed .. _2.0rc3: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.0rc3 .. _2.0rc4: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.0rc4 .. _2.0rc5: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.0rc5 +.. _2.0rc6: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.0rc6 +.. _2.0rc7: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.0rc7 +.. _2.0: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.0 diff --git a/aleksis/core/apps.py b/aleksis/core/apps.py index c14af908faab80f884372e60c6a7ba3ccb8378d0..b549995264811d731cb61a8ed934e579dcefc33e 100644 --- a/aleksis/core/apps.py +++ b/aleksis/core/apps.py @@ -5,6 +5,7 @@ from django.apps import apps from django.conf import settings from django.http import HttpRequest from django.utils.module_loading import autodiscover_modules +from django.utils.translation import gettext as _ from dynamic_preferences.registries import preference_models from health_check.plugins import plugin_dir diff --git a/aleksis/core/forms.py b/aleksis/core/forms.py index 642364b1b331f37720bdbb5798ac20b33786b79b..740fd24b3b5d82c1df5c50d2ad78aa7d71a92292 100644 --- a/aleksis/core/forms.py +++ b/aleksis/core/forms.py @@ -13,7 +13,6 @@ from allauth.account.forms import SignupForm from allauth.account.utils import get_user_model, setup_user_email from django_select2.forms import ModelSelect2MultipleWidget, ModelSelect2Widget, Select2Widget from dynamic_preferences.forms import PreferenceForm -from guardian.core import ObjectPermissionChecker from material import Fieldset, Layout, Row from .mixins import ExtensibleForm, SchoolTermRelatedExtensibleForm @@ -34,56 +33,8 @@ from .registries import ( from .util.core_helpers import get_site_preferences -class PersonAccountForm(forms.ModelForm): - """Form to assign user accounts to persons in the frontend.""" - - class Meta: - model = Person - fields = ["last_name", "first_name", "user"] - widgets = {"user": Select2Widget(attrs={"class": "browser-default"})} - - new_user = forms.CharField(required=False) - - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - - # Fields displayed only for informational purposes - self.fields["first_name"].disabled = True - self.fields["last_name"].disabled = True - - def clean(self) -> None: - user = get_user_model() - - if self.cleaned_data.get("new_user", None): - if self.cleaned_data.get("user", None): - # The user selected both an existing user and provided a name to create a new one - self.add_error( - "new_user", - _("You cannot set a new username when also selecting an existing user."), - ) - elif user.objects.filter(username=self.cleaned_data["new_user"]).exists(): - # The user tried to create a new user with the name of an existing user - self.add_error("new_user", _("This username is already in use.")) - else: - # Create new User object and assign to form field for existing user - new_user_obj = user.objects.create_user( - self.cleaned_data["new_user"], - self.instance.email, - first_name=self.instance.first_name, - last_name=self.instance.last_name, - ) - - self.cleaned_data["user"] = new_user_obj - - -# Formset for batch-processing of assignments of users to persons -PersonsAccountsFormSet = forms.modelformset_factory( - Person, form=PersonAccountForm, max_num=0, extra=0 -) - - -class EditPersonForm(ExtensibleForm): - """Form to edit an existing person object in the frontend.""" +class PersonForm(ExtensibleForm): + """Form to edit or add a person object in the frontend.""" layout = Layout( Fieldset( @@ -142,25 +93,49 @@ class EditPersonForm(ExtensibleForm): required=False, label=_("New user"), help_text=_("Create a new account") ) - def __init__(self, request: HttpRequest, *args, **kwargs): + def __init__(self, *args, **kwargs): + request = kwargs.pop("request", None) super().__init__(*args, **kwargs) # Disable non-editable fields - person_fields = set([field.name for field in Person.syncable_fields()]).intersection( - set(self.fields) - ) + allowed_person_fields = get_site_preferences()["account__editable_fields_person"] - if self.instance: - checker = ObjectPermissionChecker(request.user) - checker.prefetch_perms([self.instance]) + if ( + request + and self.instance + and not request.user.has_perm("core.change_person", self.instance) + ): + # First, disable all fields + for field in self.fields: + self.fields[field].disabled = True - for field in person_fields: - if not checker.has_perm(f"core.change_person_field_{field}", self.instance): - self.fields[field].disabled = True + # Then, activate allowed fields + for field in allowed_person_fields: + self.fields[field].disabled = False def clean(self) -> None: - # Use code implemented in dedicated form to verify user selection - return PersonAccountForm.clean(self) + user = get_user_model() + + if self.cleaned_data.get("new_user", None): + if self.cleaned_data.get("user", None): + # The user selected both an existing user and provided a name to create a new one + self.add_error( + "new_user", + _("You cannot set a new username when also selecting an existing user."), + ) + elif user.objects.filter(username=self.cleaned_data["new_user"]).exists(): + # The user tried to create a new user with the name of an existing user + self.add_error("new_user", _("This username is already in use.")) + else: + # Create new User object and assign to form field for existing user + new_user_obj = user.objects.create_user( + self.cleaned_data["new_user"], + self.instance.email, + first_name=self.instance.first_name, + last_name=self.instance.last_name, + ) + + self.cleaned_data["user"] = new_user_obj class EditGroupForm(SchoolTermRelatedExtensibleForm): diff --git a/aleksis/core/locale/ar/LC_MESSAGES/django.po b/aleksis/core/locale/ar/LC_MESSAGES/django.po index ef5a6607f526523fb1ba3ca7f43e08ab21629c62..29ee921af8694936e102e32d65b310ac44979fbc 100644 --- a/aleksis/core/locale/ar/LC_MESSAGES/django.po +++ b/aleksis/core/locale/ar/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: AlekSIS (School Information System) 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-28 17:53+0200\n" +"POT-Creation-Date: 2021-10-28 16:18+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" @@ -18,23 +18,23 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" -#: aleksis/core/apps.py:148 aleksis/core/settings.py:343 +#: aleksis/core/apps.py:150 msgid "OpenID Connect scope" msgstr "" -#: aleksis/core/apps.py:149 aleksis/core/settings.py:344 +#: aleksis/core/apps.py:151 msgid "Given name, family name, link to profile and picture if existing." msgstr "" -#: aleksis/core/apps.py:150 aleksis/core/settings.py:345 +#: aleksis/core/apps.py:152 msgid "Full home postal address" msgstr "" -#: aleksis/core/apps.py:151 aleksis/core/settings.py:346 +#: aleksis/core/apps.py:153 msgid "Email address" msgstr "" -#: aleksis/core/apps.py:152 aleksis/core/settings.py:347 +#: aleksis/core/apps.py:154 msgid "Home and mobile phone" msgstr "" @@ -76,124 +76,124 @@ msgstr "" msgid "Search by contact details" msgstr "" -#: aleksis/core/forms.py:62 -msgid "You cannot set a new username when also selecting an existing user." -msgstr "" - -#: aleksis/core/forms.py:66 -msgid "This username is already in use." -msgstr "" - -#: aleksis/core/forms.py:90 aleksis/core/forms.py:412 +#: aleksis/core/forms.py:41 aleksis/core/forms.py:387 msgid "Base data" msgstr "" -#: aleksis/core/forms.py:96 +#: aleksis/core/forms.py:47 msgid "Address" msgstr "" -#: aleksis/core/forms.py:97 +#: aleksis/core/forms.py:48 msgid "Contact data" msgstr "" -#: aleksis/core/forms.py:99 +#: aleksis/core/forms.py:50 msgid "Advanced personal data" msgstr "" -#: aleksis/core/forms.py:142 +#: aleksis/core/forms.py:93 msgid "New user" msgstr "" -#: aleksis/core/forms.py:142 +#: aleksis/core/forms.py:93 msgid "Create a new account" msgstr "" -#: aleksis/core/forms.py:170 aleksis/core/models.py:116 +#: aleksis/core/forms.py:124 +msgid "You cannot set a new username when also selecting an existing user." +msgstr "" + +#: aleksis/core/forms.py:128 +msgid "This username is already in use." +msgstr "" + +#: aleksis/core/forms.py:145 aleksis/core/models.py:117 msgid "School term" msgstr "" -#: aleksis/core/forms.py:171 +#: aleksis/core/forms.py:146 msgid "Common data" msgstr "" -#: aleksis/core/forms.py:172 aleksis/core/forms.py:221 -#: aleksis/core/menus.py:238 aleksis/core/models.py:139 +#: aleksis/core/forms.py:147 aleksis/core/forms.py:196 +#: aleksis/core/menus.py:238 aleksis/core/models.py:140 #: aleksis/core/templates/core/person/list.html:8 #: aleksis/core/templates/core/person/list.html:9 msgid "Persons" msgstr "" -#: aleksis/core/forms.py:173 +#: aleksis/core/forms.py:148 msgid "Additional data" msgstr "" -#: aleksis/core/forms.py:213 aleksis/core/forms.py:216 -#: aleksis/core/models.py:59 +#: aleksis/core/forms.py:188 aleksis/core/forms.py:191 +#: aleksis/core/models.py:60 msgid "Date" msgstr "" -#: aleksis/core/forms.py:214 aleksis/core/forms.py:217 -#: aleksis/core/models.py:67 +#: aleksis/core/forms.py:189 aleksis/core/forms.py:192 +#: aleksis/core/models.py:68 msgid "Time" msgstr "" -#: aleksis/core/forms.py:234 aleksis/core/menus.py:249 -#: aleksis/core/models.py:381 aleksis/core/templates/core/group/list.html:8 +#: aleksis/core/forms.py:209 aleksis/core/menus.py:249 +#: aleksis/core/models.py:398 aleksis/core/templates/core/group/list.html:8 #: aleksis/core/templates/core/group/list.html:9 #: aleksis/core/templates/core/person/full.html:144 msgid "Groups" msgstr "" -#: aleksis/core/forms.py:244 +#: aleksis/core/forms.py:219 msgid "From when until when should the announcement be displayed?" msgstr "" -#: aleksis/core/forms.py:247 +#: aleksis/core/forms.py:222 msgid "Who should see the announcement?" msgstr "" -#: aleksis/core/forms.py:248 +#: aleksis/core/forms.py:223 msgid "Write your announcement:" msgstr "" -#: aleksis/core/forms.py:287 +#: aleksis/core/forms.py:262 msgid "You are not allowed to create announcements which are only valid in the past." msgstr "" -#: aleksis/core/forms.py:291 +#: aleksis/core/forms.py:266 msgid "The from date and time must be earlier then the until date and time." msgstr "" -#: aleksis/core/forms.py:300 +#: aleksis/core/forms.py:275 msgid "You need at least one recipient." msgstr "" -#: aleksis/core/forms.py:414 +#: aleksis/core/forms.py:389 msgid "Account data" msgstr "" -#: aleksis/core/forms.py:416 +#: aleksis/core/forms.py:391 msgid "Consents" msgstr "" -#: aleksis/core/forms.py:421 +#: aleksis/core/forms.py:396 msgid "Password" msgstr "" -#: aleksis/core/forms.py:427 +#: aleksis/core/forms.py:402 msgid "Password (again)" msgstr "" -#: aleksis/core/forms.py:436 +#: aleksis/core/forms.py:411 #, python-brace-format msgid "I have read the <a href='{privacy_policy}'>Privacy policy</a> and agree with them." msgstr "" -#: aleksis/core/forms.py:460 +#: aleksis/core/forms.py:435 msgid "You must type the same password each time." msgstr "" -#: aleksis/core/forms.py:605 +#: aleksis/core/forms.py:580 msgid "No valid selection." msgstr "" @@ -224,8 +224,8 @@ msgid "{task.status} - {task.result}" msgstr "" #: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6 -#: aleksis/core/templates/two_factor/core/login.html:20 -#: aleksis/core/templates/two_factor/core/login.html:95 +#: aleksis/core/templates/two_factor/core/login.html:22 +#: aleksis/core/templates/two_factor/core/login.html:76 msgid "Login" msgstr "" @@ -238,7 +238,7 @@ msgstr "" msgid "Dashboard" msgstr "" -#: aleksis/core/menus.py:32 aleksis/core/models.py:588 +#: aleksis/core/menus.py:32 aleksis/core/models.py:605 #: aleksis/core/preferences.py:26 #: aleksis/core/templates/core/notifications.html:4 #: aleksis/core/templates/core/notifications.html:5 @@ -296,13 +296,13 @@ msgstr "" msgid "Admin" msgstr "" -#: aleksis/core/menus.py:127 aleksis/core/models.py:687 +#: aleksis/core/menus.py:127 aleksis/core/models.py:704 #: aleksis/core/templates/core/announcement/list.html:7 #: aleksis/core/templates/core/announcement/list.html:8 msgid "Announcements" msgstr "" -#: aleksis/core/menus.py:138 aleksis/core/models.py:117 +#: aleksis/core/menus.py:138 aleksis/core/models.py:118 #: aleksis/core/templates/core/school_term/list.html:8 #: aleksis/core/templates/core/school_term/list.html:9 msgid "School terms" @@ -353,570 +353,561 @@ msgstr "" msgid "People" msgstr "" -#: aleksis/core/menus.py:260 aleksis/core/models.py:941 +#: aleksis/core/menus.py:260 aleksis/core/models.py:958 #: aleksis/core/templates/core/group_type/list.html:8 #: aleksis/core/templates/core/group_type/list.html:9 msgid "Group types" msgstr "" #: aleksis/core/menus.py:271 -msgid "Persons and accounts" -msgstr "" - -#: aleksis/core/menus.py:282 msgid "Groups and child groups" msgstr "" -#: aleksis/core/menus.py:293 aleksis/core/models.py:429 +#: aleksis/core/menus.py:282 aleksis/core/models.py:446 #: aleksis/core/templates/core/additional_field/list.html:8 #: aleksis/core/templates/core/additional_field/list.html:9 msgid "Additional fields" msgstr "" -#: aleksis/core/menus.py:308 +#: aleksis/core/menus.py:297 #: aleksis/core/templates/core/group/child_groups.html:7 #: aleksis/core/templates/core/group/child_groups.html:9 msgid "Assign child groups to groups" msgstr "" -#: aleksis/core/mixins.py:475 +#: aleksis/core/mixins.py:498 msgid "Linked school term" msgstr "" -#: aleksis/core/models.py:57 +#: aleksis/core/models.py:58 msgid "Boolean (Yes/No)" msgstr "" -#: aleksis/core/models.py:58 +#: aleksis/core/models.py:59 msgid "Text (one line)" msgstr "" -#: aleksis/core/models.py:60 +#: aleksis/core/models.py:61 msgid "Date and time" msgstr "" -#: aleksis/core/models.py:61 +#: aleksis/core/models.py:62 msgid "Decimal number" msgstr "" -#: aleksis/core/models.py:62 aleksis/core/models.py:185 +#: aleksis/core/models.py:63 aleksis/core/models.py:186 msgid "E-mail address" msgstr "" -#: aleksis/core/models.py:63 +#: aleksis/core/models.py:64 msgid "Integer" msgstr "" -#: aleksis/core/models.py:64 +#: aleksis/core/models.py:65 msgid "IP address" msgstr "" -#: aleksis/core/models.py:65 +#: aleksis/core/models.py:66 msgid "Boolean or empty (Yes/No/Neither)" msgstr "" -#: aleksis/core/models.py:66 +#: aleksis/core/models.py:67 msgid "Text (multi-line)" msgstr "" -#: aleksis/core/models.py:68 +#: aleksis/core/models.py:69 msgid "URL / Link" msgstr "" -#: aleksis/core/models.py:80 aleksis/core/models.py:910 +#: aleksis/core/models.py:81 aleksis/core/models.py:927 msgid "Name" msgstr "" -#: aleksis/core/models.py:82 +#: aleksis/core/models.py:83 msgid "Start date" msgstr "" -#: aleksis/core/models.py:83 +#: aleksis/core/models.py:84 msgid "End date" msgstr "" -#: aleksis/core/models.py:102 +#: aleksis/core/models.py:103 msgid "The start date must be earlier than the end date." msgstr "" -#: aleksis/core/models.py:109 +#: aleksis/core/models.py:110 msgid "There is already a school term for this time or a part of this time." msgstr "" -#: aleksis/core/models.py:138 aleksis/core/models.py:859 -#: aleksis/core/templates/core/person/accounts.html:41 +#: aleksis/core/models.py:139 aleksis/core/models.py:876 msgid "Person" msgstr "" -#: aleksis/core/models.py:141 +#: aleksis/core/models.py:142 msgid "Can view address" msgstr "" -#: aleksis/core/models.py:142 +#: aleksis/core/models.py:143 msgid "Can view contact details" msgstr "" -#: aleksis/core/models.py:143 +#: aleksis/core/models.py:144 msgid "Can view photo" msgstr "" -#: aleksis/core/models.py:144 +#: aleksis/core/models.py:145 msgid "Can view persons groups" msgstr "" -#: aleksis/core/models.py:145 +#: aleksis/core/models.py:146 msgid "Can view personal details" msgstr "" -#: aleksis/core/models.py:155 +#: aleksis/core/models.py:156 msgid "female" msgstr "" -#: aleksis/core/models.py:155 +#: aleksis/core/models.py:156 msgid "male" msgstr "" -#: aleksis/core/models.py:163 +#: aleksis/core/models.py:164 msgid "Linked user" msgstr "" -#: aleksis/core/models.py:165 +#: aleksis/core/models.py:166 msgid "Is person active?" msgstr "" -#: aleksis/core/models.py:167 +#: aleksis/core/models.py:168 msgid "First name" msgstr "" -#: aleksis/core/models.py:168 +#: aleksis/core/models.py:169 msgid "Last name" msgstr "" -#: aleksis/core/models.py:170 +#: aleksis/core/models.py:171 msgid "Additional name(s)" msgstr "" -#: aleksis/core/models.py:174 aleksis/core/models.py:398 +#: aleksis/core/models.py:175 aleksis/core/models.py:415 msgid "Short name" msgstr "" -#: aleksis/core/models.py:177 +#: aleksis/core/models.py:178 msgid "Street" msgstr "" -#: aleksis/core/models.py:178 +#: aleksis/core/models.py:179 msgid "Street number" msgstr "" -#: aleksis/core/models.py:179 +#: aleksis/core/models.py:180 msgid "Postal code" msgstr "" -#: aleksis/core/models.py:180 +#: aleksis/core/models.py:181 msgid "Place" msgstr "" -#: aleksis/core/models.py:182 +#: aleksis/core/models.py:183 msgid "Home phone" msgstr "" -#: aleksis/core/models.py:183 +#: aleksis/core/models.py:184 msgid "Mobile phone" msgstr "" -#: aleksis/core/models.py:187 +#: aleksis/core/models.py:188 msgid "Date of birth" msgstr "" -#: aleksis/core/models.py:188 +#: aleksis/core/models.py:189 msgid "Sex" msgstr "" -#: aleksis/core/models.py:190 +#: aleksis/core/models.py:191 msgid "Photo" msgstr "" -#: aleksis/core/models.py:194 aleksis/core/templates/core/person/full.html:137 +#: aleksis/core/models.py:195 aleksis/core/templates/core/person/full.html:137 msgid "Guardians / Parents" msgstr "" -#: aleksis/core/models.py:201 +#: aleksis/core/models.py:202 msgid "Primary group" msgstr "" -#: aleksis/core/models.py:204 aleksis/core/models.py:546 -#: aleksis/core/models.py:570 aleksis/core/models.py:655 -#: aleksis/core/models.py:934 aleksis/core/templates/core/person/full.html:120 +#: aleksis/core/models.py:205 aleksis/core/models.py:563 +#: aleksis/core/models.py:587 aleksis/core/models.py:672 +#: aleksis/core/models.py:951 aleksis/core/templates/core/person/full.html:120 msgid "Description" msgstr "" -#: aleksis/core/models.py:353 +#: aleksis/core/models.py:370 msgid "Title of field" msgstr "" -#: aleksis/core/models.py:355 +#: aleksis/core/models.py:372 msgid "Type of field" msgstr "" -#: aleksis/core/models.py:362 +#: aleksis/core/models.py:379 msgid "Addtitional field for groups" msgstr "" -#: aleksis/core/models.py:363 +#: aleksis/core/models.py:380 msgid "Addtitional fields for groups" msgstr "" -#: aleksis/core/models.py:380 +#: aleksis/core/models.py:397 msgid "Group" msgstr "" -#: aleksis/core/models.py:383 +#: aleksis/core/models.py:400 msgid "Can assign child groups to groups" msgstr "" -#: aleksis/core/models.py:384 +#: aleksis/core/models.py:401 msgid "Can view statistics about group." msgstr "" -#: aleksis/core/models.py:396 +#: aleksis/core/models.py:413 msgid "Long name" msgstr "" -#: aleksis/core/models.py:406 aleksis/core/templates/core/group/full.html:85 +#: aleksis/core/models.py:423 aleksis/core/templates/core/group/full.html:85 msgid "Members" msgstr "" -#: aleksis/core/models.py:409 aleksis/core/templates/core/group/full.html:82 +#: aleksis/core/models.py:426 aleksis/core/templates/core/group/full.html:82 msgid "Owners" msgstr "" -#: aleksis/core/models.py:416 aleksis/core/templates/core/group/full.html:55 +#: aleksis/core/models.py:433 aleksis/core/templates/core/group/full.html:55 msgid "Parent groups" msgstr "" -#: aleksis/core/models.py:424 +#: aleksis/core/models.py:441 msgid "Type of group" msgstr "" -#: aleksis/core/models.py:542 +#: aleksis/core/models.py:559 msgid "User" msgstr "" -#: aleksis/core/models.py:545 aleksis/core/models.py:569 -#: aleksis/core/models.py:654 +#: aleksis/core/models.py:562 aleksis/core/models.py:586 +#: aleksis/core/models.py:671 #: aleksis/core/templates/core/announcement/list.html:18 msgid "Title" msgstr "" -#: aleksis/core/models.py:548 +#: aleksis/core/models.py:565 msgid "Application" msgstr "" -#: aleksis/core/models.py:554 +#: aleksis/core/models.py:571 msgid "Activity" msgstr "" -#: aleksis/core/models.py:555 +#: aleksis/core/models.py:572 msgid "Activities" msgstr "" -#: aleksis/core/models.py:561 +#: aleksis/core/models.py:578 msgid "Sender" msgstr "" -#: aleksis/core/models.py:566 +#: aleksis/core/models.py:583 msgid "Recipient" msgstr "" -#: aleksis/core/models.py:571 aleksis/core/models.py:911 +#: aleksis/core/models.py:588 aleksis/core/models.py:928 msgid "Link" msgstr "" -#: aleksis/core/models.py:573 +#: aleksis/core/models.py:590 msgid "Read" msgstr "" -#: aleksis/core/models.py:574 +#: aleksis/core/models.py:591 msgid "Sent" msgstr "" -#: aleksis/core/models.py:587 +#: aleksis/core/models.py:604 msgid "Notification" msgstr "" -#: aleksis/core/models.py:656 +#: aleksis/core/models.py:673 msgid "Link to detailed view" msgstr "" -#: aleksis/core/models.py:659 +#: aleksis/core/models.py:676 msgid "Date and time from when to show" msgstr "" -#: aleksis/core/models.py:662 +#: aleksis/core/models.py:679 msgid "Date and time until when to show" msgstr "" -#: aleksis/core/models.py:686 +#: aleksis/core/models.py:703 msgid "Announcement" msgstr "" -#: aleksis/core/models.py:724 +#: aleksis/core/models.py:741 msgid "Announcement recipient" msgstr "" -#: aleksis/core/models.py:725 +#: aleksis/core/models.py:742 msgid "Announcement recipients" msgstr "" -#: aleksis/core/models.py:780 +#: aleksis/core/models.py:797 msgid "Widget Title" msgstr "" -#: aleksis/core/models.py:781 +#: aleksis/core/models.py:798 msgid "Activate Widget" msgstr "" -#: aleksis/core/models.py:782 +#: aleksis/core/models.py:799 msgid "Widget is broken" msgstr "" -#: aleksis/core/models.py:785 +#: aleksis/core/models.py:802 msgid "Size on mobile devices" msgstr "" -#: aleksis/core/models.py:786 +#: aleksis/core/models.py:803 msgid "<= 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:791 +#: aleksis/core/models.py:808 msgid "Size on tablet devices" msgstr "" -#: aleksis/core/models.py:792 +#: aleksis/core/models.py:809 msgid "> 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:797 +#: aleksis/core/models.py:814 msgid "Size on desktop devices" msgstr "" -#: aleksis/core/models.py:798 +#: aleksis/core/models.py:815 msgid "> 992 px, 12 columns" msgstr "" -#: aleksis/core/models.py:803 +#: aleksis/core/models.py:820 msgid "Size on large desktop devices" msgstr "" -#: aleksis/core/models.py:804 +#: aleksis/core/models.py:821 msgid "> 1200 px>, 12 columns" msgstr "" -#: aleksis/core/models.py:835 +#: aleksis/core/models.py:852 msgid "Can edit default dashboard" msgstr "" -#: aleksis/core/models.py:836 +#: aleksis/core/models.py:853 msgid "Dashboard Widget" msgstr "" -#: aleksis/core/models.py:837 +#: aleksis/core/models.py:854 msgid "Dashboard Widgets" msgstr "" -#: aleksis/core/models.py:843 +#: aleksis/core/models.py:860 msgid "URL" msgstr "" -#: aleksis/core/models.py:844 +#: aleksis/core/models.py:861 msgid "Icon URL" msgstr "" -#: aleksis/core/models.py:850 +#: aleksis/core/models.py:867 msgid "External link widget" msgstr "" -#: aleksis/core/models.py:851 +#: aleksis/core/models.py:868 msgid "External link widgets" msgstr "" -#: aleksis/core/models.py:856 +#: aleksis/core/models.py:873 msgid "Dashboard widget" msgstr "" -#: aleksis/core/models.py:861 +#: aleksis/core/models.py:878 msgid "Order" msgstr "" -#: aleksis/core/models.py:862 +#: aleksis/core/models.py:879 msgid "Part of the default dashboard" msgstr "" -#: aleksis/core/models.py:877 +#: aleksis/core/models.py:894 msgid "Dashboard widget order" msgstr "" -#: aleksis/core/models.py:878 +#: aleksis/core/models.py:895 msgid "Dashboard widget orders" msgstr "" -#: aleksis/core/models.py:884 +#: aleksis/core/models.py:901 msgid "Menu ID" msgstr "" -#: aleksis/core/models.py:897 +#: aleksis/core/models.py:914 msgid "Custom menu" msgstr "" -#: aleksis/core/models.py:898 +#: aleksis/core/models.py:915 msgid "Custom menus" msgstr "" -#: aleksis/core/models.py:908 +#: aleksis/core/models.py:925 msgid "Menu" msgstr "" -#: aleksis/core/models.py:912 +#: aleksis/core/models.py:929 msgid "Icon" msgstr "" -#: aleksis/core/models.py:918 +#: aleksis/core/models.py:935 msgid "Custom menu item" msgstr "" -#: aleksis/core/models.py:919 +#: aleksis/core/models.py:936 msgid "Custom menu items" msgstr "" -#: aleksis/core/models.py:933 +#: aleksis/core/models.py:950 msgid "Title of type" msgstr "" -#: aleksis/core/models.py:940 aleksis/core/templates/core/group/full.html:47 +#: aleksis/core/models.py:957 aleksis/core/templates/core/group/full.html:47 msgid "Group type" msgstr "" -#: aleksis/core/models.py:954 +#: aleksis/core/models.py:971 msgid "Can view system status" msgstr "" -#: aleksis/core/models.py:955 -msgid "Can link persons to accounts" -msgstr "" - -#: aleksis/core/models.py:956 +#: aleksis/core/models.py:972 msgid "Can manage data" msgstr "" -#: aleksis/core/models.py:957 +#: aleksis/core/models.py:973 msgid "Can impersonate" msgstr "" -#: aleksis/core/models.py:958 +#: aleksis/core/models.py:974 msgid "Can use search" msgstr "" -#: aleksis/core/models.py:959 +#: aleksis/core/models.py:975 msgid "Can change site preferences" msgstr "" -#: aleksis/core/models.py:960 +#: aleksis/core/models.py:976 msgid "Can change person preferences" msgstr "" -#: aleksis/core/models.py:961 +#: aleksis/core/models.py:977 msgid "Can change group preferences" msgstr "" -#: aleksis/core/models.py:962 +#: aleksis/core/models.py:978 msgid "Can add oauth applications" msgstr "" -#: aleksis/core/models.py:963 +#: aleksis/core/models.py:979 msgid "Can list oauth applications" msgstr "" -#: aleksis/core/models.py:964 +#: aleksis/core/models.py:980 msgid "Can view oauth applications" msgstr "" -#: aleksis/core/models.py:965 +#: aleksis/core/models.py:981 msgid "Can update oauth applications" msgstr "" -#: aleksis/core/models.py:966 +#: aleksis/core/models.py:982 msgid "Can delete oauth applications" msgstr "" -#: aleksis/core/models.py:967 +#: aleksis/core/models.py:983 msgid "Can test PDF generation" msgstr "" -#: aleksis/core/models.py:1003 +#: aleksis/core/models.py:1019 msgid "Related data check task" msgstr "" -#: aleksis/core/models.py:1011 +#: aleksis/core/models.py:1027 msgid "Issue solved" msgstr "" -#: aleksis/core/models.py:1012 +#: aleksis/core/models.py:1028 msgid "Notification sent" msgstr "" -#: aleksis/core/models.py:1025 +#: aleksis/core/models.py:1041 msgid "Data check result" msgstr "" -#: aleksis/core/models.py:1026 +#: aleksis/core/models.py:1042 msgid "Data check results" msgstr "" -#: aleksis/core/models.py:1028 +#: aleksis/core/models.py:1044 msgid "Can run data checks" msgstr "" -#: aleksis/core/models.py:1029 +#: aleksis/core/models.py:1045 msgid "Can solve data check problems" msgstr "" -#: aleksis/core/models.py:1044 +#: aleksis/core/models.py:1060 msgid "Owner" msgstr "" -#: aleksis/core/models.py:1048 +#: aleksis/core/models.py:1064 msgid "File expires at" msgstr "" -#: aleksis/core/models.py:1050 +#: aleksis/core/models.py:1066 msgid "Generated HTML file" msgstr "" -#: aleksis/core/models.py:1052 +#: aleksis/core/models.py:1068 msgid "Generated PDF file" msgstr "" -#: aleksis/core/models.py:1059 +#: aleksis/core/models.py:1075 msgid "PDF file" msgstr "" -#: aleksis/core/models.py:1060 +#: aleksis/core/models.py:1076 msgid "PDF files" msgstr "" -#: aleksis/core/models.py:1065 +#: aleksis/core/models.py:1081 msgid "Task result" msgstr "" -#: aleksis/core/models.py:1068 +#: aleksis/core/models.py:1084 msgid "Task user" msgstr "" -#: aleksis/core/models.py:1080 +#: aleksis/core/models.py:1096 msgid "Task user assignment" msgstr "" -#: aleksis/core/models.py:1081 +#: aleksis/core/models.py:1097 msgid "Task user assignments" msgstr "" @@ -1028,75 +1019,71 @@ msgstr "" msgid "Official name of the school, e.g. as given by supervisory authority" msgstr "" -#: aleksis/core/preferences.py:256 -msgid "Enabled custom authentication backends" -msgstr "" - -#: aleksis/core/preferences.py:268 +#: aleksis/core/preferences.py:254 msgid "Allow users to change their passwords" msgstr "" -#: aleksis/core/preferences.py:276 +#: aleksis/core/preferences.py:262 msgid "Enable signup" msgstr "" -#: aleksis/core/preferences.py:287 +#: aleksis/core/preferences.py:273 msgid "Available languages" msgstr "" -#: aleksis/core/preferences.py:299 +#: aleksis/core/preferences.py:285 msgid "Send emails if data checks detect problems" msgstr "" -#: aleksis/core/preferences.py:310 +#: aleksis/core/preferences.py:296 msgid "Email recipients for data checks problem emails" msgstr "" -#: aleksis/core/preferences.py:321 +#: aleksis/core/preferences.py:307 msgid "Email recipient groups for data checks problem emails" msgstr "" -#: aleksis/core/preferences.py:330 +#: aleksis/core/preferences.py:316 msgid "Show dashboard to users without login" msgstr "" -#: aleksis/core/preferences.py:339 +#: aleksis/core/preferences.py:325 msgid "Allow users to edit their dashboard" msgstr "" -#: aleksis/core/preferences.py:350 +#: aleksis/core/preferences.py:336 msgid "Fields on person model which are editable by themselves." msgstr "" -#: aleksis/core/preferences.py:364 +#: aleksis/core/preferences.py:350 msgid "Editable fields on person model which should trigger a notification on change" msgstr "" -#: aleksis/core/preferences.py:377 +#: aleksis/core/preferences.py:363 msgid "Contact for notification if a person changes their data" msgstr "" -#: aleksis/core/preferences.py:387 +#: aleksis/core/preferences.py:373 msgid "PDF file expiration duration" msgstr "" -#: aleksis/core/preferences.py:388 +#: aleksis/core/preferences.py:374 msgid "in minutes" msgstr "" -#: aleksis/core/preferences.py:398 +#: aleksis/core/preferences.py:384 msgid "Automatically update the dashboard and its widgets" msgstr "" -#: aleksis/core/preferences.py:408 +#: aleksis/core/preferences.py:394 msgid "Automatically update the dashboard and its widgets sitewide" msgstr "" -#: aleksis/core/settings.py:468 +#: aleksis/core/settings.py:452 msgid "English" msgstr "" -#: aleksis/core/settings.py:469 +#: aleksis/core/settings.py:453 msgid "German" msgstr "" @@ -1260,7 +1247,7 @@ msgstr "" #: aleksis/core/templates/account/password_reset_done.html:5 #: aleksis/core/templates/account/verification_email_required.html:5 #: aleksis/core/templates/account/verification_email_required.html:6 -#: aleksis/core/templates/two_factor/core/login.html:100 +#: aleksis/core/templates/two_factor/core/login.html:81 msgid "Reset password" msgstr "" @@ -1997,32 +1984,10 @@ msgid "" " " msgstr "" -#: aleksis/core/templates/core/person/accounts.html:12 -#: aleksis/core/templates/core/person/accounts.html:14 -msgid "Link persons to accounts" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:21 -msgid "" -"\n" -" You can use this form to assign user accounts to persons. Use the\n" -" dropdowns to select existing accounts; use the text fields to create new\n" -" accounts on-the-fly. The latter will create a new account with the\n" -" entered username and copy all other details from the person.\n" -" " -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:36 -#: aleksis/core/templates/core/person/accounts.html:60 -msgid "Update" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:42 -msgid "Existing account" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:43 -msgid "New account" +#: aleksis/core/templates/core/person/create.html:12 +#: aleksis/core/templates/core/person/create.html:13 +#: aleksis/core/templates/core/person/list.html:17 +msgid "Create person" msgstr "" #: aleksis/core/templates/core/person/edit.html:12 @@ -2031,6 +1996,8 @@ msgid "Edit person" msgstr "" #: aleksis/core/templates/core/person/full.html:44 +#: aleksis/core/templates/impersonate/list_users.html:7 +#: aleksis/core/templates/impersonate/list_users.html:8 msgid "Impersonate" msgstr "" @@ -2042,10 +2009,6 @@ msgstr "" msgid "Children" msgstr "" -#: aleksis/core/templates/core/person/list.html:17 -msgid "Create person" -msgstr "" - #: aleksis/core/templates/core/person/list.html:21 msgid "Filter persons" msgstr "" @@ -2082,10 +2045,6 @@ msgstr "" msgid "Save preferences" msgstr "" -#: aleksis/core/templates/impersonate/list_users.html:8 -msgid "Impersonate user" -msgstr "" - #: aleksis/core/templates/oauth2_provider/application_confirm_delete.html:5 #: aleksis/core/templates/oauth2_provider/application_confirm_delete.html:6 msgid "Delete application" @@ -2438,64 +2397,70 @@ msgstr "" msgid "Generate Tokens" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:18 +#: aleksis/core/templates/two_factor/core/login.html:20 msgid "Login with username and password" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:26 -msgid "You have no permission to view this page. Please login with an other account." +#: aleksis/core/templates/two_factor/core/login.html:28 +msgid "" +"You have no permission to view this page. Please login with an other\n" +" account." msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:33 +#: aleksis/core/templates/two_factor/core/login.html:36 msgid "Please login to see this page." msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:43 +#: aleksis/core/templates/two_factor/core/login.html:46 msgid "" "\n" -" We are calling your phone right now, please enter the\n" -" digits you hear.\n" -" " +" We are calling your phone right now, please enter the\n" +" digits you hear.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:48 +#: aleksis/core/templates/two_factor/core/login.html:51 msgid "" "\n" -" We sent you a text message, please enter the tokens we\n" -" sent.\n" -" " +" We sent you a text message, please enter the tokens we\n" +" sent.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:53 +#: aleksis/core/templates/two_factor/core/login.html:56 msgid "" "\n" -" Please enter the tokens generated by your token\n" -" generator.\n" -" " +" Please enter the tokens generated by your token\n" +" generator.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:59 +#: aleksis/core/templates/two_factor/core/login.html:62 msgid "" "\n" -" Use this form for entering backup tokens for logging in.\n" -" These tokens have been generated for you to print and keep safe. Please\n" -" enter one of these backup tokens to login to your account.\n" -" " +" Use this form for entering backup tokens for logging in.\n" +" These tokens have been generated for you to print and keep safe. Please\n" +" enter one of these backup tokens to login to your account.\n" +" " +msgstr "" + +#: aleksis/core/templates/two_factor/core/login.html:90 +msgid "Device currently not available?" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:74 +#: aleksis/core/templates/two_factor/core/login.html:92 msgid "Or, alternatively, use one of your backup phones:" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:84 +#: aleksis/core/templates/two_factor/core/login.html:102 msgid "As a last resort, you can use a backup token:" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:87 +#: aleksis/core/templates/two_factor/core/login.html:105 msgid "Use Backup Token" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:110 +#: aleksis/core/templates/two_factor/core/login.html:116 msgid "Use alternative login options" msgstr "" @@ -2764,107 +2729,107 @@ msgstr "" msgid "Download PDF" msgstr "" -#: aleksis/core/views.py:253 +#: aleksis/core/views.py:251 msgid "The school term has been created." msgstr "" -#: aleksis/core/views.py:265 +#: aleksis/core/views.py:263 msgid "The school term has been saved." msgstr "" -#: aleksis/core/views.py:410 +#: aleksis/core/views.py:387 msgid "The child groups were successfully saved." msgstr "" -#: aleksis/core/views.py:471 +#: aleksis/core/views.py:406 aleksis/core/views.py:416 msgid "The person has been saved." msgstr "" -#: aleksis/core/views.py:510 +#: aleksis/core/views.py:466 msgid "The group has been saved." msgstr "" -#: aleksis/core/views.py:607 +#: aleksis/core/views.py:563 msgid "The announcement has been saved." msgstr "" -#: aleksis/core/views.py:623 +#: aleksis/core/views.py:579 msgid "The announcement has been deleted." msgstr "" -#: aleksis/core/views.py:707 +#: aleksis/core/views.py:663 msgid "The preferences have been saved successfully." msgstr "" -#: aleksis/core/views.py:731 +#: aleksis/core/views.py:687 msgid "The person has been deleted." msgstr "" -#: aleksis/core/views.py:745 +#: aleksis/core/views.py:701 msgid "The group has been deleted." msgstr "" -#: aleksis/core/views.py:777 +#: aleksis/core/views.py:733 msgid "The additional_field has been saved." msgstr "" -#: aleksis/core/views.py:811 +#: aleksis/core/views.py:767 msgid "The additional field has been deleted." msgstr "" -#: aleksis/core/views.py:836 +#: aleksis/core/views.py:792 msgid "The group type has been saved." msgstr "" -#: aleksis/core/views.py:866 +#: aleksis/core/views.py:822 msgid "The group type has been deleted." msgstr "" -#: aleksis/core/views.py:899 +#: aleksis/core/views.py:855 msgid "Progress: Run data checks" msgstr "" -#: aleksis/core/views.py:900 +#: aleksis/core/views.py:856 msgid "Run data checks …" msgstr "" -#: aleksis/core/views.py:901 +#: aleksis/core/views.py:857 msgid "The data checks were run successfully." msgstr "" -#: aleksis/core/views.py:902 +#: aleksis/core/views.py:858 msgid "There was a problem while running data checks." msgstr "" -#: aleksis/core/views.py:918 +#: aleksis/core/views.py:874 #, python-brace-format msgid "The solve option '{solve_option_obj.verbose_name}' " msgstr "" -#: aleksis/core/views.py:960 +#: aleksis/core/views.py:916 msgid "The dashboard widget has been saved." msgstr "" -#: aleksis/core/views.py:990 +#: aleksis/core/views.py:946 msgid "The dashboard widget has been created." msgstr "" -#: aleksis/core/views.py:1000 +#: aleksis/core/views.py:956 msgid "The dashboard widget has been deleted." msgstr "" -#: aleksis/core/views.py:1067 +#: aleksis/core/views.py:1023 msgid "Your dashboard configuration has been saved successfully." msgstr "" -#: aleksis/core/views.py:1069 +#: aleksis/core/views.py:1025 msgid "The configuration of the default dashboard has been saved successfully." msgstr "" -#: aleksis/core/views.py:1197 +#: aleksis/core/views.py:1153 msgid "The third-party account could not be disconnected because it is the only login method available." msgstr "" -#: aleksis/core/views.py:1204 +#: aleksis/core/views.py:1160 msgid "The third-party account has been successfully disconnected." msgstr "" diff --git a/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po b/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po index c66c2fc59010a34863f4e372e19aebc75cfd9631..58d7ae38a2326acb79508cd05c32cab673c58fe9 100644 --- a/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/ar/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-28 17:53+0200\n" +"POT-Creation-Date: 2021-10-28 16:18+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" diff --git a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po index 1418826eb332523177bf5da3fc0b3b7c6b6d1a2f..f392000d5c400048743b02d15cfca5dbb4efd644 100644 --- a/aleksis/core/locale/de_DE/LC_MESSAGES/django.po +++ b/aleksis/core/locale/de_DE/LC_MESSAGES/django.po @@ -7,35 +7,35 @@ msgid "" msgstr "" "Project-Id-Version: AlekSIS (School Information System) 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-28 17:53+0200\n" -"PO-Revision-Date: 2021-08-28 17:33+0000\n" +"POT-Creation-Date: 2021-10-28 16:18+0200\n" +"PO-Revision-Date: 2021-10-29 14:28+0000\n" "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n" -"Language-Team: German <https://translate.edugit.org/projects/aleksis/aleksis/" -"de/>\n" +"Language-Team: German <https://translate.edugit.org/projects/aleksis/" +"aleksis-core/de/>\n" "Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.4\n" +"X-Generator: Weblate 4.8\n" -#: aleksis/core/apps.py:148 aleksis/core/settings.py:343 +#: aleksis/core/apps.py:150 msgid "OpenID Connect scope" msgstr "OpenID-Connect-Scope" -#: aleksis/core/apps.py:149 aleksis/core/settings.py:344 +#: aleksis/core/apps.py:151 msgid "Given name, family name, link to profile and picture if existing." msgstr "Vorname, Nachname, Link zum Profil und Bild falls vorhanden" -#: aleksis/core/apps.py:150 aleksis/core/settings.py:345 +#: aleksis/core/apps.py:152 msgid "Full home postal address" msgstr "Vollständige Postanschrift" -#: aleksis/core/apps.py:151 aleksis/core/settings.py:346 +#: aleksis/core/apps.py:153 msgid "Email address" msgstr "E-Mail-Adresse" -#: aleksis/core/apps.py:152 aleksis/core/settings.py:347 +#: aleksis/core/apps.py:154 msgid "Home and mobile phone" msgstr "Festnetz- und Mobilfunknummer" @@ -77,124 +77,124 @@ msgstr "Nach Namen suchen" msgid "Search by contact details" msgstr "Nach Kontaktdetails suchen" -#: aleksis/core/forms.py:62 -msgid "You cannot set a new username when also selecting an existing user." -msgstr "Sie können keine neuen Benutzer erstellen, wenn Sie gleichzeitig einen existierenden Benutzer auswählen." - -#: aleksis/core/forms.py:66 -msgid "This username is already in use." -msgstr "Dieser Benutzername wird bereits genutzt." - -#: aleksis/core/forms.py:90 aleksis/core/forms.py:412 +#: aleksis/core/forms.py:41 aleksis/core/forms.py:387 msgid "Base data" msgstr "Basisdaten" -#: aleksis/core/forms.py:96 +#: aleksis/core/forms.py:47 msgid "Address" msgstr "Adresse" -#: aleksis/core/forms.py:97 +#: aleksis/core/forms.py:48 msgid "Contact data" msgstr "Kontaktdaten" -#: aleksis/core/forms.py:99 +#: aleksis/core/forms.py:50 msgid "Advanced personal data" msgstr "Zusätzliche persönliche Daten" -#: aleksis/core/forms.py:142 +#: aleksis/core/forms.py:93 msgid "New user" msgstr "Neuer Benutzer" -#: aleksis/core/forms.py:142 +#: aleksis/core/forms.py:93 msgid "Create a new account" msgstr "Neues Benutzerkonto erstellen" -#: aleksis/core/forms.py:170 aleksis/core/models.py:116 +#: aleksis/core/forms.py:124 +msgid "You cannot set a new username when also selecting an existing user." +msgstr "Sie können keine neuen Benutzer erstellen, wenn Sie gleichzeitig einen existierenden Benutzer auswählen." + +#: aleksis/core/forms.py:128 +msgid "This username is already in use." +msgstr "Dieser Benutzername wird bereits genutzt." + +#: aleksis/core/forms.py:145 aleksis/core/models.py:117 msgid "School term" msgstr "Schuljahr" -#: aleksis/core/forms.py:171 +#: aleksis/core/forms.py:146 msgid "Common data" msgstr "Allgemeine Daten" -#: aleksis/core/forms.py:172 aleksis/core/forms.py:221 -#: aleksis/core/menus.py:238 aleksis/core/models.py:139 +#: aleksis/core/forms.py:147 aleksis/core/forms.py:196 +#: aleksis/core/menus.py:238 aleksis/core/models.py:140 #: aleksis/core/templates/core/person/list.html:8 #: aleksis/core/templates/core/person/list.html:9 msgid "Persons" msgstr "Personen" -#: aleksis/core/forms.py:173 +#: aleksis/core/forms.py:148 msgid "Additional data" msgstr "Zusätzliche Datne" -#: aleksis/core/forms.py:213 aleksis/core/forms.py:216 -#: aleksis/core/models.py:59 +#: aleksis/core/forms.py:188 aleksis/core/forms.py:191 +#: aleksis/core/models.py:60 msgid "Date" msgstr "Datum" -#: aleksis/core/forms.py:214 aleksis/core/forms.py:217 -#: aleksis/core/models.py:67 +#: aleksis/core/forms.py:189 aleksis/core/forms.py:192 +#: aleksis/core/models.py:68 msgid "Time" msgstr "Zeit" -#: aleksis/core/forms.py:234 aleksis/core/menus.py:249 -#: aleksis/core/models.py:381 aleksis/core/templates/core/group/list.html:8 +#: aleksis/core/forms.py:209 aleksis/core/menus.py:249 +#: aleksis/core/models.py:398 aleksis/core/templates/core/group/list.html:8 #: aleksis/core/templates/core/group/list.html:9 #: aleksis/core/templates/core/person/full.html:144 msgid "Groups" msgstr "Gruppen" -#: aleksis/core/forms.py:244 +#: aleksis/core/forms.py:219 msgid "From when until when should the announcement be displayed?" msgstr "Von wann bis wann soll die Ankündigung angezeigt werden?" -#: aleksis/core/forms.py:247 +#: aleksis/core/forms.py:222 msgid "Who should see the announcement?" msgstr "Wer soll die Ankündigung sehen?" -#: aleksis/core/forms.py:248 +#: aleksis/core/forms.py:223 msgid "Write your announcement:" msgstr "Schreiben Sie ihre Ankündigung:" -#: aleksis/core/forms.py:287 +#: aleksis/core/forms.py:262 msgid "You are not allowed to create announcements which are only valid in the past." msgstr "Sie dürfen keine Ankündigungen erstellen, die nur für die Vergangenheit gültig sind." -#: aleksis/core/forms.py:291 +#: aleksis/core/forms.py:266 msgid "The from date and time must be earlier then the until date and time." msgstr "Das Startdatum und die Startzeit müssen vor dem Enddatum und der Endzeit sein." -#: aleksis/core/forms.py:300 +#: aleksis/core/forms.py:275 msgid "You need at least one recipient." msgstr "Sie benötigen mindestens einen Empfänger." -#: aleksis/core/forms.py:414 +#: aleksis/core/forms.py:389 msgid "Account data" msgstr "Kontodaten" -#: aleksis/core/forms.py:416 +#: aleksis/core/forms.py:391 msgid "Consents" msgstr "Zustimmungen" -#: aleksis/core/forms.py:421 +#: aleksis/core/forms.py:396 msgid "Password" msgstr "Passwort" -#: aleksis/core/forms.py:427 +#: aleksis/core/forms.py:402 msgid "Password (again)" msgstr "Passwort wiederholen" -#: aleksis/core/forms.py:436 +#: aleksis/core/forms.py:411 #, python-brace-format msgid "I have read the <a href='{privacy_policy}'>Privacy policy</a> and agree with them." msgstr "Ich habe die <a href='{privacy_policy}'>Datenschutzerklärung</a> gelesen und stimme ihr zu." -#: aleksis/core/forms.py:460 +#: aleksis/core/forms.py:435 msgid "You must type the same password each time." msgstr "Sie müssen zweimal das gleiche Passwort eingeben." -#: aleksis/core/forms.py:605 +#: aleksis/core/forms.py:580 msgid "No valid selection." msgstr "Keine gültige Auswahl." @@ -225,8 +225,8 @@ msgid "{task.status} - {task.result}" msgstr "{task.status} - {task.result}" #: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6 -#: aleksis/core/templates/two_factor/core/login.html:20 -#: aleksis/core/templates/two_factor/core/login.html:95 +#: aleksis/core/templates/two_factor/core/login.html:22 +#: aleksis/core/templates/two_factor/core/login.html:76 msgid "Login" msgstr "Anmelden" @@ -239,7 +239,7 @@ msgstr "Registrieren" msgid "Dashboard" msgstr "Dashboard" -#: aleksis/core/menus.py:32 aleksis/core/models.py:588 +#: aleksis/core/menus.py:32 aleksis/core/models.py:605 #: aleksis/core/preferences.py:26 #: aleksis/core/templates/core/notifications.html:4 #: aleksis/core/templates/core/notifications.html:5 @@ -297,13 +297,13 @@ msgstr "Autorisierte Anwendungen" msgid "Admin" msgstr "Admin" -#: aleksis/core/menus.py:127 aleksis/core/models.py:687 +#: aleksis/core/menus.py:127 aleksis/core/models.py:704 #: aleksis/core/templates/core/announcement/list.html:7 #: aleksis/core/templates/core/announcement/list.html:8 msgid "Announcements" msgstr "Ankündigungen" -#: aleksis/core/menus.py:138 aleksis/core/models.py:117 +#: aleksis/core/menus.py:138 aleksis/core/models.py:118 #: aleksis/core/templates/core/school_term/list.html:8 #: aleksis/core/templates/core/school_term/list.html:9 msgid "School terms" @@ -354,570 +354,561 @@ msgstr "OAuth2-Anwendungen" msgid "People" msgstr "Leute" -#: aleksis/core/menus.py:260 aleksis/core/models.py:941 +#: aleksis/core/menus.py:260 aleksis/core/models.py:958 #: aleksis/core/templates/core/group_type/list.html:8 #: aleksis/core/templates/core/group_type/list.html:9 msgid "Group types" msgstr "Gruppentypen" #: aleksis/core/menus.py:271 -msgid "Persons and accounts" -msgstr "Personen und Konten" - -#: aleksis/core/menus.py:282 msgid "Groups and child groups" msgstr "Gruppen und Kindgruppen" -#: aleksis/core/menus.py:293 aleksis/core/models.py:429 +#: aleksis/core/menus.py:282 aleksis/core/models.py:446 #: aleksis/core/templates/core/additional_field/list.html:8 #: aleksis/core/templates/core/additional_field/list.html:9 msgid "Additional fields" msgstr "Zusätzliche Felder" -#: aleksis/core/menus.py:308 +#: aleksis/core/menus.py:297 #: aleksis/core/templates/core/group/child_groups.html:7 #: aleksis/core/templates/core/group/child_groups.html:9 msgid "Assign child groups to groups" msgstr "Kindgruppen zu Gruppen zuordnen" -#: aleksis/core/mixins.py:475 +#: aleksis/core/mixins.py:498 msgid "Linked school term" msgstr "Zugeordnetes Schuljahr" -#: aleksis/core/models.py:57 +#: aleksis/core/models.py:58 msgid "Boolean (Yes/No)" msgstr "Boolean (Ja/Nein)" -#: aleksis/core/models.py:58 +#: aleksis/core/models.py:59 msgid "Text (one line)" msgstr "Text (eine Zeile)" -#: aleksis/core/models.py:60 +#: aleksis/core/models.py:61 msgid "Date and time" msgstr "Datum und Uhrzeit" -#: aleksis/core/models.py:61 +#: aleksis/core/models.py:62 msgid "Decimal number" msgstr "Dezimalzahl" -#: aleksis/core/models.py:62 aleksis/core/models.py:185 +#: aleksis/core/models.py:63 aleksis/core/models.py:186 msgid "E-mail address" msgstr "E-Mail-Adresse" -#: aleksis/core/models.py:63 +#: aleksis/core/models.py:64 msgid "Integer" msgstr "Ganze Zahl" -#: aleksis/core/models.py:64 +#: aleksis/core/models.py:65 msgid "IP address" msgstr "IP-Adresse" -#: aleksis/core/models.py:65 +#: aleksis/core/models.py:66 msgid "Boolean or empty (Yes/No/Neither)" msgstr "Boolean oder leer (Ja/Nein/weder)" -#: aleksis/core/models.py:66 +#: aleksis/core/models.py:67 msgid "Text (multi-line)" msgstr "Text (mehrzeilig)" -#: aleksis/core/models.py:68 +#: aleksis/core/models.py:69 msgid "URL / Link" msgstr "URL / Link" -#: aleksis/core/models.py:80 aleksis/core/models.py:910 +#: aleksis/core/models.py:81 aleksis/core/models.py:927 msgid "Name" msgstr "Name" -#: aleksis/core/models.py:82 +#: aleksis/core/models.py:83 msgid "Start date" msgstr "Startdatum" -#: aleksis/core/models.py:83 +#: aleksis/core/models.py:84 msgid "End date" msgstr "Enddatum" -#: aleksis/core/models.py:102 +#: aleksis/core/models.py:103 msgid "The start date must be earlier than the end date." msgstr "Das Startdatum muss vor dem Enddatum liegen." -#: aleksis/core/models.py:109 +#: aleksis/core/models.py:110 msgid "There is already a school term for this time or a part of this time." msgstr "Es gibt bereits ein Schuljahr für diesen Zeitraum oder einen Teilzeitraum." -#: aleksis/core/models.py:138 aleksis/core/models.py:859 -#: aleksis/core/templates/core/person/accounts.html:41 +#: aleksis/core/models.py:139 aleksis/core/models.py:876 msgid "Person" msgstr "Person" -#: aleksis/core/models.py:141 +#: aleksis/core/models.py:142 msgid "Can view address" msgstr "Kann Adresse sehen" -#: aleksis/core/models.py:142 +#: aleksis/core/models.py:143 msgid "Can view contact details" msgstr "Kann Kontaktdetails sehen" -#: aleksis/core/models.py:143 +#: aleksis/core/models.py:144 msgid "Can view photo" msgstr "Kann Foto sehen" -#: aleksis/core/models.py:144 +#: aleksis/core/models.py:145 msgid "Can view persons groups" msgstr "Kann Gruppen einer Person sehen" -#: aleksis/core/models.py:145 +#: aleksis/core/models.py:146 msgid "Can view personal details" msgstr "Kann persönliche Daten sehen" -#: aleksis/core/models.py:155 +#: aleksis/core/models.py:156 msgid "female" msgstr "weiblich" -#: aleksis/core/models.py:155 +#: aleksis/core/models.py:156 msgid "male" msgstr "männlich" -#: aleksis/core/models.py:163 +#: aleksis/core/models.py:164 msgid "Linked user" msgstr "Verknüpfter Benutzer" -#: aleksis/core/models.py:165 +#: aleksis/core/models.py:166 msgid "Is person active?" msgstr "Ist die Person aktiv?" -#: aleksis/core/models.py:167 +#: aleksis/core/models.py:168 msgid "First name" msgstr "Vorname" -#: aleksis/core/models.py:168 +#: aleksis/core/models.py:169 msgid "Last name" msgstr "Nachname" -#: aleksis/core/models.py:170 +#: aleksis/core/models.py:171 msgid "Additional name(s)" msgstr "Zusätzliche Namen" -#: aleksis/core/models.py:174 aleksis/core/models.py:398 +#: aleksis/core/models.py:175 aleksis/core/models.py:415 msgid "Short name" msgstr "Kurzname" -#: aleksis/core/models.py:177 +#: aleksis/core/models.py:178 msgid "Street" msgstr "Straße" -#: aleksis/core/models.py:178 +#: aleksis/core/models.py:179 msgid "Street number" msgstr "Hausnummer" -#: aleksis/core/models.py:179 +#: aleksis/core/models.py:180 msgid "Postal code" msgstr "Postleitzahl" -#: aleksis/core/models.py:180 +#: aleksis/core/models.py:181 msgid "Place" msgstr "Ort" -#: aleksis/core/models.py:182 +#: aleksis/core/models.py:183 msgid "Home phone" msgstr "Festnetz" -#: aleksis/core/models.py:183 +#: aleksis/core/models.py:184 msgid "Mobile phone" msgstr "Handy" -#: aleksis/core/models.py:187 +#: aleksis/core/models.py:188 msgid "Date of birth" msgstr "Geburtsdatum" -#: aleksis/core/models.py:188 +#: aleksis/core/models.py:189 msgid "Sex" msgstr "Geschlecht" -#: aleksis/core/models.py:190 +#: aleksis/core/models.py:191 msgid "Photo" msgstr "Foto" -#: aleksis/core/models.py:194 aleksis/core/templates/core/person/full.html:137 +#: aleksis/core/models.py:195 aleksis/core/templates/core/person/full.html:137 msgid "Guardians / Parents" msgstr "Erziehungsberechtigte / Eltern" -#: aleksis/core/models.py:201 +#: aleksis/core/models.py:202 msgid "Primary group" msgstr "Primärgruppe" -#: aleksis/core/models.py:204 aleksis/core/models.py:546 -#: aleksis/core/models.py:570 aleksis/core/models.py:655 -#: aleksis/core/models.py:934 aleksis/core/templates/core/person/full.html:120 +#: aleksis/core/models.py:205 aleksis/core/models.py:563 +#: aleksis/core/models.py:587 aleksis/core/models.py:672 +#: aleksis/core/models.py:951 aleksis/core/templates/core/person/full.html:120 msgid "Description" msgstr "Beschreibung" -#: aleksis/core/models.py:353 +#: aleksis/core/models.py:370 msgid "Title of field" msgstr "Feldtitel" -#: aleksis/core/models.py:355 +#: aleksis/core/models.py:372 msgid "Type of field" msgstr "Feldtyp" -#: aleksis/core/models.py:362 +#: aleksis/core/models.py:379 msgid "Addtitional field for groups" msgstr "Zusätzliche Felder für Gruppen" -#: aleksis/core/models.py:363 +#: aleksis/core/models.py:380 msgid "Addtitional fields for groups" msgstr "Zusätzliche Felder für Gruppen" -#: aleksis/core/models.py:380 +#: aleksis/core/models.py:397 msgid "Group" msgstr "Gruppe" -#: aleksis/core/models.py:383 +#: aleksis/core/models.py:400 msgid "Can assign child groups to groups" msgstr "Kann Kindgruppen zu Gruppen zuordnen" -#: aleksis/core/models.py:384 +#: aleksis/core/models.py:401 msgid "Can view statistics about group." msgstr "Kann Statistiken über Gruppen sehen." -#: aleksis/core/models.py:396 +#: aleksis/core/models.py:413 msgid "Long name" msgstr "Langname" -#: aleksis/core/models.py:406 aleksis/core/templates/core/group/full.html:85 +#: aleksis/core/models.py:423 aleksis/core/templates/core/group/full.html:85 msgid "Members" msgstr "Mitglieder" -#: aleksis/core/models.py:409 aleksis/core/templates/core/group/full.html:82 +#: aleksis/core/models.py:426 aleksis/core/templates/core/group/full.html:82 msgid "Owners" msgstr "Leiter/-innen" -#: aleksis/core/models.py:416 aleksis/core/templates/core/group/full.html:55 +#: aleksis/core/models.py:433 aleksis/core/templates/core/group/full.html:55 msgid "Parent groups" msgstr "Übergeordnete Gruppen" -#: aleksis/core/models.py:424 +#: aleksis/core/models.py:441 msgid "Type of group" msgstr "Gruppentyp" -#: aleksis/core/models.py:542 +#: aleksis/core/models.py:559 msgid "User" msgstr "Benutzer" -#: aleksis/core/models.py:545 aleksis/core/models.py:569 -#: aleksis/core/models.py:654 +#: aleksis/core/models.py:562 aleksis/core/models.py:586 +#: aleksis/core/models.py:671 #: aleksis/core/templates/core/announcement/list.html:18 msgid "Title" msgstr "Titel" -#: aleksis/core/models.py:548 +#: aleksis/core/models.py:565 msgid "Application" msgstr "Anwendung" -#: aleksis/core/models.py:554 +#: aleksis/core/models.py:571 msgid "Activity" msgstr "Aktivität" -#: aleksis/core/models.py:555 +#: aleksis/core/models.py:572 msgid "Activities" msgstr "Aktivitäten" -#: aleksis/core/models.py:561 +#: aleksis/core/models.py:578 msgid "Sender" msgstr "Absender" -#: aleksis/core/models.py:566 +#: aleksis/core/models.py:583 msgid "Recipient" msgstr "Empfänger" -#: aleksis/core/models.py:571 aleksis/core/models.py:911 +#: aleksis/core/models.py:588 aleksis/core/models.py:928 msgid "Link" msgstr "Link" -#: aleksis/core/models.py:573 +#: aleksis/core/models.py:590 msgid "Read" msgstr "Gelesen" -#: aleksis/core/models.py:574 +#: aleksis/core/models.py:591 msgid "Sent" msgstr "Versandt" -#: aleksis/core/models.py:587 +#: aleksis/core/models.py:604 msgid "Notification" msgstr "Benachrichtigung" -#: aleksis/core/models.py:656 +#: aleksis/core/models.py:673 msgid "Link to detailed view" msgstr "Link zur detaillierten Ansicht" -#: aleksis/core/models.py:659 +#: aleksis/core/models.py:676 msgid "Date and time from when to show" msgstr "Datum und Uhrzeit des Anzeigestarts" -#: aleksis/core/models.py:662 +#: aleksis/core/models.py:679 msgid "Date and time until when to show" msgstr "Anzeigezeitraum" -#: aleksis/core/models.py:686 +#: aleksis/core/models.py:703 msgid "Announcement" msgstr "Ankündigung" -#: aleksis/core/models.py:724 +#: aleksis/core/models.py:741 msgid "Announcement recipient" msgstr "Empfänger der Ankündigung" -#: aleksis/core/models.py:725 +#: aleksis/core/models.py:742 msgid "Announcement recipients" msgstr "Empfänger der Ankündigung" -#: aleksis/core/models.py:780 +#: aleksis/core/models.py:797 msgid "Widget Title" msgstr "Widget-Titel" -#: aleksis/core/models.py:781 +#: aleksis/core/models.py:798 msgid "Activate Widget" msgstr "Widget aktivieren" -#: aleksis/core/models.py:782 +#: aleksis/core/models.py:799 msgid "Widget is broken" msgstr "Widget ist kaputt" -#: aleksis/core/models.py:785 +#: aleksis/core/models.py:802 msgid "Size on mobile devices" msgstr "Größe auf Mobilgeräten" -#: aleksis/core/models.py:786 +#: aleksis/core/models.py:803 msgid "<= 600 px, 12 columns" msgstr "<= 600 px, 12 Spalten" -#: aleksis/core/models.py:791 +#: aleksis/core/models.py:808 msgid "Size on tablet devices" msgstr "Größe auf Tablets" -#: aleksis/core/models.py:792 +#: aleksis/core/models.py:809 msgid "> 600 px, 12 columns" msgstr "> 600px, 12 Spalten" -#: aleksis/core/models.py:797 +#: aleksis/core/models.py:814 msgid "Size on desktop devices" msgstr "Größe auf Desktopgeräten" -#: aleksis/core/models.py:798 +#: aleksis/core/models.py:815 msgid "> 992 px, 12 columns" msgstr "> 992 px, 12 Spalten" -#: aleksis/core/models.py:803 +#: aleksis/core/models.py:820 msgid "Size on large desktop devices" msgstr "Größe auf großen Desktopgeräten" -#: aleksis/core/models.py:804 +#: aleksis/core/models.py:821 msgid "> 1200 px>, 12 columns" msgstr "> 1200 px, 12 Spalten" -#: aleksis/core/models.py:835 +#: aleksis/core/models.py:852 msgid "Can edit default dashboard" msgstr "Kann Standarddashboard bearbeiten" -#: aleksis/core/models.py:836 +#: aleksis/core/models.py:853 msgid "Dashboard Widget" msgstr "Dashboard-Widget" -#: aleksis/core/models.py:837 +#: aleksis/core/models.py:854 msgid "Dashboard Widgets" msgstr "Dashboard-Widgets" -#: aleksis/core/models.py:843 +#: aleksis/core/models.py:860 msgid "URL" msgstr "URL" -#: aleksis/core/models.py:844 +#: aleksis/core/models.py:861 msgid "Icon URL" msgstr "Symbol-URL" -#: aleksis/core/models.py:850 +#: aleksis/core/models.py:867 msgid "External link widget" msgstr "Externer-Link-Widget" -#: aleksis/core/models.py:851 +#: aleksis/core/models.py:868 msgid "External link widgets" msgstr "Externer-Link-Widgets" -#: aleksis/core/models.py:856 +#: aleksis/core/models.py:873 msgid "Dashboard widget" msgstr "Dashboard-Widget" -#: aleksis/core/models.py:861 +#: aleksis/core/models.py:878 msgid "Order" msgstr "Reihenfolge" -#: aleksis/core/models.py:862 +#: aleksis/core/models.py:879 msgid "Part of the default dashboard" msgstr "Teil des Standarddashboards" -#: aleksis/core/models.py:877 +#: aleksis/core/models.py:894 msgid "Dashboard widget order" msgstr "Reihenfolge der Dashboard-Widgets" -#: aleksis/core/models.py:878 +#: aleksis/core/models.py:895 msgid "Dashboard widget orders" msgstr "Reihenfolgen der Dashboard-Widgets" -#: aleksis/core/models.py:884 +#: aleksis/core/models.py:901 msgid "Menu ID" msgstr "Menü-ID" -#: aleksis/core/models.py:897 +#: aleksis/core/models.py:914 msgid "Custom menu" msgstr "Benutzerdefiniertes Menü" -#: aleksis/core/models.py:898 +#: aleksis/core/models.py:915 msgid "Custom menus" msgstr "Benutzerdefinierte Menüs" -#: aleksis/core/models.py:908 +#: aleksis/core/models.py:925 msgid "Menu" msgstr "Menü" -#: aleksis/core/models.py:912 +#: aleksis/core/models.py:929 msgid "Icon" msgstr "Symbol" -#: aleksis/core/models.py:918 +#: aleksis/core/models.py:935 msgid "Custom menu item" msgstr "Benutzerdefiniertes Menüelement" -#: aleksis/core/models.py:919 +#: aleksis/core/models.py:936 msgid "Custom menu items" msgstr "Benutzerdefinierte Menüelemente" -#: aleksis/core/models.py:933 +#: aleksis/core/models.py:950 msgid "Title of type" msgstr "Titel des Typs" -#: aleksis/core/models.py:940 aleksis/core/templates/core/group/full.html:47 +#: aleksis/core/models.py:957 aleksis/core/templates/core/group/full.html:47 msgid "Group type" msgstr "Gruppentyp" -#: aleksis/core/models.py:954 +#: aleksis/core/models.py:971 msgid "Can view system status" msgstr "Kann Systemstatus sehen" -#: aleksis/core/models.py:955 -msgid "Can link persons to accounts" -msgstr "Kann Personen mit Benutzerkonten verknüpfen" - -#: aleksis/core/models.py:956 +#: aleksis/core/models.py:972 msgid "Can manage data" msgstr "Kann Daten verwalten" -#: aleksis/core/models.py:957 +#: aleksis/core/models.py:973 msgid "Can impersonate" msgstr "Kann sich verkleiden" -#: aleksis/core/models.py:958 +#: aleksis/core/models.py:974 msgid "Can use search" msgstr "Kann Suche benutzen" -#: aleksis/core/models.py:959 +#: aleksis/core/models.py:975 msgid "Can change site preferences" msgstr "Kann Konfiguration ändern" -#: aleksis/core/models.py:960 +#: aleksis/core/models.py:976 msgid "Can change person preferences" msgstr "Kann Einstellungen einer Person verändern" -#: aleksis/core/models.py:961 +#: aleksis/core/models.py:977 msgid "Can change group preferences" msgstr "Kann Einstellungen einer Gruppe verändern" -#: aleksis/core/models.py:962 +#: aleksis/core/models.py:978 msgid "Can add oauth applications" msgstr "Kann OAuth-Anwendungen hinzufügen" -#: aleksis/core/models.py:963 +#: aleksis/core/models.py:979 msgid "Can list oauth applications" msgstr "Can OAuth-Anwendungen auflisten" -#: aleksis/core/models.py:964 +#: aleksis/core/models.py:980 msgid "Can view oauth applications" msgstr "Kann OAuth-Anwendungen sehen" -#: aleksis/core/models.py:965 +#: aleksis/core/models.py:981 msgid "Can update oauth applications" msgstr "Kann OAuth-Anwendungen aktualisieren" -#: aleksis/core/models.py:966 +#: aleksis/core/models.py:982 msgid "Can delete oauth applications" msgstr "Kann OAuth-Anwendungen löschen" -#: aleksis/core/models.py:967 +#: aleksis/core/models.py:983 msgid "Can test PDF generation" msgstr "Kann die PDF-Generierung testen" -#: aleksis/core/models.py:1003 +#: aleksis/core/models.py:1019 msgid "Related data check task" msgstr "Zugehörige Datenprüfungsaufgabe" -#: aleksis/core/models.py:1011 +#: aleksis/core/models.py:1027 msgid "Issue solved" msgstr "Problem gelöst" -#: aleksis/core/models.py:1012 +#: aleksis/core/models.py:1028 msgid "Notification sent" msgstr "Benachrichtigung gesendet" -#: aleksis/core/models.py:1025 +#: aleksis/core/models.py:1041 msgid "Data check result" msgstr "Datenprüfungsergebnis" -#: aleksis/core/models.py:1026 +#: aleksis/core/models.py:1042 msgid "Data check results" msgstr "Datenprüfungsergebnisse" -#: aleksis/core/models.py:1028 +#: aleksis/core/models.py:1044 msgid "Can run data checks" msgstr "Kann Datenprüfungen ausführen" -#: aleksis/core/models.py:1029 +#: aleksis/core/models.py:1045 msgid "Can solve data check problems" msgstr "Kann Datenprüfungsprobleme lösen" -#: aleksis/core/models.py:1044 +#: aleksis/core/models.py:1060 msgid "Owner" msgstr "Leiter" -#: aleksis/core/models.py:1048 +#: aleksis/core/models.py:1064 msgid "File expires at" msgstr "Datei abgelaufen am" -#: aleksis/core/models.py:1050 +#: aleksis/core/models.py:1066 msgid "Generated HTML file" msgstr "Generierte HTML-Datei" -#: aleksis/core/models.py:1052 +#: aleksis/core/models.py:1068 msgid "Generated PDF file" msgstr "Generierte PDF-Datei" -#: aleksis/core/models.py:1059 +#: aleksis/core/models.py:1075 msgid "PDF file" msgstr "PDF-Datei" -#: aleksis/core/models.py:1060 +#: aleksis/core/models.py:1076 msgid "PDF files" msgstr "PDF-Dateien" -#: aleksis/core/models.py:1065 +#: aleksis/core/models.py:1081 msgid "Task result" msgstr "Task-Ergebnis" -#: aleksis/core/models.py:1068 +#: aleksis/core/models.py:1084 msgid "Task user" msgstr "Task-Benutzer" -#: aleksis/core/models.py:1080 +#: aleksis/core/models.py:1096 msgid "Task user assignment" msgstr "Task-Benutzer-Zuordnung" -#: aleksis/core/models.py:1081 +#: aleksis/core/models.py:1097 msgid "Task user assignments" msgstr "Task-Benutzer-Zuordnungen" @@ -1029,77 +1020,71 @@ msgstr "Sichtbarer Name der Schule" msgid "Official name of the school, e.g. as given by supervisory authority" msgstr "Offizieller Name der Schule, wie er z.B. von der Behörde vorgegeben ist" -#: aleksis/core/preferences.py:256 -msgid "Enabled custom authentication backends" -msgstr "Benutzerdefinierte Authentifizierungsbackends aktivieren" - -#: aleksis/core/preferences.py:268 +#: aleksis/core/preferences.py:254 msgid "Allow users to change their passwords" msgstr "Erlaube Benutzern, ihr Passwort zu ändern" -#: aleksis/core/preferences.py:276 +#: aleksis/core/preferences.py:262 msgid "Enable signup" msgstr "Registrierung aktivieren" -#: aleksis/core/preferences.py:287 +#: aleksis/core/preferences.py:273 msgid "Available languages" msgstr "Verfügbare Sprachen" -#: aleksis/core/preferences.py:299 +#: aleksis/core/preferences.py:285 msgid "Send emails if data checks detect problems" msgstr "E-Mails versenden, wenn Datenprüfungen Probleme finden" -#: aleksis/core/preferences.py:310 +#: aleksis/core/preferences.py:296 msgid "Email recipients for data checks problem emails" msgstr "E-Mailempfänger für Datenprüfungsproblem-E-Mails" -#: aleksis/core/preferences.py:321 +#: aleksis/core/preferences.py:307 msgid "Email recipient groups for data checks problem emails" msgstr "E-Mail-Empfängergruppen für Datenprüfungsproblem-E-Mails" -#: aleksis/core/preferences.py:330 +#: aleksis/core/preferences.py:316 msgid "Show dashboard to users without login" msgstr "Zeige Dashboard für Benutzer ohne Login" -#: aleksis/core/preferences.py:339 +#: aleksis/core/preferences.py:325 msgid "Allow users to edit their dashboard" msgstr "Erlaube Benutzern, ihr Dashboard zu bearbeiten" -#: aleksis/core/preferences.py:350 +#: aleksis/core/preferences.py:336 msgid "Fields on person model which are editable by themselves." msgstr "Felder des Personen-Models welche von ihnen selbst editierbar sind." -#: aleksis/core/preferences.py:364 +#: aleksis/core/preferences.py:350 msgid "Editable fields on person model which should trigger a notification on change" msgstr "Editierbare Felder des Personen-Models welche eine Benachrichtigung für Änderungen auslösen soll" -#: aleksis/core/preferences.py:377 +#: aleksis/core/preferences.py:363 msgid "Contact for notification if a person changes their data" msgstr "Kontakt für Benachrichtigung, wenn eine Person ihre Daten ändert" -#: aleksis/core/preferences.py:387 +#: aleksis/core/preferences.py:373 msgid "PDF file expiration duration" msgstr "PDF-Datei-Ablaufdauer" -#: aleksis/core/preferences.py:388 +#: aleksis/core/preferences.py:374 msgid "in minutes" msgstr "in Minuten" -#: aleksis/core/preferences.py:398 +#: aleksis/core/preferences.py:384 msgid "Automatically update the dashboard and its widgets" msgstr "Automatisch das Dashboard und seine Widgets aktualisieren" -#: aleksis/core/preferences.py:408 +#: aleksis/core/preferences.py:394 msgid "Automatically update the dashboard and its widgets sitewide" -msgstr "" -"Automatisch das Dashboard und seine Widgets aktualisieren (auf der ganzen " -"Seite)" +msgstr "Automatisch das Dashboard und seine Widgets aktualisieren (auf der ganzen Seite)" -#: aleksis/core/settings.py:468 +#: aleksis/core/settings.py:452 msgid "English" msgstr "Englisch" -#: aleksis/core/settings.py:469 +#: aleksis/core/settings.py:453 msgid "German" msgstr "Deutsch" @@ -1294,7 +1279,7 @@ msgstr "" #: aleksis/core/templates/account/password_reset_done.html:5 #: aleksis/core/templates/account/verification_email_required.html:5 #: aleksis/core/templates/account/verification_email_required.html:6 -#: aleksis/core/templates/two_factor/core/login.html:100 +#: aleksis/core/templates/two_factor/core/login.html:81 msgid "Reset password" msgstr "Passwort zurücksetzen" @@ -2144,39 +2129,11 @@ msgstr "" " die Verwaltenden von AlekSIS an Ihrer Schule.\n" " " -#: aleksis/core/templates/core/person/accounts.html:12 -#: aleksis/core/templates/core/person/accounts.html:14 -msgid "Link persons to accounts" -msgstr "Personen mit Benutzerkonten verknüpfen" - -#: aleksis/core/templates/core/person/accounts.html:21 -msgid "" -"\n" -" You can use this form to assign user accounts to persons. Use the\n" -" dropdowns to select existing accounts; use the text fields to create new\n" -" accounts on-the-fly. The latter will create a new account with the\n" -" entered username and copy all other details from the person.\n" -" " -msgstr "" -"\n" -" Sie können dieses Formular nutzen, um Benutzerkonten Personen zuzuweisen. Nutzen Sie das\n" -" Auswahlfeld um ein existierendes Benutzerkonto auszuwählen; nutzen Sie das Textfeld, um einen neuen Benutzer zu\n" -" erstellen. Letzteres erstellt ein neues Benutzerkonto mit dem\n" -" eingegebenen Benutzernamen und kopiert alle anderen Daten der Person.\n" -" " - -#: aleksis/core/templates/core/person/accounts.html:36 -#: aleksis/core/templates/core/person/accounts.html:60 -msgid "Update" -msgstr "Aktualisieren" - -#: aleksis/core/templates/core/person/accounts.html:42 -msgid "Existing account" -msgstr "Existierendes Konto" - -#: aleksis/core/templates/core/person/accounts.html:43 -msgid "New account" -msgstr "Neues Konto" +#: aleksis/core/templates/core/person/create.html:12 +#: aleksis/core/templates/core/person/create.html:13 +#: aleksis/core/templates/core/person/list.html:17 +msgid "Create person" +msgstr "Person erstellen" #: aleksis/core/templates/core/person/edit.html:12 #: aleksis/core/templates/core/person/edit.html:13 @@ -2184,6 +2141,8 @@ msgid "Edit person" msgstr "Person editieren" #: aleksis/core/templates/core/person/full.html:44 +#: aleksis/core/templates/impersonate/list_users.html:7 +#: aleksis/core/templates/impersonate/list_users.html:8 msgid "Impersonate" msgstr "Verkleiden" @@ -2195,10 +2154,6 @@ msgstr "Kontaktdetails" msgid "Children" msgstr "Kinder" -#: aleksis/core/templates/core/person/list.html:17 -msgid "Create person" -msgstr "Person erstellen" - #: aleksis/core/templates/core/person/list.html:21 msgid "Filter persons" msgstr "Personen filtern" @@ -2235,10 +2190,6 @@ msgstr "Einstellungen für %(instance)s" msgid "Save preferences" msgstr "Einstellungen speichern" -#: aleksis/core/templates/impersonate/list_users.html:8 -msgid "Impersonate user" -msgstr "Als Benutzer verkleiden" - #: aleksis/core/templates/oauth2_provider/application_confirm_delete.html:5 #: aleksis/core/templates/oauth2_provider/application_confirm_delete.html:6 msgid "Delete application" @@ -2645,81 +2596,91 @@ msgstr "Zurück zur Kontosicherheit" msgid "Generate Tokens" msgstr "Tokens generieren" -#: aleksis/core/templates/two_factor/core/login.html:18 +#: aleksis/core/templates/two_factor/core/login.html:20 msgid "Login with username and password" msgstr "Anmeldung mit Benutzername und Passwort" -#: aleksis/core/templates/two_factor/core/login.html:26 -msgid "You have no permission to view this page. Please login with an other account." -msgstr "Sie haben nicht die nötigen Berechtigungen, um diese Seite aufzurufen. Bitte loggen Sie sich mit einem anderen Account ein." +#: aleksis/core/templates/two_factor/core/login.html:28 +msgid "" +"You have no permission to view this page. Please login with an other\n" +" account." +msgstr "" +"Sie haben keine Berichtigung, um diese Seite aufzurufen. \n" +"Bitte loggen Sie sich mit einem anderen Account ein." -#: aleksis/core/templates/two_factor/core/login.html:33 +#: aleksis/core/templates/two_factor/core/login.html:36 msgid "Please login to see this page." msgstr "Bitte melden Sie sich an, um diese Seite zu sehen." -#: aleksis/core/templates/two_factor/core/login.html:43 +#: aleksis/core/templates/two_factor/core/login.html:46 msgid "" "\n" -" We are calling your phone right now, please enter the\n" -" digits you hear.\n" -" " +" We are calling your phone right now, please enter the\n" +" digits you hear.\n" +" " msgstr "" "\n" -" Wir rufen Ihr Telefon jetzt an, \n" +" Wir rufen Ihr Telefon jetzt an, \n" " bitte geben Sie die Zahlen ein, die Sie hören.\n" -" " +" " -#: aleksis/core/templates/two_factor/core/login.html:48 +#: aleksis/core/templates/two_factor/core/login.html:51 msgid "" "\n" -" We sent you a text message, please enter the tokens we\n" -" sent.\n" -" " +" We sent you a text message, please enter the tokens we\n" +" sent.\n" +" " msgstr "" "\n" -" Wir haben Ihnen per SMS einen Token geschickt, \n" -" bitte geben Sie diesen ein.\n" -" " +" Wir haben Ihnen eine SMS geschickt, \n" +" bitte geben Sie die Token ein, die wir geschickt haben.\n" +" " -#: aleksis/core/templates/two_factor/core/login.html:53 +#: aleksis/core/templates/two_factor/core/login.html:56 msgid "" "\n" -" Please enter the tokens generated by your token\n" -" generator.\n" -" " +" Please enter the tokens generated by your token\n" +" generator.\n" +" " msgstr "" "\n" -" Bitte geben Sie den von Ihrem Token-Generator\n" +" Bitte geben Sie den von Ihrem Token-Generator\n" " generierten Token ein.\n" -" " +" " -#: aleksis/core/templates/two_factor/core/login.html:59 +#: aleksis/core/templates/two_factor/core/login.html:62 msgid "" "\n" -" Use this form for entering backup tokens for logging in.\n" -" These tokens have been generated for you to print and keep safe. Please\n" -" enter one of these backup tokens to login to your account.\n" -" " +" Use this form for entering backup tokens for logging in.\n" +" These tokens have been generated for you to print and keep safe. Please\n" +" enter one of these backup tokens to login to your account.\n" +" " msgstr "" "\n" -" Nutzen Sie dieses Formular um Ihre Backup-Tokens zum Anmelden einzugeben.\n" -" Diese Tokens wurden für Sie generiert, um diese gut aufzubewahren. Bitte\n" +" Nutzen Sie dieses Formular um Ihre Backup-Tokens zum " +"Anmelden einzugeben.\n" +" Diese Tokens wurden für Sie generiert, um diese gut " +"aufzubewahren. Bitte\n" " geben Sie einen dieser Tokens ein, um sich einzuloggen.\n" -" " +" " -#: aleksis/core/templates/two_factor/core/login.html:74 +#: aleksis/core/templates/two_factor/core/login.html:90 +msgid "Device currently not available?" +msgstr "Gerät aktuell nicht verfügbar?" + +#: aleksis/core/templates/two_factor/core/login.html:92 msgid "Or, alternatively, use one of your backup phones:" msgstr "Oder, alternativ, nutzen Sie eins Ihrer Backup-Telefone:" -#: aleksis/core/templates/two_factor/core/login.html:84 +#: aleksis/core/templates/two_factor/core/login.html:102 msgid "As a last resort, you can use a backup token:" msgstr "Als letzte Möglichkeit können Sie einen Backup-Token nutzen:" -#: aleksis/core/templates/two_factor/core/login.html:87 +#: aleksis/core/templates/two_factor/core/login.html:105 msgid "Use Backup Token" msgstr "Backup-Token nutzen" -#: aleksis/core/templates/two_factor/core/login.html:110 +#: aleksis/core/templates/two_factor/core/login.html:116 msgid "Use alternative login options" msgstr "Alternative Anmeldemöglichkeiten nutzen" @@ -2849,7 +2810,8 @@ msgid "" " " msgstr "" "\n" -" Wir haben Ihnen per SMS einen Token geschickt, bitte geben Sie diesen ein.\n" +" Wir haben Ihnen eine SMS geschickt, bitte geben Sie die Tokens " +"ein, die wir geschickt haben.\n" " " #: aleksis/core/templates/two_factor/core/setup.html:63 @@ -3060,111 +3022,150 @@ msgstr "Es ist ein Fehler beim Generieren der PDF-Datei aufgetreten." msgid "Download PDF" msgstr "PDF herunterladen" -#: aleksis/core/views.py:253 +#: aleksis/core/views.py:251 msgid "The school term has been created." msgstr "Das Schuljahr wurde erstellt." -#: aleksis/core/views.py:265 +#: aleksis/core/views.py:263 msgid "The school term has been saved." msgstr "Das Schuljahr wurde gespeichert." -#: aleksis/core/views.py:410 +#: aleksis/core/views.py:387 msgid "The child groups were successfully saved." msgstr "Die Untergruppen wurden gespeichert." -#: aleksis/core/views.py:471 +#: aleksis/core/views.py:406 aleksis/core/views.py:416 msgid "The person has been saved." msgstr "Die Person wurde gespeichert." -#: aleksis/core/views.py:510 +#: aleksis/core/views.py:466 msgid "The group has been saved." msgstr "Die Gruppe wurde gespeichert." -#: aleksis/core/views.py:607 +#: aleksis/core/views.py:563 msgid "The announcement has been saved." msgstr "Die Ankündigung wurde gespeichert." -#: aleksis/core/views.py:623 +#: aleksis/core/views.py:579 msgid "The announcement has been deleted." msgstr "Ankündigung wurde gelöscht." -#: aleksis/core/views.py:707 +#: aleksis/core/views.py:663 msgid "The preferences have been saved successfully." msgstr "Die Einstellungen wurde gespeichert." -#: aleksis/core/views.py:731 +#: aleksis/core/views.py:687 msgid "The person has been deleted." msgstr "Die Person wurde gelöscht." -#: aleksis/core/views.py:745 +#: aleksis/core/views.py:701 msgid "The group has been deleted." msgstr "Die Gruppe wurde gelöscht." -#: aleksis/core/views.py:777 +#: aleksis/core/views.py:733 msgid "The additional_field has been saved." msgstr "Das zusätzliche Feld wurde gespeichert." -#: aleksis/core/views.py:811 +#: aleksis/core/views.py:767 msgid "The additional field has been deleted." msgstr "Das zusätzliche Feld wurde gelöscht." -#: aleksis/core/views.py:836 +#: aleksis/core/views.py:792 msgid "The group type has been saved." msgstr "Der Gruppentyp wurde gespeichert." -#: aleksis/core/views.py:866 +#: aleksis/core/views.py:822 msgid "The group type has been deleted." msgstr "Der Gruppentyp wurde gelöscht." -#: aleksis/core/views.py:899 +#: aleksis/core/views.py:855 msgid "Progress: Run data checks" msgstr "Fortschritt: Datenprüfungen ausführen" -#: aleksis/core/views.py:900 +#: aleksis/core/views.py:856 msgid "Run data checks …" msgstr "Datenprüfungen laufen …" -#: aleksis/core/views.py:901 +#: aleksis/core/views.py:857 msgid "The data checks were run successfully." msgstr "Die Datenprüfungen wurden erfolgreich ausgeführt." -#: aleksis/core/views.py:902 +#: aleksis/core/views.py:858 msgid "There was a problem while running data checks." msgstr "Es gab ein Problem beim Ausführen der Datenprüfungen." -#: aleksis/core/views.py:918 +#: aleksis/core/views.py:874 #, python-brace-format msgid "The solve option '{solve_option_obj.verbose_name}' " msgstr "Die Lösungsoption \"{solve_option_obj.verbose_name}\" " -#: aleksis/core/views.py:960 +#: aleksis/core/views.py:916 msgid "The dashboard widget has been saved." msgstr "Das Dashboard-Widget wurde gespeichert." -#: aleksis/core/views.py:990 +#: aleksis/core/views.py:946 msgid "The dashboard widget has been created." msgstr "Das Dashboard-Widget wurde erstellt." -#: aleksis/core/views.py:1000 +#: aleksis/core/views.py:956 msgid "The dashboard widget has been deleted." msgstr "Das Dashboard-Widget wurde gelöscht." -#: aleksis/core/views.py:1067 +#: aleksis/core/views.py:1023 msgid "Your dashboard configuration has been saved successfully." msgstr "Ihre Dashboardkonfiguration wurde erfolgreich gespeichert." -#: aleksis/core/views.py:1069 +#: aleksis/core/views.py:1025 msgid "The configuration of the default dashboard has been saved successfully." msgstr "Die Konfiguration des Standard-Dashboardes wurde erfolgreich gespeichert." -#: aleksis/core/views.py:1197 +#: aleksis/core/views.py:1153 msgid "The third-party account could not be disconnected because it is the only login method available." msgstr "Das Drittanbieter-Konto konnte nicht deaktiviert werden, weil es die einzige verfügbare Anmeldeoption ist." -#: aleksis/core/views.py:1204 +#: aleksis/core/views.py:1160 msgid "The third-party account has been successfully disconnected." msgstr "Das Drittanbieter-Konto wurde erfolgreich getrennt." +#~ msgid "Persons and accounts" +#~ msgstr "Personen und Konten" + +#~ msgid "Can link persons to accounts" +#~ msgstr "Kann Personen mit Benutzerkonten verknüpfen" + +#~ msgid "Enabled custom authentication backends" +#~ msgstr "Benutzerdefinierte Authentifizierungsbackends aktivieren" + +#~ msgid "Link persons to accounts" +#~ msgstr "Personen mit Benutzerkonten verknüpfen" + +#~ msgid "" +#~ "\n" +#~ " You can use this form to assign user accounts to persons. Use the\n" +#~ " dropdowns to select existing accounts; use the text fields to create new\n" +#~ " accounts on-the-fly. The latter will create a new account with the\n" +#~ " entered username and copy all other details from the person.\n" +#~ " " +#~ msgstr "" +#~ "\n" +#~ " Sie können dieses Formular nutzen, um Benutzerkonten Personen zuzuweisen. Nutzen Sie das\n" +#~ " Auswahlfeld um ein existierendes Benutzerkonto auszuwählen; nutzen Sie das Textfeld, um einen neuen Benutzer zu\n" +#~ " erstellen. Letzteres erstellt ein neues Benutzerkonto mit dem\n" +#~ " eingegebenen Benutzernamen und kopiert alle anderen Daten der Person.\n" +#~ " " + +#~ msgid "Update" +#~ msgstr "Aktualisieren" + +#~ msgid "Existing account" +#~ msgstr "Existierendes Konto" + +#~ msgid "New account" +#~ msgstr "Neues Konto" + +#~ msgid "Impersonate user" +#~ msgstr "Als Benutzer verkleiden" + #~ msgid "Authorized tokens" #~ msgstr "Autorisierte Tokens" diff --git a/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po b/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po index e10a495775fcb643cbe11cc1ce0daf4c5fc649ef..6bbb636d795adbbe19acdf95ed873b27814d9284 100644 --- a/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/de_DE/LC_MESSAGES/djangojs.po @@ -3,32 +3,36 @@ # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-08-28 17:53+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" -"Language: \n" +"PO-Revision-Date: 2021-10-28 14:37+0000\n" +"Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n" +"Language-Team: German <https://translate.edugit.org/projects/aleksis/" +"aleksis-core-js/de/>\n" +"Language: de_DE\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 4.8\n" #: aleksis/core/static/js/main.js:15 msgid "Today" -msgstr "" +msgstr "Heute" #: aleksis/core/static/js/main.js:16 msgid "Cancel" -msgstr "" +msgstr "Abbrechen" #: aleksis/core/static/js/main.js:17 msgid "OK" -msgstr "" +msgstr "OK" #: aleksis/core/static/js/main.js:127 msgid "This page may contain outdated information since there is no internet connection." msgstr "" +"Diese Seite enthält vielleicht veraltete Informationen, da es keine " +"Internetverbindung gibt." diff --git a/aleksis/core/locale/fr/LC_MESSAGES/django.po b/aleksis/core/locale/fr/LC_MESSAGES/django.po index 1474f2840f186c7492954d6897652557d18f5976..3c118dd9a39119c4615e68b5f729d60de3726bff 100644 --- a/aleksis/core/locale/fr/LC_MESSAGES/django.po +++ b/aleksis/core/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: AlekSIS (School Information System) 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-28 17:53+0200\n" +"POT-Creation-Date: 2021-10-28 16:18+0200\n" "PO-Revision-Date: 2021-06-16 12:00+0000\n" "Last-Translator: Jonathan Weth <teckids@jonathanweth.de>\n" "Language-Team: French <https://translate.edugit.org/projects/aleksis/aleksis/fr/>\n" @@ -18,25 +18,25 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n > 1;\n" "X-Generator: Weblate 4.4\n" -#: aleksis/core/apps.py:148 aleksis/core/settings.py:343 +#: aleksis/core/apps.py:150 msgid "OpenID Connect scope" msgstr "" -#: aleksis/core/apps.py:149 aleksis/core/settings.py:344 +#: aleksis/core/apps.py:151 msgid "Given name, family name, link to profile and picture if existing." msgstr "" -#: aleksis/core/apps.py:150 aleksis/core/settings.py:345 +#: aleksis/core/apps.py:152 msgid "Full home postal address" msgstr "" -#: aleksis/core/apps.py:151 aleksis/core/settings.py:346 +#: aleksis/core/apps.py:153 #, fuzzy #| msgid "Contact details" msgid "Email address" msgstr "Détails de contact" -#: aleksis/core/apps.py:152 aleksis/core/settings.py:347 +#: aleksis/core/apps.py:154 msgid "Home and mobile phone" msgstr "" @@ -80,54 +80,54 @@ msgstr "" msgid "Search by contact details" msgstr "Détails de contact" -#: aleksis/core/forms.py:62 -msgid "You cannot set a new username when also selecting an existing user." -msgstr "" - -#: aleksis/core/forms.py:66 -msgid "This username is already in use." -msgstr "Cet nom est deja en utilisation." - -#: aleksis/core/forms.py:90 aleksis/core/forms.py:412 +#: aleksis/core/forms.py:41 aleksis/core/forms.py:387 msgid "Base data" msgstr "" -#: aleksis/core/forms.py:96 +#: aleksis/core/forms.py:47 msgid "Address" msgstr "" -#: aleksis/core/forms.py:97 +#: aleksis/core/forms.py:48 #, fuzzy #| msgid "Contact details" msgid "Contact data" msgstr "Détails de contact" -#: aleksis/core/forms.py:99 +#: aleksis/core/forms.py:50 #, fuzzy #| msgid "Contact details" msgid "Advanced personal data" msgstr "Détails de contact" -#: aleksis/core/forms.py:142 +#: aleksis/core/forms.py:93 msgid "New user" msgstr "" -#: aleksis/core/forms.py:142 +#: aleksis/core/forms.py:93 msgid "Create a new account" msgstr "" -#: aleksis/core/forms.py:170 aleksis/core/models.py:116 +#: aleksis/core/forms.py:124 +msgid "You cannot set a new username when also selecting an existing user." +msgstr "" + +#: aleksis/core/forms.py:128 +msgid "This username is already in use." +msgstr "Cet nom est deja en utilisation." + +#: aleksis/core/forms.py:145 aleksis/core/models.py:117 msgid "School term" msgstr "" -#: aleksis/core/forms.py:171 +#: aleksis/core/forms.py:146 #, fuzzy #| msgid "Contact details" msgid "Common data" msgstr "Détails de contact" -#: aleksis/core/forms.py:172 aleksis/core/forms.py:221 -#: aleksis/core/menus.py:238 aleksis/core/models.py:139 +#: aleksis/core/forms.py:147 aleksis/core/forms.py:196 +#: aleksis/core/menus.py:238 aleksis/core/models.py:140 #: aleksis/core/templates/core/person/list.html:8 #: aleksis/core/templates/core/person/list.html:9 #, fuzzy @@ -135,24 +135,24 @@ msgstr "Détails de contact" msgid "Persons" msgstr "Personne" -#: aleksis/core/forms.py:173 +#: aleksis/core/forms.py:148 #, fuzzy #| msgid "Contact details" msgid "Additional data" msgstr "Détails de contact" -#: aleksis/core/forms.py:213 aleksis/core/forms.py:216 -#: aleksis/core/models.py:59 +#: aleksis/core/forms.py:188 aleksis/core/forms.py:191 +#: aleksis/core/models.py:60 msgid "Date" msgstr "Date" -#: aleksis/core/forms.py:214 aleksis/core/forms.py:217 -#: aleksis/core/models.py:67 +#: aleksis/core/forms.py:189 aleksis/core/forms.py:192 +#: aleksis/core/models.py:68 msgid "Time" msgstr "" -#: aleksis/core/forms.py:234 aleksis/core/menus.py:249 -#: aleksis/core/models.py:381 aleksis/core/templates/core/group/list.html:8 +#: aleksis/core/forms.py:209 aleksis/core/menus.py:249 +#: aleksis/core/models.py:398 aleksis/core/templates/core/group/list.html:8 #: aleksis/core/templates/core/group/list.html:9 #: aleksis/core/templates/core/person/full.html:144 #, fuzzy @@ -160,58 +160,58 @@ msgstr "" msgid "Groups" msgstr "Groupe" -#: aleksis/core/forms.py:244 +#: aleksis/core/forms.py:219 msgid "From when until when should the announcement be displayed?" msgstr "" -#: aleksis/core/forms.py:247 +#: aleksis/core/forms.py:222 msgid "Who should see the announcement?" msgstr "" -#: aleksis/core/forms.py:248 +#: aleksis/core/forms.py:223 msgid "Write your announcement:" msgstr "" -#: aleksis/core/forms.py:287 +#: aleksis/core/forms.py:262 msgid "You are not allowed to create announcements which are only valid in the past." msgstr "" -#: aleksis/core/forms.py:291 +#: aleksis/core/forms.py:266 msgid "The from date and time must be earlier then the until date and time." msgstr "" -#: aleksis/core/forms.py:300 +#: aleksis/core/forms.py:275 msgid "You need at least one recipient." msgstr "" -#: aleksis/core/forms.py:414 +#: aleksis/core/forms.py:389 #, fuzzy #| msgid "Contact details" msgid "Account data" msgstr "Détails de contact" -#: aleksis/core/forms.py:416 +#: aleksis/core/forms.py:391 msgid "Consents" msgstr "" -#: aleksis/core/forms.py:421 +#: aleksis/core/forms.py:396 msgid "Password" msgstr "" -#: aleksis/core/forms.py:427 +#: aleksis/core/forms.py:402 msgid "Password (again)" msgstr "" -#: aleksis/core/forms.py:436 +#: aleksis/core/forms.py:411 #, python-brace-format msgid "I have read the <a href='{privacy_policy}'>Privacy policy</a> and agree with them." msgstr "" -#: aleksis/core/forms.py:460 +#: aleksis/core/forms.py:435 msgid "You must type the same password each time." msgstr "" -#: aleksis/core/forms.py:605 +#: aleksis/core/forms.py:580 msgid "No valid selection." msgstr "" @@ -242,8 +242,8 @@ msgid "{task.status} - {task.result}" msgstr "" #: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6 -#: aleksis/core/templates/two_factor/core/login.html:20 -#: aleksis/core/templates/two_factor/core/login.html:95 +#: aleksis/core/templates/two_factor/core/login.html:22 +#: aleksis/core/templates/two_factor/core/login.html:76 msgid "Login" msgstr "" @@ -256,7 +256,7 @@ msgstr "" msgid "Dashboard" msgstr "" -#: aleksis/core/menus.py:32 aleksis/core/models.py:588 +#: aleksis/core/menus.py:32 aleksis/core/models.py:605 #: aleksis/core/preferences.py:26 #: aleksis/core/templates/core/notifications.html:4 #: aleksis/core/templates/core/notifications.html:5 @@ -314,13 +314,13 @@ msgstr "" msgid "Admin" msgstr "" -#: aleksis/core/menus.py:127 aleksis/core/models.py:687 +#: aleksis/core/menus.py:127 aleksis/core/models.py:704 #: aleksis/core/templates/core/announcement/list.html:7 #: aleksis/core/templates/core/announcement/list.html:8 msgid "Announcements" msgstr "" -#: aleksis/core/menus.py:138 aleksis/core/models.py:117 +#: aleksis/core/menus.py:138 aleksis/core/models.py:118 #: aleksis/core/templates/core/school_term/list.html:8 #: aleksis/core/templates/core/school_term/list.html:9 msgid "School terms" @@ -371,7 +371,7 @@ msgstr "" msgid "People" msgstr "" -#: aleksis/core/menus.py:260 aleksis/core/models.py:941 +#: aleksis/core/menus.py:260 aleksis/core/models.py:958 #: aleksis/core/templates/core/group_type/list.html:8 #: aleksis/core/templates/core/group_type/list.html:9 #, fuzzy @@ -380,593 +380,582 @@ msgid "Group types" msgstr "Groupe" #: aleksis/core/menus.py:271 -msgid "Persons and accounts" -msgstr "" - -#: aleksis/core/menus.py:282 msgid "Groups and child groups" msgstr "" -#: aleksis/core/menus.py:293 aleksis/core/models.py:429 +#: aleksis/core/menus.py:282 aleksis/core/models.py:446 #: aleksis/core/templates/core/additional_field/list.html:8 #: aleksis/core/templates/core/additional_field/list.html:9 msgid "Additional fields" msgstr "" -#: aleksis/core/menus.py:308 +#: aleksis/core/menus.py:297 #: aleksis/core/templates/core/group/child_groups.html:7 #: aleksis/core/templates/core/group/child_groups.html:9 msgid "Assign child groups to groups" msgstr "" -#: aleksis/core/mixins.py:475 +#: aleksis/core/mixins.py:498 msgid "Linked school term" msgstr "" -#: aleksis/core/models.py:57 +#: aleksis/core/models.py:58 msgid "Boolean (Yes/No)" msgstr "" -#: aleksis/core/models.py:58 +#: aleksis/core/models.py:59 msgid "Text (one line)" msgstr "" -#: aleksis/core/models.py:60 +#: aleksis/core/models.py:61 msgid "Date and time" msgstr "" -#: aleksis/core/models.py:61 +#: aleksis/core/models.py:62 msgid "Decimal number" msgstr "" -#: aleksis/core/models.py:62 aleksis/core/models.py:185 +#: aleksis/core/models.py:63 aleksis/core/models.py:186 msgid "E-mail address" msgstr "" -#: aleksis/core/models.py:63 +#: aleksis/core/models.py:64 msgid "Integer" msgstr "" -#: aleksis/core/models.py:64 +#: aleksis/core/models.py:65 msgid "IP address" msgstr "" -#: aleksis/core/models.py:65 +#: aleksis/core/models.py:66 msgid "Boolean or empty (Yes/No/Neither)" msgstr "" -#: aleksis/core/models.py:66 +#: aleksis/core/models.py:67 msgid "Text (multi-line)" msgstr "" -#: aleksis/core/models.py:68 +#: aleksis/core/models.py:69 msgid "URL / Link" msgstr "" -#: aleksis/core/models.py:80 aleksis/core/models.py:910 +#: aleksis/core/models.py:81 aleksis/core/models.py:927 msgid "Name" msgstr "" -#: aleksis/core/models.py:82 +#: aleksis/core/models.py:83 #, fuzzy #| msgid "Contact details" msgid "Start date" msgstr "Détails de contact" -#: aleksis/core/models.py:83 +#: aleksis/core/models.py:84 msgid "End date" msgstr "" -#: aleksis/core/models.py:102 +#: aleksis/core/models.py:103 msgid "The start date must be earlier than the end date." msgstr "" -#: aleksis/core/models.py:109 +#: aleksis/core/models.py:110 msgid "There is already a school term for this time or a part of this time." msgstr "" -#: aleksis/core/models.py:138 aleksis/core/models.py:859 -#: aleksis/core/templates/core/person/accounts.html:41 +#: aleksis/core/models.py:139 aleksis/core/models.py:876 msgid "Person" msgstr "Personne" -#: aleksis/core/models.py:141 +#: aleksis/core/models.py:142 #, fuzzy #| msgid "Contact details" msgid "Can view address" msgstr "Détails de contact" -#: aleksis/core/models.py:142 +#: aleksis/core/models.py:143 #, fuzzy #| msgid "Contact details" msgid "Can view contact details" msgstr "Détails de contact" -#: aleksis/core/models.py:143 +#: aleksis/core/models.py:144 #, fuzzy #| msgid "Contact details" msgid "Can view photo" msgstr "Détails de contact" -#: aleksis/core/models.py:144 +#: aleksis/core/models.py:145 #, fuzzy #| msgid "Contact details" msgid "Can view persons groups" msgstr "Détails de contact" -#: aleksis/core/models.py:145 +#: aleksis/core/models.py:146 #, fuzzy #| msgid "Contact details" msgid "Can view personal details" msgstr "Détails de contact" -#: aleksis/core/models.py:155 +#: aleksis/core/models.py:156 msgid "female" msgstr "" -#: aleksis/core/models.py:155 +#: aleksis/core/models.py:156 msgid "male" msgstr "" -#: aleksis/core/models.py:163 +#: aleksis/core/models.py:164 msgid "Linked user" msgstr "" -#: aleksis/core/models.py:165 +#: aleksis/core/models.py:166 msgid "Is person active?" msgstr "" -#: aleksis/core/models.py:167 +#: aleksis/core/models.py:168 msgid "First name" msgstr "Prénom" -#: aleksis/core/models.py:168 +#: aleksis/core/models.py:169 msgid "Last name" msgstr "Nom de famille" -#: aleksis/core/models.py:170 +#: aleksis/core/models.py:171 msgid "Additional name(s)" msgstr "" -#: aleksis/core/models.py:174 aleksis/core/models.py:398 +#: aleksis/core/models.py:175 aleksis/core/models.py:415 #, fuzzy #| msgid "First name" msgid "Short name" msgstr "Prénom" -#: aleksis/core/models.py:177 +#: aleksis/core/models.py:178 msgid "Street" msgstr "" -#: aleksis/core/models.py:178 +#: aleksis/core/models.py:179 msgid "Street number" msgstr "" -#: aleksis/core/models.py:179 +#: aleksis/core/models.py:180 msgid "Postal code" msgstr "" -#: aleksis/core/models.py:180 +#: aleksis/core/models.py:181 msgid "Place" msgstr "" -#: aleksis/core/models.py:182 +#: aleksis/core/models.py:183 msgid "Home phone" msgstr "" -#: aleksis/core/models.py:183 +#: aleksis/core/models.py:184 msgid "Mobile phone" msgstr "" -#: aleksis/core/models.py:187 +#: aleksis/core/models.py:188 msgid "Date of birth" msgstr "Date d'anniversaire" -#: aleksis/core/models.py:188 +#: aleksis/core/models.py:189 msgid "Sex" msgstr "Sexe" -#: aleksis/core/models.py:190 +#: aleksis/core/models.py:191 msgid "Photo" msgstr "" -#: aleksis/core/models.py:194 aleksis/core/templates/core/person/full.html:137 +#: aleksis/core/models.py:195 aleksis/core/templates/core/person/full.html:137 msgid "Guardians / Parents" msgstr "" -#: aleksis/core/models.py:201 +#: aleksis/core/models.py:202 msgid "Primary group" msgstr "" -#: aleksis/core/models.py:204 aleksis/core/models.py:546 -#: aleksis/core/models.py:570 aleksis/core/models.py:655 -#: aleksis/core/models.py:934 aleksis/core/templates/core/person/full.html:120 +#: aleksis/core/models.py:205 aleksis/core/models.py:563 +#: aleksis/core/models.py:587 aleksis/core/models.py:672 +#: aleksis/core/models.py:951 aleksis/core/templates/core/person/full.html:120 msgid "Description" msgstr "Description" -#: aleksis/core/models.py:353 +#: aleksis/core/models.py:370 msgid "Title of field" msgstr "" -#: aleksis/core/models.py:355 +#: aleksis/core/models.py:372 msgid "Type of field" msgstr "" -#: aleksis/core/models.py:362 +#: aleksis/core/models.py:379 msgid "Addtitional field for groups" msgstr "" -#: aleksis/core/models.py:363 +#: aleksis/core/models.py:380 msgid "Addtitional fields for groups" msgstr "" -#: aleksis/core/models.py:380 +#: aleksis/core/models.py:397 msgid "Group" msgstr "groupe" -#: aleksis/core/models.py:383 +#: aleksis/core/models.py:400 msgid "Can assign child groups to groups" msgstr "" -#: aleksis/core/models.py:384 +#: aleksis/core/models.py:401 #, fuzzy #| msgid "Contact details" msgid "Can view statistics about group." msgstr "Détails de contact" -#: aleksis/core/models.py:396 +#: aleksis/core/models.py:413 #, fuzzy #| msgid "Last name" msgid "Long name" msgstr "Nom de famille" -#: aleksis/core/models.py:406 aleksis/core/templates/core/group/full.html:85 +#: aleksis/core/models.py:423 aleksis/core/templates/core/group/full.html:85 msgid "Members" msgstr "" -#: aleksis/core/models.py:409 aleksis/core/templates/core/group/full.html:82 +#: aleksis/core/models.py:426 aleksis/core/templates/core/group/full.html:82 msgid "Owners" msgstr "Propriétaires" -#: aleksis/core/models.py:416 aleksis/core/templates/core/group/full.html:55 +#: aleksis/core/models.py:433 aleksis/core/templates/core/group/full.html:55 msgid "Parent groups" msgstr "" -#: aleksis/core/models.py:424 +#: aleksis/core/models.py:441 msgid "Type of group" msgstr "" -#: aleksis/core/models.py:542 +#: aleksis/core/models.py:559 msgid "User" msgstr "" -#: aleksis/core/models.py:545 aleksis/core/models.py:569 -#: aleksis/core/models.py:654 +#: aleksis/core/models.py:562 aleksis/core/models.py:586 +#: aleksis/core/models.py:671 #: aleksis/core/templates/core/announcement/list.html:18 msgid "Title" msgstr "" -#: aleksis/core/models.py:548 +#: aleksis/core/models.py:565 msgid "Application" msgstr "" -#: aleksis/core/models.py:554 +#: aleksis/core/models.py:571 msgid "Activity" msgstr "" -#: aleksis/core/models.py:555 +#: aleksis/core/models.py:572 msgid "Activities" msgstr "" -#: aleksis/core/models.py:561 +#: aleksis/core/models.py:578 msgid "Sender" msgstr "" -#: aleksis/core/models.py:566 +#: aleksis/core/models.py:583 msgid "Recipient" msgstr "" -#: aleksis/core/models.py:571 aleksis/core/models.py:911 +#: aleksis/core/models.py:588 aleksis/core/models.py:928 msgid "Link" msgstr "" -#: aleksis/core/models.py:573 +#: aleksis/core/models.py:590 msgid "Read" msgstr "" -#: aleksis/core/models.py:574 +#: aleksis/core/models.py:591 msgid "Sent" msgstr "" -#: aleksis/core/models.py:587 +#: aleksis/core/models.py:604 msgid "Notification" msgstr "" -#: aleksis/core/models.py:656 +#: aleksis/core/models.py:673 msgid "Link to detailed view" msgstr "" -#: aleksis/core/models.py:659 +#: aleksis/core/models.py:676 msgid "Date and time from when to show" msgstr "" -#: aleksis/core/models.py:662 +#: aleksis/core/models.py:679 msgid "Date and time until when to show" msgstr "" -#: aleksis/core/models.py:686 +#: aleksis/core/models.py:703 msgid "Announcement" msgstr "" -#: aleksis/core/models.py:724 +#: aleksis/core/models.py:741 msgid "Announcement recipient" msgstr "" -#: aleksis/core/models.py:725 +#: aleksis/core/models.py:742 msgid "Announcement recipients" msgstr "" -#: aleksis/core/models.py:780 +#: aleksis/core/models.py:797 msgid "Widget Title" msgstr "" -#: aleksis/core/models.py:781 +#: aleksis/core/models.py:798 msgid "Activate Widget" msgstr "" -#: aleksis/core/models.py:782 +#: aleksis/core/models.py:799 msgid "Widget is broken" msgstr "" -#: aleksis/core/models.py:785 +#: aleksis/core/models.py:802 msgid "Size on mobile devices" msgstr "" -#: aleksis/core/models.py:786 +#: aleksis/core/models.py:803 msgid "<= 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:791 +#: aleksis/core/models.py:808 msgid "Size on tablet devices" msgstr "" -#: aleksis/core/models.py:792 +#: aleksis/core/models.py:809 msgid "> 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:797 +#: aleksis/core/models.py:814 msgid "Size on desktop devices" msgstr "" -#: aleksis/core/models.py:798 +#: aleksis/core/models.py:815 msgid "> 992 px, 12 columns" msgstr "" -#: aleksis/core/models.py:803 +#: aleksis/core/models.py:820 msgid "Size on large desktop devices" msgstr "" -#: aleksis/core/models.py:804 +#: aleksis/core/models.py:821 msgid "> 1200 px>, 12 columns" msgstr "" -#: aleksis/core/models.py:835 +#: aleksis/core/models.py:852 msgid "Can edit default dashboard" msgstr "" -#: aleksis/core/models.py:836 +#: aleksis/core/models.py:853 msgid "Dashboard Widget" msgstr "" -#: aleksis/core/models.py:837 +#: aleksis/core/models.py:854 msgid "Dashboard Widgets" msgstr "" -#: aleksis/core/models.py:843 +#: aleksis/core/models.py:860 msgid "URL" msgstr "" -#: aleksis/core/models.py:844 +#: aleksis/core/models.py:861 msgid "Icon URL" msgstr "" -#: aleksis/core/models.py:850 +#: aleksis/core/models.py:867 msgid "External link widget" msgstr "" -#: aleksis/core/models.py:851 +#: aleksis/core/models.py:868 msgid "External link widgets" msgstr "" -#: aleksis/core/models.py:856 +#: aleksis/core/models.py:873 msgid "Dashboard widget" msgstr "" -#: aleksis/core/models.py:861 +#: aleksis/core/models.py:878 msgid "Order" msgstr "" -#: aleksis/core/models.py:862 +#: aleksis/core/models.py:879 msgid "Part of the default dashboard" msgstr "" -#: aleksis/core/models.py:877 +#: aleksis/core/models.py:894 msgid "Dashboard widget order" msgstr "" -#: aleksis/core/models.py:878 +#: aleksis/core/models.py:895 msgid "Dashboard widget orders" msgstr "" -#: aleksis/core/models.py:884 +#: aleksis/core/models.py:901 msgid "Menu ID" msgstr "" -#: aleksis/core/models.py:897 +#: aleksis/core/models.py:914 msgid "Custom menu" msgstr "" -#: aleksis/core/models.py:898 +#: aleksis/core/models.py:915 msgid "Custom menus" msgstr "" -#: aleksis/core/models.py:908 +#: aleksis/core/models.py:925 msgid "Menu" msgstr "" -#: aleksis/core/models.py:912 +#: aleksis/core/models.py:929 msgid "Icon" msgstr "" -#: aleksis/core/models.py:918 +#: aleksis/core/models.py:935 msgid "Custom menu item" msgstr "" -#: aleksis/core/models.py:919 +#: aleksis/core/models.py:936 msgid "Custom menu items" msgstr "" -#: aleksis/core/models.py:933 +#: aleksis/core/models.py:950 msgid "Title of type" msgstr "" -#: aleksis/core/models.py:940 aleksis/core/templates/core/group/full.html:47 +#: aleksis/core/models.py:957 aleksis/core/templates/core/group/full.html:47 #, fuzzy #| msgid "Group" msgid "Group type" msgstr "Groupe" -#: aleksis/core/models.py:954 +#: aleksis/core/models.py:971 #, fuzzy #| msgid "Contact details" msgid "Can view system status" msgstr "Détails de contact" -#: aleksis/core/models.py:955 -#, fuzzy -#| msgid "Contact details" -msgid "Can link persons to accounts" -msgstr "Détails de contact" - -#: aleksis/core/models.py:956 +#: aleksis/core/models.py:972 msgid "Can manage data" msgstr "" -#: aleksis/core/models.py:957 +#: aleksis/core/models.py:973 #, fuzzy #| msgid "Contact details" msgid "Can impersonate" msgstr "Détails de contact" -#: aleksis/core/models.py:958 +#: aleksis/core/models.py:974 msgid "Can use search" msgstr "" -#: aleksis/core/models.py:959 +#: aleksis/core/models.py:975 msgid "Can change site preferences" msgstr "" -#: aleksis/core/models.py:960 +#: aleksis/core/models.py:976 msgid "Can change person preferences" msgstr "" -#: aleksis/core/models.py:961 +#: aleksis/core/models.py:977 msgid "Can change group preferences" msgstr "" -#: aleksis/core/models.py:962 +#: aleksis/core/models.py:978 msgid "Can add oauth applications" msgstr "" -#: aleksis/core/models.py:963 +#: aleksis/core/models.py:979 msgid "Can list oauth applications" msgstr "" -#: aleksis/core/models.py:964 +#: aleksis/core/models.py:980 #, fuzzy #| msgid "Contact details" msgid "Can view oauth applications" msgstr "Détails de contact" -#: aleksis/core/models.py:965 +#: aleksis/core/models.py:981 msgid "Can update oauth applications" msgstr "" -#: aleksis/core/models.py:966 +#: aleksis/core/models.py:982 msgid "Can delete oauth applications" msgstr "" -#: aleksis/core/models.py:967 +#: aleksis/core/models.py:983 msgid "Can test PDF generation" msgstr "" -#: aleksis/core/models.py:1003 +#: aleksis/core/models.py:1019 msgid "Related data check task" msgstr "" -#: aleksis/core/models.py:1011 +#: aleksis/core/models.py:1027 msgid "Issue solved" msgstr "" -#: aleksis/core/models.py:1012 +#: aleksis/core/models.py:1028 msgid "Notification sent" msgstr "" -#: aleksis/core/models.py:1025 +#: aleksis/core/models.py:1041 msgid "Data check result" msgstr "" -#: aleksis/core/models.py:1026 +#: aleksis/core/models.py:1042 msgid "Data check results" msgstr "" -#: aleksis/core/models.py:1028 +#: aleksis/core/models.py:1044 msgid "Can run data checks" msgstr "" -#: aleksis/core/models.py:1029 +#: aleksis/core/models.py:1045 msgid "Can solve data check problems" msgstr "" -#: aleksis/core/models.py:1044 +#: aleksis/core/models.py:1060 #, fuzzy #| msgid "Owners" msgid "Owner" msgstr "Propriétaires" -#: aleksis/core/models.py:1048 +#: aleksis/core/models.py:1064 msgid "File expires at" msgstr "" -#: aleksis/core/models.py:1050 +#: aleksis/core/models.py:1066 msgid "Generated HTML file" msgstr "" -#: aleksis/core/models.py:1052 +#: aleksis/core/models.py:1068 msgid "Generated PDF file" msgstr "" -#: aleksis/core/models.py:1059 +#: aleksis/core/models.py:1075 msgid "PDF file" msgstr "" -#: aleksis/core/models.py:1060 +#: aleksis/core/models.py:1076 msgid "PDF files" msgstr "" -#: aleksis/core/models.py:1065 +#: aleksis/core/models.py:1081 msgid "Task result" msgstr "" -#: aleksis/core/models.py:1068 +#: aleksis/core/models.py:1084 msgid "Task user" msgstr "" -#: aleksis/core/models.py:1080 +#: aleksis/core/models.py:1096 msgid "Task user assignment" msgstr "" -#: aleksis/core/models.py:1081 +#: aleksis/core/models.py:1097 msgid "Task user assignments" msgstr "" @@ -1084,75 +1073,71 @@ msgstr "" msgid "Official name of the school, e.g. as given by supervisory authority" msgstr "" -#: aleksis/core/preferences.py:256 -msgid "Enabled custom authentication backends" -msgstr "" - -#: aleksis/core/preferences.py:268 +#: aleksis/core/preferences.py:254 msgid "Allow users to change their passwords" msgstr "" -#: aleksis/core/preferences.py:276 +#: aleksis/core/preferences.py:262 msgid "Enable signup" msgstr "" -#: aleksis/core/preferences.py:287 +#: aleksis/core/preferences.py:273 msgid "Available languages" msgstr "" -#: aleksis/core/preferences.py:299 +#: aleksis/core/preferences.py:285 msgid "Send emails if data checks detect problems" msgstr "" -#: aleksis/core/preferences.py:310 +#: aleksis/core/preferences.py:296 msgid "Email recipients for data checks problem emails" msgstr "" -#: aleksis/core/preferences.py:321 +#: aleksis/core/preferences.py:307 msgid "Email recipient groups for data checks problem emails" msgstr "" -#: aleksis/core/preferences.py:330 +#: aleksis/core/preferences.py:316 msgid "Show dashboard to users without login" msgstr "" -#: aleksis/core/preferences.py:339 +#: aleksis/core/preferences.py:325 msgid "Allow users to edit their dashboard" msgstr "" -#: aleksis/core/preferences.py:350 +#: aleksis/core/preferences.py:336 msgid "Fields on person model which are editable by themselves." msgstr "" -#: aleksis/core/preferences.py:364 +#: aleksis/core/preferences.py:350 msgid "Editable fields on person model which should trigger a notification on change" msgstr "" -#: aleksis/core/preferences.py:377 +#: aleksis/core/preferences.py:363 msgid "Contact for notification if a person changes their data" msgstr "" -#: aleksis/core/preferences.py:387 +#: aleksis/core/preferences.py:373 msgid "PDF file expiration duration" msgstr "" -#: aleksis/core/preferences.py:388 +#: aleksis/core/preferences.py:374 msgid "in minutes" msgstr "" -#: aleksis/core/preferences.py:398 +#: aleksis/core/preferences.py:384 msgid "Automatically update the dashboard and its widgets" msgstr "" -#: aleksis/core/preferences.py:408 +#: aleksis/core/preferences.py:394 msgid "Automatically update the dashboard and its widgets sitewide" msgstr "" -#: aleksis/core/settings.py:468 +#: aleksis/core/settings.py:452 msgid "English" msgstr "" -#: aleksis/core/settings.py:469 +#: aleksis/core/settings.py:453 msgid "German" msgstr "" @@ -1316,7 +1301,7 @@ msgstr "" #: aleksis/core/templates/account/password_reset_done.html:5 #: aleksis/core/templates/account/verification_email_required.html:5 #: aleksis/core/templates/account/verification_email_required.html:6 -#: aleksis/core/templates/two_factor/core/login.html:100 +#: aleksis/core/templates/two_factor/core/login.html:81 msgid "Reset password" msgstr "" @@ -2065,33 +2050,13 @@ msgid "" " " msgstr "" -#: aleksis/core/templates/core/person/accounts.html:12 -#: aleksis/core/templates/core/person/accounts.html:14 -msgid "Link persons to accounts" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:21 -msgid "" -"\n" -" You can use this form to assign user accounts to persons. Use the\n" -" dropdowns to select existing accounts; use the text fields to create new\n" -" accounts on-the-fly. The latter will create a new account with the\n" -" entered username and copy all other details from the person.\n" -" " -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:36 -#: aleksis/core/templates/core/person/accounts.html:60 -msgid "Update" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:42 -msgid "Existing account" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:43 -msgid "New account" -msgstr "" +#: aleksis/core/templates/core/person/create.html:12 +#: aleksis/core/templates/core/person/create.html:13 +#: aleksis/core/templates/core/person/list.html:17 +#, fuzzy +#| msgid "Contact details" +msgid "Create person" +msgstr "Détails de contact" #: aleksis/core/templates/core/person/edit.html:12 #: aleksis/core/templates/core/person/edit.html:13 @@ -2099,6 +2064,8 @@ msgid "Edit person" msgstr "" #: aleksis/core/templates/core/person/full.html:44 +#: aleksis/core/templates/impersonate/list_users.html:7 +#: aleksis/core/templates/impersonate/list_users.html:8 #, fuzzy #| msgid "Contact details" msgid "Impersonate" @@ -2112,12 +2079,6 @@ msgstr "Détails de contact" msgid "Children" msgstr "" -#: aleksis/core/templates/core/person/list.html:17 -#, fuzzy -#| msgid "Contact details" -msgid "Create person" -msgstr "Détails de contact" - #: aleksis/core/templates/core/person/list.html:21 msgid "Filter persons" msgstr "" @@ -2154,10 +2115,6 @@ msgstr "" msgid "Save preferences" msgstr "" -#: aleksis/core/templates/impersonate/list_users.html:8 -msgid "Impersonate user" -msgstr "" - #: aleksis/core/templates/oauth2_provider/application_confirm_delete.html:5 #: aleksis/core/templates/oauth2_provider/application_confirm_delete.html:6 msgid "Delete application" @@ -2514,64 +2471,70 @@ msgstr "" msgid "Generate Tokens" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:18 +#: aleksis/core/templates/two_factor/core/login.html:20 msgid "Login with username and password" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:26 -msgid "You have no permission to view this page. Please login with an other account." +#: aleksis/core/templates/two_factor/core/login.html:28 +msgid "" +"You have no permission to view this page. Please login with an other\n" +" account." msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:33 +#: aleksis/core/templates/two_factor/core/login.html:36 msgid "Please login to see this page." msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:43 +#: aleksis/core/templates/two_factor/core/login.html:46 msgid "" "\n" -" We are calling your phone right now, please enter the\n" -" digits you hear.\n" -" " +" We are calling your phone right now, please enter the\n" +" digits you hear.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:48 +#: aleksis/core/templates/two_factor/core/login.html:51 msgid "" "\n" -" We sent you a text message, please enter the tokens we\n" -" sent.\n" -" " +" We sent you a text message, please enter the tokens we\n" +" sent.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:53 +#: aleksis/core/templates/two_factor/core/login.html:56 msgid "" "\n" -" Please enter the tokens generated by your token\n" -" generator.\n" -" " +" Please enter the tokens generated by your token\n" +" generator.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:59 +#: aleksis/core/templates/two_factor/core/login.html:62 msgid "" "\n" -" Use this form for entering backup tokens for logging in.\n" -" These tokens have been generated for you to print and keep safe. Please\n" -" enter one of these backup tokens to login to your account.\n" -" " +" Use this form for entering backup tokens for logging in.\n" +" These tokens have been generated for you to print and keep safe. Please\n" +" enter one of these backup tokens to login to your account.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:74 +#: aleksis/core/templates/two_factor/core/login.html:90 +msgid "Device currently not available?" +msgstr "" + +#: aleksis/core/templates/two_factor/core/login.html:92 msgid "Or, alternatively, use one of your backup phones:" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:84 +#: aleksis/core/templates/two_factor/core/login.html:102 msgid "As a last resort, you can use a backup token:" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:87 +#: aleksis/core/templates/two_factor/core/login.html:105 msgid "Use Backup Token" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:110 +#: aleksis/core/templates/two_factor/core/login.html:116 msgid "Use alternative login options" msgstr "" @@ -2836,107 +2799,112 @@ msgstr "" msgid "Download PDF" msgstr "" -#: aleksis/core/views.py:253 +#: aleksis/core/views.py:251 msgid "The school term has been created." msgstr "" -#: aleksis/core/views.py:265 +#: aleksis/core/views.py:263 msgid "The school term has been saved." msgstr "" -#: aleksis/core/views.py:410 +#: aleksis/core/views.py:387 msgid "The child groups were successfully saved." msgstr "" -#: aleksis/core/views.py:471 +#: aleksis/core/views.py:406 aleksis/core/views.py:416 msgid "The person has been saved." msgstr "" -#: aleksis/core/views.py:510 +#: aleksis/core/views.py:466 msgid "The group has been saved." msgstr "" -#: aleksis/core/views.py:607 +#: aleksis/core/views.py:563 msgid "The announcement has been saved." msgstr "" -#: aleksis/core/views.py:623 +#: aleksis/core/views.py:579 msgid "The announcement has been deleted." msgstr "" -#: aleksis/core/views.py:707 +#: aleksis/core/views.py:663 msgid "The preferences have been saved successfully." msgstr "" -#: aleksis/core/views.py:731 +#: aleksis/core/views.py:687 msgid "The person has been deleted." msgstr "" -#: aleksis/core/views.py:745 +#: aleksis/core/views.py:701 msgid "The group has been deleted." msgstr "" -#: aleksis/core/views.py:777 +#: aleksis/core/views.py:733 msgid "The additional_field has been saved." msgstr "" -#: aleksis/core/views.py:811 +#: aleksis/core/views.py:767 msgid "The additional field has been deleted." msgstr "" -#: aleksis/core/views.py:836 +#: aleksis/core/views.py:792 msgid "The group type has been saved." msgstr "" -#: aleksis/core/views.py:866 +#: aleksis/core/views.py:822 msgid "The group type has been deleted." msgstr "" -#: aleksis/core/views.py:899 +#: aleksis/core/views.py:855 msgid "Progress: Run data checks" msgstr "" -#: aleksis/core/views.py:900 +#: aleksis/core/views.py:856 msgid "Run data checks …" msgstr "" -#: aleksis/core/views.py:901 +#: aleksis/core/views.py:857 msgid "The data checks were run successfully." msgstr "" -#: aleksis/core/views.py:902 +#: aleksis/core/views.py:858 msgid "There was a problem while running data checks." msgstr "" -#: aleksis/core/views.py:918 +#: aleksis/core/views.py:874 #, python-brace-format msgid "The solve option '{solve_option_obj.verbose_name}' " msgstr "" -#: aleksis/core/views.py:960 +#: aleksis/core/views.py:916 msgid "The dashboard widget has been saved." msgstr "" -#: aleksis/core/views.py:990 +#: aleksis/core/views.py:946 msgid "The dashboard widget has been created." msgstr "" -#: aleksis/core/views.py:1000 +#: aleksis/core/views.py:956 msgid "The dashboard widget has been deleted." msgstr "" -#: aleksis/core/views.py:1067 +#: aleksis/core/views.py:1023 msgid "Your dashboard configuration has been saved successfully." msgstr "" -#: aleksis/core/views.py:1069 +#: aleksis/core/views.py:1025 msgid "The configuration of the default dashboard has been saved successfully." msgstr "" -#: aleksis/core/views.py:1197 +#: aleksis/core/views.py:1153 msgid "The third-party account could not be disconnected because it is the only login method available." msgstr "" -#: aleksis/core/views.py:1204 +#: aleksis/core/views.py:1160 msgid "The third-party account has been successfully disconnected." msgstr "" + +#, fuzzy +#~| msgid "Contact details" +#~ msgid "Can link persons to accounts" +#~ msgstr "Détails de contact" diff --git a/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po b/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po index d8b7ad352c6960cdc4dd763358d91f4004435949..bbd51395a6ee28d076da3de7bd4d65b198574194 100644 --- a/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/fr/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-28 17:53+0200\n" +"POT-Creation-Date: 2021-10-28 16:18+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" diff --git a/aleksis/core/locale/la/LC_MESSAGES/django.po b/aleksis/core/locale/la/LC_MESSAGES/django.po index 0badcc66b6e356e9988b64d155b1dfa53ee3381b..c34a5cc0811a09a7a1b1bf4430463e56cff5be3f 100644 --- a/aleksis/core/locale/la/LC_MESSAGES/django.po +++ b/aleksis/core/locale/la/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-28 17:53+0200\n" +"POT-Creation-Date: 2021-10-28 16:18+0200\n" "PO-Revision-Date: 2020-12-19 12:57+0000\n" "Last-Translator: Julian <leuckerj@gmail.com>\n" "Language-Team: Latin <https://translate.edugit.org/projects/aleksis/aleksis/la/>\n" @@ -18,27 +18,27 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.3.2\n" -#: aleksis/core/apps.py:148 aleksis/core/settings.py:343 +#: aleksis/core/apps.py:150 msgid "OpenID Connect scope" msgstr "" -#: aleksis/core/apps.py:149 aleksis/core/settings.py:344 +#: aleksis/core/apps.py:151 msgid "Given name, family name, link to profile and picture if existing." msgstr "" -#: aleksis/core/apps.py:150 aleksis/core/settings.py:345 +#: aleksis/core/apps.py:152 #, fuzzy #| msgid "E-mail address" msgid "Full home postal address" msgstr "Inscriptio electronica" -#: aleksis/core/apps.py:151 aleksis/core/settings.py:346 +#: aleksis/core/apps.py:153 #, fuzzy #| msgid "E-mail address" msgid "Email address" msgstr "Inscriptio electronica" -#: aleksis/core/apps.py:152 aleksis/core/settings.py:347 +#: aleksis/core/apps.py:154 #, fuzzy #| msgid "Mobile phone" msgid "Home and mobile phone" @@ -86,134 +86,134 @@ msgstr "Quaerere cum breve nomine" msgid "Search by contact details" msgstr "Inscriptio electronica" -#: aleksis/core/forms.py:62 -msgid "You cannot set a new username when also selecting an existing user." -msgstr "" - -#: aleksis/core/forms.py:66 -msgid "This username is already in use." -msgstr "" - -#: aleksis/core/forms.py:90 aleksis/core/forms.py:412 +#: aleksis/core/forms.py:41 aleksis/core/forms.py:387 msgid "Base data" msgstr "" -#: aleksis/core/forms.py:96 +#: aleksis/core/forms.py:47 #, fuzzy #| msgid "E-mail address" msgid "Address" msgstr "Inscriptio electronica" -#: aleksis/core/forms.py:97 +#: aleksis/core/forms.py:48 msgid "Contact data" msgstr "" -#: aleksis/core/forms.py:99 +#: aleksis/core/forms.py:50 msgid "Advanced personal data" msgstr "" -#: aleksis/core/forms.py:142 +#: aleksis/core/forms.py:93 msgid "New user" msgstr "" -#: aleksis/core/forms.py:142 +#: aleksis/core/forms.py:93 #, fuzzy #| msgid "Persons and accounts" msgid "Create a new account" msgstr "Personae et computi" -#: aleksis/core/forms.py:170 aleksis/core/models.py:116 +#: aleksis/core/forms.py:124 +msgid "You cannot set a new username when also selecting an existing user." +msgstr "" + +#: aleksis/core/forms.py:128 +msgid "This username is already in use." +msgstr "" + +#: aleksis/core/forms.py:145 aleksis/core/models.py:117 msgid "School term" msgstr "Anus scolae" -#: aleksis/core/forms.py:171 +#: aleksis/core/forms.py:146 #, fuzzy #| msgid "Data management" msgid "Common data" msgstr "Adminstratio datarum" -#: aleksis/core/forms.py:172 aleksis/core/forms.py:221 -#: aleksis/core/menus.py:238 aleksis/core/models.py:139 +#: aleksis/core/forms.py:147 aleksis/core/forms.py:196 +#: aleksis/core/menus.py:238 aleksis/core/models.py:140 #: aleksis/core/templates/core/person/list.html:8 #: aleksis/core/templates/core/person/list.html:9 msgid "Persons" msgstr "personae" -#: aleksis/core/forms.py:173 +#: aleksis/core/forms.py:148 #, fuzzy #| msgid "Additional name(s)" msgid "Additional data" msgstr "addita nomines" -#: aleksis/core/forms.py:213 aleksis/core/forms.py:216 -#: aleksis/core/models.py:59 +#: aleksis/core/forms.py:188 aleksis/core/forms.py:191 +#: aleksis/core/models.py:60 msgid "Date" msgstr "dies" -#: aleksis/core/forms.py:214 aleksis/core/forms.py:217 -#: aleksis/core/models.py:67 +#: aleksis/core/forms.py:189 aleksis/core/forms.py:192 +#: aleksis/core/models.py:68 msgid "Time" msgstr "tempus" -#: aleksis/core/forms.py:234 aleksis/core/menus.py:249 -#: aleksis/core/models.py:381 aleksis/core/templates/core/group/list.html:8 +#: aleksis/core/forms.py:209 aleksis/core/menus.py:249 +#: aleksis/core/models.py:398 aleksis/core/templates/core/group/list.html:8 #: aleksis/core/templates/core/group/list.html:9 #: aleksis/core/templates/core/person/full.html:144 msgid "Groups" msgstr "Greges" -#: aleksis/core/forms.py:244 +#: aleksis/core/forms.py:219 msgid "From when until when should the announcement be displayed?" msgstr "" -#: aleksis/core/forms.py:247 +#: aleksis/core/forms.py:222 msgid "Who should see the announcement?" msgstr "Quis nuntium videatne?" -#: aleksis/core/forms.py:248 +#: aleksis/core/forms.py:223 msgid "Write your announcement:" msgstr "Scribe nuntium:" -#: aleksis/core/forms.py:287 +#: aleksis/core/forms.py:262 msgid "You are not allowed to create announcements which are only valid in the past." msgstr "" -#: aleksis/core/forms.py:291 +#: aleksis/core/forms.py:266 msgid "The from date and time must be earlier then the until date and time." msgstr "" -#: aleksis/core/forms.py:300 +#: aleksis/core/forms.py:275 msgid "You need at least one recipient." msgstr "" -#: aleksis/core/forms.py:414 +#: aleksis/core/forms.py:389 #, fuzzy #| msgid "Data management" msgid "Account data" msgstr "Adminstratio datarum" -#: aleksis/core/forms.py:416 +#: aleksis/core/forms.py:391 msgid "Consents" msgstr "" -#: aleksis/core/forms.py:421 +#: aleksis/core/forms.py:396 msgid "Password" msgstr "" -#: aleksis/core/forms.py:427 +#: aleksis/core/forms.py:402 msgid "Password (again)" msgstr "" -#: aleksis/core/forms.py:436 +#: aleksis/core/forms.py:411 #, python-brace-format msgid "I have read the <a href='{privacy_policy}'>Privacy policy</a> and agree with them." msgstr "" -#: aleksis/core/forms.py:460 +#: aleksis/core/forms.py:435 msgid "You must type the same password each time." msgstr "" -#: aleksis/core/forms.py:605 +#: aleksis/core/forms.py:580 msgid "No valid selection." msgstr "" @@ -246,8 +246,8 @@ msgid "{task.status} - {task.result}" msgstr "" #: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6 -#: aleksis/core/templates/two_factor/core/login.html:20 -#: aleksis/core/templates/two_factor/core/login.html:95 +#: aleksis/core/templates/two_factor/core/login.html:22 +#: aleksis/core/templates/two_factor/core/login.html:76 msgid "Login" msgstr "nomen profiteri" @@ -260,7 +260,7 @@ msgstr "" msgid "Dashboard" msgstr "Forum" -#: aleksis/core/menus.py:32 aleksis/core/models.py:588 +#: aleksis/core/menus.py:32 aleksis/core/models.py:605 #: aleksis/core/preferences.py:26 #: aleksis/core/templates/core/notifications.html:4 #: aleksis/core/templates/core/notifications.html:5 @@ -322,13 +322,13 @@ msgstr "Nuntii" msgid "Admin" msgstr "Administratio" -#: aleksis/core/menus.py:127 aleksis/core/models.py:687 +#: aleksis/core/menus.py:127 aleksis/core/models.py:704 #: aleksis/core/templates/core/announcement/list.html:7 #: aleksis/core/templates/core/announcement/list.html:8 msgid "Announcements" msgstr "Nuntii" -#: aleksis/core/menus.py:138 aleksis/core/models.py:117 +#: aleksis/core/menus.py:138 aleksis/core/models.py:118 #: aleksis/core/templates/core/school_term/list.html:8 #: aleksis/core/templates/core/school_term/list.html:9 msgid "School terms" @@ -387,7 +387,7 @@ msgstr "Nuntii" msgid "People" msgstr "Personae" -#: aleksis/core/menus.py:260 aleksis/core/models.py:941 +#: aleksis/core/menus.py:260 aleksis/core/models.py:958 #: aleksis/core/templates/core/group_type/list.html:8 #: aleksis/core/templates/core/group_type/list.html:9 #, fuzzy @@ -396,14 +396,10 @@ msgid "Group types" msgstr "Greges" #: aleksis/core/menus.py:271 -msgid "Persons and accounts" -msgstr "Personae et computi" - -#: aleksis/core/menus.py:282 msgid "Groups and child groups" msgstr "" -#: aleksis/core/menus.py:293 aleksis/core/models.py:429 +#: aleksis/core/menus.py:282 aleksis/core/models.py:446 #: aleksis/core/templates/core/additional_field/list.html:8 #: aleksis/core/templates/core/additional_field/list.html:9 #, fuzzy @@ -411,614 +407,607 @@ msgstr "" msgid "Additional fields" msgstr "addita nomines" -#: aleksis/core/menus.py:308 +#: aleksis/core/menus.py:297 #: aleksis/core/templates/core/group/child_groups.html:7 #: aleksis/core/templates/core/group/child_groups.html:9 msgid "Assign child groups to groups" msgstr "" -#: aleksis/core/mixins.py:475 +#: aleksis/core/mixins.py:498 #, fuzzy #| msgid "Edit school term" msgid "Linked school term" msgstr "Muta anum scolae" -#: aleksis/core/models.py:57 +#: aleksis/core/models.py:58 msgid "Boolean (Yes/No)" msgstr "" -#: aleksis/core/models.py:58 +#: aleksis/core/models.py:59 msgid "Text (one line)" msgstr "" -#: aleksis/core/models.py:60 +#: aleksis/core/models.py:61 msgid "Date and time" msgstr "Dies et hora" -#: aleksis/core/models.py:61 +#: aleksis/core/models.py:62 msgid "Decimal number" msgstr "" -#: aleksis/core/models.py:62 aleksis/core/models.py:185 +#: aleksis/core/models.py:63 aleksis/core/models.py:186 msgid "E-mail address" msgstr "Inscriptio electronica" -#: aleksis/core/models.py:63 +#: aleksis/core/models.py:64 msgid "Integer" msgstr "" -#: aleksis/core/models.py:64 +#: aleksis/core/models.py:65 #, fuzzy #| msgid "E-mail address" msgid "IP address" msgstr "Inscriptio electronica" -#: aleksis/core/models.py:65 +#: aleksis/core/models.py:66 msgid "Boolean or empty (Yes/No/Neither)" msgstr "" -#: aleksis/core/models.py:66 +#: aleksis/core/models.py:67 msgid "Text (multi-line)" msgstr "" -#: aleksis/core/models.py:68 +#: aleksis/core/models.py:69 msgid "URL / Link" msgstr "" -#: aleksis/core/models.py:80 aleksis/core/models.py:910 +#: aleksis/core/models.py:81 aleksis/core/models.py:927 msgid "Name" msgstr "Nomen" -#: aleksis/core/models.py:82 +#: aleksis/core/models.py:83 msgid "Start date" msgstr "" -#: aleksis/core/models.py:83 +#: aleksis/core/models.py:84 msgid "End date" msgstr "" -#: aleksis/core/models.py:102 +#: aleksis/core/models.py:103 msgid "The start date must be earlier than the end date." msgstr "" -#: aleksis/core/models.py:109 +#: aleksis/core/models.py:110 msgid "There is already a school term for this time or a part of this time." msgstr "" -#: aleksis/core/models.py:138 aleksis/core/models.py:859 -#: aleksis/core/templates/core/person/accounts.html:41 +#: aleksis/core/models.py:139 aleksis/core/models.py:876 msgid "Person" msgstr "Persona" -#: aleksis/core/models.py:141 +#: aleksis/core/models.py:142 #, fuzzy #| msgid "E-mail address" msgid "Can view address" msgstr "Inscriptio electronica" -#: aleksis/core/models.py:142 +#: aleksis/core/models.py:143 #, fuzzy #| msgid "E-mail address" msgid "Can view contact details" msgstr "Inscriptio electronica" -#: aleksis/core/models.py:143 +#: aleksis/core/models.py:144 #, fuzzy #| msgid "E-mail address" msgid "Can view photo" msgstr "Inscriptio electronica" -#: aleksis/core/models.py:144 +#: aleksis/core/models.py:145 #, fuzzy #| msgid "Persons and accounts" msgid "Can view persons groups" msgstr "Personae et computi" -#: aleksis/core/models.py:145 +#: aleksis/core/models.py:146 #, fuzzy #| msgid "Stop impersonation" msgid "Can view personal details" msgstr "Simulandum aliquem finire" -#: aleksis/core/models.py:155 +#: aleksis/core/models.py:156 msgid "female" msgstr "femininum" -#: aleksis/core/models.py:155 +#: aleksis/core/models.py:156 msgid "male" msgstr "maskulinum" -#: aleksis/core/models.py:163 +#: aleksis/core/models.py:164 msgid "Linked user" msgstr "" -#: aleksis/core/models.py:165 +#: aleksis/core/models.py:166 #, fuzzy #| msgid "Impersonation" msgid "Is person active?" msgstr "Simulare aliquem" -#: aleksis/core/models.py:167 +#: aleksis/core/models.py:168 msgid "First name" msgstr "Primus nomen" -#: aleksis/core/models.py:168 +#: aleksis/core/models.py:169 msgid "Last name" msgstr "Secondus nomen" -#: aleksis/core/models.py:170 +#: aleksis/core/models.py:171 msgid "Additional name(s)" msgstr "addita nomines" -#: aleksis/core/models.py:174 aleksis/core/models.py:398 +#: aleksis/core/models.py:175 aleksis/core/models.py:415 msgid "Short name" msgstr "Breve nomen" -#: aleksis/core/models.py:177 +#: aleksis/core/models.py:178 msgid "Street" msgstr "Via" -#: aleksis/core/models.py:178 +#: aleksis/core/models.py:179 msgid "Street number" msgstr "Numerus domini" -#: aleksis/core/models.py:179 +#: aleksis/core/models.py:180 msgid "Postal code" msgstr "Numerus directorius" -#: aleksis/core/models.py:180 +#: aleksis/core/models.py:181 msgid "Place" msgstr "Urbs" -#: aleksis/core/models.py:182 +#: aleksis/core/models.py:183 msgid "Home phone" msgstr "Numerus telephoni domi" -#: aleksis/core/models.py:183 +#: aleksis/core/models.py:184 msgid "Mobile phone" msgstr "Numerus telephoni mobilis" -#: aleksis/core/models.py:187 +#: aleksis/core/models.py:188 msgid "Date of birth" msgstr "Dies natalis" -#: aleksis/core/models.py:188 +#: aleksis/core/models.py:189 msgid "Sex" msgstr "Genus" -#: aleksis/core/models.py:190 +#: aleksis/core/models.py:191 msgid "Photo" msgstr "Photographia" -#: aleksis/core/models.py:194 aleksis/core/templates/core/person/full.html:137 +#: aleksis/core/models.py:195 aleksis/core/templates/core/person/full.html:137 msgid "Guardians / Parents" msgstr "Parentes" -#: aleksis/core/models.py:201 +#: aleksis/core/models.py:202 msgid "Primary group" msgstr "" -#: aleksis/core/models.py:204 aleksis/core/models.py:546 -#: aleksis/core/models.py:570 aleksis/core/models.py:655 -#: aleksis/core/models.py:934 aleksis/core/templates/core/person/full.html:120 +#: aleksis/core/models.py:205 aleksis/core/models.py:563 +#: aleksis/core/models.py:587 aleksis/core/models.py:672 +#: aleksis/core/models.py:951 aleksis/core/templates/core/person/full.html:120 msgid "Description" msgstr "Descriptio" -#: aleksis/core/models.py:353 +#: aleksis/core/models.py:370 msgid "Title of field" msgstr "" -#: aleksis/core/models.py:355 +#: aleksis/core/models.py:372 msgid "Type of field" msgstr "" -#: aleksis/core/models.py:362 +#: aleksis/core/models.py:379 #, fuzzy #| msgid "Additional name(s)" msgid "Addtitional field for groups" msgstr "addita nomines" -#: aleksis/core/models.py:363 +#: aleksis/core/models.py:380 #, fuzzy #| msgid "Additional name(s)" msgid "Addtitional fields for groups" msgstr "addita nomines" -#: aleksis/core/models.py:380 +#: aleksis/core/models.py:397 msgid "Group" msgstr "Grex" -#: aleksis/core/models.py:383 +#: aleksis/core/models.py:400 msgid "Can assign child groups to groups" msgstr "" -#: aleksis/core/models.py:384 +#: aleksis/core/models.py:401 #, fuzzy #| msgid "Persons and accounts" msgid "Can view statistics about group." msgstr "Personae et computi" -#: aleksis/core/models.py:396 +#: aleksis/core/models.py:413 #, fuzzy #| msgid "Last name" msgid "Long name" msgstr "Secondus nomen" -#: aleksis/core/models.py:406 aleksis/core/templates/core/group/full.html:85 +#: aleksis/core/models.py:423 aleksis/core/templates/core/group/full.html:85 msgid "Members" msgstr "" -#: aleksis/core/models.py:409 aleksis/core/templates/core/group/full.html:82 +#: aleksis/core/models.py:426 aleksis/core/templates/core/group/full.html:82 msgid "Owners" msgstr "" -#: aleksis/core/models.py:416 aleksis/core/templates/core/group/full.html:55 +#: aleksis/core/models.py:433 aleksis/core/templates/core/group/full.html:55 msgid "Parent groups" msgstr "" -#: aleksis/core/models.py:424 +#: aleksis/core/models.py:441 msgid "Type of group" msgstr "" -#: aleksis/core/models.py:542 +#: aleksis/core/models.py:559 msgid "User" msgstr "" -#: aleksis/core/models.py:545 aleksis/core/models.py:569 -#: aleksis/core/models.py:654 +#: aleksis/core/models.py:562 aleksis/core/models.py:586 +#: aleksis/core/models.py:671 #: aleksis/core/templates/core/announcement/list.html:18 msgid "Title" msgstr "Titulus" -#: aleksis/core/models.py:548 +#: aleksis/core/models.py:565 msgid "Application" msgstr "" -#: aleksis/core/models.py:554 +#: aleksis/core/models.py:571 msgid "Activity" msgstr "" -#: aleksis/core/models.py:555 +#: aleksis/core/models.py:572 msgid "Activities" msgstr "" -#: aleksis/core/models.py:561 +#: aleksis/core/models.py:578 msgid "Sender" msgstr "Mittens" -#: aleksis/core/models.py:566 +#: aleksis/core/models.py:583 msgid "Recipient" msgstr "" -#: aleksis/core/models.py:571 aleksis/core/models.py:911 +#: aleksis/core/models.py:588 aleksis/core/models.py:928 msgid "Link" msgstr "" -#: aleksis/core/models.py:573 +#: aleksis/core/models.py:590 msgid "Read" msgstr "" -#: aleksis/core/models.py:574 +#: aleksis/core/models.py:591 msgid "Sent" msgstr "" -#: aleksis/core/models.py:587 +#: aleksis/core/models.py:604 #, fuzzy #| msgid "Notifications" msgid "Notification" msgstr "Nuntii" -#: aleksis/core/models.py:656 +#: aleksis/core/models.py:673 msgid "Link to detailed view" msgstr "" -#: aleksis/core/models.py:659 +#: aleksis/core/models.py:676 msgid "Date and time from when to show" msgstr "" -#: aleksis/core/models.py:662 +#: aleksis/core/models.py:679 msgid "Date and time until when to show" msgstr "" -#: aleksis/core/models.py:686 +#: aleksis/core/models.py:703 #, fuzzy #| msgid "Announcements" msgid "Announcement" msgstr "Nuntii" -#: aleksis/core/models.py:724 +#: aleksis/core/models.py:741 #, fuzzy #| msgid "Announcements" msgid "Announcement recipient" msgstr "Nuntii" -#: aleksis/core/models.py:725 +#: aleksis/core/models.py:742 #, fuzzy #| msgid "Announcements" msgid "Announcement recipients" msgstr "Nuntii" -#: aleksis/core/models.py:780 +#: aleksis/core/models.py:797 #, fuzzy #| msgid "Site title" msgid "Widget Title" msgstr "Titulus paginae" -#: aleksis/core/models.py:781 +#: aleksis/core/models.py:798 msgid "Activate Widget" msgstr "" -#: aleksis/core/models.py:782 +#: aleksis/core/models.py:799 #, fuzzy #| msgid "Site title" msgid "Widget is broken" msgstr "Titulus paginae" -#: aleksis/core/models.py:785 +#: aleksis/core/models.py:802 msgid "Size on mobile devices" msgstr "" -#: aleksis/core/models.py:786 +#: aleksis/core/models.py:803 msgid "<= 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:791 +#: aleksis/core/models.py:808 msgid "Size on tablet devices" msgstr "" -#: aleksis/core/models.py:792 +#: aleksis/core/models.py:809 msgid "> 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:797 +#: aleksis/core/models.py:814 msgid "Size on desktop devices" msgstr "" -#: aleksis/core/models.py:798 +#: aleksis/core/models.py:815 msgid "> 992 px, 12 columns" msgstr "" -#: aleksis/core/models.py:803 +#: aleksis/core/models.py:820 msgid "Size on large desktop devices" msgstr "" -#: aleksis/core/models.py:804 +#: aleksis/core/models.py:821 msgid "> 1200 px>, 12 columns" msgstr "" -#: aleksis/core/models.py:835 +#: aleksis/core/models.py:852 #, fuzzy #| msgid "Dashboard" msgid "Can edit default dashboard" msgstr "Forum" -#: aleksis/core/models.py:836 +#: aleksis/core/models.py:853 #, fuzzy #| msgid "Dashboard" msgid "Dashboard Widget" msgstr "Forum" -#: aleksis/core/models.py:837 +#: aleksis/core/models.py:854 #, fuzzy #| msgid "Dashboard" msgid "Dashboard Widgets" msgstr "Forum" -#: aleksis/core/models.py:843 +#: aleksis/core/models.py:860 msgid "URL" msgstr "" -#: aleksis/core/models.py:844 +#: aleksis/core/models.py:861 #, fuzzy #| msgid "Icon" msgid "Icon URL" msgstr "Nota" -#: aleksis/core/models.py:850 +#: aleksis/core/models.py:867 msgid "External link widget" msgstr "" -#: aleksis/core/models.py:851 +#: aleksis/core/models.py:868 msgid "External link widgets" msgstr "" -#: aleksis/core/models.py:856 +#: aleksis/core/models.py:873 #, fuzzy #| msgid "Dashboard" msgid "Dashboard widget" msgstr "Forum" -#: aleksis/core/models.py:861 +#: aleksis/core/models.py:878 msgid "Order" msgstr "" -#: aleksis/core/models.py:862 +#: aleksis/core/models.py:879 msgid "Part of the default dashboard" msgstr "" -#: aleksis/core/models.py:877 +#: aleksis/core/models.py:894 #, fuzzy #| msgid "Dashboard" msgid "Dashboard widget order" msgstr "Forum" -#: aleksis/core/models.py:878 +#: aleksis/core/models.py:895 #, fuzzy #| msgid "Dashboard" msgid "Dashboard widget orders" msgstr "Forum" -#: aleksis/core/models.py:884 +#: aleksis/core/models.py:901 msgid "Menu ID" msgstr "" -#: aleksis/core/models.py:897 +#: aleksis/core/models.py:914 msgid "Custom menu" msgstr "" -#: aleksis/core/models.py:898 +#: aleksis/core/models.py:915 msgid "Custom menus" msgstr "" -#: aleksis/core/models.py:908 +#: aleksis/core/models.py:925 msgid "Menu" msgstr "" -#: aleksis/core/models.py:912 +#: aleksis/core/models.py:929 msgid "Icon" msgstr "Nota" -#: aleksis/core/models.py:918 +#: aleksis/core/models.py:935 msgid "Custom menu item" msgstr "" -#: aleksis/core/models.py:919 +#: aleksis/core/models.py:936 msgid "Custom menu items" msgstr "" -#: aleksis/core/models.py:933 +#: aleksis/core/models.py:950 msgid "Title of type" msgstr "" -#: aleksis/core/models.py:940 aleksis/core/templates/core/group/full.html:47 +#: aleksis/core/models.py:957 aleksis/core/templates/core/group/full.html:47 #, fuzzy #| msgid "Group" msgid "Group type" msgstr "Grex" -#: aleksis/core/models.py:954 +#: aleksis/core/models.py:971 #, fuzzy #| msgid "System status" msgid "Can view system status" msgstr "Status systemae" -#: aleksis/core/models.py:955 -#, fuzzy -#| msgid "Persons and accounts" -msgid "Can link persons to accounts" -msgstr "Personae et computi" - -#: aleksis/core/models.py:956 +#: aleksis/core/models.py:972 #, fuzzy #| msgid "Data management" msgid "Can manage data" msgstr "Adminstratio datarum" -#: aleksis/core/models.py:957 +#: aleksis/core/models.py:973 #, fuzzy #| msgid "Stop impersonation" msgid "Can impersonate" msgstr "Simulandum aliquem finire" -#: aleksis/core/models.py:958 +#: aleksis/core/models.py:974 msgid "Can use search" msgstr "" -#: aleksis/core/models.py:959 +#: aleksis/core/models.py:975 msgid "Can change site preferences" msgstr "" -#: aleksis/core/models.py:960 +#: aleksis/core/models.py:976 msgid "Can change person preferences" msgstr "" -#: aleksis/core/models.py:961 +#: aleksis/core/models.py:977 msgid "Can change group preferences" msgstr "" -#: aleksis/core/models.py:962 +#: aleksis/core/models.py:978 msgid "Can add oauth applications" msgstr "" -#: aleksis/core/models.py:963 +#: aleksis/core/models.py:979 msgid "Can list oauth applications" msgstr "" -#: aleksis/core/models.py:964 +#: aleksis/core/models.py:980 #, fuzzy #| msgid "E-mail address" msgid "Can view oauth applications" msgstr "Inscriptio electronica" -#: aleksis/core/models.py:965 +#: aleksis/core/models.py:981 msgid "Can update oauth applications" msgstr "" -#: aleksis/core/models.py:966 +#: aleksis/core/models.py:982 msgid "Can delete oauth applications" msgstr "" -#: aleksis/core/models.py:967 +#: aleksis/core/models.py:983 msgid "Can test PDF generation" msgstr "" -#: aleksis/core/models.py:1003 +#: aleksis/core/models.py:1019 msgid "Related data check task" msgstr "" -#: aleksis/core/models.py:1011 +#: aleksis/core/models.py:1027 msgid "Issue solved" msgstr "" -#: aleksis/core/models.py:1012 +#: aleksis/core/models.py:1028 #, fuzzy #| msgid "Notifications" msgid "Notification sent" msgstr "Nuntii" -#: aleksis/core/models.py:1025 +#: aleksis/core/models.py:1041 msgid "Data check result" msgstr "" -#: aleksis/core/models.py:1026 +#: aleksis/core/models.py:1042 msgid "Data check results" msgstr "" -#: aleksis/core/models.py:1028 +#: aleksis/core/models.py:1044 msgid "Can run data checks" msgstr "" -#: aleksis/core/models.py:1029 +#: aleksis/core/models.py:1045 msgid "Can solve data check problems" msgstr "" -#: aleksis/core/models.py:1044 +#: aleksis/core/models.py:1060 msgid "Owner" msgstr "" -#: aleksis/core/models.py:1048 +#: aleksis/core/models.py:1064 msgid "File expires at" msgstr "" -#: aleksis/core/models.py:1050 +#: aleksis/core/models.py:1066 msgid "Generated HTML file" msgstr "" -#: aleksis/core/models.py:1052 +#: aleksis/core/models.py:1068 msgid "Generated PDF file" msgstr "" -#: aleksis/core/models.py:1059 +#: aleksis/core/models.py:1075 msgid "PDF file" msgstr "" -#: aleksis/core/models.py:1060 +#: aleksis/core/models.py:1076 msgid "PDF files" msgstr "" -#: aleksis/core/models.py:1065 +#: aleksis/core/models.py:1081 msgid "Task result" msgstr "" -#: aleksis/core/models.py:1068 +#: aleksis/core/models.py:1084 msgid "Task user" msgstr "" -#: aleksis/core/models.py:1080 +#: aleksis/core/models.py:1096 msgid "Task user assignment" msgstr "" -#: aleksis/core/models.py:1081 +#: aleksis/core/models.py:1097 msgid "Task user assignments" msgstr "" @@ -1144,75 +1133,71 @@ msgstr "" msgid "Official name of the school, e.g. as given by supervisory authority" msgstr "Officialis nomen scolae, e. g." -#: aleksis/core/preferences.py:256 -msgid "Enabled custom authentication backends" -msgstr "" - -#: aleksis/core/preferences.py:268 +#: aleksis/core/preferences.py:254 msgid "Allow users to change their passwords" msgstr "" -#: aleksis/core/preferences.py:276 +#: aleksis/core/preferences.py:262 msgid "Enable signup" msgstr "" -#: aleksis/core/preferences.py:287 +#: aleksis/core/preferences.py:273 msgid "Available languages" msgstr "" -#: aleksis/core/preferences.py:299 +#: aleksis/core/preferences.py:285 msgid "Send emails if data checks detect problems" msgstr "" -#: aleksis/core/preferences.py:310 +#: aleksis/core/preferences.py:296 msgid "Email recipients for data checks problem emails" msgstr "" -#: aleksis/core/preferences.py:321 +#: aleksis/core/preferences.py:307 msgid "Email recipient groups for data checks problem emails" msgstr "" -#: aleksis/core/preferences.py:330 +#: aleksis/core/preferences.py:316 msgid "Show dashboard to users without login" msgstr "" -#: aleksis/core/preferences.py:339 +#: aleksis/core/preferences.py:325 msgid "Allow users to edit their dashboard" msgstr "" -#: aleksis/core/preferences.py:350 +#: aleksis/core/preferences.py:336 msgid "Fields on person model which are editable by themselves." msgstr "" -#: aleksis/core/preferences.py:364 +#: aleksis/core/preferences.py:350 msgid "Editable fields on person model which should trigger a notification on change" msgstr "" -#: aleksis/core/preferences.py:377 +#: aleksis/core/preferences.py:363 msgid "Contact for notification if a person changes their data" msgstr "" -#: aleksis/core/preferences.py:387 +#: aleksis/core/preferences.py:373 msgid "PDF file expiration duration" msgstr "" -#: aleksis/core/preferences.py:388 +#: aleksis/core/preferences.py:374 msgid "in minutes" msgstr "" -#: aleksis/core/preferences.py:398 +#: aleksis/core/preferences.py:384 msgid "Automatically update the dashboard and its widgets" msgstr "" -#: aleksis/core/preferences.py:408 +#: aleksis/core/preferences.py:394 msgid "Automatically update the dashboard and its widgets sitewide" msgstr "" -#: aleksis/core/settings.py:468 +#: aleksis/core/settings.py:452 msgid "English" msgstr "Britannicus" -#: aleksis/core/settings.py:469 +#: aleksis/core/settings.py:453 msgid "German" msgstr "Germanus" @@ -1380,7 +1365,7 @@ msgstr "" #: aleksis/core/templates/account/password_reset_done.html:5 #: aleksis/core/templates/account/verification_email_required.html:5 #: aleksis/core/templates/account/verification_email_required.html:6 -#: aleksis/core/templates/two_factor/core/login.html:100 +#: aleksis/core/templates/two_factor/core/login.html:81 msgid "Reset password" msgstr "" @@ -2169,35 +2154,13 @@ msgid "" " " msgstr "" -#: aleksis/core/templates/core/person/accounts.html:12 -#: aleksis/core/templates/core/person/accounts.html:14 +#: aleksis/core/templates/core/person/create.html:12 +#: aleksis/core/templates/core/person/create.html:13 +#: aleksis/core/templates/core/person/list.html:17 #, fuzzy -#| msgid "Persons and accounts" -msgid "Link persons to accounts" -msgstr "Personae et computi" - -#: aleksis/core/templates/core/person/accounts.html:21 -msgid "" -"\n" -" You can use this form to assign user accounts to persons. Use the\n" -" dropdowns to select existing accounts; use the text fields to create new\n" -" accounts on-the-fly. The latter will create a new account with the\n" -" entered username and copy all other details from the person.\n" -" " -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:36 -#: aleksis/core/templates/core/person/accounts.html:60 -msgid "Update" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:42 -msgid "Existing account" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:43 -msgid "New account" -msgstr "" +#| msgid "Stop impersonation" +msgid "Create person" +msgstr "Simulandum aliquem finire" #: aleksis/core/templates/core/person/edit.html:12 #: aleksis/core/templates/core/person/edit.html:13 @@ -2205,6 +2168,8 @@ msgid "Edit person" msgstr "" #: aleksis/core/templates/core/person/full.html:44 +#: aleksis/core/templates/impersonate/list_users.html:7 +#: aleksis/core/templates/impersonate/list_users.html:8 #, fuzzy #| msgid "Impersonation" msgid "Impersonate" @@ -2218,12 +2183,6 @@ msgstr "" msgid "Children" msgstr "" -#: aleksis/core/templates/core/person/list.html:17 -#, fuzzy -#| msgid "Stop impersonation" -msgid "Create person" -msgstr "Simulandum aliquem finire" - #: aleksis/core/templates/core/person/list.html:21 msgid "Filter persons" msgstr "" @@ -2262,12 +2221,6 @@ msgstr "" msgid "Save preferences" msgstr "" -#: aleksis/core/templates/impersonate/list_users.html:8 -#, fuzzy -#| msgid "Impersonation" -msgid "Impersonate user" -msgstr "Simulare aliquem" - #: aleksis/core/templates/oauth2_provider/application_confirm_delete.html:5 #: aleksis/core/templates/oauth2_provider/application_confirm_delete.html:6 msgid "Delete application" @@ -2637,64 +2590,70 @@ msgstr "" msgid "Generate Tokens" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:18 +#: aleksis/core/templates/two_factor/core/login.html:20 msgid "Login with username and password" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:26 -msgid "You have no permission to view this page. Please login with an other account." +#: aleksis/core/templates/two_factor/core/login.html:28 +msgid "" +"You have no permission to view this page. Please login with an other\n" +" account." msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:33 +#: aleksis/core/templates/two_factor/core/login.html:36 msgid "Please login to see this page." msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:43 +#: aleksis/core/templates/two_factor/core/login.html:46 msgid "" "\n" -" We are calling your phone right now, please enter the\n" -" digits you hear.\n" -" " +" We are calling your phone right now, please enter the\n" +" digits you hear.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:48 +#: aleksis/core/templates/two_factor/core/login.html:51 msgid "" "\n" -" We sent you a text message, please enter the tokens we\n" -" sent.\n" -" " +" We sent you a text message, please enter the tokens we\n" +" sent.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:53 +#: aleksis/core/templates/two_factor/core/login.html:56 msgid "" "\n" -" Please enter the tokens generated by your token\n" -" generator.\n" -" " +" Please enter the tokens generated by your token\n" +" generator.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:59 +#: aleksis/core/templates/two_factor/core/login.html:62 msgid "" "\n" -" Use this form for entering backup tokens for logging in.\n" -" These tokens have been generated for you to print and keep safe. Please\n" -" enter one of these backup tokens to login to your account.\n" -" " +" Use this form for entering backup tokens for logging in.\n" +" These tokens have been generated for you to print and keep safe. Please\n" +" enter one of these backup tokens to login to your account.\n" +" " +msgstr "" + +#: aleksis/core/templates/two_factor/core/login.html:90 +msgid "Device currently not available?" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:74 +#: aleksis/core/templates/two_factor/core/login.html:92 msgid "Or, alternatively, use one of your backup phones:" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:84 +#: aleksis/core/templates/two_factor/core/login.html:102 msgid "As a last resort, you can use a backup token:" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:87 +#: aleksis/core/templates/two_factor/core/login.html:105 msgid "Use Backup Token" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:110 +#: aleksis/core/templates/two_factor/core/login.html:116 msgid "Use alternative login options" msgstr "" @@ -2959,113 +2918,131 @@ msgstr "" msgid "Download PDF" msgstr "" -#: aleksis/core/views.py:253 +#: aleksis/core/views.py:251 msgid "The school term has been created." msgstr "" -#: aleksis/core/views.py:265 +#: aleksis/core/views.py:263 msgid "The school term has been saved." msgstr "" -#: aleksis/core/views.py:410 +#: aleksis/core/views.py:387 msgid "The child groups were successfully saved." msgstr "" -#: aleksis/core/views.py:471 +#: aleksis/core/views.py:406 aleksis/core/views.py:416 msgid "The person has been saved." msgstr "" -#: aleksis/core/views.py:510 +#: aleksis/core/views.py:466 msgid "The group has been saved." msgstr "" -#: aleksis/core/views.py:607 +#: aleksis/core/views.py:563 msgid "The announcement has been saved." msgstr "" -#: aleksis/core/views.py:623 +#: aleksis/core/views.py:579 msgid "The announcement has been deleted." msgstr "" -#: aleksis/core/views.py:707 +#: aleksis/core/views.py:663 msgid "The preferences have been saved successfully." msgstr "" -#: aleksis/core/views.py:731 +#: aleksis/core/views.py:687 msgid "The person has been deleted." msgstr "" -#: aleksis/core/views.py:745 +#: aleksis/core/views.py:701 msgid "The group has been deleted." msgstr "" -#: aleksis/core/views.py:777 +#: aleksis/core/views.py:733 msgid "The additional_field has been saved." msgstr "" -#: aleksis/core/views.py:811 +#: aleksis/core/views.py:767 msgid "The additional field has been deleted." msgstr "" -#: aleksis/core/views.py:836 +#: aleksis/core/views.py:792 msgid "The group type has been saved." msgstr "" -#: aleksis/core/views.py:866 +#: aleksis/core/views.py:822 msgid "The group type has been deleted." msgstr "" -#: aleksis/core/views.py:899 +#: aleksis/core/views.py:855 msgid "Progress: Run data checks" msgstr "" -#: aleksis/core/views.py:900 +#: aleksis/core/views.py:856 #, fuzzy #| msgid "System status" msgid "Run data checks …" msgstr "Status systemae" -#: aleksis/core/views.py:901 +#: aleksis/core/views.py:857 msgid "The data checks were run successfully." msgstr "" -#: aleksis/core/views.py:902 +#: aleksis/core/views.py:858 msgid "There was a problem while running data checks." msgstr "" -#: aleksis/core/views.py:918 +#: aleksis/core/views.py:874 #, python-brace-format msgid "The solve option '{solve_option_obj.verbose_name}' " msgstr "" -#: aleksis/core/views.py:960 +#: aleksis/core/views.py:916 msgid "The dashboard widget has been saved." msgstr "" -#: aleksis/core/views.py:990 +#: aleksis/core/views.py:946 msgid "The dashboard widget has been created." msgstr "" -#: aleksis/core/views.py:1000 +#: aleksis/core/views.py:956 msgid "The dashboard widget has been deleted." msgstr "" -#: aleksis/core/views.py:1067 +#: aleksis/core/views.py:1023 msgid "Your dashboard configuration has been saved successfully." msgstr "" -#: aleksis/core/views.py:1069 +#: aleksis/core/views.py:1025 msgid "The configuration of the default dashboard has been saved successfully." msgstr "" -#: aleksis/core/views.py:1197 +#: aleksis/core/views.py:1153 msgid "The third-party account could not be disconnected because it is the only login method available." msgstr "" -#: aleksis/core/views.py:1204 +#: aleksis/core/views.py:1160 msgid "The third-party account has been successfully disconnected." msgstr "" +#~ msgid "Persons and accounts" +#~ msgstr "Personae et computi" + +#, fuzzy +#~| msgid "Persons and accounts" +#~ msgid "Can link persons to accounts" +#~ msgstr "Personae et computi" + +#, fuzzy +#~| msgid "Persons and accounts" +#~ msgid "Link persons to accounts" +#~ msgstr "Personae et computi" + +#, fuzzy +#~| msgid "Impersonation" +#~ msgid "Impersonate user" +#~ msgstr "Simulare aliquem" + #~ msgid "School logo" #~ msgstr "Imago scolae" diff --git a/aleksis/core/locale/la/LC_MESSAGES/djangojs.po b/aleksis/core/locale/la/LC_MESSAGES/djangojs.po index e10a495775fcb643cbe11cc1ce0daf4c5fc649ef..dc6d028e5442a3666f35a7cb46e39e5c01cdd3f9 100644 --- a/aleksis/core/locale/la/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/la/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-28 17:53+0200\n" +"POT-Creation-Date: 2021-10-28 16:18+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" diff --git a/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po b/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po index 8bb678db92f9b2860f4b806ddb7fc40e3a6d9149..ae2f8d194fcacd2bae0d16bb3350dfbaa978aaee 100644 --- a/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po +++ b/aleksis/core/locale/nb_NO/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: AlekSIS (School Information System) 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-28 17:53+0200\n" +"POT-Creation-Date: 2021-10-28 16:18+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" @@ -17,23 +17,23 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: aleksis/core/apps.py:148 aleksis/core/settings.py:343 +#: aleksis/core/apps.py:150 msgid "OpenID Connect scope" msgstr "" -#: aleksis/core/apps.py:149 aleksis/core/settings.py:344 +#: aleksis/core/apps.py:151 msgid "Given name, family name, link to profile and picture if existing." msgstr "" -#: aleksis/core/apps.py:150 aleksis/core/settings.py:345 +#: aleksis/core/apps.py:152 msgid "Full home postal address" msgstr "" -#: aleksis/core/apps.py:151 aleksis/core/settings.py:346 +#: aleksis/core/apps.py:153 msgid "Email address" msgstr "" -#: aleksis/core/apps.py:152 aleksis/core/settings.py:347 +#: aleksis/core/apps.py:154 msgid "Home and mobile phone" msgstr "" @@ -75,124 +75,124 @@ msgstr "" msgid "Search by contact details" msgstr "" -#: aleksis/core/forms.py:62 -msgid "You cannot set a new username when also selecting an existing user." -msgstr "" - -#: aleksis/core/forms.py:66 -msgid "This username is already in use." -msgstr "" - -#: aleksis/core/forms.py:90 aleksis/core/forms.py:412 +#: aleksis/core/forms.py:41 aleksis/core/forms.py:387 msgid "Base data" msgstr "" -#: aleksis/core/forms.py:96 +#: aleksis/core/forms.py:47 msgid "Address" msgstr "" -#: aleksis/core/forms.py:97 +#: aleksis/core/forms.py:48 msgid "Contact data" msgstr "" -#: aleksis/core/forms.py:99 +#: aleksis/core/forms.py:50 msgid "Advanced personal data" msgstr "" -#: aleksis/core/forms.py:142 +#: aleksis/core/forms.py:93 msgid "New user" msgstr "" -#: aleksis/core/forms.py:142 +#: aleksis/core/forms.py:93 msgid "Create a new account" msgstr "" -#: aleksis/core/forms.py:170 aleksis/core/models.py:116 +#: aleksis/core/forms.py:124 +msgid "You cannot set a new username when also selecting an existing user." +msgstr "" + +#: aleksis/core/forms.py:128 +msgid "This username is already in use." +msgstr "" + +#: aleksis/core/forms.py:145 aleksis/core/models.py:117 msgid "School term" msgstr "" -#: aleksis/core/forms.py:171 +#: aleksis/core/forms.py:146 msgid "Common data" msgstr "" -#: aleksis/core/forms.py:172 aleksis/core/forms.py:221 -#: aleksis/core/menus.py:238 aleksis/core/models.py:139 +#: aleksis/core/forms.py:147 aleksis/core/forms.py:196 +#: aleksis/core/menus.py:238 aleksis/core/models.py:140 #: aleksis/core/templates/core/person/list.html:8 #: aleksis/core/templates/core/person/list.html:9 msgid "Persons" msgstr "" -#: aleksis/core/forms.py:173 +#: aleksis/core/forms.py:148 msgid "Additional data" msgstr "" -#: aleksis/core/forms.py:213 aleksis/core/forms.py:216 -#: aleksis/core/models.py:59 +#: aleksis/core/forms.py:188 aleksis/core/forms.py:191 +#: aleksis/core/models.py:60 msgid "Date" msgstr "" -#: aleksis/core/forms.py:214 aleksis/core/forms.py:217 -#: aleksis/core/models.py:67 +#: aleksis/core/forms.py:189 aleksis/core/forms.py:192 +#: aleksis/core/models.py:68 msgid "Time" msgstr "" -#: aleksis/core/forms.py:234 aleksis/core/menus.py:249 -#: aleksis/core/models.py:381 aleksis/core/templates/core/group/list.html:8 +#: aleksis/core/forms.py:209 aleksis/core/menus.py:249 +#: aleksis/core/models.py:398 aleksis/core/templates/core/group/list.html:8 #: aleksis/core/templates/core/group/list.html:9 #: aleksis/core/templates/core/person/full.html:144 msgid "Groups" msgstr "" -#: aleksis/core/forms.py:244 +#: aleksis/core/forms.py:219 msgid "From when until when should the announcement be displayed?" msgstr "" -#: aleksis/core/forms.py:247 +#: aleksis/core/forms.py:222 msgid "Who should see the announcement?" msgstr "" -#: aleksis/core/forms.py:248 +#: aleksis/core/forms.py:223 msgid "Write your announcement:" msgstr "" -#: aleksis/core/forms.py:287 +#: aleksis/core/forms.py:262 msgid "You are not allowed to create announcements which are only valid in the past." msgstr "" -#: aleksis/core/forms.py:291 +#: aleksis/core/forms.py:266 msgid "The from date and time must be earlier then the until date and time." msgstr "" -#: aleksis/core/forms.py:300 +#: aleksis/core/forms.py:275 msgid "You need at least one recipient." msgstr "" -#: aleksis/core/forms.py:414 +#: aleksis/core/forms.py:389 msgid "Account data" msgstr "" -#: aleksis/core/forms.py:416 +#: aleksis/core/forms.py:391 msgid "Consents" msgstr "" -#: aleksis/core/forms.py:421 +#: aleksis/core/forms.py:396 msgid "Password" msgstr "" -#: aleksis/core/forms.py:427 +#: aleksis/core/forms.py:402 msgid "Password (again)" msgstr "" -#: aleksis/core/forms.py:436 +#: aleksis/core/forms.py:411 #, python-brace-format msgid "I have read the <a href='{privacy_policy}'>Privacy policy</a> and agree with them." msgstr "" -#: aleksis/core/forms.py:460 +#: aleksis/core/forms.py:435 msgid "You must type the same password each time." msgstr "" -#: aleksis/core/forms.py:605 +#: aleksis/core/forms.py:580 msgid "No valid selection." msgstr "" @@ -223,8 +223,8 @@ msgid "{task.status} - {task.result}" msgstr "" #: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6 -#: aleksis/core/templates/two_factor/core/login.html:20 -#: aleksis/core/templates/two_factor/core/login.html:95 +#: aleksis/core/templates/two_factor/core/login.html:22 +#: aleksis/core/templates/two_factor/core/login.html:76 msgid "Login" msgstr "" @@ -237,7 +237,7 @@ msgstr "" msgid "Dashboard" msgstr "" -#: aleksis/core/menus.py:32 aleksis/core/models.py:588 +#: aleksis/core/menus.py:32 aleksis/core/models.py:605 #: aleksis/core/preferences.py:26 #: aleksis/core/templates/core/notifications.html:4 #: aleksis/core/templates/core/notifications.html:5 @@ -295,13 +295,13 @@ msgstr "" msgid "Admin" msgstr "" -#: aleksis/core/menus.py:127 aleksis/core/models.py:687 +#: aleksis/core/menus.py:127 aleksis/core/models.py:704 #: aleksis/core/templates/core/announcement/list.html:7 #: aleksis/core/templates/core/announcement/list.html:8 msgid "Announcements" msgstr "" -#: aleksis/core/menus.py:138 aleksis/core/models.py:117 +#: aleksis/core/menus.py:138 aleksis/core/models.py:118 #: aleksis/core/templates/core/school_term/list.html:8 #: aleksis/core/templates/core/school_term/list.html:9 msgid "School terms" @@ -352,570 +352,561 @@ msgstr "" msgid "People" msgstr "" -#: aleksis/core/menus.py:260 aleksis/core/models.py:941 +#: aleksis/core/menus.py:260 aleksis/core/models.py:958 #: aleksis/core/templates/core/group_type/list.html:8 #: aleksis/core/templates/core/group_type/list.html:9 msgid "Group types" msgstr "" #: aleksis/core/menus.py:271 -msgid "Persons and accounts" -msgstr "" - -#: aleksis/core/menus.py:282 msgid "Groups and child groups" msgstr "" -#: aleksis/core/menus.py:293 aleksis/core/models.py:429 +#: aleksis/core/menus.py:282 aleksis/core/models.py:446 #: aleksis/core/templates/core/additional_field/list.html:8 #: aleksis/core/templates/core/additional_field/list.html:9 msgid "Additional fields" msgstr "" -#: aleksis/core/menus.py:308 +#: aleksis/core/menus.py:297 #: aleksis/core/templates/core/group/child_groups.html:7 #: aleksis/core/templates/core/group/child_groups.html:9 msgid "Assign child groups to groups" msgstr "" -#: aleksis/core/mixins.py:475 +#: aleksis/core/mixins.py:498 msgid "Linked school term" msgstr "" -#: aleksis/core/models.py:57 +#: aleksis/core/models.py:58 msgid "Boolean (Yes/No)" msgstr "" -#: aleksis/core/models.py:58 +#: aleksis/core/models.py:59 msgid "Text (one line)" msgstr "" -#: aleksis/core/models.py:60 +#: aleksis/core/models.py:61 msgid "Date and time" msgstr "" -#: aleksis/core/models.py:61 +#: aleksis/core/models.py:62 msgid "Decimal number" msgstr "" -#: aleksis/core/models.py:62 aleksis/core/models.py:185 +#: aleksis/core/models.py:63 aleksis/core/models.py:186 msgid "E-mail address" msgstr "" -#: aleksis/core/models.py:63 +#: aleksis/core/models.py:64 msgid "Integer" msgstr "" -#: aleksis/core/models.py:64 +#: aleksis/core/models.py:65 msgid "IP address" msgstr "" -#: aleksis/core/models.py:65 +#: aleksis/core/models.py:66 msgid "Boolean or empty (Yes/No/Neither)" msgstr "" -#: aleksis/core/models.py:66 +#: aleksis/core/models.py:67 msgid "Text (multi-line)" msgstr "" -#: aleksis/core/models.py:68 +#: aleksis/core/models.py:69 msgid "URL / Link" msgstr "" -#: aleksis/core/models.py:80 aleksis/core/models.py:910 +#: aleksis/core/models.py:81 aleksis/core/models.py:927 msgid "Name" msgstr "" -#: aleksis/core/models.py:82 +#: aleksis/core/models.py:83 msgid "Start date" msgstr "" -#: aleksis/core/models.py:83 +#: aleksis/core/models.py:84 msgid "End date" msgstr "" -#: aleksis/core/models.py:102 +#: aleksis/core/models.py:103 msgid "The start date must be earlier than the end date." msgstr "" -#: aleksis/core/models.py:109 +#: aleksis/core/models.py:110 msgid "There is already a school term for this time or a part of this time." msgstr "" -#: aleksis/core/models.py:138 aleksis/core/models.py:859 -#: aleksis/core/templates/core/person/accounts.html:41 +#: aleksis/core/models.py:139 aleksis/core/models.py:876 msgid "Person" msgstr "" -#: aleksis/core/models.py:141 +#: aleksis/core/models.py:142 msgid "Can view address" msgstr "" -#: aleksis/core/models.py:142 +#: aleksis/core/models.py:143 msgid "Can view contact details" msgstr "" -#: aleksis/core/models.py:143 +#: aleksis/core/models.py:144 msgid "Can view photo" msgstr "" -#: aleksis/core/models.py:144 +#: aleksis/core/models.py:145 msgid "Can view persons groups" msgstr "" -#: aleksis/core/models.py:145 +#: aleksis/core/models.py:146 msgid "Can view personal details" msgstr "" -#: aleksis/core/models.py:155 +#: aleksis/core/models.py:156 msgid "female" msgstr "" -#: aleksis/core/models.py:155 +#: aleksis/core/models.py:156 msgid "male" msgstr "" -#: aleksis/core/models.py:163 +#: aleksis/core/models.py:164 msgid "Linked user" msgstr "" -#: aleksis/core/models.py:165 +#: aleksis/core/models.py:166 msgid "Is person active?" msgstr "" -#: aleksis/core/models.py:167 +#: aleksis/core/models.py:168 msgid "First name" msgstr "" -#: aleksis/core/models.py:168 +#: aleksis/core/models.py:169 msgid "Last name" msgstr "" -#: aleksis/core/models.py:170 +#: aleksis/core/models.py:171 msgid "Additional name(s)" msgstr "" -#: aleksis/core/models.py:174 aleksis/core/models.py:398 +#: aleksis/core/models.py:175 aleksis/core/models.py:415 msgid "Short name" msgstr "" -#: aleksis/core/models.py:177 +#: aleksis/core/models.py:178 msgid "Street" msgstr "" -#: aleksis/core/models.py:178 +#: aleksis/core/models.py:179 msgid "Street number" msgstr "" -#: aleksis/core/models.py:179 +#: aleksis/core/models.py:180 msgid "Postal code" msgstr "" -#: aleksis/core/models.py:180 +#: aleksis/core/models.py:181 msgid "Place" msgstr "" -#: aleksis/core/models.py:182 +#: aleksis/core/models.py:183 msgid "Home phone" msgstr "" -#: aleksis/core/models.py:183 +#: aleksis/core/models.py:184 msgid "Mobile phone" msgstr "" -#: aleksis/core/models.py:187 +#: aleksis/core/models.py:188 msgid "Date of birth" msgstr "" -#: aleksis/core/models.py:188 +#: aleksis/core/models.py:189 msgid "Sex" msgstr "" -#: aleksis/core/models.py:190 +#: aleksis/core/models.py:191 msgid "Photo" msgstr "" -#: aleksis/core/models.py:194 aleksis/core/templates/core/person/full.html:137 +#: aleksis/core/models.py:195 aleksis/core/templates/core/person/full.html:137 msgid "Guardians / Parents" msgstr "" -#: aleksis/core/models.py:201 +#: aleksis/core/models.py:202 msgid "Primary group" msgstr "" -#: aleksis/core/models.py:204 aleksis/core/models.py:546 -#: aleksis/core/models.py:570 aleksis/core/models.py:655 -#: aleksis/core/models.py:934 aleksis/core/templates/core/person/full.html:120 +#: aleksis/core/models.py:205 aleksis/core/models.py:563 +#: aleksis/core/models.py:587 aleksis/core/models.py:672 +#: aleksis/core/models.py:951 aleksis/core/templates/core/person/full.html:120 msgid "Description" msgstr "" -#: aleksis/core/models.py:353 +#: aleksis/core/models.py:370 msgid "Title of field" msgstr "" -#: aleksis/core/models.py:355 +#: aleksis/core/models.py:372 msgid "Type of field" msgstr "" -#: aleksis/core/models.py:362 +#: aleksis/core/models.py:379 msgid "Addtitional field for groups" msgstr "" -#: aleksis/core/models.py:363 +#: aleksis/core/models.py:380 msgid "Addtitional fields for groups" msgstr "" -#: aleksis/core/models.py:380 +#: aleksis/core/models.py:397 msgid "Group" msgstr "" -#: aleksis/core/models.py:383 +#: aleksis/core/models.py:400 msgid "Can assign child groups to groups" msgstr "" -#: aleksis/core/models.py:384 +#: aleksis/core/models.py:401 msgid "Can view statistics about group." msgstr "" -#: aleksis/core/models.py:396 +#: aleksis/core/models.py:413 msgid "Long name" msgstr "" -#: aleksis/core/models.py:406 aleksis/core/templates/core/group/full.html:85 +#: aleksis/core/models.py:423 aleksis/core/templates/core/group/full.html:85 msgid "Members" msgstr "" -#: aleksis/core/models.py:409 aleksis/core/templates/core/group/full.html:82 +#: aleksis/core/models.py:426 aleksis/core/templates/core/group/full.html:82 msgid "Owners" msgstr "" -#: aleksis/core/models.py:416 aleksis/core/templates/core/group/full.html:55 +#: aleksis/core/models.py:433 aleksis/core/templates/core/group/full.html:55 msgid "Parent groups" msgstr "" -#: aleksis/core/models.py:424 +#: aleksis/core/models.py:441 msgid "Type of group" msgstr "" -#: aleksis/core/models.py:542 +#: aleksis/core/models.py:559 msgid "User" msgstr "" -#: aleksis/core/models.py:545 aleksis/core/models.py:569 -#: aleksis/core/models.py:654 +#: aleksis/core/models.py:562 aleksis/core/models.py:586 +#: aleksis/core/models.py:671 #: aleksis/core/templates/core/announcement/list.html:18 msgid "Title" msgstr "" -#: aleksis/core/models.py:548 +#: aleksis/core/models.py:565 msgid "Application" msgstr "" -#: aleksis/core/models.py:554 +#: aleksis/core/models.py:571 msgid "Activity" msgstr "" -#: aleksis/core/models.py:555 +#: aleksis/core/models.py:572 msgid "Activities" msgstr "" -#: aleksis/core/models.py:561 +#: aleksis/core/models.py:578 msgid "Sender" msgstr "" -#: aleksis/core/models.py:566 +#: aleksis/core/models.py:583 msgid "Recipient" msgstr "" -#: aleksis/core/models.py:571 aleksis/core/models.py:911 +#: aleksis/core/models.py:588 aleksis/core/models.py:928 msgid "Link" msgstr "" -#: aleksis/core/models.py:573 +#: aleksis/core/models.py:590 msgid "Read" msgstr "" -#: aleksis/core/models.py:574 +#: aleksis/core/models.py:591 msgid "Sent" msgstr "" -#: aleksis/core/models.py:587 +#: aleksis/core/models.py:604 msgid "Notification" msgstr "" -#: aleksis/core/models.py:656 +#: aleksis/core/models.py:673 msgid "Link to detailed view" msgstr "" -#: aleksis/core/models.py:659 +#: aleksis/core/models.py:676 msgid "Date and time from when to show" msgstr "" -#: aleksis/core/models.py:662 +#: aleksis/core/models.py:679 msgid "Date and time until when to show" msgstr "" -#: aleksis/core/models.py:686 +#: aleksis/core/models.py:703 msgid "Announcement" msgstr "" -#: aleksis/core/models.py:724 +#: aleksis/core/models.py:741 msgid "Announcement recipient" msgstr "" -#: aleksis/core/models.py:725 +#: aleksis/core/models.py:742 msgid "Announcement recipients" msgstr "" -#: aleksis/core/models.py:780 +#: aleksis/core/models.py:797 msgid "Widget Title" msgstr "" -#: aleksis/core/models.py:781 +#: aleksis/core/models.py:798 msgid "Activate Widget" msgstr "" -#: aleksis/core/models.py:782 +#: aleksis/core/models.py:799 msgid "Widget is broken" msgstr "" -#: aleksis/core/models.py:785 +#: aleksis/core/models.py:802 msgid "Size on mobile devices" msgstr "" -#: aleksis/core/models.py:786 +#: aleksis/core/models.py:803 msgid "<= 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:791 +#: aleksis/core/models.py:808 msgid "Size on tablet devices" msgstr "" -#: aleksis/core/models.py:792 +#: aleksis/core/models.py:809 msgid "> 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:797 +#: aleksis/core/models.py:814 msgid "Size on desktop devices" msgstr "" -#: aleksis/core/models.py:798 +#: aleksis/core/models.py:815 msgid "> 992 px, 12 columns" msgstr "" -#: aleksis/core/models.py:803 +#: aleksis/core/models.py:820 msgid "Size on large desktop devices" msgstr "" -#: aleksis/core/models.py:804 +#: aleksis/core/models.py:821 msgid "> 1200 px>, 12 columns" msgstr "" -#: aleksis/core/models.py:835 +#: aleksis/core/models.py:852 msgid "Can edit default dashboard" msgstr "" -#: aleksis/core/models.py:836 +#: aleksis/core/models.py:853 msgid "Dashboard Widget" msgstr "" -#: aleksis/core/models.py:837 +#: aleksis/core/models.py:854 msgid "Dashboard Widgets" msgstr "" -#: aleksis/core/models.py:843 +#: aleksis/core/models.py:860 msgid "URL" msgstr "" -#: aleksis/core/models.py:844 +#: aleksis/core/models.py:861 msgid "Icon URL" msgstr "" -#: aleksis/core/models.py:850 +#: aleksis/core/models.py:867 msgid "External link widget" msgstr "" -#: aleksis/core/models.py:851 +#: aleksis/core/models.py:868 msgid "External link widgets" msgstr "" -#: aleksis/core/models.py:856 +#: aleksis/core/models.py:873 msgid "Dashboard widget" msgstr "" -#: aleksis/core/models.py:861 +#: aleksis/core/models.py:878 msgid "Order" msgstr "" -#: aleksis/core/models.py:862 +#: aleksis/core/models.py:879 msgid "Part of the default dashboard" msgstr "" -#: aleksis/core/models.py:877 +#: aleksis/core/models.py:894 msgid "Dashboard widget order" msgstr "" -#: aleksis/core/models.py:878 +#: aleksis/core/models.py:895 msgid "Dashboard widget orders" msgstr "" -#: aleksis/core/models.py:884 +#: aleksis/core/models.py:901 msgid "Menu ID" msgstr "" -#: aleksis/core/models.py:897 +#: aleksis/core/models.py:914 msgid "Custom menu" msgstr "" -#: aleksis/core/models.py:898 +#: aleksis/core/models.py:915 msgid "Custom menus" msgstr "" -#: aleksis/core/models.py:908 +#: aleksis/core/models.py:925 msgid "Menu" msgstr "" -#: aleksis/core/models.py:912 +#: aleksis/core/models.py:929 msgid "Icon" msgstr "" -#: aleksis/core/models.py:918 +#: aleksis/core/models.py:935 msgid "Custom menu item" msgstr "" -#: aleksis/core/models.py:919 +#: aleksis/core/models.py:936 msgid "Custom menu items" msgstr "" -#: aleksis/core/models.py:933 +#: aleksis/core/models.py:950 msgid "Title of type" msgstr "" -#: aleksis/core/models.py:940 aleksis/core/templates/core/group/full.html:47 +#: aleksis/core/models.py:957 aleksis/core/templates/core/group/full.html:47 msgid "Group type" msgstr "" -#: aleksis/core/models.py:954 +#: aleksis/core/models.py:971 msgid "Can view system status" msgstr "" -#: aleksis/core/models.py:955 -msgid "Can link persons to accounts" -msgstr "" - -#: aleksis/core/models.py:956 +#: aleksis/core/models.py:972 msgid "Can manage data" msgstr "" -#: aleksis/core/models.py:957 +#: aleksis/core/models.py:973 msgid "Can impersonate" msgstr "" -#: aleksis/core/models.py:958 +#: aleksis/core/models.py:974 msgid "Can use search" msgstr "" -#: aleksis/core/models.py:959 +#: aleksis/core/models.py:975 msgid "Can change site preferences" msgstr "" -#: aleksis/core/models.py:960 +#: aleksis/core/models.py:976 msgid "Can change person preferences" msgstr "" -#: aleksis/core/models.py:961 +#: aleksis/core/models.py:977 msgid "Can change group preferences" msgstr "" -#: aleksis/core/models.py:962 +#: aleksis/core/models.py:978 msgid "Can add oauth applications" msgstr "" -#: aleksis/core/models.py:963 +#: aleksis/core/models.py:979 msgid "Can list oauth applications" msgstr "" -#: aleksis/core/models.py:964 +#: aleksis/core/models.py:980 msgid "Can view oauth applications" msgstr "" -#: aleksis/core/models.py:965 +#: aleksis/core/models.py:981 msgid "Can update oauth applications" msgstr "" -#: aleksis/core/models.py:966 +#: aleksis/core/models.py:982 msgid "Can delete oauth applications" msgstr "" -#: aleksis/core/models.py:967 +#: aleksis/core/models.py:983 msgid "Can test PDF generation" msgstr "" -#: aleksis/core/models.py:1003 +#: aleksis/core/models.py:1019 msgid "Related data check task" msgstr "" -#: aleksis/core/models.py:1011 +#: aleksis/core/models.py:1027 msgid "Issue solved" msgstr "" -#: aleksis/core/models.py:1012 +#: aleksis/core/models.py:1028 msgid "Notification sent" msgstr "" -#: aleksis/core/models.py:1025 +#: aleksis/core/models.py:1041 msgid "Data check result" msgstr "" -#: aleksis/core/models.py:1026 +#: aleksis/core/models.py:1042 msgid "Data check results" msgstr "" -#: aleksis/core/models.py:1028 +#: aleksis/core/models.py:1044 msgid "Can run data checks" msgstr "" -#: aleksis/core/models.py:1029 +#: aleksis/core/models.py:1045 msgid "Can solve data check problems" msgstr "" -#: aleksis/core/models.py:1044 +#: aleksis/core/models.py:1060 msgid "Owner" msgstr "" -#: aleksis/core/models.py:1048 +#: aleksis/core/models.py:1064 msgid "File expires at" msgstr "" -#: aleksis/core/models.py:1050 +#: aleksis/core/models.py:1066 msgid "Generated HTML file" msgstr "" -#: aleksis/core/models.py:1052 +#: aleksis/core/models.py:1068 msgid "Generated PDF file" msgstr "" -#: aleksis/core/models.py:1059 +#: aleksis/core/models.py:1075 msgid "PDF file" msgstr "" -#: aleksis/core/models.py:1060 +#: aleksis/core/models.py:1076 msgid "PDF files" msgstr "" -#: aleksis/core/models.py:1065 +#: aleksis/core/models.py:1081 msgid "Task result" msgstr "" -#: aleksis/core/models.py:1068 +#: aleksis/core/models.py:1084 msgid "Task user" msgstr "" -#: aleksis/core/models.py:1080 +#: aleksis/core/models.py:1096 msgid "Task user assignment" msgstr "" -#: aleksis/core/models.py:1081 +#: aleksis/core/models.py:1097 msgid "Task user assignments" msgstr "" @@ -1027,75 +1018,71 @@ msgstr "" msgid "Official name of the school, e.g. as given by supervisory authority" msgstr "" -#: aleksis/core/preferences.py:256 -msgid "Enabled custom authentication backends" -msgstr "" - -#: aleksis/core/preferences.py:268 +#: aleksis/core/preferences.py:254 msgid "Allow users to change their passwords" msgstr "" -#: aleksis/core/preferences.py:276 +#: aleksis/core/preferences.py:262 msgid "Enable signup" msgstr "" -#: aleksis/core/preferences.py:287 +#: aleksis/core/preferences.py:273 msgid "Available languages" msgstr "" -#: aleksis/core/preferences.py:299 +#: aleksis/core/preferences.py:285 msgid "Send emails if data checks detect problems" msgstr "" -#: aleksis/core/preferences.py:310 +#: aleksis/core/preferences.py:296 msgid "Email recipients for data checks problem emails" msgstr "" -#: aleksis/core/preferences.py:321 +#: aleksis/core/preferences.py:307 msgid "Email recipient groups for data checks problem emails" msgstr "" -#: aleksis/core/preferences.py:330 +#: aleksis/core/preferences.py:316 msgid "Show dashboard to users without login" msgstr "" -#: aleksis/core/preferences.py:339 +#: aleksis/core/preferences.py:325 msgid "Allow users to edit their dashboard" msgstr "" -#: aleksis/core/preferences.py:350 +#: aleksis/core/preferences.py:336 msgid "Fields on person model which are editable by themselves." msgstr "" -#: aleksis/core/preferences.py:364 +#: aleksis/core/preferences.py:350 msgid "Editable fields on person model which should trigger a notification on change" msgstr "" -#: aleksis/core/preferences.py:377 +#: aleksis/core/preferences.py:363 msgid "Contact for notification if a person changes their data" msgstr "" -#: aleksis/core/preferences.py:387 +#: aleksis/core/preferences.py:373 msgid "PDF file expiration duration" msgstr "" -#: aleksis/core/preferences.py:388 +#: aleksis/core/preferences.py:374 msgid "in minutes" msgstr "" -#: aleksis/core/preferences.py:398 +#: aleksis/core/preferences.py:384 msgid "Automatically update the dashboard and its widgets" msgstr "" -#: aleksis/core/preferences.py:408 +#: aleksis/core/preferences.py:394 msgid "Automatically update the dashboard and its widgets sitewide" msgstr "" -#: aleksis/core/settings.py:468 +#: aleksis/core/settings.py:452 msgid "English" msgstr "" -#: aleksis/core/settings.py:469 +#: aleksis/core/settings.py:453 msgid "German" msgstr "" @@ -1259,7 +1246,7 @@ msgstr "" #: aleksis/core/templates/account/password_reset_done.html:5 #: aleksis/core/templates/account/verification_email_required.html:5 #: aleksis/core/templates/account/verification_email_required.html:6 -#: aleksis/core/templates/two_factor/core/login.html:100 +#: aleksis/core/templates/two_factor/core/login.html:81 msgid "Reset password" msgstr "" @@ -1996,32 +1983,10 @@ msgid "" " " msgstr "" -#: aleksis/core/templates/core/person/accounts.html:12 -#: aleksis/core/templates/core/person/accounts.html:14 -msgid "Link persons to accounts" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:21 -msgid "" -"\n" -" You can use this form to assign user accounts to persons. Use the\n" -" dropdowns to select existing accounts; use the text fields to create new\n" -" accounts on-the-fly. The latter will create a new account with the\n" -" entered username and copy all other details from the person.\n" -" " -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:36 -#: aleksis/core/templates/core/person/accounts.html:60 -msgid "Update" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:42 -msgid "Existing account" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:43 -msgid "New account" +#: aleksis/core/templates/core/person/create.html:12 +#: aleksis/core/templates/core/person/create.html:13 +#: aleksis/core/templates/core/person/list.html:17 +msgid "Create person" msgstr "" #: aleksis/core/templates/core/person/edit.html:12 @@ -2030,6 +1995,8 @@ msgid "Edit person" msgstr "" #: aleksis/core/templates/core/person/full.html:44 +#: aleksis/core/templates/impersonate/list_users.html:7 +#: aleksis/core/templates/impersonate/list_users.html:8 msgid "Impersonate" msgstr "" @@ -2041,10 +2008,6 @@ msgstr "" msgid "Children" msgstr "" -#: aleksis/core/templates/core/person/list.html:17 -msgid "Create person" -msgstr "" - #: aleksis/core/templates/core/person/list.html:21 msgid "Filter persons" msgstr "" @@ -2081,10 +2044,6 @@ msgstr "" msgid "Save preferences" msgstr "" -#: aleksis/core/templates/impersonate/list_users.html:8 -msgid "Impersonate user" -msgstr "" - #: aleksis/core/templates/oauth2_provider/application_confirm_delete.html:5 #: aleksis/core/templates/oauth2_provider/application_confirm_delete.html:6 msgid "Delete application" @@ -2437,64 +2396,70 @@ msgstr "" msgid "Generate Tokens" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:18 +#: aleksis/core/templates/two_factor/core/login.html:20 msgid "Login with username and password" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:26 -msgid "You have no permission to view this page. Please login with an other account." +#: aleksis/core/templates/two_factor/core/login.html:28 +msgid "" +"You have no permission to view this page. Please login with an other\n" +" account." msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:33 +#: aleksis/core/templates/two_factor/core/login.html:36 msgid "Please login to see this page." msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:43 +#: aleksis/core/templates/two_factor/core/login.html:46 msgid "" "\n" -" We are calling your phone right now, please enter the\n" -" digits you hear.\n" -" " +" We are calling your phone right now, please enter the\n" +" digits you hear.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:48 +#: aleksis/core/templates/two_factor/core/login.html:51 msgid "" "\n" -" We sent you a text message, please enter the tokens we\n" -" sent.\n" -" " +" We sent you a text message, please enter the tokens we\n" +" sent.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:53 +#: aleksis/core/templates/two_factor/core/login.html:56 msgid "" "\n" -" Please enter the tokens generated by your token\n" -" generator.\n" -" " +" Please enter the tokens generated by your token\n" +" generator.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:59 +#: aleksis/core/templates/two_factor/core/login.html:62 msgid "" "\n" -" Use this form for entering backup tokens for logging in.\n" -" These tokens have been generated for you to print and keep safe. Please\n" -" enter one of these backup tokens to login to your account.\n" -" " +" Use this form for entering backup tokens for logging in.\n" +" These tokens have been generated for you to print and keep safe. Please\n" +" enter one of these backup tokens to login to your account.\n" +" " +msgstr "" + +#: aleksis/core/templates/two_factor/core/login.html:90 +msgid "Device currently not available?" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:74 +#: aleksis/core/templates/two_factor/core/login.html:92 msgid "Or, alternatively, use one of your backup phones:" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:84 +#: aleksis/core/templates/two_factor/core/login.html:102 msgid "As a last resort, you can use a backup token:" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:87 +#: aleksis/core/templates/two_factor/core/login.html:105 msgid "Use Backup Token" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:110 +#: aleksis/core/templates/two_factor/core/login.html:116 msgid "Use alternative login options" msgstr "" @@ -2759,108 +2724,108 @@ msgstr "" msgid "Download PDF" msgstr "" -#: aleksis/core/views.py:253 +#: aleksis/core/views.py:251 msgid "The school term has been created." msgstr "" -#: aleksis/core/views.py:265 +#: aleksis/core/views.py:263 msgid "The school term has been saved." msgstr "" -#: aleksis/core/views.py:410 +#: aleksis/core/views.py:387 msgid "The child groups were successfully saved." msgstr "" -#: aleksis/core/views.py:471 +#: aleksis/core/views.py:406 aleksis/core/views.py:416 msgid "The person has been saved." msgstr "" -#: aleksis/core/views.py:510 +#: aleksis/core/views.py:466 msgid "The group has been saved." msgstr "" -#: aleksis/core/views.py:607 +#: aleksis/core/views.py:563 msgid "The announcement has been saved." msgstr "" -#: aleksis/core/views.py:623 +#: aleksis/core/views.py:579 msgid "The announcement has been deleted." msgstr "" -#: aleksis/core/views.py:707 +#: aleksis/core/views.py:663 msgid "The preferences have been saved successfully." msgstr "" -#: aleksis/core/views.py:731 +#: aleksis/core/views.py:687 msgid "The person has been deleted." msgstr "" -#: aleksis/core/views.py:745 +#: aleksis/core/views.py:701 msgid "The group has been deleted." msgstr "" -#: aleksis/core/views.py:777 +#: aleksis/core/views.py:733 msgid "The additional_field has been saved." msgstr "" -#: aleksis/core/views.py:811 +#: aleksis/core/views.py:767 msgid "The additional field has been deleted." msgstr "" -#: aleksis/core/views.py:836 +#: aleksis/core/views.py:792 msgid "The group type has been saved." msgstr "" -#: aleksis/core/views.py:866 +#: aleksis/core/views.py:822 msgid "The group type has been deleted." msgstr "" -#: aleksis/core/views.py:899 +#: aleksis/core/views.py:855 msgid "Progress: Run data checks" msgstr "" -#: aleksis/core/views.py:900 +#: aleksis/core/views.py:856 msgid "Run data checks …" msgstr "" -#: aleksis/core/views.py:901 +#: aleksis/core/views.py:857 msgid "The data checks were run successfully." msgstr "" -#: aleksis/core/views.py:902 +#: aleksis/core/views.py:858 msgid "There was a problem while running data checks." msgstr "" -#: aleksis/core/views.py:918 +#: aleksis/core/views.py:874 #, python-brace-format msgid "The solve option '{solve_option_obj.verbose_name}' " msgstr "" -#: aleksis/core/views.py:960 +#: aleksis/core/views.py:916 msgid "The dashboard widget has been saved." msgstr "" -#: aleksis/core/views.py:990 +#: aleksis/core/views.py:946 msgid "The dashboard widget has been created." msgstr "" -#: aleksis/core/views.py:1000 +#: aleksis/core/views.py:956 msgid "The dashboard widget has been deleted." msgstr "" -#: aleksis/core/views.py:1067 +#: aleksis/core/views.py:1023 msgid "Your dashboard configuration has been saved successfully." msgstr "" -#: aleksis/core/views.py:1069 +#: aleksis/core/views.py:1025 msgid "The configuration of the default dashboard has been saved successfully." msgstr "" -#: aleksis/core/views.py:1197 +#: aleksis/core/views.py:1153 msgid "The third-party account could not be disconnected because it is the only login method available." msgstr "" -#: aleksis/core/views.py:1204 +#: aleksis/core/views.py:1160 msgid "The third-party account has been successfully disconnected." msgstr "" diff --git a/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po b/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po index e10a495775fcb643cbe11cc1ce0daf4c5fc649ef..dc6d028e5442a3666f35a7cb46e39e5c01cdd3f9 100644 --- a/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/nb_NO/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-28 17:53+0200\n" +"POT-Creation-Date: 2021-10-28 16:18+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" diff --git a/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po b/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po index 1aca6607879e022ab2144b35ec41324db819b2ac..c1f28664922a7b5cbdac80d557c812092765b16f 100644 --- a/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po +++ b/aleksis/core/locale/tr_TR/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: AlekSIS (School Information System) 0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-28 17:53+0200\n" +"POT-Creation-Date: 2021-10-28 16:18+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" @@ -17,23 +17,23 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -#: aleksis/core/apps.py:148 aleksis/core/settings.py:343 +#: aleksis/core/apps.py:150 msgid "OpenID Connect scope" msgstr "" -#: aleksis/core/apps.py:149 aleksis/core/settings.py:344 +#: aleksis/core/apps.py:151 msgid "Given name, family name, link to profile and picture if existing." msgstr "" -#: aleksis/core/apps.py:150 aleksis/core/settings.py:345 +#: aleksis/core/apps.py:152 msgid "Full home postal address" msgstr "" -#: aleksis/core/apps.py:151 aleksis/core/settings.py:346 +#: aleksis/core/apps.py:153 msgid "Email address" msgstr "" -#: aleksis/core/apps.py:152 aleksis/core/settings.py:347 +#: aleksis/core/apps.py:154 msgid "Home and mobile phone" msgstr "" @@ -75,124 +75,124 @@ msgstr "" msgid "Search by contact details" msgstr "" -#: aleksis/core/forms.py:62 -msgid "You cannot set a new username when also selecting an existing user." -msgstr "" - -#: aleksis/core/forms.py:66 -msgid "This username is already in use." -msgstr "" - -#: aleksis/core/forms.py:90 aleksis/core/forms.py:412 +#: aleksis/core/forms.py:41 aleksis/core/forms.py:387 msgid "Base data" msgstr "" -#: aleksis/core/forms.py:96 +#: aleksis/core/forms.py:47 msgid "Address" msgstr "" -#: aleksis/core/forms.py:97 +#: aleksis/core/forms.py:48 msgid "Contact data" msgstr "" -#: aleksis/core/forms.py:99 +#: aleksis/core/forms.py:50 msgid "Advanced personal data" msgstr "" -#: aleksis/core/forms.py:142 +#: aleksis/core/forms.py:93 msgid "New user" msgstr "" -#: aleksis/core/forms.py:142 +#: aleksis/core/forms.py:93 msgid "Create a new account" msgstr "" -#: aleksis/core/forms.py:170 aleksis/core/models.py:116 +#: aleksis/core/forms.py:124 +msgid "You cannot set a new username when also selecting an existing user." +msgstr "" + +#: aleksis/core/forms.py:128 +msgid "This username is already in use." +msgstr "" + +#: aleksis/core/forms.py:145 aleksis/core/models.py:117 msgid "School term" msgstr "" -#: aleksis/core/forms.py:171 +#: aleksis/core/forms.py:146 msgid "Common data" msgstr "" -#: aleksis/core/forms.py:172 aleksis/core/forms.py:221 -#: aleksis/core/menus.py:238 aleksis/core/models.py:139 +#: aleksis/core/forms.py:147 aleksis/core/forms.py:196 +#: aleksis/core/menus.py:238 aleksis/core/models.py:140 #: aleksis/core/templates/core/person/list.html:8 #: aleksis/core/templates/core/person/list.html:9 msgid "Persons" msgstr "" -#: aleksis/core/forms.py:173 +#: aleksis/core/forms.py:148 msgid "Additional data" msgstr "" -#: aleksis/core/forms.py:213 aleksis/core/forms.py:216 -#: aleksis/core/models.py:59 +#: aleksis/core/forms.py:188 aleksis/core/forms.py:191 +#: aleksis/core/models.py:60 msgid "Date" msgstr "" -#: aleksis/core/forms.py:214 aleksis/core/forms.py:217 -#: aleksis/core/models.py:67 +#: aleksis/core/forms.py:189 aleksis/core/forms.py:192 +#: aleksis/core/models.py:68 msgid "Time" msgstr "" -#: aleksis/core/forms.py:234 aleksis/core/menus.py:249 -#: aleksis/core/models.py:381 aleksis/core/templates/core/group/list.html:8 +#: aleksis/core/forms.py:209 aleksis/core/menus.py:249 +#: aleksis/core/models.py:398 aleksis/core/templates/core/group/list.html:8 #: aleksis/core/templates/core/group/list.html:9 #: aleksis/core/templates/core/person/full.html:144 msgid "Groups" msgstr "" -#: aleksis/core/forms.py:244 +#: aleksis/core/forms.py:219 msgid "From when until when should the announcement be displayed?" msgstr "" -#: aleksis/core/forms.py:247 +#: aleksis/core/forms.py:222 msgid "Who should see the announcement?" msgstr "" -#: aleksis/core/forms.py:248 +#: aleksis/core/forms.py:223 msgid "Write your announcement:" msgstr "" -#: aleksis/core/forms.py:287 +#: aleksis/core/forms.py:262 msgid "You are not allowed to create announcements which are only valid in the past." msgstr "" -#: aleksis/core/forms.py:291 +#: aleksis/core/forms.py:266 msgid "The from date and time must be earlier then the until date and time." msgstr "" -#: aleksis/core/forms.py:300 +#: aleksis/core/forms.py:275 msgid "You need at least one recipient." msgstr "" -#: aleksis/core/forms.py:414 +#: aleksis/core/forms.py:389 msgid "Account data" msgstr "" -#: aleksis/core/forms.py:416 +#: aleksis/core/forms.py:391 msgid "Consents" msgstr "" -#: aleksis/core/forms.py:421 +#: aleksis/core/forms.py:396 msgid "Password" msgstr "" -#: aleksis/core/forms.py:427 +#: aleksis/core/forms.py:402 msgid "Password (again)" msgstr "" -#: aleksis/core/forms.py:436 +#: aleksis/core/forms.py:411 #, python-brace-format msgid "I have read the <a href='{privacy_policy}'>Privacy policy</a> and agree with them." msgstr "" -#: aleksis/core/forms.py:460 +#: aleksis/core/forms.py:435 msgid "You must type the same password each time." msgstr "" -#: aleksis/core/forms.py:605 +#: aleksis/core/forms.py:580 msgid "No valid selection." msgstr "" @@ -223,8 +223,8 @@ msgid "{task.status} - {task.result}" msgstr "" #: aleksis/core/menus.py:9 aleksis/core/templates/two_factor/core/login.html:6 -#: aleksis/core/templates/two_factor/core/login.html:20 -#: aleksis/core/templates/two_factor/core/login.html:95 +#: aleksis/core/templates/two_factor/core/login.html:22 +#: aleksis/core/templates/two_factor/core/login.html:76 msgid "Login" msgstr "" @@ -237,7 +237,7 @@ msgstr "" msgid "Dashboard" msgstr "" -#: aleksis/core/menus.py:32 aleksis/core/models.py:588 +#: aleksis/core/menus.py:32 aleksis/core/models.py:605 #: aleksis/core/preferences.py:26 #: aleksis/core/templates/core/notifications.html:4 #: aleksis/core/templates/core/notifications.html:5 @@ -295,13 +295,13 @@ msgstr "" msgid "Admin" msgstr "" -#: aleksis/core/menus.py:127 aleksis/core/models.py:687 +#: aleksis/core/menus.py:127 aleksis/core/models.py:704 #: aleksis/core/templates/core/announcement/list.html:7 #: aleksis/core/templates/core/announcement/list.html:8 msgid "Announcements" msgstr "" -#: aleksis/core/menus.py:138 aleksis/core/models.py:117 +#: aleksis/core/menus.py:138 aleksis/core/models.py:118 #: aleksis/core/templates/core/school_term/list.html:8 #: aleksis/core/templates/core/school_term/list.html:9 msgid "School terms" @@ -352,570 +352,561 @@ msgstr "" msgid "People" msgstr "" -#: aleksis/core/menus.py:260 aleksis/core/models.py:941 +#: aleksis/core/menus.py:260 aleksis/core/models.py:958 #: aleksis/core/templates/core/group_type/list.html:8 #: aleksis/core/templates/core/group_type/list.html:9 msgid "Group types" msgstr "" #: aleksis/core/menus.py:271 -msgid "Persons and accounts" -msgstr "" - -#: aleksis/core/menus.py:282 msgid "Groups and child groups" msgstr "" -#: aleksis/core/menus.py:293 aleksis/core/models.py:429 +#: aleksis/core/menus.py:282 aleksis/core/models.py:446 #: aleksis/core/templates/core/additional_field/list.html:8 #: aleksis/core/templates/core/additional_field/list.html:9 msgid "Additional fields" msgstr "" -#: aleksis/core/menus.py:308 +#: aleksis/core/menus.py:297 #: aleksis/core/templates/core/group/child_groups.html:7 #: aleksis/core/templates/core/group/child_groups.html:9 msgid "Assign child groups to groups" msgstr "" -#: aleksis/core/mixins.py:475 +#: aleksis/core/mixins.py:498 msgid "Linked school term" msgstr "" -#: aleksis/core/models.py:57 +#: aleksis/core/models.py:58 msgid "Boolean (Yes/No)" msgstr "" -#: aleksis/core/models.py:58 +#: aleksis/core/models.py:59 msgid "Text (one line)" msgstr "" -#: aleksis/core/models.py:60 +#: aleksis/core/models.py:61 msgid "Date and time" msgstr "" -#: aleksis/core/models.py:61 +#: aleksis/core/models.py:62 msgid "Decimal number" msgstr "" -#: aleksis/core/models.py:62 aleksis/core/models.py:185 +#: aleksis/core/models.py:63 aleksis/core/models.py:186 msgid "E-mail address" msgstr "" -#: aleksis/core/models.py:63 +#: aleksis/core/models.py:64 msgid "Integer" msgstr "" -#: aleksis/core/models.py:64 +#: aleksis/core/models.py:65 msgid "IP address" msgstr "" -#: aleksis/core/models.py:65 +#: aleksis/core/models.py:66 msgid "Boolean or empty (Yes/No/Neither)" msgstr "" -#: aleksis/core/models.py:66 +#: aleksis/core/models.py:67 msgid "Text (multi-line)" msgstr "" -#: aleksis/core/models.py:68 +#: aleksis/core/models.py:69 msgid "URL / Link" msgstr "" -#: aleksis/core/models.py:80 aleksis/core/models.py:910 +#: aleksis/core/models.py:81 aleksis/core/models.py:927 msgid "Name" msgstr "" -#: aleksis/core/models.py:82 +#: aleksis/core/models.py:83 msgid "Start date" msgstr "" -#: aleksis/core/models.py:83 +#: aleksis/core/models.py:84 msgid "End date" msgstr "" -#: aleksis/core/models.py:102 +#: aleksis/core/models.py:103 msgid "The start date must be earlier than the end date." msgstr "" -#: aleksis/core/models.py:109 +#: aleksis/core/models.py:110 msgid "There is already a school term for this time or a part of this time." msgstr "" -#: aleksis/core/models.py:138 aleksis/core/models.py:859 -#: aleksis/core/templates/core/person/accounts.html:41 +#: aleksis/core/models.py:139 aleksis/core/models.py:876 msgid "Person" msgstr "" -#: aleksis/core/models.py:141 +#: aleksis/core/models.py:142 msgid "Can view address" msgstr "" -#: aleksis/core/models.py:142 +#: aleksis/core/models.py:143 msgid "Can view contact details" msgstr "" -#: aleksis/core/models.py:143 +#: aleksis/core/models.py:144 msgid "Can view photo" msgstr "" -#: aleksis/core/models.py:144 +#: aleksis/core/models.py:145 msgid "Can view persons groups" msgstr "" -#: aleksis/core/models.py:145 +#: aleksis/core/models.py:146 msgid "Can view personal details" msgstr "" -#: aleksis/core/models.py:155 +#: aleksis/core/models.py:156 msgid "female" msgstr "" -#: aleksis/core/models.py:155 +#: aleksis/core/models.py:156 msgid "male" msgstr "" -#: aleksis/core/models.py:163 +#: aleksis/core/models.py:164 msgid "Linked user" msgstr "" -#: aleksis/core/models.py:165 +#: aleksis/core/models.py:166 msgid "Is person active?" msgstr "" -#: aleksis/core/models.py:167 +#: aleksis/core/models.py:168 msgid "First name" msgstr "" -#: aleksis/core/models.py:168 +#: aleksis/core/models.py:169 msgid "Last name" msgstr "" -#: aleksis/core/models.py:170 +#: aleksis/core/models.py:171 msgid "Additional name(s)" msgstr "" -#: aleksis/core/models.py:174 aleksis/core/models.py:398 +#: aleksis/core/models.py:175 aleksis/core/models.py:415 msgid "Short name" msgstr "" -#: aleksis/core/models.py:177 +#: aleksis/core/models.py:178 msgid "Street" msgstr "" -#: aleksis/core/models.py:178 +#: aleksis/core/models.py:179 msgid "Street number" msgstr "" -#: aleksis/core/models.py:179 +#: aleksis/core/models.py:180 msgid "Postal code" msgstr "" -#: aleksis/core/models.py:180 +#: aleksis/core/models.py:181 msgid "Place" msgstr "" -#: aleksis/core/models.py:182 +#: aleksis/core/models.py:183 msgid "Home phone" msgstr "" -#: aleksis/core/models.py:183 +#: aleksis/core/models.py:184 msgid "Mobile phone" msgstr "" -#: aleksis/core/models.py:187 +#: aleksis/core/models.py:188 msgid "Date of birth" msgstr "" -#: aleksis/core/models.py:188 +#: aleksis/core/models.py:189 msgid "Sex" msgstr "" -#: aleksis/core/models.py:190 +#: aleksis/core/models.py:191 msgid "Photo" msgstr "" -#: aleksis/core/models.py:194 aleksis/core/templates/core/person/full.html:137 +#: aleksis/core/models.py:195 aleksis/core/templates/core/person/full.html:137 msgid "Guardians / Parents" msgstr "" -#: aleksis/core/models.py:201 +#: aleksis/core/models.py:202 msgid "Primary group" msgstr "" -#: aleksis/core/models.py:204 aleksis/core/models.py:546 -#: aleksis/core/models.py:570 aleksis/core/models.py:655 -#: aleksis/core/models.py:934 aleksis/core/templates/core/person/full.html:120 +#: aleksis/core/models.py:205 aleksis/core/models.py:563 +#: aleksis/core/models.py:587 aleksis/core/models.py:672 +#: aleksis/core/models.py:951 aleksis/core/templates/core/person/full.html:120 msgid "Description" msgstr "" -#: aleksis/core/models.py:353 +#: aleksis/core/models.py:370 msgid "Title of field" msgstr "" -#: aleksis/core/models.py:355 +#: aleksis/core/models.py:372 msgid "Type of field" msgstr "" -#: aleksis/core/models.py:362 +#: aleksis/core/models.py:379 msgid "Addtitional field for groups" msgstr "" -#: aleksis/core/models.py:363 +#: aleksis/core/models.py:380 msgid "Addtitional fields for groups" msgstr "" -#: aleksis/core/models.py:380 +#: aleksis/core/models.py:397 msgid "Group" msgstr "" -#: aleksis/core/models.py:383 +#: aleksis/core/models.py:400 msgid "Can assign child groups to groups" msgstr "" -#: aleksis/core/models.py:384 +#: aleksis/core/models.py:401 msgid "Can view statistics about group." msgstr "" -#: aleksis/core/models.py:396 +#: aleksis/core/models.py:413 msgid "Long name" msgstr "" -#: aleksis/core/models.py:406 aleksis/core/templates/core/group/full.html:85 +#: aleksis/core/models.py:423 aleksis/core/templates/core/group/full.html:85 msgid "Members" msgstr "" -#: aleksis/core/models.py:409 aleksis/core/templates/core/group/full.html:82 +#: aleksis/core/models.py:426 aleksis/core/templates/core/group/full.html:82 msgid "Owners" msgstr "" -#: aleksis/core/models.py:416 aleksis/core/templates/core/group/full.html:55 +#: aleksis/core/models.py:433 aleksis/core/templates/core/group/full.html:55 msgid "Parent groups" msgstr "" -#: aleksis/core/models.py:424 +#: aleksis/core/models.py:441 msgid "Type of group" msgstr "" -#: aleksis/core/models.py:542 +#: aleksis/core/models.py:559 msgid "User" msgstr "" -#: aleksis/core/models.py:545 aleksis/core/models.py:569 -#: aleksis/core/models.py:654 +#: aleksis/core/models.py:562 aleksis/core/models.py:586 +#: aleksis/core/models.py:671 #: aleksis/core/templates/core/announcement/list.html:18 msgid "Title" msgstr "" -#: aleksis/core/models.py:548 +#: aleksis/core/models.py:565 msgid "Application" msgstr "" -#: aleksis/core/models.py:554 +#: aleksis/core/models.py:571 msgid "Activity" msgstr "" -#: aleksis/core/models.py:555 +#: aleksis/core/models.py:572 msgid "Activities" msgstr "" -#: aleksis/core/models.py:561 +#: aleksis/core/models.py:578 msgid "Sender" msgstr "" -#: aleksis/core/models.py:566 +#: aleksis/core/models.py:583 msgid "Recipient" msgstr "" -#: aleksis/core/models.py:571 aleksis/core/models.py:911 +#: aleksis/core/models.py:588 aleksis/core/models.py:928 msgid "Link" msgstr "" -#: aleksis/core/models.py:573 +#: aleksis/core/models.py:590 msgid "Read" msgstr "" -#: aleksis/core/models.py:574 +#: aleksis/core/models.py:591 msgid "Sent" msgstr "" -#: aleksis/core/models.py:587 +#: aleksis/core/models.py:604 msgid "Notification" msgstr "" -#: aleksis/core/models.py:656 +#: aleksis/core/models.py:673 msgid "Link to detailed view" msgstr "" -#: aleksis/core/models.py:659 +#: aleksis/core/models.py:676 msgid "Date and time from when to show" msgstr "" -#: aleksis/core/models.py:662 +#: aleksis/core/models.py:679 msgid "Date and time until when to show" msgstr "" -#: aleksis/core/models.py:686 +#: aleksis/core/models.py:703 msgid "Announcement" msgstr "" -#: aleksis/core/models.py:724 +#: aleksis/core/models.py:741 msgid "Announcement recipient" msgstr "" -#: aleksis/core/models.py:725 +#: aleksis/core/models.py:742 msgid "Announcement recipients" msgstr "" -#: aleksis/core/models.py:780 +#: aleksis/core/models.py:797 msgid "Widget Title" msgstr "" -#: aleksis/core/models.py:781 +#: aleksis/core/models.py:798 msgid "Activate Widget" msgstr "" -#: aleksis/core/models.py:782 +#: aleksis/core/models.py:799 msgid "Widget is broken" msgstr "" -#: aleksis/core/models.py:785 +#: aleksis/core/models.py:802 msgid "Size on mobile devices" msgstr "" -#: aleksis/core/models.py:786 +#: aleksis/core/models.py:803 msgid "<= 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:791 +#: aleksis/core/models.py:808 msgid "Size on tablet devices" msgstr "" -#: aleksis/core/models.py:792 +#: aleksis/core/models.py:809 msgid "> 600 px, 12 columns" msgstr "" -#: aleksis/core/models.py:797 +#: aleksis/core/models.py:814 msgid "Size on desktop devices" msgstr "" -#: aleksis/core/models.py:798 +#: aleksis/core/models.py:815 msgid "> 992 px, 12 columns" msgstr "" -#: aleksis/core/models.py:803 +#: aleksis/core/models.py:820 msgid "Size on large desktop devices" msgstr "" -#: aleksis/core/models.py:804 +#: aleksis/core/models.py:821 msgid "> 1200 px>, 12 columns" msgstr "" -#: aleksis/core/models.py:835 +#: aleksis/core/models.py:852 msgid "Can edit default dashboard" msgstr "" -#: aleksis/core/models.py:836 +#: aleksis/core/models.py:853 msgid "Dashboard Widget" msgstr "" -#: aleksis/core/models.py:837 +#: aleksis/core/models.py:854 msgid "Dashboard Widgets" msgstr "" -#: aleksis/core/models.py:843 +#: aleksis/core/models.py:860 msgid "URL" msgstr "" -#: aleksis/core/models.py:844 +#: aleksis/core/models.py:861 msgid "Icon URL" msgstr "" -#: aleksis/core/models.py:850 +#: aleksis/core/models.py:867 msgid "External link widget" msgstr "" -#: aleksis/core/models.py:851 +#: aleksis/core/models.py:868 msgid "External link widgets" msgstr "" -#: aleksis/core/models.py:856 +#: aleksis/core/models.py:873 msgid "Dashboard widget" msgstr "" -#: aleksis/core/models.py:861 +#: aleksis/core/models.py:878 msgid "Order" msgstr "" -#: aleksis/core/models.py:862 +#: aleksis/core/models.py:879 msgid "Part of the default dashboard" msgstr "" -#: aleksis/core/models.py:877 +#: aleksis/core/models.py:894 msgid "Dashboard widget order" msgstr "" -#: aleksis/core/models.py:878 +#: aleksis/core/models.py:895 msgid "Dashboard widget orders" msgstr "" -#: aleksis/core/models.py:884 +#: aleksis/core/models.py:901 msgid "Menu ID" msgstr "" -#: aleksis/core/models.py:897 +#: aleksis/core/models.py:914 msgid "Custom menu" msgstr "" -#: aleksis/core/models.py:898 +#: aleksis/core/models.py:915 msgid "Custom menus" msgstr "" -#: aleksis/core/models.py:908 +#: aleksis/core/models.py:925 msgid "Menu" msgstr "" -#: aleksis/core/models.py:912 +#: aleksis/core/models.py:929 msgid "Icon" msgstr "" -#: aleksis/core/models.py:918 +#: aleksis/core/models.py:935 msgid "Custom menu item" msgstr "" -#: aleksis/core/models.py:919 +#: aleksis/core/models.py:936 msgid "Custom menu items" msgstr "" -#: aleksis/core/models.py:933 +#: aleksis/core/models.py:950 msgid "Title of type" msgstr "" -#: aleksis/core/models.py:940 aleksis/core/templates/core/group/full.html:47 +#: aleksis/core/models.py:957 aleksis/core/templates/core/group/full.html:47 msgid "Group type" msgstr "" -#: aleksis/core/models.py:954 +#: aleksis/core/models.py:971 msgid "Can view system status" msgstr "" -#: aleksis/core/models.py:955 -msgid "Can link persons to accounts" -msgstr "" - -#: aleksis/core/models.py:956 +#: aleksis/core/models.py:972 msgid "Can manage data" msgstr "" -#: aleksis/core/models.py:957 +#: aleksis/core/models.py:973 msgid "Can impersonate" msgstr "" -#: aleksis/core/models.py:958 +#: aleksis/core/models.py:974 msgid "Can use search" msgstr "" -#: aleksis/core/models.py:959 +#: aleksis/core/models.py:975 msgid "Can change site preferences" msgstr "" -#: aleksis/core/models.py:960 +#: aleksis/core/models.py:976 msgid "Can change person preferences" msgstr "" -#: aleksis/core/models.py:961 +#: aleksis/core/models.py:977 msgid "Can change group preferences" msgstr "" -#: aleksis/core/models.py:962 +#: aleksis/core/models.py:978 msgid "Can add oauth applications" msgstr "" -#: aleksis/core/models.py:963 +#: aleksis/core/models.py:979 msgid "Can list oauth applications" msgstr "" -#: aleksis/core/models.py:964 +#: aleksis/core/models.py:980 msgid "Can view oauth applications" msgstr "" -#: aleksis/core/models.py:965 +#: aleksis/core/models.py:981 msgid "Can update oauth applications" msgstr "" -#: aleksis/core/models.py:966 +#: aleksis/core/models.py:982 msgid "Can delete oauth applications" msgstr "" -#: aleksis/core/models.py:967 +#: aleksis/core/models.py:983 msgid "Can test PDF generation" msgstr "" -#: aleksis/core/models.py:1003 +#: aleksis/core/models.py:1019 msgid "Related data check task" msgstr "" -#: aleksis/core/models.py:1011 +#: aleksis/core/models.py:1027 msgid "Issue solved" msgstr "" -#: aleksis/core/models.py:1012 +#: aleksis/core/models.py:1028 msgid "Notification sent" msgstr "" -#: aleksis/core/models.py:1025 +#: aleksis/core/models.py:1041 msgid "Data check result" msgstr "" -#: aleksis/core/models.py:1026 +#: aleksis/core/models.py:1042 msgid "Data check results" msgstr "" -#: aleksis/core/models.py:1028 +#: aleksis/core/models.py:1044 msgid "Can run data checks" msgstr "" -#: aleksis/core/models.py:1029 +#: aleksis/core/models.py:1045 msgid "Can solve data check problems" msgstr "" -#: aleksis/core/models.py:1044 +#: aleksis/core/models.py:1060 msgid "Owner" msgstr "" -#: aleksis/core/models.py:1048 +#: aleksis/core/models.py:1064 msgid "File expires at" msgstr "" -#: aleksis/core/models.py:1050 +#: aleksis/core/models.py:1066 msgid "Generated HTML file" msgstr "" -#: aleksis/core/models.py:1052 +#: aleksis/core/models.py:1068 msgid "Generated PDF file" msgstr "" -#: aleksis/core/models.py:1059 +#: aleksis/core/models.py:1075 msgid "PDF file" msgstr "" -#: aleksis/core/models.py:1060 +#: aleksis/core/models.py:1076 msgid "PDF files" msgstr "" -#: aleksis/core/models.py:1065 +#: aleksis/core/models.py:1081 msgid "Task result" msgstr "" -#: aleksis/core/models.py:1068 +#: aleksis/core/models.py:1084 msgid "Task user" msgstr "" -#: aleksis/core/models.py:1080 +#: aleksis/core/models.py:1096 msgid "Task user assignment" msgstr "" -#: aleksis/core/models.py:1081 +#: aleksis/core/models.py:1097 msgid "Task user assignments" msgstr "" @@ -1027,75 +1018,71 @@ msgstr "" msgid "Official name of the school, e.g. as given by supervisory authority" msgstr "" -#: aleksis/core/preferences.py:256 -msgid "Enabled custom authentication backends" -msgstr "" - -#: aleksis/core/preferences.py:268 +#: aleksis/core/preferences.py:254 msgid "Allow users to change their passwords" msgstr "" -#: aleksis/core/preferences.py:276 +#: aleksis/core/preferences.py:262 msgid "Enable signup" msgstr "" -#: aleksis/core/preferences.py:287 +#: aleksis/core/preferences.py:273 msgid "Available languages" msgstr "" -#: aleksis/core/preferences.py:299 +#: aleksis/core/preferences.py:285 msgid "Send emails if data checks detect problems" msgstr "" -#: aleksis/core/preferences.py:310 +#: aleksis/core/preferences.py:296 msgid "Email recipients for data checks problem emails" msgstr "" -#: aleksis/core/preferences.py:321 +#: aleksis/core/preferences.py:307 msgid "Email recipient groups for data checks problem emails" msgstr "" -#: aleksis/core/preferences.py:330 +#: aleksis/core/preferences.py:316 msgid "Show dashboard to users without login" msgstr "" -#: aleksis/core/preferences.py:339 +#: aleksis/core/preferences.py:325 msgid "Allow users to edit their dashboard" msgstr "" -#: aleksis/core/preferences.py:350 +#: aleksis/core/preferences.py:336 msgid "Fields on person model which are editable by themselves." msgstr "" -#: aleksis/core/preferences.py:364 +#: aleksis/core/preferences.py:350 msgid "Editable fields on person model which should trigger a notification on change" msgstr "" -#: aleksis/core/preferences.py:377 +#: aleksis/core/preferences.py:363 msgid "Contact for notification if a person changes their data" msgstr "" -#: aleksis/core/preferences.py:387 +#: aleksis/core/preferences.py:373 msgid "PDF file expiration duration" msgstr "" -#: aleksis/core/preferences.py:388 +#: aleksis/core/preferences.py:374 msgid "in minutes" msgstr "" -#: aleksis/core/preferences.py:398 +#: aleksis/core/preferences.py:384 msgid "Automatically update the dashboard and its widgets" msgstr "" -#: aleksis/core/preferences.py:408 +#: aleksis/core/preferences.py:394 msgid "Automatically update the dashboard and its widgets sitewide" msgstr "" -#: aleksis/core/settings.py:468 +#: aleksis/core/settings.py:452 msgid "English" msgstr "" -#: aleksis/core/settings.py:469 +#: aleksis/core/settings.py:453 msgid "German" msgstr "" @@ -1259,7 +1246,7 @@ msgstr "" #: aleksis/core/templates/account/password_reset_done.html:5 #: aleksis/core/templates/account/verification_email_required.html:5 #: aleksis/core/templates/account/verification_email_required.html:6 -#: aleksis/core/templates/two_factor/core/login.html:100 +#: aleksis/core/templates/two_factor/core/login.html:81 msgid "Reset password" msgstr "" @@ -1996,32 +1983,10 @@ msgid "" " " msgstr "" -#: aleksis/core/templates/core/person/accounts.html:12 -#: aleksis/core/templates/core/person/accounts.html:14 -msgid "Link persons to accounts" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:21 -msgid "" -"\n" -" You can use this form to assign user accounts to persons. Use the\n" -" dropdowns to select existing accounts; use the text fields to create new\n" -" accounts on-the-fly. The latter will create a new account with the\n" -" entered username and copy all other details from the person.\n" -" " -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:36 -#: aleksis/core/templates/core/person/accounts.html:60 -msgid "Update" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:42 -msgid "Existing account" -msgstr "" - -#: aleksis/core/templates/core/person/accounts.html:43 -msgid "New account" +#: aleksis/core/templates/core/person/create.html:12 +#: aleksis/core/templates/core/person/create.html:13 +#: aleksis/core/templates/core/person/list.html:17 +msgid "Create person" msgstr "" #: aleksis/core/templates/core/person/edit.html:12 @@ -2030,6 +1995,8 @@ msgid "Edit person" msgstr "" #: aleksis/core/templates/core/person/full.html:44 +#: aleksis/core/templates/impersonate/list_users.html:7 +#: aleksis/core/templates/impersonate/list_users.html:8 msgid "Impersonate" msgstr "" @@ -2041,10 +2008,6 @@ msgstr "" msgid "Children" msgstr "" -#: aleksis/core/templates/core/person/list.html:17 -msgid "Create person" -msgstr "" - #: aleksis/core/templates/core/person/list.html:21 msgid "Filter persons" msgstr "" @@ -2081,10 +2044,6 @@ msgstr "" msgid "Save preferences" msgstr "" -#: aleksis/core/templates/impersonate/list_users.html:8 -msgid "Impersonate user" -msgstr "" - #: aleksis/core/templates/oauth2_provider/application_confirm_delete.html:5 #: aleksis/core/templates/oauth2_provider/application_confirm_delete.html:6 msgid "Delete application" @@ -2437,64 +2396,70 @@ msgstr "" msgid "Generate Tokens" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:18 +#: aleksis/core/templates/two_factor/core/login.html:20 msgid "Login with username and password" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:26 -msgid "You have no permission to view this page. Please login with an other account." +#: aleksis/core/templates/two_factor/core/login.html:28 +msgid "" +"You have no permission to view this page. Please login with an other\n" +" account." msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:33 +#: aleksis/core/templates/two_factor/core/login.html:36 msgid "Please login to see this page." msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:43 +#: aleksis/core/templates/two_factor/core/login.html:46 msgid "" "\n" -" We are calling your phone right now, please enter the\n" -" digits you hear.\n" -" " +" We are calling your phone right now, please enter the\n" +" digits you hear.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:48 +#: aleksis/core/templates/two_factor/core/login.html:51 msgid "" "\n" -" We sent you a text message, please enter the tokens we\n" -" sent.\n" -" " +" We sent you a text message, please enter the tokens we\n" +" sent.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:53 +#: aleksis/core/templates/two_factor/core/login.html:56 msgid "" "\n" -" Please enter the tokens generated by your token\n" -" generator.\n" -" " +" Please enter the tokens generated by your token\n" +" generator.\n" +" " msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:59 +#: aleksis/core/templates/two_factor/core/login.html:62 msgid "" "\n" -" Use this form for entering backup tokens for logging in.\n" -" These tokens have been generated for you to print and keep safe. Please\n" -" enter one of these backup tokens to login to your account.\n" -" " +" Use this form for entering backup tokens for logging in.\n" +" These tokens have been generated for you to print and keep safe. Please\n" +" enter one of these backup tokens to login to your account.\n" +" " +msgstr "" + +#: aleksis/core/templates/two_factor/core/login.html:90 +msgid "Device currently not available?" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:74 +#: aleksis/core/templates/two_factor/core/login.html:92 msgid "Or, alternatively, use one of your backup phones:" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:84 +#: aleksis/core/templates/two_factor/core/login.html:102 msgid "As a last resort, you can use a backup token:" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:87 +#: aleksis/core/templates/two_factor/core/login.html:105 msgid "Use Backup Token" msgstr "" -#: aleksis/core/templates/two_factor/core/login.html:110 +#: aleksis/core/templates/two_factor/core/login.html:116 msgid "Use alternative login options" msgstr "" @@ -2759,107 +2724,107 @@ msgstr "" msgid "Download PDF" msgstr "" -#: aleksis/core/views.py:253 +#: aleksis/core/views.py:251 msgid "The school term has been created." msgstr "" -#: aleksis/core/views.py:265 +#: aleksis/core/views.py:263 msgid "The school term has been saved." msgstr "" -#: aleksis/core/views.py:410 +#: aleksis/core/views.py:387 msgid "The child groups were successfully saved." msgstr "" -#: aleksis/core/views.py:471 +#: aleksis/core/views.py:406 aleksis/core/views.py:416 msgid "The person has been saved." msgstr "" -#: aleksis/core/views.py:510 +#: aleksis/core/views.py:466 msgid "The group has been saved." msgstr "" -#: aleksis/core/views.py:607 +#: aleksis/core/views.py:563 msgid "The announcement has been saved." msgstr "" -#: aleksis/core/views.py:623 +#: aleksis/core/views.py:579 msgid "The announcement has been deleted." msgstr "" -#: aleksis/core/views.py:707 +#: aleksis/core/views.py:663 msgid "The preferences have been saved successfully." msgstr "" -#: aleksis/core/views.py:731 +#: aleksis/core/views.py:687 msgid "The person has been deleted." msgstr "" -#: aleksis/core/views.py:745 +#: aleksis/core/views.py:701 msgid "The group has been deleted." msgstr "" -#: aleksis/core/views.py:777 +#: aleksis/core/views.py:733 msgid "The additional_field has been saved." msgstr "" -#: aleksis/core/views.py:811 +#: aleksis/core/views.py:767 msgid "The additional field has been deleted." msgstr "" -#: aleksis/core/views.py:836 +#: aleksis/core/views.py:792 msgid "The group type has been saved." msgstr "" -#: aleksis/core/views.py:866 +#: aleksis/core/views.py:822 msgid "The group type has been deleted." msgstr "" -#: aleksis/core/views.py:899 +#: aleksis/core/views.py:855 msgid "Progress: Run data checks" msgstr "" -#: aleksis/core/views.py:900 +#: aleksis/core/views.py:856 msgid "Run data checks …" msgstr "" -#: aleksis/core/views.py:901 +#: aleksis/core/views.py:857 msgid "The data checks were run successfully." msgstr "" -#: aleksis/core/views.py:902 +#: aleksis/core/views.py:858 msgid "There was a problem while running data checks." msgstr "" -#: aleksis/core/views.py:918 +#: aleksis/core/views.py:874 #, python-brace-format msgid "The solve option '{solve_option_obj.verbose_name}' " msgstr "" -#: aleksis/core/views.py:960 +#: aleksis/core/views.py:916 msgid "The dashboard widget has been saved." msgstr "" -#: aleksis/core/views.py:990 +#: aleksis/core/views.py:946 msgid "The dashboard widget has been created." msgstr "" -#: aleksis/core/views.py:1000 +#: aleksis/core/views.py:956 msgid "The dashboard widget has been deleted." msgstr "" -#: aleksis/core/views.py:1067 +#: aleksis/core/views.py:1023 msgid "Your dashboard configuration has been saved successfully." msgstr "" -#: aleksis/core/views.py:1069 +#: aleksis/core/views.py:1025 msgid "The configuration of the default dashboard has been saved successfully." msgstr "" -#: aleksis/core/views.py:1197 +#: aleksis/core/views.py:1153 msgid "The third-party account could not be disconnected because it is the only login method available." msgstr "" -#: aleksis/core/views.py:1204 +#: aleksis/core/views.py:1160 msgid "The third-party account has been successfully disconnected." msgstr "" diff --git a/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po b/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po index e10a495775fcb643cbe11cc1ce0daf4c5fc649ef..dc6d028e5442a3666f35a7cb46e39e5c01cdd3f9 100644 --- a/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po +++ b/aleksis/core/locale/tr_TR/LC_MESSAGES/djangojs.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-08-28 17:53+0200\n" +"POT-Creation-Date: 2021-10-28 16:18+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" diff --git a/aleksis/core/managers.py b/aleksis/core/managers.py index ade623230aff2b8663e976ae4c133c3e24b979b4..aed4cab72d4b0cd53d3544b20f0180a7087dfd2c 100644 --- a/aleksis/core/managers.py +++ b/aleksis/core/managers.py @@ -120,3 +120,7 @@ class InstalledWidgetsDashboardWidgetOrderManager(Manager): # [obj["id"] for obj in list(Person.objects.all().values("id"))] return super().get_queryset().filter(widget_id__in=dashboard_widget_pks) + + +class PolymorphicCurrentSiteManager(_CurrentSiteManager, PolymorphicManager): + """Default manager for extensible, polymorphic models.""" diff --git a/aleksis/core/menus.py b/aleksis/core/menus.py index b368a6c702e4b2514afc903fb5ff48417ef22bfa..d9fd84b0f78a1ce141537725d233f57b43a4fbea 100644 --- a/aleksis/core/menus.py +++ b/aleksis/core/menus.py @@ -267,17 +267,6 @@ MENUS = { ) ], }, - { - "name": _("Persons and accounts"), - "url": "persons_accounts", - "icon": "person_add", - "validators": [ - ( - "aleksis.core.util.predicates.permission_validator", - "core.link_persons_accounts_rule", - ) - ], - }, { "name": _("Groups and child groups"), "url": "groups_child_groups", diff --git a/aleksis/core/migrations/0021_drop_persons_accounts_perm.py b/aleksis/core/migrations/0021_drop_persons_accounts_perm.py new file mode 100644 index 0000000000000000000000000000000000000000..576efcec16e706a27059d80d9c256052c0e74dab --- /dev/null +++ b/aleksis/core/migrations/0021_drop_persons_accounts_perm.py @@ -0,0 +1,17 @@ +# Generated by Django 3.2.8 on 2021-10-24 13:43 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0020_pdf_file_person_optional'), + ] + + operations = [ + migrations.AlterModelOptions( + name='globalpermissions', + options={'default_permissions': (), 'managed': False, 'permissions': (('view_system_status', 'Can view system status'), ('manage_data', 'Can manage data'), ('impersonate', 'Can impersonate'), ('search', 'Can use search'), ('change_site_preferences', 'Can change site preferences'), ('change_person_preferences', 'Can change person preferences'), ('change_group_preferences', 'Can change group preferences'), ('add_oauth_applications', 'Can add oauth applications'), ('list_oauth_applications', 'Can list oauth applications'), ('view_oauth_applications', 'Can view oauth applications'), ('update_oauth_applications', 'Can update oauth applications'), ('delete_oauth_applications', 'Can delete oauth applications'), ('test_pdf', 'Can test PDF generation'))}, + ), + ] diff --git a/aleksis/core/migrations/0022_public_favicon.py b/aleksis/core/migrations/0022_public_favicon.py new file mode 100644 index 0000000000000000000000000000000000000000..13864fdaebfb1811ac7629ed891c745595afc5bc --- /dev/null +++ b/aleksis/core/migrations/0022_public_favicon.py @@ -0,0 +1,28 @@ +# Generated by Django 3.2.4 on 2021-07-24 13:14 +import os + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('core', '0021_drop_persons_accounts_perm'), + ('favicon', '0004_faviconimg_favicon_size_rel_unique'), + ] + + def _migrate_favicons(apps, schema_editor): + FaviconImg = apps.get_model('favicon', "FaviconImg") + for favicon_img in FaviconImg.objects.all(): + old_name = favicon_img.faviconImage.name + new_name = os.path.join("public", old_name) + storage = favicon_img.faviconImage.storage + if storage.exists(old_name): + storage.save(new_name, favicon_img.faviconImage.file) + favicon_img.faviconImage.name = new_name + favicon_img.save() + + operations = [ + migrations.RunPython(_migrate_favicons) + ] diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py index fa6c4fa29a67ec2904e42dba173ce72575c0e6ba..1e4fd42168f66d4ca986dca670f277ead0cbf3e7 100644 --- a/aleksis/core/mixins.py +++ b/aleksis/core/mixins.py @@ -24,9 +24,16 @@ from guardian.admin import GuardedModelAdmin from guardian.core import ObjectPermissionChecker from jsonstore.fields import IntegerField, JSONFieldMixin from material.base import Layout, LayoutNode +from polymorphic.base import PolymorphicModelBase +from polymorphic.managers import PolymorphicManager +from polymorphic.models import PolymorphicModel from rules.contrib.admin import ObjectPermissionsModelAdmin -from aleksis.core.managers import CurrentSiteManagerWithoutMigrations, SchoolTermRelatedQuerySet +from aleksis.core.managers import ( + CurrentSiteManagerWithoutMigrations, + PolymorphicCurrentSiteManager, + SchoolTermRelatedQuerySet, +) class _ExtensibleModelBase(models.base.ModelBase): @@ -351,6 +358,22 @@ class ExtensibleModel(models.Model, metaclass=_ExtensibleModelBase): abstract = True +class _ExtensiblePolymorphicModelBase(_ExtensibleModelBase, PolymorphicModelBase): + """Base class for extensible, polymorphic models.""" + + +class ExtensiblePolymorphicModel( + ExtensibleModel, PolymorphicModel, metaclass=_ExtensiblePolymorphicModelBase +): + """Model class for extensible, polymorphic models.""" + + objects = PolymorphicCurrentSiteManager() + objects_all_sites = PolymorphicManager() + + class Meta: + abstract = True + + class PureDjangoModel(object): """No-op mixin to mark a model as deliberately not using ExtensibleModel.""" diff --git a/aleksis/core/models.py b/aleksis/core/models.py index 8fffbe122638eebee19e199914ce0b7edbc91837..1264b645ef56da31c215f3b42b0e59162935b6a0 100644 --- a/aleksis/core/models.py +++ b/aleksis/core/models.py @@ -32,6 +32,7 @@ from model_utils import FieldTracker from model_utils.models import TimeStampedModel from phonenumber_field.modelfields import PhoneNumberField from polymorphic.models import PolymorphicModel +from templated_email import send_templated_mail from aleksis.core.data_checks import BrokenDashboardWidgetDataCheck, DataCheck, DataCheckRegistry @@ -329,6 +330,22 @@ class Person(ExtensibleModel): if force or not self.primary_group: self.primary_group = self.member_of.filter(**{f"{field}__regex": pattern}).first() + def notify_about_changed_data( + self, changed_fields: Iterable[str], recipients: Optional[List[str]] = None + ): + """Notify (configured) recipients about changed data of this person.""" + context = {"person": self, "changed_fields": changed_fields} + recipients = recipients or [ + get_site_preferences()["account__person_change_notification_contact"] + ] + send_templated_mail( + template_name="person_changed", + from_email=self.mail_sender_via, + headers={"Reply-To": self.mail_sender, "Sender": self.mail_sender,}, + recipient_list=recipients, + context=context, + ) + class DummyPerson(Person): """A dummy person that is not stored into the database. @@ -952,7 +969,6 @@ class GlobalPermissions(GlobalPermissionModel): class Meta(GlobalPermissionModel.Meta): permissions = ( ("view_system_status", _("Can view system status")), - ("link_persons_accounts", _("Can link persons to accounts")), ("manage_data", _("Can manage data")), ("impersonate", _("Can impersonate")), ("search", _("Can use search")), diff --git a/aleksis/core/preferences.py b/aleksis/core/preferences.py index 588992f60d4e396450b05fc7d4a9e2978f196a45..6faaadf7dc93ad182fc48325a34a2b94f9eab392 100644 --- a/aleksis/core/preferences.py +++ b/aleksis/core/preferences.py @@ -246,20 +246,6 @@ class SchoolNameOfficial(StringPreference): verbose_name = _("Official name of the school, e.g. as given by supervisory authority") -@site_preferences_registry.register -class AuthenticationBackends(MultipleChoicePreference): - """Authentication backends of your AlekSIS instance.""" - - section = auth - name = "backends" - default = None - verbose_name = _("Enabled custom authentication backends") - field_attribute = {"initial": []} - - def get_choices(self): - return [(b, b) for b in settings.CUSTOM_AUTHENTICATION_BACKENDS] - - @site_preferences_registry.register class AllowPasswordChange(BooleanPreference): section = auth diff --git a/aleksis/core/rules.py b/aleksis/core/rules.py index 9b8f7cc1f3c9aafcbb91a5ed06685d33e15db7d5..e8e5443e15396554befa1f14c2536c66231c76cf 100644 --- a/aleksis/core/rules.py +++ b/aleksis/core/rules.py @@ -2,7 +2,6 @@ import rules from .models import AdditionalField, Announcement, Group, GroupType, Person from .util.predicates import ( - contains_site_preference_value, has_any_object, has_global_perm, has_object_perm, @@ -80,10 +79,6 @@ delete_person_predicate = has_person & ( ) rules.add_perm("core.delete_person_rule", delete_person_predicate) -# Link persons with accounts -link_persons_accounts_predicate = has_person & has_global_perm("core.link_persons_accounts") -rules.add_perm("core.link_persons_accounts_rule", link_persons_accounts_predicate) - # View groups view_groups_predicate = has_person & ( has_global_perm("core.view_group") | has_any_object("core.view_group", Group) @@ -158,12 +153,7 @@ rules.add_perm("core.view_system_status_rule", view_system_status_predicate) rules.add_perm( "core.view_people_menu_rule", has_person - & ( - view_persons_predicate - | view_groups_predicate - | link_persons_accounts_predicate - | assign_child_groups_to_groups_predicate - ), + & (view_persons_predicate | view_groups_predicate | assign_child_groups_to_groups_predicate), ) # View person personal details @@ -350,15 +340,3 @@ rules.add_perm("core.upload_files_ckeditor_rule", upload_files_ckeditor_predicat test_pdf_generation_predicate = has_person & has_global_perm("core.test_pdf") rules.add_perm("core.test_pdf_rule", test_pdf_generation_predicate) - -# Generate rules for syncable fields -for field in Person._meta.fields: - perm = ( - has_global_perm("core.edit_person") - | has_object_perm("core.edit_person") - | ( - is_current_person - & contains_site_preference_value("account", "editable_fields_person", field.name) - ) - ) - rules.add_perm(f"core.change_person_field_{field.name}_rule", perm) diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py index a41b1913c9ea41bef202897c3555722e14605516..10ce06dbbd1de00294ad6f1ac15eab4d7fe54695 100644 --- a/aleksis/core/settings.py +++ b/aleksis/core/settings.py @@ -338,16 +338,6 @@ if _settings.get("oauth2.oidc.enabled", False): # "OIDC_ISS_ENDPOINT": _settings.get("oauth2.oidc.issuer_name", "example.com"), } ) - OAUTH2_PROVIDER["SCOPES"].update( - { - "openid": _("OpenID Connect scope"), - "profile": _("Given name, family name, link to profile and picture if existing."), - "address": _("Full home postal address"), - "email": _("Email address"), - "phone": _("Home and mobile phone"), - "groups": _("Groups"), - } - ) # Configuration for REST framework REST_FRAMEWORK = { @@ -448,9 +438,6 @@ if _settings.get("ldap.uri", None): "is_superuser" ] -CUSTOM_AUTHENTICATION_BACKENDS = [] -merge_app_settings("AUTHENTICATION_BACKENDS", CUSTOM_AUTHENTICATION_BACKENDS) - # Add ModelBckend last so all other backends get a chance # to verify passwords first AUTHENTICATION_BACKENDS.append("django.contrib.auth.backends.ModelBackend") @@ -458,10 +445,6 @@ AUTHENTICATION_BACKENDS.append("django.contrib.auth.backends.ModelBackend") # Authentication backend for django-allauth. AUTHENTICATION_BACKENDS.append("allauth.account.auth_backends.AuthenticationBackend") -# Structure of items: backend, URL name, icon name, button title -ALTERNATIVE_LOGIN_VIEWS = [] -merge_app_settings("ALTERNATIVE_LOGIN_VIEWS", ALTERNATIVE_LOGIN_VIEWS, True) - # Internationalization # https://docs.djangoproject.com/en/2.1/topics/i18n/ @@ -540,15 +523,14 @@ SASS_PROCESSOR_CUSTOM_FUNCTIONS = { "get-preference": "aleksis.core.util.sass_helpers.get_preference", } SASS_PROCESSOR_INCLUDE_DIRS = [ - _settings.get("materialize.sass_path", JS_ROOT + "/materialize-css/sass/"), - STATIC_ROOT + "/materialize-css/sass/", - STATIC_ROOT, + _settings.get("materialize.sass_path", os.path.join(JS_ROOT, "materialize-css", "sass")), + os.path.join(STATIC_ROOT, "public"), ] -ADMINS = _settings.get("contact.admins", []) -SERVER_EMAIL = _settings.get("contact.from", "root@localhost") -DEFAULT_FROM_EMAIL = _settings.get("contact.from", "root@localhost") -MANAGERS = _settings.get("contact.admins", []) +ADMINS = _settings.get("contact.admins", [AUTH_INITIAL_SUPERUSER["email"]]) +SERVER_EMAIL = _settings.get("contact.from", ADMINS[0]) +DEFAULT_FROM_EMAIL = _settings.get("contact.from", ADMINS[0]) +MANAGERS = _settings.get("contact.admins", ADMINS) if _settings.get("mail.server.host", None): EMAIL_HOST = _settings.get("mail.server.host") @@ -653,6 +635,7 @@ PWA_ICONS_CONFIG = { "apple_splash": [192], "microsoft": [144], } +FAVICON_PATH = os.path.join("public", "favicon") SERVICE_WORKER_PATH = os.path.join(STATIC_ROOT, "js", "serviceworker.js") diff --git a/aleksis/core/static/materialize.scss b/aleksis/core/static/public/materialize-custom.scss similarity index 100% rename from aleksis/core/static/materialize.scss rename to aleksis/core/static/public/materialize-custom.scss diff --git a/aleksis/core/static/style.scss b/aleksis/core/static/public/style.scss similarity index 98% rename from aleksis/core/static/style.scss rename to aleksis/core/static/public/style.scss index ab20ec56d066fa3d6ed7637a8cdf38bb105b0f21..c2aa516e8cfcf88190aa13f43cc8f6aad5d747de 100644 --- a/aleksis/core/static/style.scss +++ b/aleksis/core/static/public/style.scss @@ -1,4 +1,4 @@ -@import "materialize"; +@import "materialize-custom"; .primary-color { background-color: $primary-color !important; @@ -87,12 +87,6 @@ header, main, footer { width: auto; } -@media only screen and (max-width: 993px) { - header div.nav-wrapper { - z-index: -5; - } -} - /********/ /* MAIN */ diff --git a/aleksis/core/static/theme.scss b/aleksis/core/static/public/theme.scss similarity index 100% rename from aleksis/core/static/theme.scss rename to aleksis/core/static/public/theme.scss diff --git a/aleksis/core/templates/core/base.html b/aleksis/core/templates/core/base.html index 23f4060e5d3f5735023b9f5b7a307bb665582907..80e6ee8d7cae0837b1c6b91ce4b258bd2608f22b 100644 --- a/aleksis/core/templates/core/base.html +++ b/aleksis/core/templates/core/base.html @@ -24,7 +24,7 @@ {% include_css "Roboto500" %} {% include_css "Roboto700" %} {% include_css "Roboto900" %} - <link rel="stylesheet" href="{% sass_src 'style.scss' %}"> + <link rel="stylesheet" href="{% sass_src 'public/style.scss' %}"> {# Add JS URL resolver #} <script src="{% url "js_reverse" %}" type="text/javascript"></script> diff --git a/aleksis/core/templates/core/base_print.html b/aleksis/core/templates/core/base_print.html index 7691cdf804b043b373e6a4f26802fc9cdb732205..428d28f2858406c771b635c20ff874bf5c9f9d5a 100644 --- a/aleksis/core/templates/core/base_print.html +++ b/aleksis/core/templates/core/base_print.html @@ -22,7 +22,7 @@ {% include_css "Roboto700" %} {% include_css "Roboto900" %} {% include_css "paper-css" %} - <link rel="stylesheet" href="{% sass_src 'style.scss' %}"/> + <link rel="stylesheet" href="{% sass_src 'public/style.scss' %}"/> <link rel="stylesheet" href="{% static "print.css" %}"/> {% if landscape %} <link rel="stylesheet" href="{% static 'print_landscape.css' %}"/> diff --git a/aleksis/core/templates/core/person/accounts.html b/aleksis/core/templates/core/person/accounts.html deleted file mode 100644 index 03725518dfcbf8552a53199790daa44d541bac32..0000000000000000000000000000000000000000 --- a/aleksis/core/templates/core/person/accounts.html +++ /dev/null @@ -1,65 +0,0 @@ -{# -*- engine:django -*- #} - -{% extends "core/base.html" %} - -{% load i18n any_js %} - -{% block extra_head %} - {{ persons_accounts_formset.media.css }} - {% include_css "select2-materialize" %} -{% endblock %} - -{% block browser_title %}{% blocktrans %}Link persons to accounts{% endblocktrans %}{% endblock %} -{% block page_title %} - {% blocktrans %}Link persons to accounts{% endblocktrans %} -{% endblock %} - -{% block content %} - <div class="alert info"> - <p> - <i class="material-icons left">info</i> - {% blocktrans %} - You can use this form to assign user accounts to persons. Use the - dropdowns to select existing accounts; use the text fields to create new - accounts on-the-fly. The latter will create a new account with the - entered username and copy all other details from the person. - {% endblocktrans %} - </p> - </div> - - <form method="post"> - {% csrf_token %} - {{ persons_accounts_formset.management_form }} - - <button type="submit" class="btn green waves-effect waves-light"> - <i class="material-icons left">save</i> - {% blocktrans %}Update{% endblocktrans %} - </button> - - <table> - <tr> - <th>{% blocktrans %}Person{% endblocktrans %}</th> - <th>{% blocktrans %}Existing account{% endblocktrans %}</th> - <th>{% blocktrans %}New account{% endblocktrans %}</th> - </tr> - {% for form in persons_accounts_formset %} - {{ form.id }} - <tr> - <td> - {{ form.last_name }} - {{ form.first_name }} - </td> - <td>{{ form.user }}</td> - <td>{{ form.new_user }}</td> - </tr> - {% endfor %} - </table> - - <button type="submit" class="btn green waves-effect waves-light"> - <i class="material-icons left">save</i> - {% blocktrans %}Update{% endblocktrans %} - </button> - </form> - {% include_js "select2-materialize" %} - {{ persons_accounts_formset.media.js }} -{% endblock %} diff --git a/aleksis/core/templates/core/person/create.html b/aleksis/core/templates/core/person/create.html new file mode 100644 index 0000000000000000000000000000000000000000..08a6639e05e45f82912fd3e4adb25021264010c9 --- /dev/null +++ b/aleksis/core/templates/core/person/create.html @@ -0,0 +1,24 @@ +{# -*- engine:django -*- #} + +{% extends "core/base.html" %} + +{% load material_form i18n any_js %} + +{% block extra_head %} + {{ form.media.css }} + {% include_css "select2-materialize" %} +{% endblock %} + +{% block browser_title %}{% blocktrans %}Create person{% endblocktrans %}{% endblock %} +{% block page_title %}{% blocktrans %}Create person{% endblocktrans %}{% endblock %} + + +{% block content %} + <form method="post" enctype="multipart/form-data"> + {% csrf_token %} + {% form form=form %}{% endform %} + {% include "core/partials/save_button.html" %} + </form> + {% include_js "select2-materialize" %} + {{ form.media.js }} +{% endblock %} diff --git a/aleksis/core/templates/core/person/edit.html b/aleksis/core/templates/core/person/edit.html index 3bf16ca3521ea744acfe48c6829dfae21db06eb5..788721c3541cba056c1ef05214eb0c39eb1b6f69 100644 --- a/aleksis/core/templates/core/person/edit.html +++ b/aleksis/core/templates/core/person/edit.html @@ -5,7 +5,7 @@ {% load material_form i18n any_js %} {% block extra_head %} - {{ edit_person_form.media }} + {{ form.media.css }} {% include_css "select2-materialize" %} {% endblock %} @@ -14,13 +14,11 @@ {% block content %} - <form method="post" enctype="multipart/form-data"> {% csrf_token %} - {% form form=edit_person_form %}{% endform %} + {% form form=form %}{% endform %} {% include "core/partials/save_button.html" %} </form> {% include_js "select2-materialize" %} - {{ edit_group_form.media.js }} - + {{ form.media.js }} {% endblock %} diff --git a/aleksis/core/templates/impersonate/list_users.html b/aleksis/core/templates/impersonate/list_users.html index aff2f8660ac374cebb1bbeff646bc038aee9e5f1..fd273ca60902e5defbc41e567a9205cfe99fb349 100644 --- a/aleksis/core/templates/impersonate/list_users.html +++ b/aleksis/core/templates/impersonate/list_users.html @@ -4,9 +4,8 @@ {% extends "core/base.html" %} {% load i18n %} -{% block page_title %} - {% blocktrans %}Impersonate user{% endblocktrans %} -{% endblock %} +{% block browser_title %}{% trans "Impersonate" %}{% endblock %} +{% block page_title %}{% trans "Impersonate" %}{% endblock %} {% block content %} {% if page.object_list %} diff --git a/aleksis/core/templates/templated_email/person_changed.email b/aleksis/core/templates/templated_email/person_changed.email index 2e1db653256873d3f72afcd34a1e19914d116480..1e0d8be25684486bfdceac0b979b461253c21df7 100644 --- a/aleksis/core/templates/templated_email/person_changed.email +++ b/aleksis/core/templates/templated_email/person_changed.email @@ -11,7 +11,7 @@ the person {{ person }} recently changed the following fields: {% endblocktrans %} - {% for field in send_notification_fields %} + {% for field in changed_fields %} * {{ field }} {% endfor %} {% endblock %} @@ -25,7 +25,7 @@ </p> <ul> - {% for field in send_notification_fields %} + {% for field in changed_fields %} <li>{{ field }}</li> {% endfor %} </ul> diff --git a/aleksis/core/templates/two_factor/core/login.html b/aleksis/core/templates/two_factor/core/login.html index 470aa879de8a6ffde5c15765b6375bc072ee4a79..9ea4bc6c24b7d9e764742bbddf75ceb86b785868 100644 --- a/aleksis/core/templates/two_factor/core/login.html +++ b/aleksis/core/templates/two_factor/core/login.html @@ -9,110 +9,118 @@ {% block content %} {% get_providers as socialaccount_providers %} - <div class="row"> - <div class="col m1 l2 xl3"></div> - <div class="col s12 m10 l8 xl6"> - <div class="card"> - <div class="card-content"> - {% if wizard.steps.current == 'auth' and socialaccount_providers %} - <div class="card-title">{% trans "Login with username and password" %}</div> - {% else %} - <div class="card-title">{% trans "Login" %}</div> - {% endif %} - {% if wizard.steps.current == "auth" and user.is_authenticated %} - <div class="alert warning"> - <p> - <i class="material-icons left">warning</i> - {% blocktrans %}You have no permission to view this page. Please login with an other account.{% endblocktrans %} - </p> - </div> - {% elif wizard.steps.current == 'auth' %} - <div class="alert primary"> - <p> - <i class="material-icons left">info</i> - {% blocktrans %}Please login to see this page.{% endblocktrans %} - </p> - </div> - {% endif %} - {% if not wizard.steps.current == "auth" %} - <div class="alert primary"> - <p> - <i class="material-icons left">info</i> - {% if wizard.steps.current == 'token' %} - {% if device.method == 'call' %} - {% blocktrans %} - We are calling your phone right now, please enter the - digits you hear. - {% endblocktrans %} - {% elif device.method == 'sms' %} - {% blocktrans %} - We sent you a text message, please enter the tokens we - sent. - {% endblocktrans %} - {% else %} + <form action="" method="post"> + {% csrf_token %} + <div class="row"> + <div class="col m1 l2 xl3"></div> + <div class="col s12 m10 l8 xl6"> + <div class="card"> + <div class="card-content"> + {% if wizard.steps.current == 'auth' and socialaccount_providers %} + <div class="card-title">{% trans "Login with username and password" %}</div> + {% else %} + <div class="card-title">{% trans "Login" %}</div> + {% endif %} + {% if wizard.steps.current == "auth" and user.is_authenticated %} + <div class="alert warning"> + <p> + <i class="material-icons left">warning</i> + {% blocktrans %}You have no permission to view this page. Please login with an other + account.{% endblocktrans %} + </p> + </div> + {% elif wizard.steps.current == 'auth' %} + <div class="alert primary"> + <p> + <i class="material-icons left">info</i> + {% blocktrans %}Please login to see this page.{% endblocktrans %} + </p> + </div> + {% endif %} + {% if not wizard.steps.current == "auth" %} + <div class="alert primary"> + <p> + <i class="material-icons left">info</i> + {% if wizard.steps.current == 'token' %} + {% if device.method == 'call' %} + {% blocktrans %} + We are calling your phone right now, please enter the + digits you hear. + {% endblocktrans %} + {% elif device.method == 'sms' %} + {% blocktrans %} + We sent you a text message, please enter the tokens we + sent. + {% endblocktrans %} + {% else %} + {% blocktrans %} + Please enter the tokens generated by your token + generator. + {% endblocktrans %} + {% endif %} + {% elif wizard.steps.current == 'backup' %} {% blocktrans %} - Please enter the tokens generated by your token - generator. + Use this form for entering backup tokens for logging in. + These tokens have been generated for you to print and keep safe. Please + enter one of these backup tokens to login to your account. {% endblocktrans %} {% endif %} - {% elif wizard.steps.current == 'backup' %} - {% blocktrans %} - Use this form for entering backup tokens for logging in. - These tokens have been generated for you to print and keep safe. Please - enter one of these backup tokens to login to your account. - {% endblocktrans %} - {% endif %} - </p> - </div> - {% endif %} + </p> + </div> + {% endif %} - <form id="login_form" action="" method="post"> - {% csrf_token %} {% include "two_factor/_wizard_forms.html" %} - - {% if other_devices %} - <p>{% trans "Or, alternatively, use one of your backup phones:" %}</p> - <p> - {% for other in other_devices %} - <button name="challenge_device" value="{{ other.persistent_id }}" class="btn" type="submit"> - {{ other|device_action }} - </button> - {% endfor %} - </p> - {% endif %} - {% if backup_tokens %} - <p>{% trans "As a last resort, you can use a backup token:" %}</p> - <p> - <button name="wizard_goto_step" type="submit" value="backup" class="btn"> - {% trans "Use Backup Token" %} - </button> - </p> + </div> + <div class="card-action-light"> + <button type="submit" class="btn green waves-effect waves-light"> + {% trans "Login" %} + <i class="material-icons right">send</i> + </button> + {% if request.site.preferences.auth__allow_password_change and wizard.steps.current == "auth" %} + <a href="{% url "account_reset_password" %}" class="btn-flat right waves-effect waves-light"> + {% trans "Reset password" %} + </a> {% endif %} - </form> - </div> - <div class="card-action-light"> - <button form="login_form" type="submit" class="btn green waves-effect waves-light"> - {% trans "Login" %} - <i class="material-icons right">send</i> - </button> - {% if request.site.preferences.auth__allow_password_change %} - <a href="{% url "account_reset_password" %}" class="btn-flat right waves-effect waves-light"> - {% trans "Reset password" %} - </a> - {% endif %} + </div> </div> - </div> - {% if wizard.steps.current == 'auth' and socialaccount_providers %} - <div class="card"> - <div class="card-content"> + {% if other_devices or backup_tokens %} + <div class="card"> + <div class="card-content"> + <div class="card-title">{% trans "Device currently not available?" %}</div> + {% if other_devices %} + <p>{% trans "Or, alternatively, use one of your backup phones:" %}</p> + <p> + {% for other in other_devices %} + <button name="challenge_device" value="{{ other.persistent_id }}" class="btn" type="submit"> + {{ other|device_action }} + </button> + {% endfor %} + </p> + {% endif %} + {% if backup_tokens %} + <p>{% trans "As a last resort, you can use a backup token:" %}</p> + <p> + <button name="wizard_goto_step" type="submit" value="backup" class="btn"> + {% trans "Use Backup Token" %} + </button> + </p> + {% endif %} + </div> + </div> + {% endif %} + {% if wizard.steps.current == 'auth' and socialaccount_providers %} + <div class="card"> + <div class="card-content"> <div class="card-title"> {% trans "Use alternative login options" %} </div> {% include "socialaccount/snippets/provider_list.html" with process="login" %} + </div> </div> - </div> - {% endif %} + {% endif %} + </div> </div> - </div> + </form> + {% endblock %} diff --git a/aleksis/core/tests/models/test_person.py b/aleksis/core/tests/models/test_person.py index b42194f22424566bea2b99adc42b6995dbfaf626..dbe11f71812977c79b0b0fef5b4b975eca33b2e7 100644 --- a/aleksis/core/tests/models/test_person.py +++ b/aleksis/core/tests/models/test_person.py @@ -9,3 +9,9 @@ def test_full_name(): _person = Person.objects.create(first_name="Jane", last_name="Doe") assert _person.full_name == "Doe, Jane" + + +def test_delete(): + _person = Person.objects.create(first_name="Jane", last_name="Doe") + _person.delete() + assert not Person.objects.filter(first_name="Jane", last_name="Doe").exists() diff --git a/aleksis/core/urls.py b/aleksis/core/urls.py index b09c6ff9456e1b7e749301a4f261fb5e642e380c..b3c2cc468aded72fe1b9e64af88e58b4fb936192 100644 --- a/aleksis/core/urls.py +++ b/aleksis/core/urls.py @@ -46,12 +46,11 @@ urlpatterns = [ path("school_terms/create/", views.SchoolTermCreateView.as_view(), name="create_school_term"), path("school_terms/<int:pk>/", views.SchoolTermEditView.as_view(), name="edit_school_term"), path("persons", views.persons, name="persons"), - path("persons/accounts", views.persons_accounts, name="persons_accounts"), - path("person", views.person, name="person"), - path("person/create", views.edit_person, name="create_person"), - path("person/<int:id_>", views.person, name="person_by_id"), - path("person/<int:id_>/edit", views.edit_person, name="edit_person_by_id"), - path("person/<int:id_>/delete", views.delete_person, name="delete_person_by_id"), + path("person/", views.person, name="person"), + path("person/create/", views.CreatePersonView.as_view(), name="create_person"), + path("person/<int:id_>/", views.person, name="person_by_id"), + path("person/<int:pk>/edit/", views.EditPersonView.as_view(), name="edit_person_by_id"), + path("person/<int:id_>/delete/", views.delete_person, name="delete_person_by_id"), path("groups", views.groups, name="groups"), path("groups/additional_fields", views.additional_fields, name="additional_fields"), path("groups/child_groups/", views.groups_child_groups, name="groups_child_groups"), diff --git a/aleksis/core/util/core_helpers.py b/aleksis/core/util/core_helpers.py index c7b4b591e662dd0ae15384a5b8028539033359fb..2c40caf51d41045685a74b67800cc9575d3cf2de 100644 --- a/aleksis/core/util/core_helpers.py +++ b/aleksis/core/util/core_helpers.py @@ -210,14 +210,6 @@ def custom_information_processor(request: HttpRequest) -> dict: return { "FOOTER_MENU": CustomMenu.get_default("footer"), - "ALTERNATIVE_LOGIN_VIEWS_LIST": [ - a[0] - for a in settings.ALTERNATIVE_LOGIN_VIEWS - if a[0] in settings.AUTHENTICATION_BACKENDS - ], - "ALTERNATIVE_LOGIN_VIEWS": [ - a for a in settings.ALTERNATIVE_LOGIN_VIEWS if a[0] in settings.AUTHENTICATION_BACKENDS - ], "ADMINS": settings.ADMINS, "PWA_ICONS": regrouped_pwa_icons, } diff --git a/aleksis/core/views.py b/aleksis/core/views.py index e24bafa1705465173a8ae9d54669ae23d880ee04..8918f3c35d9ef661ae711faecbac6fb054fdb526 100644 --- a/aleksis/core/views.py +++ b/aleksis/core/views.py @@ -47,7 +47,6 @@ from oauth2_provider.models import Application from reversion import set_user from reversion.views import RevisionMixin from rules.contrib.views import PermissionRequiredMixin, permission_required -from templated_email import send_templated_mail from aleksis.core.data_checks import DataCheckRegistry, check_data @@ -60,10 +59,9 @@ from .forms import ( EditAdditionalFieldForm, EditGroupForm, EditGroupTypeForm, - EditPersonForm, GroupPreferenceForm, + PersonForm, PersonPreferenceForm, - PersonsAccountsFormSet, SchoolTermForm, SitePreferenceForm, ) @@ -361,27 +359,6 @@ def groups(request: HttpRequest) -> HttpResponse: return render(request, "core/group/list.html", context) -@never_cache -@permission_required("core.link_persons_accounts_rule") -def persons_accounts(request: HttpRequest) -> HttpResponse: - """View allowing to batch-process linking of users to persons.""" - context = {} - - # Get all persons - persons_qs = Person.objects.all() - - # Form set with one form per known person - persons_accounts_formset = PersonsAccountsFormSet(request.POST or None, queryset=persons_qs) - - if request.method == "POST": - if persons_accounts_formset.is_valid(): - persons_accounts_formset.save() - - context["persons_accounts_formset"] = persons_accounts_formset - - return render(request, "core/person/accounts.html", context) - - @never_cache @permission_required("core.assign_child_groups_to_groups_rule") def groups_child_groups(request: HttpRequest) -> HttpResponse: @@ -420,59 +397,38 @@ def groups_child_groups(request: HttpRequest) -> HttpResponse: return render(request, "core/group/child_groups.html", context) -@never_cache -@permission_required("core.edit_person_rule", fn=objectgetter_optional(Person)) -def edit_person(request: HttpRequest, id_: Optional[int] = None) -> HttpResponse: - """Edit view for a single person, defaulting to logged-in person.""" - context = {} - - person = objectgetter_optional(Person)(request, id_) - context["person"] = person - - if id_: - # Edit form for existing group - edit_person_form = EditPersonForm( - request, request.POST or None, request.FILES or None, instance=person - ) - else: - # Empty form to create a new group - if request.user.has_perm("core.create_person_rule"): - edit_person_form = EditPersonForm(request, request.POST or None, request.FILES or None) - else: - raise PermissionDenied() - if request.method == "POST": - if edit_person_form.is_valid(): - if person and person == request.user.person: - # Check if user edited non-editable field - notification_fields = get_site_preferences()[ - "account__notification_on_person_change" - ] - send_notification_fields = set(edit_person_form.changed_data).intersection( - set(notification_fields) - ) - context["send_notification_fields"] = send_notification_fields - if send_notification_fields: - context["send_notification_fields"] = send_notification_fields - send_templated_mail( - template_name="person_changed", - from_email=request.user.person.mail_sender_via, - headers={ - "Reply-To": request.user.person.mail_sender, - "Sender": request.user.person.mail_sender, - }, - recipient_list=[ - get_site_preferences()["account__person_change_notification_contact"] - ], - context=context, - ) - with reversion.create_revision(): - set_user(request.user) - edit_person_form.save(commit=True) - messages.success(request, _("The person has been saved.")) +@method_decorator(never_cache, name="dispatch") +class CreatePersonView(PermissionRequiredMixin, AdvancedCreateView): + form_class = PersonForm + model = Person + permission_required = "core.create_person_rule" + template_name = "core/person/create.html" + success_message = _("The person has been saved.") - context["edit_person_form"] = edit_person_form - return render(request, "core/person/edit.html", context) +@method_decorator(never_cache, name="dispatch") +class EditPersonView(PermissionRequiredMixin, RevisionMixin, AdvancedEditView): + form_class = PersonForm + model = Person + permission_required = "core.edit_person_rule" + context_object_name = "person" + template_name = "core/person/edit.html" + success_message = _("The person has been saved.") + + def get_form_kwargs(self): + kwargs = super().get_form_kwargs() + kwargs["request"] = self.request + return kwargs + + def form_valid(self, form): + if self.object == self.request.user.person: + # Get all changed fields and send a notification about them + notification_fields = get_site_preferences()["account__notification_on_person_change"] + send_notification_fields = set(form.changed_data).intersection(set(notification_fields)) + + if send_notification_fields: + self.object.notify_about_changed_data(send_notification_fields) + return super().form_valid(form) def get_group_by_id(request: HttpRequest, id_: Optional[int] = None): diff --git a/poetry.lock b/poetry.lock index 1b9117c68f975c4c634e14f22efe415034e02771..c9d4b0e2db4557925a052ed17ac3f3958a389ee9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -6,11 +6,6 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "aleksis-builddeps" version = "4" @@ -63,11 +58,6 @@ python-versions = ">=3.6" [package.dependencies] vine = "5.0.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "appdirs" version = "1.4.4" @@ -76,11 +66,6 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "appnope" version = "0.1.2" @@ -89,11 +74,6 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "asgiref" version = "3.4.1" @@ -105,11 +85,6 @@ python-versions = ">=3.6" [package.extras] tests = ["pytest", "pytest-asyncio", "mypy (>=0.800)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "asn1crypto" version = "1.4.0" @@ -118,11 +93,6 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "atomicwrites" version = "1.4.0" @@ -131,11 +101,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "attrs" version = "21.2.0" @@ -150,11 +115,6 @@ docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "babel" version = "2.9.1" @@ -166,11 +126,6 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.dependencies] pytz = ">=2015.7" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "backcall" version = "0.2.0" @@ -179,11 +134,6 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "bandit" version = "1.7.0" @@ -199,11 +149,6 @@ PyYAML = ">=5.3.1" six = ">=1.10.0" stevedore = ">=1.20.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "beautifulsoup4" version = "4.10.0" @@ -219,11 +164,6 @@ soupsieve = ">1.2" html5lib = ["html5lib"] lxml = ["lxml"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "billiard" version = "3.6.4.0" @@ -232,11 +172,6 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "black" version = "19.10b0" @@ -257,11 +192,6 @@ typed-ast = ">=1.4.0" [package.extras] d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "bleach" version = "4.1.0" @@ -275,11 +205,6 @@ packaging = "*" six = ">=1.9.0" webencodings = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "boolean.py" version = "3.8" @@ -288,35 +213,25 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "boto3" -version = "1.18.52" +version = "1.19.3" description = "The AWS SDK for Python" category = "main" optional = true python-versions = ">= 3.6" [package.dependencies] -botocore = ">=1.21.52,<1.22.0" +botocore = ">=1.22.3,<1.23.0" jmespath = ">=0.7.1,<1.0.0" s3transfer = ">=0.5.0,<0.6.0" [package.extras] crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "botocore" -version = "1.21.52" +version = "1.22.3" description = "Low-level, data-driven core of boto 3." category = "main" optional = true @@ -328,17 +243,12 @@ python-dateutil = ">=2.1,<3.0.0" urllib3 = ">=1.25.4,<1.27" [package.extras] -crt = ["awscrt (==0.11.24)"] - -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" +crt = ["awscrt (==0.12.5)"] [[package]] name = "bs4" version = "0.0.1" -description = "Screen-scraping library" +description = "Dummy package for Beautiful Soup" category = "main" optional = false python-versions = "*" @@ -346,11 +256,6 @@ python-versions = "*" [package.dependencies] beautifulsoup4 = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "calendarweek" version = "0.5.0" @@ -362,11 +267,6 @@ python-versions = ">=3.7,<4.0" [package.extras] django = ["Django (>=2.2,<4.0)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "celery" version = "5.1.2" @@ -420,11 +320,6 @@ yaml = ["PyYAML (>=3.10)"] zookeeper = ["kazoo (>=1.3.1)"] zstd = ["zstandard"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "celery-haystack-ng" version = "0.20.post2" @@ -438,11 +333,6 @@ celery = ">=4.0" django-appconf = ">=0.4.1" django-haystack = ">=2.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "celery-progress" version = "0.1.1" @@ -456,27 +346,17 @@ rabbitmq = ["channels-rabbitmq"] redis = ["channels-redis"] websockets = ["channels"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "certifi" -version = "2021.5.30" +version = "2021.10.8" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "cffi" -version = "1.14.6" +version = "1.15.0" description = "Foreign Function Interface for Python calling C code." category = "main" optional = false @@ -485,14 +365,9 @@ python-versions = "*" [package.dependencies] pycparser = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "charset-normalizer" -version = "2.0.6" +version = "2.0.7" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false @@ -501,11 +376,6 @@ python-versions = ">=3.5.0" [package.extras] unicode_backport = ["unicodedata2"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "click" version = "7.1.2" @@ -514,11 +384,6 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "click-didyoumean" version = "0.3.0" @@ -530,11 +395,6 @@ python-versions = ">=3.6.2,<4.0.0" [package.dependencies] click = ">=7" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "click-plugins" version = "1.1.1" @@ -549,11 +409,6 @@ click = ">=4.0" [package.extras] dev = ["pytest (>=3.6)", "pytest-cov", "wheel", "coveralls"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "click-repl" version = "0.2.0" @@ -567,11 +422,6 @@ click = "*" prompt-toolkit = "*" six = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "colorama" version = "0.4.4" @@ -580,11 +430,6 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "colour" version = "0.1.5" @@ -596,11 +441,6 @@ python-versions = "*" [package.extras] test = ["nose"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "configobj" version = "5.0.6" @@ -612,30 +452,20 @@ python-versions = "*" [package.dependencies] six = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "coverage" -version = "5.5" +version = "6.0.2" description = "Code coverage measurement for Python" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +python-versions = ">=3.6" [package.extras] -toml = ["toml"] - -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" +toml = ["tomli"] [[package]] name = "cryptography" -version = "3.4.8" +version = "35.0.0" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" optional = false @@ -648,14 +478,9 @@ cffi = ">=1.12" docs = ["sphinx (>=1.6.5,!=1.8.0,!=3.1.0,!=3.1.1)", "sphinx-rtd-theme"] docstest = ["doc8", "pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling (>=4.0.1)"] pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] -sdist = ["setuptools-rust (>=0.11.4)"] +sdist = ["setuptools_rust (>=0.11.4)"] ssh = ["bcrypt (>=3.1.5)"] -test = ["pytest (>=6.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] - -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" +test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] [[package]] name = "curlylint" @@ -675,11 +500,6 @@ toml = ">=0.9.4" [package.extras] dev = ["black (==19.10b0)", "flake8 (==3.8.4)", "mypy (==0.812)", "pytest (==6.2.2)", "coverage (==5.4)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "decorator" version = "5.1.0" @@ -688,11 +508,6 @@ category = "main" optional = false python-versions = ">=3.5" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "defusedxml" version = "0.7.1" @@ -701,11 +516,6 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "deprecated" version = "1.2.13" @@ -720,11 +530,6 @@ wrapt = ">=1.10,<2" [package.extras] dev = ["tox", "bump2version (<1)", "sphinx (<2)", "importlib-metadata (<3)", "importlib-resources (<4)", "configparser (<5)", "sphinxcontrib-websupport (<2)", "zipp (<2)", "PyTest (<5)", "PyTest-Cov (<2.6)", "pytest", "pytest-cov"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "dj-database-url" version = "0.5.0" @@ -733,14 +538,9 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django" -version = "3.2.7" +version = "3.2.8" description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." category = "main" optional = false @@ -755,11 +555,6 @@ sqlparse = ">=0.2.2" argon2 = ["argon2-cffi (>=19.1.0)"] bcrypt = ["bcrypt"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-allauth" version = "0.45.0" @@ -775,11 +570,6 @@ python3-openid = ">=3.0.8" requests = "*" requests-oauthlib = ">=0.3.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-any-js" version = "1.1" @@ -791,11 +581,6 @@ python-versions = ">=3.7,<4.0" [package.dependencies] Django = ">=2.2,<4.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-appconf" version = "1.0.5" @@ -807,11 +592,6 @@ python-versions = ">=3.6" [package.dependencies] django = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-auth-ldap" version = "2.4.0" @@ -824,11 +604,6 @@ python-versions = ">=3.6" Django = ">=2.2" python-ldap = ">=3.1" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-bleach" version = "0.8.0" @@ -841,11 +616,6 @@ python-versions = "*" bleach = ">=1.5.0" Django = ">=1.11" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-cachalot" version = "2.4.3" @@ -857,11 +627,6 @@ python-versions = "*" [package.dependencies] Django = ">=2.2,<3.3" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-cache-memoize" version = "0.1.10" @@ -873,11 +638,6 @@ python-versions = ">=3.5" [package.extras] dev = ["flake8", "tox", "twine", "therapist", "black"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-celery-beat" version = "2.2.1" @@ -892,11 +652,6 @@ Django = ">=2.2,<4.0" django-timezone-field = ">=4.1.0,<5.0" python-crontab = ">=2.3.4" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-celery-email" version = "3.0.0" @@ -910,11 +665,6 @@ celery = ">=4.0" django = ">=2.2" django-appconf = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-celery-results" version = "2.2.0" @@ -926,11 +676,6 @@ python-versions = "*" [package.dependencies] celery = ">=5.0,<6.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-ckeditor" version = "6.1.0" @@ -942,11 +687,6 @@ python-versions = "*" [package.dependencies] django-js-asset = ">=1.2.2" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-cleanup" version = "5.2.0" @@ -955,24 +695,14 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-colorfield" -version = "0.4.3" +version = "0.4.5" description = "simple color field for your models with a nice color-picker in the admin-interface." category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-dbbackup" version = "3.3.0" @@ -986,11 +716,6 @@ Django = ">=1.5" pytz = "*" six = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-debug-toolbar" version = "3.2.2" @@ -1003,14 +728,9 @@ python-versions = ">=3.6" Django = ">=2.2" sqlparse = ">=0.2.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-dynamic-preferences" -version = "1.10.1" +version = "1.11.0" description = "Dynamic global and instance settings for your django project" category = "main" optional = false @@ -1021,11 +741,6 @@ django = ">=1.11" persisting-theory = ">=0.2.1" six = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-extensions" version = "3.1.3" @@ -1037,11 +752,6 @@ python-versions = ">=3.6" [package.dependencies] Django = ">=2.2" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-favicon-plus-reloaded" version = "1.1.3" @@ -1054,11 +764,6 @@ python-versions = "*" django = "*" pillow = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-filter" version = "2.4.0" @@ -1070,11 +775,6 @@ python-versions = ">=3.5" [package.dependencies] Django = ">=2.2" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-formtools" version = "2.3" @@ -1086,11 +786,6 @@ python-versions = ">=3.6" [package.dependencies] Django = ">=2.2" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-guardian" version = "2.4.0" @@ -1102,11 +797,6 @@ python-versions = ">=3.5" [package.dependencies] Django = ">=2.2" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-haystack" version = "3.0" @@ -1118,11 +808,6 @@ python-versions = "*" [package.dependencies] Django = ">=2.2" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-health-check" version = "3.16.4" @@ -1134,11 +819,6 @@ python-versions = "*" [package.dependencies] django = ">=2.2" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-impersonate" version = "1.7.3" @@ -1147,11 +827,6 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-ipware" version = "4.0.0" @@ -1160,11 +835,6 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-js-asset" version = "1.2.2" @@ -1173,11 +843,6 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-js-reverse" version = "0.9.1" @@ -1189,11 +854,6 @@ python-versions = "*" [package.dependencies] Django = ">=1.5" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-jsonstore" version = "0.5.0" @@ -1206,11 +866,6 @@ python-versions = "*" Django = ">=1.11" six = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-maintenance-mode" version = "0.16.1" @@ -1219,11 +874,6 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-material" version = "1.9.0" @@ -1235,11 +885,6 @@ python-versions = "*" [package.dependencies] six = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-menu-generator-ng" version = "1.2.3" @@ -1248,14 +893,9 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-model-utils" -version = "4.1.1" +version = "4.2.0" description = "Django model mixins and utilities" category = "main" optional = false @@ -1264,11 +904,6 @@ python-versions = "*" [package.dependencies] Django = ">=2.0.1" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-oauth-toolkit" version = "1.5.0" @@ -1284,11 +919,6 @@ oauthlib = ">=3.1.0" requests = ">=2.13.0" six = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-otp" version = "1.1.1" @@ -1303,11 +933,6 @@ django = ">=2.2" [package.extras] qrcode = ["qrcode"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-otp-yubikey" version = "1.0.0.post1" @@ -1320,11 +945,6 @@ python-versions = "*" django-otp = ">=1.0.0" YubiOTP = ">=0.2.2" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-phonenumber-field" version = "5.2.0" @@ -1341,11 +961,6 @@ phonenumbers = {version = ">=7.0.2", optional = true, markers = "extra == \"phon phonenumbers = ["phonenumbers (>=7.0.2)"] phonenumberslite = ["phonenumberslite (>=7.0.2)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-polymorphic" version = "3.0.0" @@ -1357,11 +972,6 @@ python-versions = "*" [package.dependencies] Django = ">=2.1" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-prometheus" version = "2.1.0" @@ -1373,11 +983,6 @@ python-versions = "*" [package.dependencies] prometheus-client = ">=0.7" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-redis" version = "5.0.0" @@ -1390,11 +995,6 @@ python-versions = ">=3.6" Django = ">=2.2" redis = ">=3.0.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-render-block" version = "0.8.1" @@ -1406,11 +1006,6 @@ python-versions = ">=3.5" [package.dependencies] django = ">=2.2" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-reversion" version = "4.0.0" @@ -1422,30 +1017,20 @@ python-versions = ">=3.6" [package.dependencies] django = ">=2.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-sass-processor" -version = "1.1" +version = "1.0.0" description = "SASS processor to compile SCSS files into *.css, while rendering, or offline." category = "main" optional = false python-versions = "*" [package.extras] -management-command = ["django-compressor (>=2.4)"] - -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" +management_command = ["django-compressor (>=2.4)"] [[package]] name = "django-select2" -version = "7.7.2" +version = "7.7.3" description = "Select2 option fields for Django" category = "main" optional = false @@ -1458,14 +1043,9 @@ django-appconf = ">=0.6.0" [package.extras] test = ["pytest", "pytest-cov", "pytest-django", "selenium"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-storages" -version = "1.11.1" +version = "1.12.2" description = "Support for many storage backends in Django" category = "main" optional = true @@ -1475,18 +1055,13 @@ python-versions = ">=3.5" Django = ">=2.2" [package.extras] -azure = ["azure-storage-blob (>=1.3.1,<12.0.0)"] +azure = ["azure-storage-blob (>=12.0.0)"] boto3 = ["boto3 (>=1.4.4)"] dropbox = ["dropbox (>=7.2.1)"] -google = ["google-cloud-storage (>=1.15.0)"] +google = ["google-cloud-storage (>=1.27.0)"] libcloud = ["apache-libcloud"] sftp = ["paramiko"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-stubs" version = "1.9.0" @@ -1504,11 +1079,6 @@ types-pytz = "*" types-PyYAML = "*" typing-extensions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-stubs-ext" version = "0.3.1" @@ -1521,14 +1091,9 @@ python-versions = ">=3.6" django = "*" typing-extensions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-tables2" -version = "2.4.0" +version = "2.4.1" description = "Table/data-grid framework for Django" category = "main" optional = false @@ -1540,11 +1105,6 @@ Django = ">=1.11" [package.extras] tablib = ["tablib"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-templated-email" version = "3.0.0" @@ -1556,11 +1116,6 @@ python-versions = "*" [package.dependencies] django-render-block = ">=0.5" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-timezone-field" version = "4.2.1" @@ -1576,11 +1131,6 @@ pytz = "*" [package.extras] rest_framework = ["djangorestframework (>=3.0.0)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-titofisto" version = "0.1.2.post1" @@ -1592,11 +1142,6 @@ python-versions = ">=3.9,<4.0" [package.dependencies] Django = ">2.2,<4.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-two-factor-auth" version = "1.13.1" @@ -1622,11 +1167,6 @@ phonenumberslite = ["phonenumberslite (>=7.0.9,<8.99)"] sms = ["twilio (>=6.0)"] yubikey = ["django-otp-yubikey"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-uwsgi-ng" version = "1.1.2" @@ -1638,24 +1178,14 @@ python-versions = "*" [package.extras] uwsgi = ["uwsgi"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-widget-tweaks" -version = "1.4.8" +version = "1.4.9" description = "Tweak the form field rendering in templates, not in python-level form definitions." category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "django-yarnpkg" version = "6.0.1" @@ -1668,11 +1198,6 @@ python-versions = "*" django = "*" six = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "djangorestframework" version = "3.12.4" @@ -1684,11 +1209,6 @@ python-versions = ">=3.5" [package.dependencies] django = ">=2.2" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "docutils" version = "0.16" @@ -1697,11 +1217,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "dparse" version = "0.5.1" @@ -1718,11 +1233,6 @@ toml = "*" [package.extras] pipenv = ["pipenv"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "dynaconf" version = "3.1.7" @@ -1745,11 +1255,6 @@ toml = ["toml"] vault = ["hvac"] yaml = ["ruamel.yaml"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "flake8" version = "3.9.2" @@ -1763,11 +1268,6 @@ mccabe = ">=0.6.0,<0.7.0" pycodestyle = ">=2.7.0,<2.8.0" pyflakes = ">=2.3.0,<2.4.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "flake8-bandit" version = "2.1.2" @@ -1782,11 +1282,6 @@ flake8 = "*" flake8-polyfill = "*" pycodestyle = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "flake8-black" version = "0.2.3" @@ -1800,11 +1295,6 @@ black = "*" flake8 = ">=3.0.0" toml = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "flake8-builtins" version = "1.5.3" @@ -1819,11 +1309,6 @@ flake8 = "*" [package.extras] test = ["coverage", "coveralls", "mock", "pytest", "pytest-cov"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "flake8-django" version = "1.1.2" @@ -1835,11 +1320,6 @@ python-versions = ">=3.6,<4.0" [package.dependencies] flake8 = ">=3.8.4,<4.0.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "flake8-docstrings" version = "1.6.0" @@ -1852,11 +1332,6 @@ python-versions = "*" flake8 = ">=3" pydocstyle = ">=2.1" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "flake8-fixme" version = "1.1.1" @@ -1865,31 +1340,21 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "flake8-isort" -version = "4.0.0" +version = "4.1.1" description = "flake8 plugin that integrates isort ." category = "dev" optional = false python-versions = "*" [package.dependencies] -flake8 = ">=3.2.1,<4" +flake8 = ">=3.2.1,<5" isort = ">=4.3.5,<6" testfixtures = ">=6.8.0,<7" [package.extras] -test = ["pytest (>=4.0.2,<6)", "toml"] - -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" +test = ["pytest-cov"] [[package]] name = "flake8-mypy" @@ -1904,11 +1369,6 @@ attrs = "*" flake8 = ">=3.0.0" mypy = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "flake8-polyfill" version = "1.0.2" @@ -1920,11 +1380,6 @@ python-versions = "*" [package.dependencies] flake8 = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "flake8-rst-docstrings" version = "0.2.3" @@ -1938,11 +1393,6 @@ flake8 = ">=3.0.0" pygments = "*" restructuredtext-lint = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "freezegun" version = "1.1.0" @@ -1954,26 +1404,16 @@ python-versions = ">=3.5" [package.dependencies] python-dateutil = ">=2.7" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "gitdb" -version = "4.0.7" +version = "4.0.9" description = "Git Object Database" category = "dev" optional = false -python-versions = ">=3.4" +python-versions = ">=3.6" [package.dependencies] -smmap = ">=3.0.1,<5" - -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" +smmap = ">=3.0.1,<6" [[package]] name = "gitpython" @@ -1987,11 +1427,6 @@ python-versions = ">=3.7" gitdb = ">=4.0.1,<5" typing-extensions = {version = ">=3.7.4.3", markers = "python_version < \"3.10\""} -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "haystack-redis" version = "0.0.1" @@ -2005,11 +1440,6 @@ django-haystack = "*" redis = "*" whoosh = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "html2text" version = "2020.1.16" @@ -2018,24 +1448,14 @@ category = "main" optional = false python-versions = ">=3.5" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "idna" -version = "3.2" +version = "3.3" description = "Internationalized Domain Names in Applications (IDNA)" category = "main" optional = false python-versions = ">=3.5" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "imagesize" version = "1.2.0" @@ -2044,11 +1464,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "iniconfig" version = "1.1.1" @@ -2057,11 +1472,6 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "ipython" version = "7.28.0" @@ -2094,11 +1504,6 @@ parallel = ["ipyparallel"] qtconsole = ["qtconsole"] test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.17)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "isort" version = "5.9.3" @@ -2108,16 +1513,11 @@ optional = false python-versions = ">=3.6.1,<4.0" [package.extras] -colors = ["colorama (>=0.4.3,<0.5.0)"] -requirements_deprecated_finder = ["pip-api", "pipreqs"] pipfile_deprecated_finder = ["pipreqs", "requirementslib"] +requirements_deprecated_finder = ["pipreqs", "pip-api"] +colors = ["colorama (>=0.4.3,<0.5.0)"] plugins = ["setuptools"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "jedi" version = "0.18.0" @@ -2133,14 +1533,9 @@ parso = ">=0.8.0,<0.9.0" qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<6.0.0)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "jinja2" -version = "3.0.1" +version = "3.0.2" description = "A very fast and expressive template engine." category = "dev" optional = false @@ -2152,11 +1547,6 @@ MarkupSafe = ">=2.0" [package.extras] i18n = ["Babel (>=2.7)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "jmespath" version = "0.10.0" @@ -2165,11 +1555,6 @@ category = "main" optional = true python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "jwcrypto" version = "1.0" @@ -2182,11 +1567,6 @@ python-versions = "*" cryptography = ">=2.3" deprecated = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "kombu" version = "5.1.0" @@ -2215,11 +1595,6 @@ sqs = ["boto3 (>=1.4.4)", "pycurl (==7.43.0.2)", "urllib3 (<1.26)"] yaml = ["PyYAML (>=3.10)"] zookeeper = ["kazoo (>=1.3.1)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "libsass" version = "0.21.0" @@ -2231,11 +1606,6 @@ python-versions = "*" [package.dependencies] six = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "license-expression" version = "1.2" @@ -2247,11 +1617,6 @@ python-versions = "*" [package.dependencies] "boolean.py" = ">=3.6,<4.0.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "markupsafe" version = "2.0.1" @@ -2260,11 +1625,6 @@ category = "dev" optional = false python-versions = ">=3.6" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "matplotlib-inline" version = "0.1.3" @@ -2276,11 +1636,6 @@ python-versions = ">=3.5" [package.dependencies] traitlets = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "mccabe" version = "0.6.1" @@ -2289,11 +1644,6 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "mypy" version = "0.910" @@ -2311,11 +1661,6 @@ typing-extensions = ">=3.7.4" dmypy = ["psutil (>=4.0)"] python2 = ["typed-ast (>=1.4.0,<1.5.0)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "mypy-extensions" version = "0.4.3" @@ -2324,11 +1669,6 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "oauthlib" version = "3.1.1" @@ -2342,11 +1682,6 @@ rsa = ["cryptography (>=3.0.0,<4)"] signals = ["blinker (>=1.4.0)"] signedtoken = ["cryptography (>=3.0.0,<4)", "pyjwt (>=2.0.0,<3)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "packaging" version = "21.0" @@ -2358,11 +1693,6 @@ python-versions = ">=3.6" [package.dependencies] pyparsing = ">=2.0.2" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "parso" version = "0.8.2" @@ -2375,11 +1705,6 @@ python-versions = ">=3.6" qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["docopt", "pytest (<6.0.0)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "parsy" version = "1.1.0" @@ -2388,11 +1713,6 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pathspec" version = "0.9.0" @@ -2401,11 +1721,6 @@ category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pbr" version = "5.6.0" @@ -2414,11 +1729,6 @@ category = "dev" optional = false python-versions = ">=2.6" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "persisting-theory" version = "0.2.1" @@ -2427,11 +1737,6 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pexpect" version = "4.8.0" @@ -2443,14 +1748,9 @@ python-versions = "*" [package.dependencies] ptyprocess = ">=0.5" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pg8000" -version = "1.21.2" +version = "1.22.0" description = "PostgreSQL interface library" category = "dev" optional = false @@ -2459,24 +1759,14 @@ python-versions = ">=3.6" [package.dependencies] scramp = ">=1.4.1" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "phonenumbers" -version = "8.12.33" +version = "8.12.35" description = "Python version of Google's common library for parsing, formatting, storing and validating international phone numbers." category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pickleshare" version = "0.7.5" @@ -2485,24 +1775,14 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pillow" -version = "8.3.2" +version = "8.4.0" description = "Python Imaging Library (Fork)" category = "main" optional = false python-versions = ">=3.6" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pluggy" version = "1.0.0" @@ -2515,11 +1795,6 @@ python-versions = ">=3.6" dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "prometheus-client" version = "0.11.0" @@ -2531,14 +1806,9 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.extras] twisted = ["twisted"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "prompt-toolkit" -version = "3.0.20" +version = "3.0.21" description = "Library for building powerful interactive command lines in Python" category = "main" optional = false @@ -2547,11 +1817,6 @@ python-versions = ">=3.6.2" [package.dependencies] wcwidth = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "psutil" version = "5.8.0" @@ -2563,11 +1828,6 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [package.extras] test = ["ipaddress", "mock", "unittest2", "enum34", "pywin32", "wmi"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "psycopg2" version = "2.9.1" @@ -2576,11 +1836,6 @@ category = "main" optional = false python-versions = ">=3.6" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "ptyprocess" version = "0.7.0" @@ -2589,11 +1844,6 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "py" version = "1.10.0" @@ -2602,11 +1852,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pyasn1" version = "0.4.8" @@ -2615,11 +1860,6 @@ category = "main" optional = true python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pyasn1-modules" version = "0.2.8" @@ -2631,11 +1871,6 @@ python-versions = "*" [package.dependencies] pyasn1 = ">=0.4.6,<0.5.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pycodestyle" version = "2.7.0" @@ -2644,11 +1879,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pycparser" version = "2.20" @@ -2657,24 +1887,14 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pycryptodome" -version = "3.10.4" +version = "3.11.0" description = "Cryptographic library for Python" category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pydocstyle" version = "6.1.1" @@ -2689,11 +1909,6 @@ snowballstemmer = "*" [package.extras] toml = ["toml"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pyflakes" version = "2.3.1" @@ -2702,11 +1917,6 @@ category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pygments" version = "2.10.0" @@ -2715,45 +1925,33 @@ category = "main" optional = false python-versions = ">=3.5" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pyjwt" -version = "2.1.0" +version = "2.3.0" description = "JSON Web Token implementation in Python" category = "main" optional = false python-versions = ">=3.6" [package.dependencies] -cryptography = {version = ">=3.3.1,<4.0.0", optional = true, markers = "extra == \"crypto\""} +cryptography = {version = ">=3.3.1", optional = true, markers = "extra == \"crypto\""} [package.extras] -crypto = ["cryptography (>=3.3.1,<4.0.0)"] -dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1,<4.0.0)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "mypy", "pre-commit"] +crypto = ["cryptography (>=3.3.1)"] +dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "mypy", "pre-commit"] docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pyparsing" -version = "2.4.7" +version = "3.0.1" description = "Python parsing module" category = "main" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.6" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" @@ -2776,11 +1974,6 @@ toml = "*" [package.extras] testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pytest-cov" version = "2.12.1" @@ -2797,11 +1990,6 @@ toml = "*" [package.extras] testing = ["fields", "hunter", "process-tests", "six", "pytest-xdist", "virtualenv"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pytest-django" version = "4.4.0" @@ -2817,11 +2005,6 @@ pytest = ">=5.4.0" docs = ["sphinx", "sphinx-rtd-theme"] testing = ["django", "django-configurations (>=2.0)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pytest-django-testing-postgresql" version = "0.1.post0" @@ -2834,11 +2017,6 @@ python-versions = "*" dj-database-url = "*" "testing.postgresql" = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pytest-sugar" version = "0.9.4" @@ -2852,14 +2030,9 @@ packaging = ">=14.1" pytest = ">=2.9" termcolor = ">=1.1.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "python-crontab" -version = "2.5.1" +version = "2.6.0" description = "Python Crontab API" category = "main" optional = false @@ -2872,11 +2045,6 @@ python-dateutil = "*" cron-description = ["cron-descriptor"] cron-schedule = ["croniter"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "python-dateutil" version = "2.8.2" @@ -2888,11 +2056,6 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" [package.dependencies] six = ">=1.5" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "python-gnupg" version = "0.4.7" @@ -2901,11 +2064,6 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "python-ldap" version = "3.3.1" @@ -2918,11 +2076,6 @@ python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*" pyasn1 = ">=0.3.7" pyasn1_modules = ">=0.1.5" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "python3-openid" version = "3.2.0" @@ -2938,36 +2091,21 @@ defusedxml = "*" mysql = ["mysql-connector-python"] postgresql = ["psycopg2"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pytz" -version = "2021.1" +version = "2021.3" description = "World timezone definitions, modern and historical" category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "pyyaml" -version = "5.4.1" +version = "6.0" description = "YAML parser and emitter for Python" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" - -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" +python-versions = ">=3.6" [[package]] name = "qrcode" @@ -2987,11 +2125,6 @@ maintainer = ["zest.releaser"] pil = ["pillow"] test = ["pytest", "pytest-cov", "mock"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "redis" version = "3.5.3" @@ -3003,24 +2136,14 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.extras] hiredis = ["hiredis (>=0.1.3)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "regex" -version = "2021.9.30" +version = "2021.10.23" description = "Alternative regular expression module, to replace re." category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "requests" version = "2.26.0" @@ -3039,11 +2162,6 @@ urllib3 = ">=1.21.1,<1.27" socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "requests-oauthlib" version = "1.3.0" @@ -3059,11 +2177,6 @@ requests = ">=2.0.0" [package.extras] rsa = ["oauthlib[signedtoken] (>=3.0.0)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "restructuredtext-lint" version = "1.3.2" @@ -3075,11 +2188,6 @@ python-versions = "*" [package.dependencies] docutils = ">=0.11,<1.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "ruamel.yaml" version = "0.17.16" @@ -3095,11 +2203,6 @@ python-versions = ">=3" docs = ["ryd"] jinja2 = ["ruamel.yaml.jinja2 (>=0.2)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "ruamel.yaml.clib" version = "0.2.6" @@ -3108,11 +2211,6 @@ category = "main" optional = false python-versions = ">=3.5" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "rules" version = "2.2" @@ -3121,11 +2219,6 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "s3transfer" version = "0.5.0" @@ -3140,11 +2233,6 @@ botocore = ">=1.12.36,<2.0a.0" [package.extras] crt = ["botocore[crt] (>=1.20.29,<2.0a.0)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "safety" version = "1.10.3" @@ -3159,11 +2247,6 @@ dparse = ">=0.5.1" packaging = "*" requests = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "scramp" version = "1.4.1" @@ -3175,11 +2258,6 @@ python-versions = ">=3.6" [package.dependencies] asn1crypto = ">=1.4.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "selenium" version = "3.141.0" @@ -3191,11 +2269,6 @@ python-versions = "*" [package.dependencies] urllib3 = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "six" version = "1.16.0" @@ -3204,23 +2277,13 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "smmap" -version = "4.0.0" +version = "5.0.0" description = "A pure Python implementation of a sliding window memory map manager" category = "dev" optional = false -python-versions = ">=3.5" - -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" +python-versions = ">=3.6" [[package]] name = "snowballstemmer" @@ -3230,11 +2293,6 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "soupsieve" version = "2.2.1" @@ -3243,11 +2301,6 @@ category = "main" optional = false python-versions = ">=3.6" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "spdx-license-list" version = "0.5.2" @@ -3256,11 +2309,6 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "sphinx" version = "3.5.4" @@ -3292,11 +2340,6 @@ docs = ["sphinxcontrib-websupport"] lint = ["flake8 (>=3.5.0)", "isort", "mypy (>=0.800)", "docutils-stubs"] test = ["pytest", "pytest-cov", "html5lib", "cython", "typed-ast"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "sphinx-autodoc-typehints" version = "1.12.0" @@ -3312,11 +2355,6 @@ Sphinx = ">=3.0" test = ["pytest (>=3.1.0)", "typing-extensions (>=3.5)", "sphobjinv (>=2.0)", "Sphinx (>=3.2.0)", "dataclasses"] type_comments = ["typed-ast (>=1.4.0)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "sphinx-materialdesign-theme" version = "0.1.11" @@ -3325,11 +2363,6 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "sphinxcontrib-applehelp" version = "1.0.2" @@ -3342,11 +2375,6 @@ python-versions = ">=3.5" lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "sphinxcontrib-devhelp" version = "1.0.2" @@ -3359,11 +2387,6 @@ python-versions = ">=3.5" lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "sphinxcontrib-django" version = "0.5.1" @@ -3372,11 +2395,6 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "sphinxcontrib-htmlhelp" version = "2.0.0" @@ -3389,11 +2407,6 @@ python-versions = ">=3.6" lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest", "html5lib"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "sphinxcontrib-jsmath" version = "1.0.1" @@ -3405,11 +2418,6 @@ python-versions = ">=3.5" [package.extras] test = ["pytest", "flake8", "mypy"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "sphinxcontrib-qthelp" version = "1.0.3" @@ -3422,11 +2430,6 @@ python-versions = ">=3.5" lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "sphinxcontrib-serializinghtml" version = "1.1.5" @@ -3439,11 +2442,6 @@ python-versions = ">=3.5" lint = ["flake8", "mypy", "docutils-stubs"] test = ["pytest"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "sqlparse" version = "0.4.2" @@ -3452,14 +2450,9 @@ category = "main" optional = false python-versions = ">=3.5" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "stevedore" -version = "3.4.0" +version = "3.5.0" description = "Manage dynamic plugins for Python applications" category = "dev" optional = false @@ -3468,11 +2461,6 @@ python-versions = ">=3.6" [package.dependencies] pbr = ">=2.0.0,<2.1.0 || >2.1.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "termcolor" version = "1.1.0" @@ -3481,11 +2469,6 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "testfixtures" version = "6.18.3" @@ -3499,11 +2482,6 @@ build = ["setuptools-git", "wheel", "twine"] docs = ["sphinx", "zope.component", "sybil", "twisted", "mock", "django (<2)", "django"] test = ["pytest (>=3.6)", "pytest-cov", "pytest-django", "zope.component", "sybil", "twisted", "mock", "django (<2)", "django"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "testing.common.database" version = "2.0.3" @@ -3515,11 +2493,6 @@ python-versions = "*" [package.extras] testing = ["nose"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "testing.postgresql" version = "1.3.0" @@ -3535,11 +2508,6 @@ pg8000 = ">=1.10" [package.extras] testing = ["sqlalchemy", "nose", "psycopg2"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "toml" version = "0.10.2" @@ -3548,14 +2516,9 @@ category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "traitlets" -version = "5.1.0" +version = "5.1.1" description = "Traitlets Python configuration system" category = "main" optional = false @@ -3564,14 +2527,9 @@ python-versions = ">=3.7" [package.extras] test = ["pytest"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "twilio" -version = "7.0.0" +version = "7.2.0" description = "Twilio API client and TwiML generator" category = "main" optional = false @@ -3582,11 +2540,6 @@ PyJWT = ">=2.0.0,<3.0.0" pytz = "*" requests = ">=2.0.0" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "typed-ast" version = "1.4.3" @@ -3595,37 +2548,22 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "types-pytz" -version = "2021.1.2" +version = "2021.3.0" description = "Typing stubs for pytz" category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "types-pyyaml" -version = "5.4.10" +version = "6.0.0" description = "Typing stubs for PyYAML" category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "typing-extensions" version = "3.10.0.2" @@ -3634,11 +2572,6 @@ category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "urllib3" version = "1.26.7" @@ -3652,24 +2585,14 @@ brotli = ["brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "uwsgi" -version = "2.0.19.1" +version = "2.0.20" description = "The uWSGI server" category = "dev" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "vine" version = "5.0.0" @@ -3678,11 +2601,6 @@ category = "main" optional = false python-versions = ">=3.6" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "wcwidth" version = "0.2.5" @@ -3691,11 +2609,6 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "webencodings" version = "0.5.1" @@ -3704,11 +2617,6 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "whoosh" version = "2.7.4" @@ -3717,23 +2625,13 @@ category = "main" optional = false python-versions = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [[package]] name = "wrapt" -version = "1.12.1" +version = "1.13.2" description = "Module for decorators, wrappers and monkey patching." category = "main" optional = false -python-versions = "*" - -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "yubiotp" @@ -3746,11 +2644,6 @@ python-versions = "*" [package.dependencies] pycryptodome = "*" -[package.source] -type = "legacy" -url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" -reference = "gitlab" - [extras] ldap = ["django-auth-ldap"] s3 = ["boto3", "django-storages"] @@ -3758,7 +2651,7 @@ s3 = ["boto3", "django-storages"] [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "95d36470d3b0297d1dc7921f52d66a758de153d002c5b98ffd9ed57bebe60a55" +content-hash = "9117742426e175d6402dac268ed74f7e72e084fe020e5ebf22e97915ff7acd0d" [metadata.files] alabaster = [ @@ -3830,12 +2723,12 @@ bleach = [ {file = "boolean.py-3.8.tar.gz", hash = "sha256:cc24e20f985d60cd4a3a5a1c0956dd12611159d32a75081dabd0c9ab981acaa4"}, ] boto3 = [ - {file = "boto3-1.18.52-py3-none-any.whl", hash = "sha256:27824d3767c5213f0006f71e552b912bc4659241b77ca8b0be0b813cf0518a9e"}, - {file = "boto3-1.18.52.tar.gz", hash = "sha256:5b585a279478bd6df4b07db7d6150f413ba6add1f38e68aaa533d3337efd0b22"}, + {file = "boto3-1.19.3-py3-none-any.whl", hash = "sha256:2dfc8cf34d6dfbdfca4c88e8fddf9fe95cde489fb83144fe35f989ec6790e325"}, + {file = "boto3-1.19.3.tar.gz", hash = "sha256:e36ffaf9969648e2f435aa1f0029956fea3aac52466eef3bcb43bde498a182dd"}, ] botocore = [ - {file = "botocore-1.21.52-py3-none-any.whl", hash = "sha256:e8797c0933c660e130cf2f51667f5003950d7e592f4c3944e8f04f201493d17a"}, - {file = "botocore-1.21.52.tar.gz", hash = "sha256:04c071aec4f1981b38e3be760838b976337fd6ebd95a31ceeca9f9e4b4733c1f"}, + {file = "botocore-1.22.3-py3-none-any.whl", hash = "sha256:aacdb9b8e09e356515966251d1e08d9929575a76af504992bfb941553dee59c2"}, + {file = "botocore-1.22.3.tar.gz", hash = "sha256:53ca22aeac9b53fe5ec1f40b8ca9620ffe8b054458abfeb9ab74bbe9e0b0ecfa"}, ] bs4 = [ {file = "bs4-0.0.1.tar.gz", hash = "sha256:36ecea1fd7cc5c0c6e4a1ff075df26d50da647b75376626cc186e2212886dd3a"}, @@ -3857,59 +2750,64 @@ celery-progress = [ {file = "celery_progress-0.1.1-py3-none-any.whl", hash = "sha256:36a1e58b4408c9bf6aa63908204b50960b005db8e13f3c94ce6f8d6a2a4d4a6c"}, ] certifi = [ - {file = "certifi-2021.5.30-py2.py3-none-any.whl", hash = "sha256:50b1e4f8446b06f41be7dd6338db18e0990601dce795c2b1686458aa7e8fa7d8"}, - {file = "certifi-2021.5.30.tar.gz", hash = "sha256:2bbf76fd432960138b3ef6dda3dde0544f27cbf8546c458e60baf371917ba9ee"}, + {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, + {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, ] cffi = [ - {file = "cffi-1.14.6-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:22b9c3c320171c108e903d61a3723b51e37aaa8c81255b5e7ce102775bd01e2c"}, - {file = "cffi-1.14.6-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:f0c5d1acbfca6ebdd6b1e3eded8d261affb6ddcf2186205518f1428b8569bb99"}, - {file = "cffi-1.14.6-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:99f27fefe34c37ba9875f224a8f36e31d744d8083e00f520f133cab79ad5e819"}, - {file = "cffi-1.14.6-cp27-cp27m-win32.whl", hash = "sha256:55af55e32ae468e9946f741a5d51f9896da6b9bf0bbdd326843fec05c730eb20"}, - {file = "cffi-1.14.6-cp27-cp27m-win_amd64.whl", hash = "sha256:7bcac9a2b4fdbed2c16fa5681356d7121ecabf041f18d97ed5b8e0dd38a80224"}, - {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ed38b924ce794e505647f7c331b22a693bee1538fdf46b0222c4717b42f744e7"}, - {file = "cffi-1.14.6-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:e22dcb48709fc51a7b58a927391b23ab37eb3737a98ac4338e2448bef8559b33"}, - {file = "cffi-1.14.6-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:aedb15f0a5a5949ecb129a82b72b19df97bbbca024081ed2ef88bd5c0a610534"}, - {file = "cffi-1.14.6-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:48916e459c54c4a70e52745639f1db524542140433599e13911b2f329834276a"}, - {file = "cffi-1.14.6-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f627688813d0a4140153ff532537fbe4afea5a3dffce1f9deb7f91f848a832b5"}, - {file = "cffi-1.14.6-cp35-cp35m-win32.whl", hash = "sha256:f0010c6f9d1a4011e429109fda55a225921e3206e7f62a0c22a35344bfd13cca"}, - {file = "cffi-1.14.6-cp35-cp35m-win_amd64.whl", hash = "sha256:57e555a9feb4a8460415f1aac331a2dc833b1115284f7ded7278b54afc5bd218"}, - {file = "cffi-1.14.6-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e8c6a99be100371dbb046880e7a282152aa5d6127ae01783e37662ef73850d8f"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:19ca0dbdeda3b2615421d54bef8985f72af6e0c47082a8d26122adac81a95872"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:d950695ae4381ecd856bcaf2b1e866720e4ab9a1498cba61c602e56630ca7195"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9dc245e3ac69c92ee4c167fbdd7428ec1956d4e754223124991ef29eb57a09d"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8661b2ce9694ca01c529bfa204dbb144b275a31685a075ce123f12331be790b"}, - {file = "cffi-1.14.6-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b315d709717a99f4b27b59b021e6207c64620790ca3e0bde636a6c7f14618abb"}, - {file = "cffi-1.14.6-cp36-cp36m-win32.whl", hash = "sha256:80b06212075346b5546b0417b9f2bf467fea3bfe7352f781ffc05a8ab24ba14a"}, - {file = "cffi-1.14.6-cp36-cp36m-win_amd64.whl", hash = "sha256:a9da7010cec5a12193d1af9872a00888f396aba3dc79186604a09ea3ee7c029e"}, - {file = "cffi-1.14.6-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:4373612d59c404baeb7cbd788a18b2b2a8331abcc84c3ba40051fcd18b17a4d5"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f10afb1004f102c7868ebfe91c28f4a712227fe4cb24974350ace1f90e1febbf"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:fd4305f86f53dfd8cd3522269ed7fc34856a8ee3709a5e28b2836b2db9d4cd69"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6d6169cb3c6c2ad50db5b868db6491a790300ade1ed5d1da29289d73bbe40b56"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5d4b68e216fc65e9fe4f524c177b54964af043dde734807586cf5435af84045c"}, - {file = "cffi-1.14.6-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33791e8a2dc2953f28b8d8d300dde42dd929ac28f974c4b4c6272cb2955cb762"}, - {file = "cffi-1.14.6-cp37-cp37m-win32.whl", hash = "sha256:0c0591bee64e438883b0c92a7bed78f6290d40bf02e54c5bf0978eaf36061771"}, - {file = "cffi-1.14.6-cp37-cp37m-win_amd64.whl", hash = "sha256:8eb687582ed7cd8c4bdbff3df6c0da443eb89c3c72e6e5dcdd9c81729712791a"}, - {file = "cffi-1.14.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba6f2b3f452e150945d58f4badd92310449876c4c954836cfb1803bdd7b422f0"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux1_i686.whl", hash = "sha256:64fda793737bc4037521d4899be780534b9aea552eb673b9833b01f945904c2e"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:9f3e33c28cd39d1b655ed1ba7247133b6f7fc16fa16887b120c0c670e35ce346"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:26bb2549b72708c833f5abe62b756176022a7b9a7f689b571e74c8478ead51dc"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb687a11f0a7a1839719edd80f41e459cc5366857ecbed383ff376c4e3cc6afd"}, - {file = "cffi-1.14.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d2ad4d668a5c0645d281dcd17aff2be3212bc109b33814bbb15c4939f44181cc"}, - {file = "cffi-1.14.6-cp38-cp38-win32.whl", hash = "sha256:487d63e1454627c8e47dd230025780e91869cfba4c753a74fda196a1f6ad6548"}, - {file = "cffi-1.14.6-cp38-cp38-win_amd64.whl", hash = "sha256:c33d18eb6e6bc36f09d793c0dc58b0211fccc6ae5149b808da4a62660678b156"}, - {file = "cffi-1.14.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:06c54a68935738d206570b20da5ef2b6b6d92b38ef3ec45c5422c0ebaf338d4d"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux1_i686.whl", hash = "sha256:f174135f5609428cc6e1b9090f9268f5c8935fddb1b25ccb8255a2d50de6789e"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f3ebe6e73c319340830a9b2825d32eb6d8475c1dac020b4f0aa774ee3b898d1c"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3c8d896becff2fa653dc4438b54a5a25a971d1f4110b32bd3068db3722c80202"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4922cd707b25e623b902c86188aca466d3620892db76c0bdd7b99a3d5e61d35f"}, - {file = "cffi-1.14.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c9e005e9bd57bc987764c32a1bee4364c44fdc11a3cc20a40b93b444984f2b87"}, - {file = "cffi-1.14.6-cp39-cp39-win32.whl", hash = "sha256:eb9e2a346c5238a30a746893f23a9535e700f8192a68c07c0258e7ece6ff3728"}, - {file = "cffi-1.14.6-cp39-cp39-win_amd64.whl", hash = "sha256:818014c754cd3dba7229c0f5884396264d51ffb87ec86e927ef0be140bfdb0d2"}, - {file = "cffi-1.14.6.tar.gz", hash = "sha256:c9a875ce9d7fe32887784274dd533c57909b7b1dcadcc128a2ac21331a9765dd"}, + {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"}, + {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"}, + {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"}, + {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"}, + {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"}, + {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"}, + {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"}, + {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"}, + {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"}, + {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"}, + {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"}, + {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"}, + {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"}, + {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"}, + {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"}, + {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"}, + {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"}, + {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"}, + {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"}, + {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"}, + {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"}, + {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"}, + {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"}, + {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"}, + {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"}, + {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"}, + {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"}, + {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"}, + {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, + {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, ] charset-normalizer = [ - {file = "charset-normalizer-2.0.6.tar.gz", hash = "sha256:5ec46d183433dcbd0ab716f2d7f29d8dee50505b3fdb40c6b985c7c4f5a3591f"}, - {file = "charset_normalizer-2.0.6-py3-none-any.whl", hash = "sha256:5d209c0a931f215cee683b6445e2d77677e7e75e159f78def0db09d68fafcaa6"}, + {file = "charset-normalizer-2.0.7.tar.gz", hash = "sha256:e019de665e2bcf9c2b64e2e5aa025fa991da8720daa3c1138cadd2fd1856aed0"}, + {file = "charset_normalizer-2.0.7-py3-none-any.whl", hash = "sha256:f7af805c321bfa1ce6714c51f254e0d5bb5e5834039bc17db7ebe3a4cec9492b"}, ] click = [ {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, @@ -3939,77 +2837,61 @@ configobj = [ {file = "configobj-5.0.6.tar.gz", hash = "sha256:a2f5650770e1c87fb335af19a9b7eb73fc05ccf22144eb68db7d00cd2bcb0902"}, ] coverage = [ - {file = "coverage-5.5-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:b6d534e4b2ab35c9f93f46229363e17f63c53ad01330df9f2d6bd1187e5eaacf"}, - {file = "coverage-5.5-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:b7895207b4c843c76a25ab8c1e866261bcfe27bfaa20c192de5190121770672b"}, - {file = "coverage-5.5-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:c2723d347ab06e7ddad1a58b2a821218239249a9e4365eaff6649d31180c1669"}, - {file = "coverage-5.5-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:900fbf7759501bc7807fd6638c947d7a831fc9fdf742dc10f02956ff7220fa90"}, - {file = "coverage-5.5-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:004d1880bed2d97151facef49f08e255a20ceb6f9432df75f4eef018fdd5a78c"}, - {file = "coverage-5.5-cp27-cp27m-win32.whl", hash = "sha256:06191eb60f8d8a5bc046f3799f8a07a2d7aefb9504b0209aff0b47298333302a"}, - {file = "coverage-5.5-cp27-cp27m-win_amd64.whl", hash = "sha256:7501140f755b725495941b43347ba8a2777407fc7f250d4f5a7d2a1050ba8e82"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:372da284cfd642d8e08ef606917846fa2ee350f64994bebfbd3afb0040436905"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:8963a499849a1fc54b35b1c9f162f4108017b2e6db2c46c1bed93a72262ed083"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:869a64f53488f40fa5b5b9dcb9e9b2962a66a87dab37790f3fcfb5144b996ef5"}, - {file = "coverage-5.5-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:4a7697d8cb0f27399b0e393c0b90f0f1e40c82023ea4d45d22bce7032a5d7b81"}, - {file = "coverage-5.5-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:8d0a0725ad7c1a0bcd8d1b437e191107d457e2ec1084b9f190630a4fb1af78e6"}, - {file = "coverage-5.5-cp310-cp310-manylinux1_x86_64.whl", hash = "sha256:51cb9476a3987c8967ebab3f0fe144819781fca264f57f89760037a2ea191cb0"}, - {file = "coverage-5.5-cp310-cp310-win_amd64.whl", hash = "sha256:c0891a6a97b09c1f3e073a890514d5012eb256845c451bd48f7968ef939bf4ae"}, - {file = "coverage-5.5-cp35-cp35m-macosx_10_9_x86_64.whl", hash = "sha256:3487286bc29a5aa4b93a072e9592f22254291ce96a9fbc5251f566b6b7343cdb"}, - {file = "coverage-5.5-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:deee1077aae10d8fa88cb02c845cfba9b62c55e1183f52f6ae6a2df6a2187160"}, - {file = "coverage-5.5-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f11642dddbb0253cc8853254301b51390ba0081750a8ac03f20ea8103f0c56b6"}, - {file = "coverage-5.5-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:6c90e11318f0d3c436a42409f2749ee1a115cd8b067d7f14c148f1ce5574d701"}, - {file = "coverage-5.5-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:30c77c1dc9f253283e34c27935fded5015f7d1abe83bc7821680ac444eaf7793"}, - {file = "coverage-5.5-cp35-cp35m-win32.whl", hash = "sha256:9a1ef3b66e38ef8618ce5fdc7bea3d9f45f3624e2a66295eea5e57966c85909e"}, - {file = "coverage-5.5-cp35-cp35m-win_amd64.whl", hash = "sha256:972c85d205b51e30e59525694670de6a8a89691186012535f9d7dbaa230e42c3"}, - {file = "coverage-5.5-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:af0e781009aaf59e25c5a678122391cb0f345ac0ec272c7961dc5455e1c40066"}, - {file = "coverage-5.5-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:74d881fc777ebb11c63736622b60cb9e4aee5cace591ce274fb69e582a12a61a"}, - {file = "coverage-5.5-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:92b017ce34b68a7d67bd6d117e6d443a9bf63a2ecf8567bb3d8c6c7bc5014465"}, - {file = "coverage-5.5-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d636598c8305e1f90b439dbf4f66437de4a5e3c31fdf47ad29542478c8508bbb"}, - {file = "coverage-5.5-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:41179b8a845742d1eb60449bdb2992196e211341818565abded11cfa90efb821"}, - {file = "coverage-5.5-cp36-cp36m-win32.whl", hash = "sha256:040af6c32813fa3eae5305d53f18875bedd079960822ef8ec067a66dd8afcd45"}, - {file = "coverage-5.5-cp36-cp36m-win_amd64.whl", hash = "sha256:5fec2d43a2cc6965edc0bb9e83e1e4b557f76f843a77a2496cbe719583ce8184"}, - {file = "coverage-5.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:18ba8bbede96a2c3dde7b868de9dcbd55670690af0988713f0603f037848418a"}, - {file = "coverage-5.5-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:2910f4d36a6a9b4214bb7038d537f015346f413a975d57ca6b43bf23d6563b53"}, - {file = "coverage-5.5-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:f0b278ce10936db1a37e6954e15a3730bea96a0997c26d7fee88e6c396c2086d"}, - {file = "coverage-5.5-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:796c9c3c79747146ebd278dbe1e5c5c05dd6b10cc3bcb8389dfdf844f3ead638"}, - {file = "coverage-5.5-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:53194af30d5bad77fcba80e23a1441c71abfb3e01192034f8246e0d8f99528f3"}, - {file = "coverage-5.5-cp37-cp37m-win32.whl", hash = "sha256:184a47bbe0aa6400ed2d41d8e9ed868b8205046518c52464fde713ea06e3a74a"}, - {file = "coverage-5.5-cp37-cp37m-win_amd64.whl", hash = "sha256:2949cad1c5208b8298d5686d5a85b66aae46d73eec2c3e08c817dd3513e5848a"}, - {file = "coverage-5.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:217658ec7187497e3f3ebd901afdca1af062b42cfe3e0dafea4cced3983739f6"}, - {file = "coverage-5.5-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1aa846f56c3d49205c952d8318e76ccc2ae23303351d9270ab220004c580cfe2"}, - {file = "coverage-5.5-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:24d4a7de75446be83244eabbff746d66b9240ae020ced65d060815fac3423759"}, - {file = "coverage-5.5-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:d1f8bf7b90ba55699b3a5e44930e93ff0189aa27186e96071fac7dd0d06a1873"}, - {file = "coverage-5.5-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:970284a88b99673ccb2e4e334cfb38a10aab7cd44f7457564d11898a74b62d0a"}, - {file = "coverage-5.5-cp38-cp38-win32.whl", hash = "sha256:01d84219b5cdbfc8122223b39a954820929497a1cb1422824bb86b07b74594b6"}, - {file = "coverage-5.5-cp38-cp38-win_amd64.whl", hash = "sha256:2e0d881ad471768bf6e6c2bf905d183543f10098e3b3640fc029509530091502"}, - {file = "coverage-5.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d1f9ce122f83b2305592c11d64f181b87153fc2c2bbd3bb4a3dde8303cfb1a6b"}, - {file = "coverage-5.5-cp39-cp39-manylinux1_i686.whl", hash = "sha256:13c4ee887eca0f4c5a247b75398d4114c37882658300e153113dafb1d76de529"}, - {file = "coverage-5.5-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:52596d3d0e8bdf3af43db3e9ba8dcdaac724ba7b5ca3f6358529d56f7a166f8b"}, - {file = "coverage-5.5-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:2cafbbb3af0733db200c9b5f798d18953b1a304d3f86a938367de1567f4b5bff"}, - {file = "coverage-5.5-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:44d654437b8ddd9eee7d1eaee28b7219bec228520ff809af170488fd2fed3e2b"}, - {file = "coverage-5.5-cp39-cp39-win32.whl", hash = "sha256:d314ed732c25d29775e84a960c3c60808b682c08d86602ec2c3008e1202e3bb6"}, - {file = "coverage-5.5-cp39-cp39-win_amd64.whl", hash = "sha256:13034c4409db851670bc9acd836243aeee299949bd5673e11844befcb0149f03"}, - {file = "coverage-5.5-pp36-none-any.whl", hash = "sha256:f030f8873312a16414c0d8e1a1ddff2d3235655a2174e3648b4fa66b3f2f1079"}, - {file = "coverage-5.5-pp37-none-any.whl", hash = "sha256:2a3859cb82dcbda1cfd3e6f71c27081d18aa251d20a17d87d26d4cd216fb0af4"}, - {file = "coverage-5.5.tar.gz", hash = "sha256:ebe78fe9a0e874362175b02371bdfbee64d8edc42a044253ddf4ee7d3c15212c"}, + {file = "coverage-6.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1549e1d08ce38259de2bc3e9a0d5f3642ff4a8f500ffc1b2df73fd621a6cdfc0"}, + {file = "coverage-6.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcae10fccb27ca2a5f456bf64d84110a5a74144be3136a5e598f9d9fb48c0caa"}, + {file = "coverage-6.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:53a294dc53cfb39c74758edaa6305193fb4258a30b1f6af24b360a6c8bd0ffa7"}, + {file = "coverage-6.0.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8251b37be1f2cd9c0e5ccd9ae0380909c24d2a5ed2162a41fcdbafaf59a85ebd"}, + {file = "coverage-6.0.2-cp310-cp310-win32.whl", hash = "sha256:db42baa892cba723326284490283a68d4de516bfb5aaba369b4e3b2787a778b7"}, + {file = "coverage-6.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:bbffde2a68398682623d9dd8c0ca3f46fda074709b26fcf08ae7a4c431a6ab2d"}, + {file = "coverage-6.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:60e51a3dd55540bec686d7fff61b05048ca31e804c1f32cbb44533e6372d9cc3"}, + {file = "coverage-6.0.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a6a9409223a27d5ef3cca57dd7cd4dfcb64aadf2fad5c3b787830ac9223e01a"}, + {file = "coverage-6.0.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4b34ae4f51bbfa5f96b758b55a163d502be3dcb24f505d0227858c2b3f94f5b9"}, + {file = "coverage-6.0.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3bbda1b550e70fa6ac40533d3f23acd4f4e9cb4e6e77251ce77fdf41b3309fb2"}, + {file = "coverage-6.0.2-cp36-cp36m-win32.whl", hash = "sha256:4e28d2a195c533b58fc94a12826f4431726d8eb029ac21d874345f943530c122"}, + {file = "coverage-6.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:a82d79586a0a4f5fd1cf153e647464ced402938fbccb3ffc358c7babd4da1dd9"}, + {file = "coverage-6.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:3be1206dc09fb6298de3fce70593e27436862331a85daee36270b6d0e1c251c4"}, + {file = "coverage-6.0.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c9cd3828bbe1a40070c11fe16a51df733fd2f0cb0d745fb83b7b5c1f05967df7"}, + {file = "coverage-6.0.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:d036dc1ed8e1388e995833c62325df3f996675779541f682677efc6af71e96cc"}, + {file = "coverage-6.0.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:04560539c19ec26995ecfb3d9307ff154fbb9a172cb57e3b3cfc4ced673103d1"}, + {file = "coverage-6.0.2-cp37-cp37m-win32.whl", hash = "sha256:e4fb7ced4d9dec77d6cf533acfbf8e1415fe799430366affb18d69ee8a3c6330"}, + {file = "coverage-6.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:77b1da5767ed2f44611bc9bc019bc93c03fa495728ec389759b6e9e5039ac6b1"}, + {file = "coverage-6.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:61b598cbdbaae22d9e34e3f675997194342f866bb1d781da5d0be54783dce1ff"}, + {file = "coverage-6.0.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:36e9040a43d2017f2787b28d365a4bb33fcd792c7ff46a047a04094dc0e2a30d"}, + {file = "coverage-6.0.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9f1627e162e3864a596486774876415a7410021f4b67fd2d9efdf93ade681afc"}, + {file = "coverage-6.0.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:e7a0b42db2a47ecb488cde14e0f6c7679a2c5a9f44814393b162ff6397fcdfbb"}, + {file = "coverage-6.0.2-cp38-cp38-win32.whl", hash = "sha256:a1b73c7c4d2a42b9d37dd43199c5711d91424ff3c6c22681bc132db4a4afec6f"}, + {file = "coverage-6.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:1db67c497688fd4ba85b373b37cc52c50d437fd7267520ecd77bddbd89ea22c9"}, + {file = "coverage-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f2f184bf38e74f152eed7f87e345b51f3ab0b703842f447c22efe35e59942c24"}, + {file = "coverage-6.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cd1cf1deb3d5544bd942356364a2fdc8959bad2b6cf6eb17f47d301ea34ae822"}, + {file = "coverage-6.0.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ad9b8c1206ae41d46ec7380b78ba735ebb77758a650643e841dd3894966c31d0"}, + {file = "coverage-6.0.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:381d773d896cc7f8ba4ff3b92dee4ed740fb88dfe33b6e42efc5e8ab6dfa1cfe"}, + {file = "coverage-6.0.2-cp39-cp39-win32.whl", hash = "sha256:424c44f65e8be58b54e2b0bd1515e434b940679624b1b72726147cfc6a9fc7ce"}, + {file = "coverage-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:abbff240f77347d17306d3201e14431519bf64495648ca5a49571f988f88dee9"}, + {file = "coverage-6.0.2-pp36-none-any.whl", hash = "sha256:7092eab374346121805fb637572483270324407bf150c30a3b161fc0c4ca5164"}, + {file = "coverage-6.0.2-pp37-none-any.whl", hash = "sha256:30922626ce6f7a5a30bdba984ad21021529d3d05a68b4f71ea3b16bda35b8895"}, + {file = "coverage-6.0.2.tar.gz", hash = "sha256:6807947a09510dc31fa86f43595bf3a14017cd60bf633cc746d52141bfa6b149"}, ] cryptography = [ - {file = "cryptography-3.4.8-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:a00cf305f07b26c351d8d4e1af84ad7501eca8a342dedf24a7acb0e7b7406e14"}, - {file = "cryptography-3.4.8-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:f44d141b8c4ea5eb4dbc9b3ad992d45580c1d22bf5e24363f2fbf50c2d7ae8a7"}, - {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0a7dcbcd3f1913f664aca35d47c1331fce738d44ec34b7be8b9d332151b0b01e"}, - {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:34dae04a0dce5730d8eb7894eab617d8a70d0c97da76b905de9efb7128ad7085"}, - {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1eb7bb0df6f6f583dd8e054689def236255161ebbcf62b226454ab9ec663746b"}, - {file = "cryptography-3.4.8-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:9965c46c674ba8cc572bc09a03f4c649292ee73e1b683adb1ce81e82e9a6a0fb"}, - {file = "cryptography-3.4.8-cp36-abi3-win32.whl", hash = "sha256:21ca464b3a4b8d8e86ba0ee5045e103a1fcfac3b39319727bc0fc58c09c6aff7"}, - {file = "cryptography-3.4.8-cp36-abi3-win_amd64.whl", hash = "sha256:3520667fda779eb788ea00080124875be18f2d8f0848ec00733c0ec3bb8219fc"}, - {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d2a6e5ef66503da51d2110edf6c403dc6b494cc0082f85db12f54e9c5d4c3ec5"}, - {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a305600e7a6b7b855cd798e00278161b681ad6e9b7eca94c721d5f588ab212af"}, - {file = "cryptography-3.4.8-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:3fa3a7ccf96e826affdf1a0a9432be74dc73423125c8f96a909e3835a5ef194a"}, - {file = "cryptography-3.4.8-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:d9ec0e67a14f9d1d48dd87a2531009a9b251c02ea42851c060b25c782516ff06"}, - {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b0fbfae7ff7febdb74b574055c7466da334a5371f253732d7e2e7525d570498"}, - {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94fff993ee9bc1b2440d3b7243d488c6a3d9724cc2b09cdb297f6a886d040ef7"}, - {file = "cryptography-3.4.8-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:8695456444f277af73a4877db9fc979849cd3ee74c198d04fc0776ebc3db52b9"}, - {file = "cryptography-3.4.8-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:cd65b60cfe004790c795cc35f272e41a3df4631e2fb6b35aa7ac6ef2859d554e"}, - {file = "cryptography-3.4.8.tar.gz", hash = "sha256:94cc5ed4ceaefcbe5bf38c8fba6a21fc1d365bb8fb826ea1688e3370b2e24a1c"}, + {file = "cryptography-35.0.0-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:d57e0cdc1b44b6cdf8af1d01807db06886f10177469312fbde8f44ccbb284bc9"}, + {file = "cryptography-35.0.0-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:ced40344e811d6abba00295ced98c01aecf0c2de39481792d87af4fa58b7b4d6"}, + {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:54b2605e5475944e2213258e0ab8696f4f357a31371e538ef21e8d61c843c28d"}, + {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:7b7ceeff114c31f285528ba8b390d3e9cfa2da17b56f11d366769a807f17cbaa"}, + {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d69645f535f4b2c722cfb07a8eab916265545b3475fdb34e0be2f4ee8b0b15e"}, + {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a2d0e0acc20ede0f06ef7aa58546eee96d2592c00f450c9acb89c5879b61992"}, + {file = "cryptography-35.0.0-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:07bb7fbfb5de0980590ddfc7f13081520def06dc9ed214000ad4372fb4e3c7f6"}, + {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7eba2cebca600a7806b893cb1d541a6e910afa87e97acf2021a22b32da1df52d"}, + {file = "cryptography-35.0.0-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:18d90f4711bf63e2fb21e8c8e51ed8189438e6b35a6d996201ebd98a26abbbe6"}, + {file = "cryptography-35.0.0-cp36-abi3-win32.whl", hash = "sha256:c10c797ac89c746e488d2ee92bd4abd593615694ee17b2500578b63cad6b93a8"}, + {file = "cryptography-35.0.0-cp36-abi3-win_amd64.whl", hash = "sha256:7075b304cd567694dc692ffc9747f3e9cb393cc4aa4fb7b9f3abd6f5c4e43588"}, + {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a688ebcd08250eab5bb5bca318cc05a8c66de5e4171a65ca51db6bd753ff8953"}, + {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d99915d6ab265c22873f1b4d6ea5ef462ef797b4140be4c9d8b179915e0985c6"}, + {file = "cryptography-35.0.0-pp36-pypy36_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:928185a6d1ccdb816e883f56ebe92e975a262d31cc536429041921f8cb5a62fd"}, + {file = "cryptography-35.0.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ebeddd119f526bcf323a89f853afb12e225902a24d29b55fe18dd6fcb2838a76"}, + {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:22a38e96118a4ce3b97509443feace1d1011d0571fae81fc3ad35f25ba3ea999"}, + {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb80e8a1f91e4b7ef8b33041591e6d89b2b8e122d787e87eeb2b08da71bb16ad"}, + {file = "cryptography-35.0.0-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:abb5a361d2585bb95012a19ed9b2c8f412c5d723a9836418fab7aaa0243e67d2"}, + {file = "cryptography-35.0.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:1ed82abf16df40a60942a8c211251ae72858b25b7421ce2497c2eb7a1cee817c"}, + {file = "cryptography-35.0.0.tar.gz", hash = "sha256:9933f28f70d0517686bd7de36166dda42094eac49415459d9bdf5e7df3e0086d"}, ] curlylint = [ {file = "curlylint-0.12.2-py3-none-any.whl", hash = "sha256:98bc15609ce858387dd70a28c7ddda96e82d0f1cb8bf51b8902532ce0fc1a97e"}, @@ -4032,8 +2914,8 @@ dj-database-url = [ {file = "dj_database_url-0.5.0-py2.py3-none-any.whl", hash = "sha256:851785365761ebe4994a921b433062309eb882fedd318e1b0fcecc607ed02da9"}, ] django = [ - {file = "Django-3.2.7-py3-none-any.whl", hash = "sha256:e93c93565005b37ddebf2396b4dc4b6913c1838baa82efdfb79acedd5816c240"}, - {file = "Django-3.2.7.tar.gz", hash = "sha256:95b318319d6997bac3595517101ad9cc83fe5672ac498ba48d1a410f47afecd2"}, + {file = "Django-3.2.8-py3-none-any.whl", hash = "sha256:42573831292029639b798fe4d3812996bfe4ff3275f04566da90764daec011a5"}, + {file = "Django-3.2.8.tar.gz", hash = "sha256:f6d2c4069c9b9bfac03bedff927ea1f9e0d29e34525cec8a68fd28eb2a8df7af"}, ] django-allauth = [ {file = "django-allauth-0.45.0.tar.gz", hash = "sha256:6d46be0e1480316ccd45476db3aefb39db70e038d2a543112d314b76bb999a4e"}, @@ -4083,8 +2965,8 @@ django-cleanup = [ {file = "django_cleanup-5.2.0-py2.py3-none-any.whl", hash = "sha256:193cf69de54b9fc0a0f4547edbb3a63bbe01728cb029f9f4b7912098cc1bced7"}, ] django-colorfield = [ - {file = "django-colorfield-0.4.3.tar.gz", hash = "sha256:218932da7275ded152d0119131efde72e33b52abf88be4c14f8ffea799a112c4"}, - {file = "django_colorfield-0.4.3-py3-none-any.whl", hash = "sha256:7f1b5ef2417928b7f25708ff31db2d119d255d27cbea496dae62bbde35325aec"}, + {file = "django-colorfield-0.4.5.tar.gz", hash = "sha256:66d7cb628d05c0eb09e25b0923e36bf6fbd3e339c568a199e66b34463119ca13"}, + {file = "django_colorfield-0.4.5-py3-none-any.whl", hash = "sha256:579128d008b2d15e4df64f102b1ad58432de1b6f1017221c316d630e5c62960a"}, ] django-dbbackup = [ {file = "django-dbbackup-3.3.0.tar.gz", hash = "sha256:bb109735cae98b64ad084e5b461b7aca2d7b39992f10c9ed9435e3ebb6fb76c8"}, @@ -4094,8 +2976,8 @@ django-debug-toolbar = [ {file = "django_debug_toolbar-3.2.2-py3-none-any.whl", hash = "sha256:d7bab7573fab35b0fd029163371b7182f5826c13da69734beb675c761d06a4d3"}, ] django-dynamic-preferences = [ - {file = "django-dynamic-preferences-1.10.1.tar.gz", hash = "sha256:e4b2bb7b2563c5064ba56dd76441c77e06b850ff1466a386a1cd308909a6c7de"}, - {file = "django_dynamic_preferences-1.10.1-py2.py3-none-any.whl", hash = "sha256:9419fa925fd2cbb665269ae72059eb3058bf080913d853419b827e4e7a141902"}, + {file = "django-dynamic-preferences-1.11.0.tar.gz", hash = "sha256:f214c938b5872a17647e2b2ccfd9ad00a90a3c6c4aa83fa65d3c5c446e7a66c7"}, + {file = "django_dynamic_preferences-1.11.0-py2.py3-none-any.whl", hash = "sha256:31aecebcbfcfb970b78cfa3e5f8cc9f77638efe8e7c90f205a48b01c45ee5002"}, ] django-extensions = [ {file = "django-extensions-3.1.3.tar.gz", hash = "sha256:5f0fea7bf131ca303090352577a9e7f8bfbf5489bd9d9c8aea9401db28db34a0"}, @@ -4155,8 +3037,8 @@ django-menu-generator-ng = [ {file = "django-menu-generator-ng-1.2.3.tar.gz", hash = "sha256:0c21a094b094add909655728b6b2d4a8baa5a2047da8f649be52589bea0e3ba2"}, ] django-model-utils = [ - {file = "django-model-utils-4.1.1.tar.gz", hash = "sha256:eb5dd05ef7d7ce6bc79cae54ea7c4a221f6f81e2aad7722933aee66489e7264b"}, - {file = "django_model_utils-4.1.1-py3-none-any.whl", hash = "sha256:ef7c440024e797796a3811432abdd2be8b5225ae64ef346f8bfc6de7d8e5d73c"}, + {file = "django-model-utils-4.2.0.tar.gz", hash = "sha256:e7a95e102f9c9653427eadab980d5d59e1dea972913b9c9e01ac37f86bba0ddf"}, + {file = "django_model_utils-4.2.0-py3-none-any.whl", hash = "sha256:a768a25c80514e0ad4e4a6f9c02c44498985f36c5dfdea47b5b1e8cf994beba6"}, ] django-oauth-toolkit = [ {file = "django-oauth-toolkit-1.5.0.tar.gz", hash = "sha256:650e5ef2244d1d8db8f507137e0d1e8b8aad1f4086a4a610526e8851f9a38308"}, @@ -4195,15 +3077,15 @@ django-reversion = [ {file = "django_reversion-4.0.0-py3-none-any.whl", hash = "sha256:f059c654e38c0dd8dccd7f0990aa2f6d9ad22dab55c5e095f9596aeda8079dcd"}, ] django-sass-processor = [ - {file = "django-sass-processor-1.1.tar.gz", hash = "sha256:16ae2116cbf174dbd1dc034b18b5a0abe7b0bb5fda20c33e9f710d47010ec972"}, + {file = "django-sass-processor-1.0.0.tar.gz", hash = "sha256:cb90efee38cd7b0fe727c78d8993ad7804de33f40328200dfc1a481307ef0466"}, ] django-select2 = [ - {file = "django-select2-7.7.2.tar.gz", hash = "sha256:eb0bf31adcba9c31f26c2402cdce5b03f1cca0e218dd7da93e718b3c20127375"}, - {file = "django_select2-7.7.2-py2.py3-none-any.whl", hash = "sha256:7be7c9e03e51ae8b1876826881b5d4009bb38c2da96b34f264fb90e5aceb54aa"}, + {file = "django-select2-7.7.3.tar.gz", hash = "sha256:063d29df5598ec6549a4d49cc4beb85d585987a4e470224592034aff2d4f0a3f"}, + {file = "django_select2-7.7.3-py2.py3-none-any.whl", hash = "sha256:7bf5b35595624a3318f46d69f639e38dafb123fa4a6f82d63a6a1ac6d532317d"}, ] django-storages = [ - {file = "django-storages-1.11.1.tar.gz", hash = "sha256:c823dbf56c9e35b0999a13d7e05062b837bae36c518a40255d522fbe3750fbb4"}, - {file = "django_storages-1.11.1-py3-none-any.whl", hash = "sha256:f28765826d507a0309cfaa849bd084894bc71d81bf0d09479168d44785396f80"}, + {file = "django-storages-1.12.2.tar.gz", hash = "sha256:0013ebe4904521e2fa28f33591a03a7210304d73363e7eadd7cdcf81c12ba003"}, + {file = "django_storages-1.12.2-py3-none-any.whl", hash = "sha256:683b70617f4be9baa17b2d6d7df46cf6afe31b5eb17ece3ca82f773f555592a7"}, ] django-stubs = [ {file = "django-stubs-1.9.0.tar.gz", hash = "sha256:664843091636a917faf5256d028476559dc360fdef9050b6df87ab61b21607bf"}, @@ -4214,8 +3096,8 @@ django-stubs-ext = [ {file = "django_stubs_ext-0.3.1-py3-none-any.whl", hash = "sha256:a51a3e9e844d4e1cacaaedbb33bf3def78a3956eed5d9575a640bd97ccd99cec"}, ] django-tables2 = [ - {file = "django-tables2-2.4.0.tar.gz", hash = "sha256:4eb526464ee56a0b7d827d1da9a4f257e44edb5e1cbb6a0cfb6ca0fed70d8e4f"}, - {file = "django_tables2-2.4.0-py2.py3-none-any.whl", hash = "sha256:0f10ecef25708385a9d32d68d7c9478ca8dda31569410cb05a025be3f2c57593"}, + {file = "django-tables2-2.4.1.tar.gz", hash = "sha256:6c72dd208358539e789e4c0efd7d151e43283a4aa4093a35f44c43489e7ddeaa"}, + {file = "django_tables2-2.4.1-py2.py3-none-any.whl", hash = "sha256:50762bf3d7c61a4eb70e763c3e278650d7266bb78d0497fc8fafcf4e507c9a64"}, ] django-templated-email = [ {file = "django-templated-email-3.0.0.tar.gz", hash = "sha256:49d61840ec551e640adaf341146e94d6f9058ae01df964480850bf988046e5eb"}, @@ -4238,8 +3120,8 @@ django-uwsgi-ng = [ {file = "django_uwsgi_ng-1.1.2-py3-none-any.whl", hash = "sha256:8b1a489a1ed9e56da0efadfa86ec306b532e5cd953fe34b234aaefc26898c649"}, ] django-widget-tweaks = [ - {file = "django-widget-tweaks-1.4.8.tar.gz", hash = "sha256:9f91ca4217199b7671971d3c1f323a2bec71a0c27dec6260b3c006fa541bc489"}, - {file = "django_widget_tweaks-1.4.8-py2.py3-none-any.whl", hash = "sha256:f80bff4a8a59b278bb277a405a76a8b9a884e4bae7a6c70e78a39c626cd1c836"}, + {file = "django-widget-tweaks-1.4.9.tar.gz", hash = "sha256:19bcb66a4a9e68493ced04e7124882d753c5be517ed001556f9e35a40147f545"}, + {file = "django_widget_tweaks-1.4.9-py2.py3-none-any.whl", hash = "sha256:d6c64fbf92cd2df9031f597c1374982233c05a1190d295c39d1c57ce007569c7"}, ] django-yarnpkg = [ {file = "django-yarnpkg-6.0.1.tar.gz", hash = "sha256:aa059347b246c6f242401581d2c129bdcb45aa726be59fe2f288762a9843348a"}, @@ -4288,8 +3170,8 @@ flake8-fixme = [ {file = "flake8_fixme-1.1.1-py2.py3-none-any.whl", hash = "sha256:226a6f2ef916730899f29ac140bed5d4a17e5aba79f00a0e3ae1eff1997cb1ac"}, ] flake8-isort = [ - {file = "flake8-isort-4.0.0.tar.gz", hash = "sha256:2b91300f4f1926b396c2c90185844eb1a3d5ec39ea6138832d119da0a208f4d9"}, - {file = "flake8_isort-4.0.0-py2.py3-none-any.whl", hash = "sha256:729cd6ef9ba3659512dee337687c05d79c78e1215fdf921ed67e5fe46cce2f3c"}, + {file = "flake8-isort-4.1.1.tar.gz", hash = "sha256:d814304ab70e6e58859bc5c3e221e2e6e71c958e7005239202fee19c24f82717"}, + {file = "flake8_isort-4.1.1-py3-none-any.whl", hash = "sha256:c4e8b6dcb7be9b71a02e6e5d4196cefcef0f3447be51e82730fb336fff164949"}, ] flake8-mypy = [ {file = "flake8-mypy-17.8.0.tar.gz", hash = "sha256:47120db63aff631ee1f84bac6fe8e64731dc66da3efc1c51f85e15ade4a3ba18"}, @@ -4308,8 +3190,8 @@ freezegun = [ {file = "freezegun-1.1.0.tar.gz", hash = "sha256:177f9dd59861d871e27a484c3332f35a6e3f5d14626f2bf91be37891f18927f3"}, ] gitdb = [ - {file = "gitdb-4.0.7-py3-none-any.whl", hash = "sha256:6c4cc71933456991da20917998acbe6cf4fb41eeaab7d6d67fbc05ecd4c865b0"}, - {file = "gitdb-4.0.7.tar.gz", hash = "sha256:96bf5c08b157a666fec41129e6d327235284cca4c81e92109260f353ba138005"}, + {file = "gitdb-4.0.9-py3-none-any.whl", hash = "sha256:8033ad4e853066ba6ca92050b9df2f89301b8fc8bf7e9324d412a63f8bf1a8fd"}, + {file = "gitdb-4.0.9.tar.gz", hash = "sha256:bac2fd45c0a1c9cf619e63a90d62bdc63892ef92387424b855792a6cabe789aa"}, ] gitpython = [ {file = "GitPython-3.1.24-py3-none-any.whl", hash = "sha256:dc0a7f2f697657acc8d7f89033e8b1ea94dd90356b2983bca89dc8d2ab3cc647"}, @@ -4324,8 +3206,8 @@ html2text = [ {file = "html2text-2020.1.16.tar.gz", hash = "sha256:e296318e16b059ddb97f7a8a1d6a5c1d7af4544049a01e261731d2d5cc277bbb"}, ] idna = [ - {file = "idna-3.2-py3-none-any.whl", hash = "sha256:14475042e284991034cb48e06f6851428fb14c4dc953acd9be9a5e95c7b6dd7a"}, - {file = "idna-3.2.tar.gz", hash = "sha256:467fbad99067910785144ce333826c71fb0e63a425657295239737f7ecd125f3"}, + {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, + {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] imagesize = [ {file = "imagesize-1.2.0-py2.py3-none-any.whl", hash = "sha256:6965f19a6a2039c7d48bca7dba2473069ff854c36ae6f19d2cde309d998228a1"}, @@ -4348,8 +3230,8 @@ jedi = [ {file = "jedi-0.18.0.tar.gz", hash = "sha256:92550a404bad8afed881a137ec9a461fed49eca661414be45059329614ed0707"}, ] jinja2 = [ - {file = "Jinja2-3.0.1-py3-none-any.whl", hash = "sha256:1f06f2da51e7b56b8f238affdd6b4e2c61e39598a378cc49345bc1bd42a978a4"}, - {file = "Jinja2-3.0.1.tar.gz", hash = "sha256:703f484b47a6af502e743c9122595cc812b0271f661722403114f71a79d0f5a4"}, + {file = "Jinja2-3.0.2-py3-none-any.whl", hash = "sha256:8569982d3f0889eed11dd620c706d39b60c36d6d25843961f33f77fb6bc6b20c"}, + {file = "Jinja2-3.0.2.tar.gz", hash = "sha256:827a0e32839ab1600d4eb1c4c33ec5a8edfbc5cb42dafa13b81f182f97784b45"}, ] jmespath = [ {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"}, @@ -4503,71 +3385,59 @@ pexpect = [ {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, ] pg8000 = [ - {file = "pg8000-1.21.2-py3-none-any.whl", hash = "sha256:e5cffa2a561c5196a69118cdb6e94b6915bf6cc069790a902652a8f52799f586"}, - {file = "pg8000-1.21.2.tar.gz", hash = "sha256:36a3b517408334967c1fa0d29656da03608d63122a372ec92c85f49aed2d24e3"}, + {file = "pg8000-1.22.0-py3-none-any.whl", hash = "sha256:a0e82542f4a56b2139c41ff09c1aeff294c10b6500bb6c57890c0c1c551cbc03"}, + {file = "pg8000-1.22.0.tar.gz", hash = "sha256:c5172252fc92142ec104cd5e7231be4580a1a0a814403707bafbf7bb8383a29a"}, ] phonenumbers = [ - {file = "phonenumbers-8.12.33-py2.py3-none-any.whl", hash = "sha256:758d7f654b1eaec9a637510bf773b64833c6a417e7cf43ba9dccbcc2a16e44e1"}, - {file = "phonenumbers-8.12.33.tar.gz", hash = "sha256:de3d5a3cb421c7421f584bb13cb9287e23ee2dd97d832fc35c9b55b96a576a3c"}, + {file = "phonenumbers-8.12.35-py2.py3-none-any.whl", hash = "sha256:16c8f6d682ab5be550af2f4a2f81f0a90c8743e37babc7465edcefc106d0a1eb"}, + {file = "phonenumbers-8.12.35.tar.gz", hash = "sha256:f426d419aabf6366c27ef1193918cc55217ef0e8be8f09cbf0667131037ca229"}, ] pickleshare = [ {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] pillow = [ - {file = "Pillow-8.3.2-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:c691b26283c3a31594683217d746f1dad59a7ae1d4cfc24626d7a064a11197d4"}, - {file = "Pillow-8.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f514c2717012859ccb349c97862568fdc0479aad85b0270d6b5a6509dbc142e2"}, - {file = "Pillow-8.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:be25cb93442c6d2f8702c599b51184bd3ccd83adebd08886b682173e09ef0c3f"}, - {file = "Pillow-8.3.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d675a876b295afa114ca8bf42d7f86b5fb1298e1b6bb9a24405a3f6c8338811c"}, - {file = "Pillow-8.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59697568a0455764a094585b2551fd76bfd6b959c9f92d4bdec9d0e14616303a"}, - {file = "Pillow-8.3.2-cp310-cp310-win32.whl", hash = "sha256:2d5e9dc0bf1b5d9048a94c48d0813b6c96fccfa4ccf276d9c36308840f40c228"}, - {file = "Pillow-8.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:11c27e74bab423eb3c9232d97553111cc0be81b74b47165f07ebfdd29d825875"}, - {file = "Pillow-8.3.2-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:11eb7f98165d56042545c9e6db3ce394ed8b45089a67124298f0473b29cb60b2"}, - {file = "Pillow-8.3.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f23b2d3079522fdf3c09de6517f625f7a964f916c956527bed805ac043799b8"}, - {file = "Pillow-8.3.2-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:19ec4cfe4b961edc249b0e04b5618666c23a83bc35842dea2bfd5dfa0157f81b"}, - {file = "Pillow-8.3.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e5a31c07cea5edbaeb4bdba6f2b87db7d3dc0f446f379d907e51cc70ea375629"}, - {file = "Pillow-8.3.2-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:15ccb81a6ffc57ea0137f9f3ac2737ffa1d11f786244d719639df17476d399a7"}, - {file = "Pillow-8.3.2-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:8f284dc1695caf71a74f24993b7c7473d77bc760be45f776a2c2f4e04c170550"}, - {file = "Pillow-8.3.2-cp36-cp36m-win32.whl", hash = "sha256:4abc247b31a98f29e5224f2d31ef15f86a71f79c7f4d2ac345a5d551d6393073"}, - {file = "Pillow-8.3.2-cp36-cp36m-win_amd64.whl", hash = "sha256:a048dad5ed6ad1fad338c02c609b862dfaa921fcd065d747194a6805f91f2196"}, - {file = "Pillow-8.3.2-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:06d1adaa284696785375fa80a6a8eb309be722cf4ef8949518beb34487a3df71"}, - {file = "Pillow-8.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bd24054aaf21e70a51e2a2a5ed1183560d3a69e6f9594a4bfe360a46f94eba83"}, - {file = "Pillow-8.3.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a330bf7014ee034046db43ccbb05c766aa9e70b8d6c5260bfc38d73103b0ba"}, - {file = "Pillow-8.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13654b521fb98abdecec105ea3fb5ba863d1548c9b58831dd5105bb3873569f1"}, - {file = "Pillow-8.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a1bd983c565f92779be456ece2479840ec39d386007cd4ae83382646293d681b"}, - {file = "Pillow-8.3.2-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4326ea1e2722f3dc00ed77c36d3b5354b8fb7399fb59230249ea6d59cbed90da"}, - {file = "Pillow-8.3.2-cp37-cp37m-win32.whl", hash = "sha256:085a90a99404b859a4b6c3daa42afde17cb3ad3115e44a75f0d7b4a32f06a6c9"}, - {file = "Pillow-8.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:18a07a683805d32826c09acfce44a90bf474e6a66ce482b1c7fcd3757d588df3"}, - {file = "Pillow-8.3.2-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4e59e99fd680e2b8b11bbd463f3c9450ab799305d5f2bafb74fefba6ac058616"}, - {file = "Pillow-8.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4d89a2e9219a526401015153c0e9dd48319ea6ab9fe3b066a20aa9aee23d9fd3"}, - {file = "Pillow-8.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:56fd98c8294f57636084f4b076b75f86c57b2a63a8410c0cd172bc93695ee979"}, - {file = "Pillow-8.3.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b11c9d310a3522b0fd3c35667914271f570576a0e387701f370eb39d45f08a4"}, - {file = "Pillow-8.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0412516dcc9de9b0a1e0ae25a280015809de8270f134cc2c1e32c4eeb397cf30"}, - {file = "Pillow-8.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bcb04ff12e79b28be6c9988f275e7ab69f01cc2ba319fb3114f87817bb7c74b6"}, - {file = "Pillow-8.3.2-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0b9911ec70731711c3b6ebcde26caea620cbdd9dcb73c67b0730c8817f24711b"}, - {file = "Pillow-8.3.2-cp38-cp38-win32.whl", hash = "sha256:ce2e5e04bb86da6187f96d7bab3f93a7877830981b37f0287dd6479e27a10341"}, - {file = "Pillow-8.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:35d27687f027ad25a8d0ef45dd5208ef044c588003cdcedf05afb00dbc5c2deb"}, - {file = "Pillow-8.3.2-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:04835e68ef12904bc3e1fd002b33eea0779320d4346082bd5b24bec12ad9c3e9"}, - {file = "Pillow-8.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:10e00f7336780ca7d3653cf3ac26f068fa11b5a96894ea29a64d3dc4b810d630"}, - {file = "Pillow-8.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cde7a4d3687f21cffdf5bb171172070bb95e02af448c4c8b2f223d783214056"}, - {file = "Pillow-8.3.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1c3ff00110835bdda2b1e2b07f4a2548a39744bb7de5946dc8e95517c4fb2ca6"}, - {file = "Pillow-8.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d409030bf3bd05fa66fb5fdedc39c521b397f61ad04309c90444e893d05f7d"}, - {file = "Pillow-8.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6bff50ba9891be0a004ef48828e012babaaf7da204d81ab9be37480b9020a82b"}, - {file = "Pillow-8.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7dbfbc0020aa1d9bc1b0b8bcf255a7d73f4ad0336f8fd2533fcc54a4ccfb9441"}, - {file = "Pillow-8.3.2-cp39-cp39-win32.whl", hash = "sha256:963ebdc5365d748185fdb06daf2ac758116deecb2277ec5ae98139f93844bc09"}, - {file = "Pillow-8.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:cc9d0dec711c914ed500f1d0d3822868760954dce98dfb0b7382a854aee55d19"}, - {file = "Pillow-8.3.2-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:2c661542c6f71dfd9dc82d9d29a8386287e82813b0375b3a02983feac69ef864"}, - {file = "Pillow-8.3.2-pp36-pypy36_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:548794f99ff52a73a156771a0402f5e1c35285bd981046a502d7e4793e8facaa"}, - {file = "Pillow-8.3.2-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:8b68f565a4175e12e68ca900af8910e8fe48aaa48fd3ca853494f384e11c8bcd"}, - {file = "Pillow-8.3.2-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:838eb85de6d9307c19c655c726f8d13b8b646f144ca6b3771fa62b711ebf7624"}, - {file = "Pillow-8.3.2-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:feb5db446e96bfecfec078b943cc07744cc759893cef045aa8b8b6d6aaa8274e"}, - {file = "Pillow-8.3.2-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:fc0db32f7223b094964e71729c0361f93db43664dd1ec86d3df217853cedda87"}, - {file = "Pillow-8.3.2-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:fd4fd83aa912d7b89b4b4a1580d30e2a4242f3936882a3f433586e5ab97ed0d5"}, - {file = "Pillow-8.3.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:d0c8ebbfd439c37624db98f3877d9ed12c137cadd99dde2d2eae0dab0bbfc355"}, - {file = "Pillow-8.3.2-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6cb3dd7f23b044b0737317f892d399f9e2f0b3a02b22b2c692851fb8120d82c6"}, - {file = "Pillow-8.3.2-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a66566f8a22561fc1a88dc87606c69b84fa9ce724f99522cf922c801ec68f5c1"}, - {file = "Pillow-8.3.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:ce651ca46d0202c302a535d3047c55a0131a720cf554a578fc1b8a2aff0e7d96"}, - {file = "Pillow-8.3.2.tar.gz", hash = "sha256:dde3f3ed8d00c72631bc19cbfff8ad3b6215062a5eed402381ad365f82f0c18c"}, + {file = "Pillow-8.4.0-cp310-cp310-macosx_10_10_universal2.whl", hash = "sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d"}, + {file = "Pillow-8.4.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6"}, + {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78"}, + {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649"}, + {file = "Pillow-8.4.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f"}, + {file = "Pillow-8.4.0-cp310-cp310-win32.whl", hash = "sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a"}, + {file = "Pillow-8.4.0-cp310-cp310-win_amd64.whl", hash = "sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39"}, + {file = "Pillow-8.4.0-cp36-cp36m-macosx_10_10_x86_64.whl", hash = "sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55"}, + {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c"}, + {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a"}, + {file = "Pillow-8.4.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645"}, + {file = "Pillow-8.4.0-cp36-cp36m-win32.whl", hash = "sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9"}, + {file = "Pillow-8.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff"}, + {file = "Pillow-8.4.0-cp37-cp37m-macosx_10_10_x86_64.whl", hash = "sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153"}, + {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29"}, + {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8"}, + {file = "Pillow-8.4.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488"}, + {file = "Pillow-8.4.0-cp37-cp37m-win32.whl", hash = "sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b"}, + {file = "Pillow-8.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b"}, + {file = "Pillow-8.4.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49"}, + {file = "Pillow-8.4.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585"}, + {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779"}, + {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409"}, + {file = "Pillow-8.4.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df"}, + {file = "Pillow-8.4.0-cp38-cp38-win32.whl", hash = "sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09"}, + {file = "Pillow-8.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76"}, + {file = "Pillow-8.4.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a"}, + {file = "Pillow-8.4.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e"}, + {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b"}, + {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20"}, + {file = "Pillow-8.4.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed"}, + {file = "Pillow-8.4.0-cp39-cp39-win32.whl", hash = "sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02"}, + {file = "Pillow-8.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b"}, + {file = "Pillow-8.4.0-pp36-pypy36_pp73-macosx_10_10_x86_64.whl", hash = "sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2"}, + {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad"}, + {file = "Pillow-8.4.0-pp36-pypy36_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698"}, + {file = "Pillow-8.4.0-pp37-pypy37_pp73-macosx_10_10_x86_64.whl", hash = "sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc"}, + {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df"}, + {file = "Pillow-8.4.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b"}, + {file = "Pillow-8.4.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc"}, + {file = "Pillow-8.4.0.tar.gz", hash = "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, @@ -4578,8 +3448,8 @@ prometheus-client = [ {file = "prometheus_client-0.11.0.tar.gz", hash = "sha256:3a8baade6cb80bcfe43297e33e7623f3118d660d41387593758e2fb1ea173a86"}, ] prompt-toolkit = [ - {file = "prompt_toolkit-3.0.20-py3-none-any.whl", hash = "sha256:6076e46efae19b1e0ca1ec003ed37a933dc94b4d20f486235d436e64771dcd5c"}, - {file = "prompt_toolkit-3.0.20.tar.gz", hash = "sha256:eb71d5a6b72ce6db177af4a7d4d7085b99756bf656d98ffcc4fecd36850eea6c"}, + {file = "prompt_toolkit-3.0.21-py3-none-any.whl", hash = "sha256:62b3d3ea5a3ccee94dc1aac018279cf64866a76837156ebe159b981c42dd20a8"}, + {file = "prompt_toolkit-3.0.21.tar.gz", hash = "sha256:27f13ff4e4850fe8f860b77414c7880f67c6158076a7b099062cc8570f1562e5"}, ] psutil = [ {file = "psutil-5.8.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:0066a82f7b1b37d334e68697faba68e5ad5e858279fd6351c8ca6024e8d6ba64"}, @@ -4631,12 +3501,34 @@ py = [ {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, ] pyasn1 = [ + {file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"}, + {file = "pyasn1-0.4.8-py2.5.egg", hash = "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf"}, + {file = "pyasn1-0.4.8-py2.6.egg", hash = "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00"}, + {file = "pyasn1-0.4.8-py2.7.egg", hash = "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8"}, {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, + {file = "pyasn1-0.4.8-py3.1.egg", hash = "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86"}, + {file = "pyasn1-0.4.8-py3.2.egg", hash = "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7"}, + {file = "pyasn1-0.4.8-py3.3.egg", hash = "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576"}, + {file = "pyasn1-0.4.8-py3.4.egg", hash = "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12"}, + {file = "pyasn1-0.4.8-py3.5.egg", hash = "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2"}, + {file = "pyasn1-0.4.8-py3.6.egg", hash = "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359"}, + {file = "pyasn1-0.4.8-py3.7.egg", hash = "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776"}, {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, ] pyasn1-modules = [ {file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"}, + {file = "pyasn1_modules-0.2.8-py2.4.egg", hash = "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199"}, + {file = "pyasn1_modules-0.2.8-py2.5.egg", hash = "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405"}, + {file = "pyasn1_modules-0.2.8-py2.6.egg", hash = "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb"}, + {file = "pyasn1_modules-0.2.8-py2.7.egg", hash = "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8"}, {file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"}, + {file = "pyasn1_modules-0.2.8-py3.1.egg", hash = "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d"}, + {file = "pyasn1_modules-0.2.8-py3.2.egg", hash = "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45"}, + {file = "pyasn1_modules-0.2.8-py3.3.egg", hash = "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4"}, + {file = "pyasn1_modules-0.2.8-py3.4.egg", hash = "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811"}, + {file = "pyasn1_modules-0.2.8-py3.5.egg", hash = "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed"}, + {file = "pyasn1_modules-0.2.8-py3.6.egg", hash = "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0"}, + {file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"}, ] pycodestyle = [ {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, @@ -4647,36 +3539,36 @@ pycparser = [ {file = "pycparser-2.20.tar.gz", hash = "sha256:2d475327684562c3a96cc71adf7dc8c4f0565175cf86b6d7a404ff4c771f15f0"}, ] pycryptodome = [ - {file = "pycryptodome-3.10.4-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:91ba4215a1f37d0f371fe43bc88c5ff49c274849f3868321c889313787de7672"}, - {file = "pycryptodome-3.10.4-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:66301e4c42dee43ee2da256625d3fe81ef98cc9924c2bd535008cc3ad8ded77b"}, - {file = "pycryptodome-3.10.4-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:8ec154ec445412df31acf0096e7f715e30e167c8f2318b8f5b1ab7c28f4c82f7"}, - {file = "pycryptodome-3.10.4-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:8e82524e7c354033508891405574d12e612cc4fdd3b55d2c238fc1a3e300b606"}, - {file = "pycryptodome-3.10.4-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:b217b4525e60e1af552d62bec01b4685095436d4de5ecde0f05d75b2f95ba6d4"}, - {file = "pycryptodome-3.10.4-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:3a153658d97258ca20bf18f7fe31c09cc7c558b6f8974a6ec74e19f6c634bd64"}, - {file = "pycryptodome-3.10.4-cp27-cp27m-win32.whl", hash = "sha256:c6469d1453f5864e3321a172b0aa671b938d753cbf2376b99fa2ab8841539bb8"}, - {file = "pycryptodome-3.10.4-cp27-cp27m-win_amd64.whl", hash = "sha256:6b45fcace5a5d9c57ba87cf804b161adc62aa826295ce7f7acbcbdc0df74ed37"}, - {file = "pycryptodome-3.10.4-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:b1daf251395af7336ddde6a0015ba5e632c18fe646ba930ef87402537358e3b4"}, - {file = "pycryptodome-3.10.4-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:9a2312440057bf29b9582f72f14d79692044e63bfbc4b4bbea8559355f44f3dd"}, - {file = "pycryptodome-3.10.4-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:54d4e4d45f349d8c4e2f31c2734637ff62a844af391b833f789da88e43a8f338"}, - {file = "pycryptodome-3.10.4-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:97e7df67a4da2e3f60612bbfd6c3f243a63a15d8f4797dd275e1d7b44a65cb12"}, - {file = "pycryptodome-3.10.4-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:db15fa07d2a4c00beeb5e9acdfdbc1c79f9ccfbdc1a8f36c82c4aa44951b33c9"}, - {file = "pycryptodome-3.10.4-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:217dcc0c92503f7dd4b3d3b7d974331a4419f97f555c99a845c3b366fed7056b"}, - {file = "pycryptodome-3.10.4-cp35-abi3-manylinux1_i686.whl", hash = "sha256:a7471646d8cd1a58bb696d667dcb3853e5c9b341b68dcf3c3cc0893d0f98ca5f"}, - {file = "pycryptodome-3.10.4-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:d713dc0910e5ded07852a05e9b75f1dd9d3a31895eebee0668f612779b2a748c"}, - {file = "pycryptodome-3.10.4-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:ac3012c36633564b2b5539bb7c6d9175f31d2ce74844e9abe654c428f02d0fd8"}, - {file = "pycryptodome-3.10.4-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:3f9fb499e267039262569d08658132c9cd8b136bf1d8c56b72f70ed05551e526"}, - {file = "pycryptodome-3.10.4-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:309529d2526f3fb47102aeef376b3459110a6af7efb162e860b32e3a17a46f06"}, - {file = "pycryptodome-3.10.4-cp35-abi3-win32.whl", hash = "sha256:7efec2418e9746ec48e264eea431f8e422d931f71c57b1c96ee202b117f58fa9"}, - {file = "pycryptodome-3.10.4-cp35-abi3-win_amd64.whl", hash = "sha256:49e54f2245befb0193848c8c8031d8d1358ed4af5a1ae8d0a3ba669a5cdd3a72"}, - {file = "pycryptodome-3.10.4-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:4e8fc4c48365ce8a542fe48bf1360da05bb2851df12f64fc94d751705e7cdbe7"}, - {file = "pycryptodome-3.10.4-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:851e6d4930b160417235955322db44adbdb19589918670d63f4acd5d92959ac0"}, - {file = "pycryptodome-3.10.4-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:04e14c732c3693d2830839feed5129286ce47ffa8bfe90e4ae042c773e51c677"}, - {file = "pycryptodome-3.10.4-pp27-pypy_73-win32.whl", hash = "sha256:cefe6b267b8e5c3c72e11adec35a9c7285b62e8ea141b63e87055e9a9e5f2f8c"}, - {file = "pycryptodome-3.10.4-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:24c1b7705d19d8ae3e7255431efd2e526006855df62620118dd7b5374c6372f6"}, - {file = "pycryptodome-3.10.4-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:c61ea053bd5d4c12a063d7e704fbe1c45abb5d2510dab55bd95d166ba661604f"}, - {file = "pycryptodome-3.10.4-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:11d3164fb49fdee000fde05baecce103c0c698168ef1a18d9c7429dd66f0f5bb"}, - {file = "pycryptodome-3.10.4-pp36-pypy36_pp73-win32.whl", hash = "sha256:3faa6ebd35c61718f3f8862569c1f38450c24f3ededb213e1a64806f02f584bc"}, - {file = "pycryptodome-3.10.4.tar.gz", hash = "sha256:40083b0d7f277452c7f2dd4841801f058cc12a74c219ee4110d65774c6a58bef"}, + {file = "pycryptodome-3.11.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ffd0cac13ff41f2d15ed39dc6ba1d2ad88dd2905d656c33d8235852f5d6151fd"}, + {file = "pycryptodome-3.11.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:ead516e03dfe062aefeafe4a29445a6449b0fc43bc8cb30194b2754917a63798"}, + {file = "pycryptodome-3.11.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:4ce6b09547bf2c7cede3a017f79502eaed3e819c13cdb3cb357aea1b004e4cc6"}, + {file = "pycryptodome-3.11.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:014c758af7fa38cab85b357a496b76f4fc9dda1f731eb28358d66fef7ad4a3e1"}, + {file = "pycryptodome-3.11.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:a843350d08c3d22f6c09c2f17f020d8dcfa59496165d7425a3fba0045543dda7"}, + {file = "pycryptodome-3.11.0-cp27-cp27m-manylinux2014_aarch64.whl", hash = "sha256:53989477044be41fa4a63da09d5038c2a34b2f4554cfea2e3933b17186ee9e19"}, + {file = "pycryptodome-3.11.0-cp27-cp27m-win32.whl", hash = "sha256:f9bad2220b80b4ed74f089db012ab5ab5419143a33fad6c8aedcc2a9341eac70"}, + {file = "pycryptodome-3.11.0-cp27-cp27m-win_amd64.whl", hash = "sha256:3c7ed5b07274535979c730daf5817db5e983ea80b04c22579eee8da4ca3ae4f8"}, + {file = "pycryptodome-3.11.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:8f3a60926be78422e662b0d0b18351b426ce27657101c8a50bad80300de6a701"}, + {file = "pycryptodome-3.11.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:fce7e22d96030b35345637c563246c24d4513bd3b413e1c40293114837ab8912"}, + {file = "pycryptodome-3.11.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:bc3c61ff92efdcc14af4a7b81da71d849c9acee51d8fd8ac9841a7620140d6c6"}, + {file = "pycryptodome-3.11.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:b33c9b3d1327d821e28e9cc3a6512c14f8b17570ddb4cfb9a52247ed0fcc5d8b"}, + {file = "pycryptodome-3.11.0-cp27-cp27mu-manylinux2014_aarch64.whl", hash = "sha256:75e78360d1dd6d02eb288fd8275bb4d147d6e3f5337935c096d11dba1fa84748"}, + {file = "pycryptodome-3.11.0-cp35-abi3-macosx_10_9_x86_64.whl", hash = "sha256:621a90147a5e255fdc2a0fec2d56626b76b5d72ea9e60164c9a5a8976d45b0c9"}, + {file = "pycryptodome-3.11.0-cp35-abi3-manylinux1_i686.whl", hash = "sha256:0ca7a6b4fc1f9fafe990b95c8cda89099797e2cfbf40e55607f2f2f5a3355dcb"}, + {file = "pycryptodome-3.11.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:b59bf823cfafde8ef1105d8984f26d1694dff165adb7198b12e3e068d7999b15"}, + {file = "pycryptodome-3.11.0-cp35-abi3-manylinux2010_i686.whl", hash = "sha256:ce81b9c6aaa0f920e2ab05eb2b9f4ccd102e3016b2f37125593b16a83a4b0cc2"}, + {file = "pycryptodome-3.11.0-cp35-abi3-manylinux2010_x86_64.whl", hash = "sha256:ae29fcd56152f417bfba50a36a56a7a5f9fb74ff80bab98704cac704de6568ab"}, + {file = "pycryptodome-3.11.0-cp35-abi3-manylinux2014_aarch64.whl", hash = "sha256:ae31cb874f6f0cedbed457c6374e7e54d7ed45c1a4e11a65a9c80968da90a650"}, + {file = "pycryptodome-3.11.0-cp35-abi3-win32.whl", hash = "sha256:6db1f9fa1f52226621905f004278ce7bd90c8f5363ffd5d7ab3755363d98549a"}, + {file = "pycryptodome-3.11.0-cp35-abi3-win_amd64.whl", hash = "sha256:d7e5f6f692421e5219aa3b545eb0cffd832cd589a4b9dcd4a5eb4260e2c0d68a"}, + {file = "pycryptodome-3.11.0-pp27-pypy_73-macosx_10_9_x86_64.whl", hash = "sha256:da796e9221dda61a0019d01742337eb8a322de8598b678a4344ca0a436380315"}, + {file = "pycryptodome-3.11.0-pp27-pypy_73-manylinux1_x86_64.whl", hash = "sha256:ed45ef92d21db33685b789de2c015e9d9a18a74760a8df1fc152faee88cdf741"}, + {file = "pycryptodome-3.11.0-pp27-pypy_73-manylinux2010_x86_64.whl", hash = "sha256:4169ed515742425ff21e4bd3fabbb6994ffb64434472fb72230019bdfa36b939"}, + {file = "pycryptodome-3.11.0-pp27-pypy_73-win32.whl", hash = "sha256:f19edd42368e9057c39492947bb99570dc927123e210008f2af7cf9b505c6892"}, + {file = "pycryptodome-3.11.0-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:06162fcfed2f9deee8383fd59eaeabc7b7ffc3af50d3fad4000032deb8f700b0"}, + {file = "pycryptodome-3.11.0-pp36-pypy36_pp73-manylinux1_x86_64.whl", hash = "sha256:6eda8a3157c91ba60b26a07bedd6c44ab8bda6cd79b6b5ea9744ba62c39b7b1e"}, + {file = "pycryptodome-3.11.0-pp36-pypy36_pp73-manylinux2010_x86_64.whl", hash = "sha256:7ff701fc283412e651eaab4319b3cd4eaa0827e94569cd37ee9075d5c05fe655"}, + {file = "pycryptodome-3.11.0-pp36-pypy36_pp73-win32.whl", hash = "sha256:2a4bcc8a9977fee0979079cd33a9e9f0d3ddba5660d35ffe874cf84f1dd399d2"}, + {file = "pycryptodome-3.11.0.tar.gz", hash = "sha256:428096bbf7a77e207f418dfd4d7c284df8ade81d2dc80f010e92753a3e406ad0"}, ] pydocstyle = [ {file = "pydocstyle-6.1.1-py3-none-any.whl", hash = "sha256:6987826d6775056839940041beef5c08cc7e3d71d63149b48e36727f70144dc4"}, @@ -4691,12 +3583,12 @@ pygments = [ {file = "Pygments-2.10.0.tar.gz", hash = "sha256:f398865f7eb6874156579fdf36bc840a03cab64d1cde9e93d68f46a425ec52c6"}, ] pyjwt = [ - {file = "PyJWT-2.1.0-py3-none-any.whl", hash = "sha256:934d73fbba91b0483d3857d1aff50e96b2a892384ee2c17417ed3203f173fca1"}, - {file = "PyJWT-2.1.0.tar.gz", hash = "sha256:fba44e7898bbca160a2b2b501f492824fc8382485d3a6f11ba5d0c1937ce6130"}, + {file = "PyJWT-2.3.0-py3-none-any.whl", hash = "sha256:e0c4bb8d9f0af0c7f5b1ec4c5036309617d03d56932877f2f7a0beeb5318322f"}, + {file = "PyJWT-2.3.0.tar.gz", hash = "sha256:b888b4d56f06f6dcd777210c334e69c737be74755d3e5e9ee3fe67dc18a0ee41"}, ] pyparsing = [ - {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, - {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, + {file = "pyparsing-3.0.1-py3-none-any.whl", hash = "sha256:fd93fc45c47893c300bd98f5dd1b41c0e783eaeb727e7cea210dcc09d64ce7c3"}, + {file = "pyparsing-3.0.1.tar.gz", hash = "sha256:84196357aa3566d64ad123d7a3c67b0e597a115c4934b097580e5ce220b91531"}, ] pytest = [ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, @@ -4718,7 +3610,7 @@ pytest-sugar = [ {file = "pytest-sugar-0.9.4.tar.gz", hash = "sha256:b1b2186b0a72aada6859bea2a5764145e3aaa2c1cfbb23c3a19b5f7b697563d3"}, ] python-crontab = [ - {file = "python-crontab-2.5.1.tar.gz", hash = "sha256:4bbe7e720753a132ca4ca9d4094915f40e9d9dc8a807a4564007651018ce8c31"}, + {file = "python-crontab-2.6.0.tar.gz", hash = "sha256:1e35ed7a3cdc3100545b43e196d34754e6551e7f95e4caebbe0e1c0ca41c2f1b"}, ] python-dateutil = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, @@ -4736,39 +3628,43 @@ python3-openid = [ {file = "python3_openid-3.2.0-py3-none-any.whl", hash = "sha256:6626f771e0417486701e0b4daff762e7212e820ca5b29fcc0d05f6f8736dfa6b"}, ] pytz = [ - {file = "pytz-2021.1-py2.py3-none-any.whl", hash = "sha256:eb10ce3e7736052ed3623d49975ce333bcd712c7bb19a58b9e2089d4057d0798"}, - {file = "pytz-2021.1.tar.gz", hash = "sha256:83a4a90894bf38e243cf052c8b58f381bfe9a7a483f6a9cab140bc7f702ac4da"}, + {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, + {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, ] pyyaml = [ - {file = "PyYAML-5.4.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3b2b1824fe7112845700f815ff6a489360226a5609b96ec2190a45e62a9fc922"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win32.whl", hash = "sha256:129def1b7c1bf22faffd67b8f3724645203b79d8f4cc81f674654d9902cb4393"}, - {file = "PyYAML-5.4.1-cp27-cp27m-win_amd64.whl", hash = "sha256:4465124ef1b18d9ace298060f4eccc64b0850899ac4ac53294547536533800c8"}, - {file = "PyYAML-5.4.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:bb4191dfc9306777bc594117aee052446b3fa88737cd13b7188d0e7aa8162185"}, - {file = "PyYAML-5.4.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6c78645d400265a062508ae399b60b8c167bf003db364ecb26dcab2bda048253"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:4e0583d24c881e14342eaf4ec5fbc97f934b999a6828693a99157fde912540cc"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:72a01f726a9c7851ca9bfad6fd09ca4e090a023c00945ea05ba1638c09dc3347"}, - {file = "PyYAML-5.4.1-cp36-cp36m-manylinux2014_s390x.whl", hash = "sha256:895f61ef02e8fed38159bb70f7e100e00f471eae2bc838cd0f4ebb21e28f8541"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win32.whl", hash = "sha256:3bd0e463264cf257d1ffd2e40223b197271046d09dadf73a0fe82b9c1fc385a5"}, - {file = "PyYAML-5.4.1-cp36-cp36m-win_amd64.whl", hash = "sha256:e4fac90784481d221a8e4b1162afa7c47ed953be40d31ab4629ae917510051df"}, - {file = "PyYAML-5.4.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5accb17103e43963b80e6f837831f38d314a0495500067cb25afab2e8d7a4018"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:e1d4970ea66be07ae37a3c2e48b5ec63f7ba6804bdddfdbd3cfd954d25a82e63"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:cb333c16912324fd5f769fff6bc5de372e9e7a202247b48870bc251ed40239aa"}, - {file = "PyYAML-5.4.1-cp37-cp37m-manylinux2014_s390x.whl", hash = "sha256:fe69978f3f768926cfa37b867e3843918e012cf83f680806599ddce33c2c68b0"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win32.whl", hash = "sha256:dd5de0646207f053eb0d6c74ae45ba98c3395a571a2891858e87df7c9b9bd51b"}, - {file = "PyYAML-5.4.1-cp37-cp37m-win_amd64.whl", hash = "sha256:08682f6b72c722394747bddaf0aa62277e02557c0fd1c42cb853016a38f8dedf"}, - {file = "PyYAML-5.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d2d9808ea7b4af864f35ea216be506ecec180628aced0704e34aca0b040ffe46"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:8c1be557ee92a20f184922c7b6424e8ab6691788e6d86137c5d93c1a6ec1b8fb"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:fd7f6999a8070df521b6384004ef42833b9bd62cfee11a09bda1079b4b704247"}, - {file = "PyYAML-5.4.1-cp38-cp38-manylinux2014_s390x.whl", hash = "sha256:bfb51918d4ff3d77c1c856a9699f8492c612cde32fd3bcd344af9be34999bfdc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win32.whl", hash = "sha256:fa5ae20527d8e831e8230cbffd9f8fe952815b2b7dae6ffec25318803a7528fc"}, - {file = "PyYAML-5.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:0f5f5786c0e09baddcd8b4b45f20a7b5d61a7e7e99846e3c799b05c7c53fa696"}, - {file = "PyYAML-5.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:294db365efa064d00b8d1ef65d8ea2c3426ac366c0c4368d930bf1c5fb497f77"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:74c1485f7707cf707a7aef42ef6322b8f97921bd89be2ab6317fd782c2d53183"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:d483ad4e639292c90170eb6f7783ad19490e7a8defb3e46f97dfe4bacae89122"}, - {file = "PyYAML-5.4.1-cp39-cp39-manylinux2014_s390x.whl", hash = "sha256:fdc842473cd33f45ff6bce46aea678a54e3d21f1b61a7750ce3c498eedfe25d6"}, - {file = "PyYAML-5.4.1-cp39-cp39-win32.whl", hash = "sha256:49d4cdd9065b9b6e206d0595fee27a96b5dd22618e7520c33204a4a3239d5b10"}, - {file = "PyYAML-5.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:c20cfa2d49991c8b4147af39859b167664f2ad4561704ee74c1de03318e898db"}, - {file = "PyYAML-5.4.1.tar.gz", hash = "sha256:607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, + {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, + {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, + {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, + {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, + {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, + {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, + {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, + {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, + {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, + {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, + {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, + {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, + {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, + {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, + {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, + {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, + {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, + {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, + {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, + {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, + {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] qrcode = [ {file = "qrcode-6.1-py2.py3-none-any.whl", hash = "sha256:3996ee560fc39532910603704c82980ff6d4d5d629f9c3f25f34174ce8606cf5"}, @@ -4779,47 +3675,42 @@ redis = [ {file = "redis-3.5.3.tar.gz", hash = "sha256:0e7e0cfca8660dea8b7d5cd8c4f6c5e29e11f31158c0b0ae91a397f00e5a05a2"}, ] regex = [ - {file = "regex-2021.9.30-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:66696c8336a1b5d1182464f3af3427cc760118f26d0b09a2ddc16a976a4d2637"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d87459ad3ab40cd8493774f8a454b2e490d8e729e7e402a0625867a983e4e02"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78cf6a1e023caf5e9a982f5377414e1aeac55198831b852835732cfd0a0ca5ff"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:255791523f80ea8e48e79af7120b4697ef3b74f6886995dcdb08c41f8e516be0"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e502f8d4e5ef714bcc2c94d499684890c94239526d61fdf1096547db91ca6aa6"}, - {file = "regex-2021.9.30-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4907fb0f9b9309a5bded72343e675a252c2589a41871874feace9a05a540241e"}, - {file = "regex-2021.9.30-cp310-cp310-win32.whl", hash = "sha256:3be40f720af170a6b20ddd2ad7904c58b13d2b56f6734ee5d09bbdeed2fa4816"}, - {file = "regex-2021.9.30-cp310-cp310-win_amd64.whl", hash = "sha256:c2b180ed30856dfa70cfe927b0fd38e6b68198a03039abdbeb1f2029758d87e7"}, - {file = "regex-2021.9.30-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:e6f2d2f93001801296fe3ca86515eb04915472b5380d4d8752f09f25f0b9b0ed"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4fa7ba9ab2eba7284e0d7d94f61df7af86015b0398e123331362270d71fab0b9"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28040e89a04b60d579c69095c509a4f6a1a5379cd865258e3a186b7105de72c6"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f588209d3e4797882cd238195c175290dbc501973b10a581086b5c6bcd095ffb"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:42952d325439ef223e4e9db7ee6d9087b5c68c5c15b1f9de68e990837682fc7b"}, - {file = "regex-2021.9.30-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cae4099031d80703954c39680323dabd87a69b21262303160776aa0e55970ca0"}, - {file = "regex-2021.9.30-cp36-cp36m-win32.whl", hash = "sha256:0de8ad66b08c3e673b61981b9e3626f8784d5564f8c3928e2ad408c0eb5ac38c"}, - {file = "regex-2021.9.30-cp36-cp36m-win_amd64.whl", hash = "sha256:b345ecde37c86dd7084c62954468a4a655fd2d24fd9b237949dd07a4d0dd6f4c"}, - {file = "regex-2021.9.30-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6f08187136f11e430638c2c66e1db091105d7c2e9902489f0dbc69b44c222b4"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b55442650f541d195a535ccec33078c78a9521973fb960923da7515e9ed78fa6"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87e9c489aa98f50f367fb26cc9c8908d668e9228d327644d7aa568d47e456f47"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e2cb7d4909ed16ed35729d38af585673f1f0833e73dfdf0c18e5be0061107b99"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0861e7f6325e821d5c40514c551fd538b292f8cc3960086e73491b9c5d8291d"}, - {file = "regex-2021.9.30-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:81fdc90f999b2147fc62e303440c424c47e5573a9b615ed5d43a5b832efcca9e"}, - {file = "regex-2021.9.30-cp37-cp37m-win32.whl", hash = "sha256:8c1ad61fa024195136a6b7b89538030bd00df15f90ac177ca278df9b2386c96f"}, - {file = "regex-2021.9.30-cp37-cp37m-win_amd64.whl", hash = "sha256:e3770781353a4886b68ef10cec31c1f61e8e3a0be5f213c2bb15a86efd999bc4"}, - {file = "regex-2021.9.30-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9c065d95a514a06b92a5026766d72ac91bfabf581adb5b29bc5c91d4b3ee9b83"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9925985be05d54b3d25fd6c1ea8e50ff1f7c2744c75bdc4d3b45c790afa2bcb3"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470f2c882f2672d8eeda8ab27992aec277c067d280b52541357e1acd7e606dae"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ad0517df22a97f1da20d8f1c8cb71a5d1997fa383326b81f9cf22c9dadfbdf34"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9e30838df7bfd20db6466fd309d9b580d32855f8e2c2e6d74cf9da27dcd9b63"}, - {file = "regex-2021.9.30-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5b34d2335d6aedec7dcadd3f8283b9682fadad8b9b008da8788d2fce76125ebe"}, - {file = "regex-2021.9.30-cp38-cp38-win32.whl", hash = "sha256:e07049cece3462c626d650e8bf42ddbca3abf4aa08155002c28cb6d9a5a281e2"}, - {file = "regex-2021.9.30-cp38-cp38-win_amd64.whl", hash = "sha256:37868075eda024470bd0feab872c692ac4ee29db1e14baec103257bf6cc64346"}, - {file = "regex-2021.9.30-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d331f238a7accfbbe1c4cd1ba610d4c087b206353539331e32a8f05345c74aec"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6348a7ab2a502cbdd0b7fd0496d614007489adb7361956b38044d1d588e66e04"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce7b1cca6c23f19bee8dc40228d9c314d86d1e51996b86f924aca302fc8f8bf9"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1f1125bc5172ab3a049bc6f4b9c0aae95a2a2001a77e6d6e4239fa3653e202b5"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:638e98d069b14113e8afba6a54d1ca123f712c0d105e67c1f9211b2a825ef926"}, - {file = "regex-2021.9.30-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:9a0b0db6b49da7fa37ca8eddf9f40a8dbc599bad43e64f452284f37b6c34d91c"}, - {file = "regex-2021.9.30-cp39-cp39-win32.whl", hash = "sha256:9910869c472e5a6728680ca357b5846546cbbd2ab3ad5bef986ef0bc438d0aa6"}, - {file = "regex-2021.9.30-cp39-cp39-win_amd64.whl", hash = "sha256:3b71213ec3bad9a5a02e049f2ec86b3d7c3e350129ae0f4e2f99c12b5da919ed"}, - {file = "regex-2021.9.30.tar.gz", hash = "sha256:81e125d9ba54c34579e4539a967e976a3c56150796674aec318b1b2f49251be7"}, + {file = "regex-2021.10.23-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:45b65d6a275a478ac2cbd7fdbf7cc93c1982d613de4574b56fd6972ceadb8395"}, + {file = "regex-2021.10.23-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74d071dbe4b53c602edd87a7476ab23015a991374ddb228d941929ad7c8c922e"}, + {file = "regex-2021.10.23-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:34d870f9f27f2161709054d73646fc9aca49480617a65533fc2b4611c518e455"}, + {file = "regex-2021.10.23-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2fb698037c35109d3c2e30f2beb499e5ebae6e4bb8ff2e60c50b9a805a716f79"}, + {file = "regex-2021.10.23-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:cb46b542133999580ffb691baf67410306833ee1e4f58ed06b6a7aaf4e046952"}, + {file = "regex-2021.10.23-cp310-cp310-win32.whl", hash = "sha256:5e9c9e0ce92f27cef79e28e877c6b6988c48b16942258f3bc55d39b5f911df4f"}, + {file = "regex-2021.10.23-cp310-cp310-win_amd64.whl", hash = "sha256:ab7c5684ff3538b67df3f93d66bd3369b749087871ae3786e70ef39e601345b0"}, + {file = "regex-2021.10.23-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:de557502c3bec8e634246588a94e82f1ee1b9dfcfdc453267c4fb652ff531570"}, + {file = "regex-2021.10.23-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee684f139c91e69fe09b8e83d18b4d63bf87d9440c1eb2eeb52ee851883b1b29"}, + {file = "regex-2021.10.23-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5095a411c8479e715784a0c9236568ae72509450ee2226b649083730f3fadfc6"}, + {file = "regex-2021.10.23-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7b568809dca44cb75c8ebb260844ea98252c8c88396f9d203f5094e50a70355f"}, + {file = "regex-2021.10.23-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eb672217f7bd640411cfc69756ce721d00ae600814708d35c930930f18e8029f"}, + {file = "regex-2021.10.23-cp36-cp36m-win32.whl", hash = "sha256:a7a986c45d1099a5de766a15de7bee3840b1e0e1a344430926af08e5297cf666"}, + {file = "regex-2021.10.23-cp36-cp36m-win_amd64.whl", hash = "sha256:6d7722136c6ed75caf84e1788df36397efdc5dbadab95e59c2bba82d4d808a4c"}, + {file = "regex-2021.10.23-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:9f665677e46c5a4d288ece12fdedf4f4204a422bb28ff05f0e6b08b7447796d1"}, + {file = "regex-2021.10.23-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:450dc27483548214314640c89a0f275dbc557968ed088da40bde7ef8fb52829e"}, + {file = "regex-2021.10.23-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:129472cd06062fb13e7b4670a102951a3e655e9b91634432cfbdb7810af9d710"}, + {file = "regex-2021.10.23-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a940ca7e7189d23da2bfbb38973832813eab6bd83f3bf89a977668c2f813deae"}, + {file = "regex-2021.10.23-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:530fc2bbb3dc1ebb17f70f7b234f90a1dd43b1b489ea38cea7be95fb21cdb5c7"}, + {file = "regex-2021.10.23-cp37-cp37m-win32.whl", hash = "sha256:ded0c4a3eee56b57fcb2315e40812b173cafe79d2f992d50015f4387445737fa"}, + {file = "regex-2021.10.23-cp37-cp37m-win_amd64.whl", hash = "sha256:391703a2abf8013d95bae39145d26b4e21531ab82e22f26cd3a181ee2644c234"}, + {file = "regex-2021.10.23-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be04739a27be55631069b348dda0c81d8ea9822b5da10b8019b789e42d1fe452"}, + {file = "regex-2021.10.23-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13ec99df95003f56edcd307db44f06fbeb708c4ccdcf940478067dd62353181e"}, + {file = "regex-2021.10.23-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:8d1cdcda6bd16268316d5db1038965acf948f2a6f43acc2e0b1641ceab443623"}, + {file = "regex-2021.10.23-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c186691a7995ef1db61205e00545bf161fb7b59cdb8c1201c89b333141c438a"}, + {file = "regex-2021.10.23-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:2b20f544cbbeffe171911f6ce90388ad36fe3fad26b7c7a35d4762817e9ea69c"}, + {file = "regex-2021.10.23-cp38-cp38-win32.whl", hash = "sha256:c0938ddd60cc04e8f1faf7a14a166ac939aac703745bfcd8e8f20322a7373019"}, + {file = "regex-2021.10.23-cp38-cp38-win_amd64.whl", hash = "sha256:56f0c81c44638dfd0e2367df1a331b4ddf2e771366c4b9c5d9a473de75e3e1c7"}, + {file = "regex-2021.10.23-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:80bb5d2e92b2258188e7dcae5b188c7bf868eafdf800ea6edd0fbfc029984a88"}, + {file = "regex-2021.10.23-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1dae12321b31059a1a72aaa0e6ba30156fe7e633355e445451e4021b8e122b6"}, + {file = "regex-2021.10.23-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:1f2b59c28afc53973d22e7bc18428721ee8ca6079becf1b36571c42627321c65"}, + {file = "regex-2021.10.23-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d134757a37d8640f3c0abb41f5e68b7cf66c644f54ef1cb0573b7ea1c63e1509"}, + {file = "regex-2021.10.23-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0dcc0e71118be8c69252c207630faf13ca5e1b8583d57012aae191e7d6d28b84"}, + {file = "regex-2021.10.23-cp39-cp39-win32.whl", hash = "sha256:a30513828180264294953cecd942202dfda64e85195ae36c265daf4052af0464"}, + {file = "regex-2021.10.23-cp39-cp39-win_amd64.whl", hash = "sha256:0f7552429dd39f70057ac5d0e897e5bfe211629652399a21671e53f2a9693a4e"}, + {file = "regex-2021.10.23.tar.gz", hash = "sha256:f3f9a91d3cc5e5b0ddf1043c0ae5fa4852f18a1c0050318baf5fc7930ecc1f9c"}, ] requests = [ {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, @@ -4828,6 +3719,7 @@ requests = [ requests-oauthlib = [ {file = "requests-oauthlib-1.3.0.tar.gz", hash = "sha256:b4261601a71fd721a8bd6d7aa1cc1d6a8a93b4a9f5e96626f8e4d91e8beeaa6a"}, {file = "requests_oauthlib-1.3.0-py2.py3-none-any.whl", hash = "sha256:7f71572defaecd16372f9006f33c2ec8c077c3cfa6f5911a9a90202beb513f3d"}, + {file = "requests_oauthlib-1.3.0-py3.7.egg", hash = "sha256:fa6c47b933f01060936d87ae9327fead68768b69c6c9ea2109c48be30f2d4dbc"}, ] restructuredtext-lint = [ {file = "restructuredtext_lint-1.3.2.tar.gz", hash = "sha256:d3b10a1fe2ecac537e51ae6d151b223b78de9fafdd50e5eb6b08c243df173c80"}, @@ -4883,8 +3775,8 @@ six = [ {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, ] smmap = [ - {file = "smmap-4.0.0-py2.py3-none-any.whl", hash = "sha256:a9a7479e4c572e2e775c404dcd3080c8dc49f39918c2cf74913d30c4c478e3c2"}, - {file = "smmap-4.0.0.tar.gz", hash = "sha256:7e65386bd122d45405ddf795637b7f7d2b532e7e401d46bbe3fb49b9986d5182"}, + {file = "smmap-5.0.0-py3-none-any.whl", hash = "sha256:2aba19d6a040e78d8b09de5c57e96207b09ed71d8e55ce0959eeee6c8e190d94"}, + {file = "smmap-5.0.0.tar.gz", hash = "sha256:c840e62059cd3be204b0c9c9f74be2c09d5648eddd4580d9314c3ecde0b30936"}, ] snowballstemmer = [ {file = "snowballstemmer-2.1.0-py2.py3-none-any.whl", hash = "sha256:b51b447bea85f9968c13b650126a888aabd4cb4463fca868ec596826325dedc2"}, @@ -4942,8 +3834,8 @@ sqlparse = [ {file = "sqlparse-0.4.2.tar.gz", hash = "sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae"}, ] stevedore = [ - {file = "stevedore-3.4.0-py3-none-any.whl", hash = "sha256:920ce6259f0b2498aaa4545989536a27e4e4607b8318802d7ddc3a533d3d069e"}, - {file = "stevedore-3.4.0.tar.gz", hash = "sha256:59b58edb7f57b11897f150475e7bc0c39c5381f0b8e3fa9f5c20ce6c89ec4aa1"}, + {file = "stevedore-3.5.0-py3-none-any.whl", hash = "sha256:a547de73308fd7e90075bb4d301405bebf705292fa90a90fc3bcf9133f58616c"}, + {file = "stevedore-3.5.0.tar.gz", hash = "sha256:f40253887d8712eaa2bb0ea3830374416736dc8ec0e22f5a65092c1174c44335"}, ] termcolor = [ {file = "termcolor-1.1.0.tar.gz", hash = "sha256:1d6d69ce66211143803fbc56652b41d73b4a400a2891d7bf7a1cdf4c02de613b"}, @@ -4965,11 +3857,11 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] traitlets = [ - {file = "traitlets-5.1.0-py3-none-any.whl", hash = "sha256:03f172516916220b58c9f19d7f854734136dd9528103d04e9bf139a92c9f54c4"}, - {file = "traitlets-5.1.0.tar.gz", hash = "sha256:bd382d7ea181fbbcce157c133db9a829ce06edffe097bcf3ab945b435452b46d"}, + {file = "traitlets-5.1.1-py3-none-any.whl", hash = "sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033"}, + {file = "traitlets-5.1.1.tar.gz", hash = "sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7"}, ] twilio = [ - {file = "twilio-7.0.0.tar.gz", hash = "sha256:6cff34d61c3fad9d41e21b4b59527996fb7f0c6eeb5f001b90040b630fbf8446"}, + {file = "twilio-7.2.0.tar.gz", hash = "sha256:f99643641c193fcd09b58f20ef65a78937e5c426319530a42c325b3abd80e739"}, ] typed-ast = [ {file = "typed_ast-1.4.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:2068531575a125b87a41802130fa7e29f26c09a2833fea68d9a40cf33902eba6"}, @@ -5004,12 +3896,12 @@ typed-ast = [ {file = "typed_ast-1.4.3.tar.gz", hash = "sha256:fb1bbeac803adea29cedd70781399c99138358c26d05fcbd23c13016b7f5ec65"}, ] types-pytz = [ - {file = "types-pytz-2021.1.2.tar.gz", hash = "sha256:448828a06f2aaa840e57364d866c661645a045e532f817e4f10c8c3ab2b66651"}, - {file = "types_pytz-2021.1.2-py3-none-any.whl", hash = "sha256:28fb1c0f77f59aebe9b792d073ebfbbbf7b329f9d4af6a6079713a618a1c0f31"}, + {file = "types-pytz-2021.3.0.tar.gz", hash = "sha256:86a61967834dceeaaf98b6902ed8357efdd262bb8afcaf4bc8ccecf748592778"}, + {file = "types_pytz-2021.3.0-py3-none-any.whl", hash = "sha256:b5027e5de50a4c978cd60ca16849d934d44c44ebd7d29cf13ada009efaa9feef"}, ] types-pyyaml = [ - {file = "types-PyYAML-5.4.10.tar.gz", hash = "sha256:1d9e431e9f1f78a65ea957c558535a3b15ad67ea4912bce48a6c1b613dcf81ad"}, - {file = "types_PyYAML-5.4.10-py3-none-any.whl", hash = "sha256:f1d1357168988e45fa20c65aecb3911462246a84809015dd889ebf8b1db74124"}, + {file = "types-PyYAML-6.0.0.tar.gz", hash = "sha256:3d3591ddfc488fc30be3c506a0c0fe54da968fe98d8b76ab12e59d455330ffca"}, + {file = "types_PyYAML-6.0.0-py3-none-any.whl", hash = "sha256:746f23d351245d176d7bc89eef79e2ee94b4e7306f7d23bfefb3dc946c0fb58d"}, ] typing-extensions = [ {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, @@ -5021,7 +3913,7 @@ urllib3 = [ {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"}, ] uwsgi = [ - {file = "uWSGI-2.0.19.1.tar.gz", hash = "sha256:faa85e053c0b1be4d5585b0858d3a511d2cd10201802e8676060fd0a109e5869"}, + {file = "uwsgi-2.0.20.tar.gz", hash = "sha256:88ab9867d8973d8ae84719cf233b7dafc54326fcaec89683c3f9f77c002cdff9"}, ] vine = [ {file = "vine-5.0.0-py2.py3-none-any.whl", hash = "sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30"}, @@ -5041,7 +3933,50 @@ whoosh = [ {file = "Whoosh-2.7.4.zip", hash = "sha256:e0857375f63e9041e03fedd5b7541f97cf78917ac1b6b06c1fcc9b45375dda69"}, ] wrapt = [ - {file = "wrapt-1.12.1.tar.gz", hash = "sha256:b62ffa81fb85f4332a4f609cab4ac40709470da05643a082ec1eb88e6d9b97d7"}, + {file = "wrapt-1.13.2-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:3de7b4d3066cc610054e7aa2c005645e308df2f92be730aae3a47d42e910566a"}, + {file = "wrapt-1.13.2-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:8164069f775c698d15582bf6320a4f308c50d048c1c10cf7d7a341feaccf5df7"}, + {file = "wrapt-1.13.2-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9adee1891253670575028279de8365c3a02d3489a74a66d774c321472939a0b1"}, + {file = "wrapt-1.13.2-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:a70d876c9aba12d3bd7f8f1b05b419322c6789beb717044eea2c8690d35cb91b"}, + {file = "wrapt-1.13.2-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:3f87042623530bcffea038f824b63084180513c21e2e977291a9a7e65a66f13b"}, + {file = "wrapt-1.13.2-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:e634136f700a21e1fcead0c137f433dde928979538c14907640607d43537d468"}, + {file = "wrapt-1.13.2-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:3e33c138d1e3620b1e0cc6fd21e46c266393ed5dae0d595b7ed5a6b73ed57aa0"}, + {file = "wrapt-1.13.2-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:283e402e5357e104ac1e3fba5791220648e9af6fb14ad7d9cc059091af2b31d2"}, + {file = "wrapt-1.13.2-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:ccb34ce599cab7f36a4c90318697ead18312c67a9a76327b3f4f902af8f68ea1"}, + {file = "wrapt-1.13.2-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:fbad5ba74c46517e6488149514b2e2348d40df88cd6b52a83855b7a8bf04723f"}, + {file = "wrapt-1.13.2-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:724ed2bc9c91a2b9026e5adce310fa60c6e7c8760b03391445730b9789b9d108"}, + {file = "wrapt-1.13.2-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:83f2793ec6f3ef513ad8d5b9586f5ee6081cad132e6eae2ecb7eac1cc3decae0"}, + {file = "wrapt-1.13.2-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:0473d1558b93e314e84313cc611f6c86be779369f9d3734302bf185a4d2625b1"}, + {file = "wrapt-1.13.2-cp35-cp35m-win32.whl", hash = "sha256:15eee0e6fd07f48af2f66d0e6f2ff1916ffe9732d464d5e2390695296872cad9"}, + {file = "wrapt-1.13.2-cp35-cp35m-win_amd64.whl", hash = "sha256:bc85d17d90201afd88e3d25421da805e4e135012b5d1f149e4de2981394b2a52"}, + {file = "wrapt-1.13.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:c6ee5f8734820c21b9b8bf705e99faba87f21566d20626568eeb0d62cbeaf23c"}, + {file = "wrapt-1.13.2-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:53c6706a1bcfb6436f1625511b95b812798a6d2ccc51359cd791e33722b5ea32"}, + {file = "wrapt-1.13.2-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:fbe6aebc9559fed7ea27de51c2bf5c25ba2a4156cf0017556f72883f2496ee9a"}, + {file = "wrapt-1.13.2-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:0582180566e7a13030f896c2f1ac6a56134ab5f3c3f4c5538086f758b1caf3f2"}, + {file = "wrapt-1.13.2-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:bff0a59387a0a2951cb869251257b6553663329a1b5525b5226cab8c88dcbe7e"}, + {file = "wrapt-1.13.2-cp36-cp36m-win32.whl", hash = "sha256:df3eae297a5f1594d1feb790338120f717dac1fa7d6feed7b411f87e0f2401c7"}, + {file = "wrapt-1.13.2-cp36-cp36m-win_amd64.whl", hash = "sha256:1eb657ed84f4d3e6ad648483c8a80a0cf0a78922ef94caa87d327e2e1ad49b48"}, + {file = "wrapt-1.13.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0cdedf681db878416c05e1831ec69691b0e6577ac7dca9d4f815632e3549580"}, + {file = "wrapt-1.13.2-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:87ee3c73bdfb4367b26c57259995935501829f00c7b3eed373e2ad19ec21e4e4"}, + {file = "wrapt-1.13.2-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:3e0d16eedc242d01a6f8cf0623e9cdc3b869329da3f97a15961d8864111d8cf0"}, + {file = "wrapt-1.13.2-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:8318088860968c07e741537030b1abdd8908ee2c71fbe4facdaade624a09e006"}, + {file = "wrapt-1.13.2-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:d90520616fce71c05dedeac3a0fe9991605f0acacd276e5f821842e454485a70"}, + {file = "wrapt-1.13.2-cp37-cp37m-win32.whl", hash = "sha256:22142afab65daffc95863d78effcbd31c19a8003eca73de59f321ee77f73cadb"}, + {file = "wrapt-1.13.2-cp37-cp37m-win_amd64.whl", hash = "sha256:d0d717e10f952df7ea41200c507cc7e24458f4c45b56c36ad418d2e79dacd1d4"}, + {file = "wrapt-1.13.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:593cb049ce1c391e0288523b30426c4430b26e74c7e6f6e2844bd99ac7ecc831"}, + {file = "wrapt-1.13.2-cp38-cp38-manylinux1_i686.whl", hash = "sha256:8860c8011a6961a651b1b9f46fdbc589ab63b0a50d645f7d92659618a3655867"}, + {file = "wrapt-1.13.2-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:ada5e29e59e2feb710589ca1c79fd989b1dd94d27079dc1d199ec954a6ecc724"}, + {file = "wrapt-1.13.2-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:fdede980273aeca591ad354608778365a3a310e0ecdd7a3587b38bc5be9b1808"}, + {file = "wrapt-1.13.2-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:af9480de8e63c5f959a092047aaf3d7077422ded84695b3398f5d49254af3e90"}, + {file = "wrapt-1.13.2-cp38-cp38-win32.whl", hash = "sha256:c65e623ea7556e39c4f0818200a046cbba7575a6b570ff36122c276fdd30ab0a"}, + {file = "wrapt-1.13.2-cp38-cp38-win_amd64.whl", hash = "sha256:b20703356cae1799080d0ad15085dc3213c1ac3f45e95afb9f12769b98231528"}, + {file = "wrapt-1.13.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1c5c4cf188b5643a97e87e2110bbd4f5bc491d54a5b90633837b34d5df6a03fe"}, + {file = "wrapt-1.13.2-cp39-cp39-manylinux1_i686.whl", hash = "sha256:82223f72eba6f63eafca87a0f614495ae5aa0126fe54947e2b8c023969e9f2d7"}, + {file = "wrapt-1.13.2-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:81a4cf257263b299263472d669692785f9c647e7dca01c18286b8f116dbf6b38"}, + {file = "wrapt-1.13.2-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:728e2d9b7a99dd955d3426f237b940fc74017c4a39b125fec913f575619ddfe9"}, + {file = "wrapt-1.13.2-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:7574de567dcd4858a2ffdf403088d6df8738b0e1eabea220553abf7c9048f59e"}, + {file = "wrapt-1.13.2-cp39-cp39-win32.whl", hash = "sha256:c7ac2c7a8e34bd06710605b21dd1f3576764443d68e069d2afba9b116014d072"}, + {file = "wrapt-1.13.2-cp39-cp39-win_amd64.whl", hash = "sha256:6e6d1a8eeef415d7fb29fe017de0e48f45e45efd2d1bfda28fc50b7b330859ef"}, + {file = "wrapt-1.13.2.tar.gz", hash = "sha256:dca56cc5963a5fd7c2aa8607017753f534ee514e09103a6c55d2db70b50e7447"}, ] yubiotp = [ {file = "YubiOTP-1.0.0.post1-py2.py3-none-any.whl", hash = "sha256:7ad57011866e0bc6c6d179ffbc3926fcc0e82d410178a6d01ba4da0f88332878"}, diff --git a/pyproject.toml b/pyproject.toml index 49b6de089c2c5d9202f6b604211cc35ae51bd369..7de56924b6d76c659ab4da8762e25e6815b9f435 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -52,8 +52,8 @@ django-any-js = "^1.1" django-debug-toolbar = "^3.2" django-menu-generator-ng = "^1.2.3" django-tables2 = "^2.1" -django-phonenumber-field = {version = "<5.3", extras = ["phonenumbers"]} -django-sass-processor = "^1.0" +django-phonenumber-field = {version = "^5.2", extras = ["phonenumbers"]} +django-sass-processor = "1.0" libsass = "^0.21.0" colour = "^0.1.5" dynaconf = {version = "^3.1", extras = ["yaml", "toml", "ini"]} @@ -66,7 +66,7 @@ django_select2 = "^7.1" django-two-factor-auth = { version = "^1.12.1", extras = [ "yubikey", "phonenumbers", "call", "sms" ] } django-yarnpkg = "^6.0" django-material = "^1.6.0" -django-dynamic-preferences = "^1.9" +django-dynamic-preferences = "^1.11" django_widget_tweaks = "^1.4.5" django-filter = "^2.2.0" django-templated-email = "^3.0.0"