diff --git a/CHANGELOG.rst b/CHANGELOG.rst index d75780ad34191d1f61cf384ba4136474855e9ece..fc5d823afdd0a646c8569c1b7497ac71bd228ea1 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -9,6 +9,34 @@ and this project adheres to `Semantic Versioning`_. Unreleased ---------- +Added +~~~~~ + +* Allow configuration of database options + +Fixed +~~~~~ + +* Correctly update theme colours on change again +* Use correct favicon as default AlekSIS favicon +* Show all years in a 200 year range around the current year in date pickers + +Removed +~~~~~~~ + +* Remove old generated AlekSIS icons +* Imprint is now called "Imprint" and not "Impress". +* Logo files weren't uploaded to public namespace. + +`2.3.1`_ – 2021-12-17 +--------------------- + +Fixed +~~~~~ + +* Small files could fail to upload to S3 storage due to MemoryFileUploadHandler +* Corrected typos in previous changelog + `2.3`_ – 2021-12-15 ------------------- @@ -534,4 +562,5 @@ Fixed .. _2.1.1: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.1.1 .. _2.2: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.2 .. _2.2.1: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.2.1 -.. _2.2.1: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.3 +.. _2.3: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.3 +.. _2.3.1: https://edugit.org/AlekSIS/Official/AlekSIS/-/tags/2.3.1 diff --git a/aleksis/core/mixins.py b/aleksis/core/mixins.py index 3232aac4deb912dfb65f28d69831767bf2fd8445..c6cee9a8c6bbefed3439eef156b685f5484e4a13 100644 --- a/aleksis/core/mixins.py +++ b/aleksis/core/mixins.py @@ -1,5 +1,6 @@ # flake8: noqa: DJ12 +import os from datetime import datetime from typing import Any, Callable, List, Optional, Union @@ -21,6 +22,8 @@ from django.views.generic import CreateView, UpdateView from django.views.generic.edit import DeleteView, ModelFormMixin import reversion +from dynamic_preferences.settings import preferences_settings +from dynamic_preferences.types import FilePreference from guardian.admin import GuardedModelAdmin from guardian.core import ObjectPermissionChecker from jsonstore.fields import IntegerField, JSONFieldMixin @@ -529,3 +532,14 @@ class SchoolTermRelatedExtensibleForm(ExtensibleForm): kwargs["initial"] = {"school_term": SchoolTerm.current} super().__init__(*args, **kwargs) + + +class PublicFilePreferenceMixin(FilePreference): + """Uploads a file to the public namespace.""" + + upload_path = "public" + + def get_upload_path(self): + return os.path.join( + self.upload_path, preferences_settings.FILE_PREFERENCE_UPLOAD_DIR, self.identifier() + ) diff --git a/aleksis/core/preferences.py b/aleksis/core/preferences.py index a102cb39873bdeb492156fc60597ce728ffc853f..c16032349e58dc4134e6bba064864e1724f688fe 100644 --- a/aleksis/core/preferences.py +++ b/aleksis/core/preferences.py @@ -16,6 +16,7 @@ from dynamic_preferences.types import ( ) from oauth2_provider.models import AbstractApplication +from .mixins import PublicFilePreferenceMixin from .models import Group, Person from .registries import person_preferences_registry, site_preferences_registry from .util.notifications import get_notification_choices_lazy @@ -78,7 +79,7 @@ class ColourSecondary(StringPreference): @site_preferences_registry.register -class Logo(FilePreference): +class Logo(PublicFilePreferenceMixin, FilePreference): """Logo of your AlekSIS instance.""" section = theme @@ -88,7 +89,7 @@ class Logo(FilePreference): @site_preferences_registry.register -class Favicon(FilePreference): +class Favicon(PublicFilePreferenceMixin, FilePreference): """Favicon of your AlekSIS instance.""" section = theme @@ -98,7 +99,7 @@ class Favicon(FilePreference): @site_preferences_registry.register -class PWAIcon(FilePreference): +class PWAIcon(PublicFilePreferenceMixin, FilePreference): """PWA-Icon of your AlekSIS instance.""" section = theme diff --git a/aleksis/core/settings.py b/aleksis/core/settings.py index 52026cd4af12bd7003bea6fab07a370f5ed799df..5634286b0dffa0be97b58d70d82b43e7ef3d8e13 100644 --- a/aleksis/core/settings.py +++ b/aleksis/core/settings.py @@ -220,6 +220,7 @@ DATABASES = { "HOST": _settings.get("database.host", "127.0.0.1"), "PORT": _settings.get("database.port", "5432"), "CONN_MAX_AGE": _settings.get("database.conn_max_age", None), + "OPTIONS": _settings.get("database.options", {}), } } @@ -330,8 +331,8 @@ SOCIALACCOUNT_EMAIL_REQUIRED = False # Cooldown for verification mails ACCOUNT_EMAIL_CONFIRMATION_COOLDOWN = _settings.get("auth.registration.verification_cooldown", 180) -# Require email verification after sigm up -ACCOUNT_EMAIL_VERIFICATION = _settings.get("auth.registration.email_verification", "mandatory") +# Require email verification after sign up +ACCOUNT_EMAIL_VERIFICATION = _settings.get("auth.registration.email_verification", "optional") SOCIALACCOUNT_EMAIL_VERIFICATION = False # Email subject prefix for verification mails @@ -408,7 +409,7 @@ if _settings.get("ldap.uri", None): AUTH_LDAP_BIND_DN = _settings.get("ldap.bind.dn") AUTH_LDAP_BIND_PASSWORD = _settings.get("ldap.bind.password") - # Keep local password for users to be required to proveide their old password on change + # Keep local password for users to be required to provide their old password on change AUTH_LDAP_SET_USABLE_PASSWORD = _settings.get("ldap.handle_passwords", True) # Keep bound as the authenticating user @@ -482,7 +483,7 @@ if _settings.get("ldap.uri", None): "is_superuser" ] -# Add ModelBckend last so all other backends get a chance +# Add ModelBackend last so all other backends get a chance # to verify passwords first AUTHENTICATION_BACKENDS.append("django.contrib.auth.backends.ModelBackend") @@ -681,7 +682,7 @@ if _settings.get("dev.uwsgi.celery", DEBUG): DEFAULT_FAVICON_PATHS = { "pwa_icon": os.path.join(STATIC_ROOT, "img/aleksis-icon.png"), - "favicon": os.path.join(STATIC_ROOT, "img/aleksis-icon.png"), + "favicon": os.path.join(STATIC_ROOT, "img/aleksis-favicon.png"), } PWA_ICONS_CONFIG = { "android": [192, 512], @@ -880,10 +881,16 @@ PROMETHEUS_METRICS_EXPORT_ADDRESS = _settings.get("prometheus.metrucs.address", SECURE_PROXY_SSL_HEADER = ("REQUEST_SCHEME", "https") +FILE_UPLOAD_HANDLERS = [ + "django.core.files.uploadhandler.MemoryFileUploadHandler", + "django.core.files.uploadhandler.TemporaryFileUploadHandler", +] + if _settings.get("storage.type", "").lower() == "s3": INSTALLED_APPS.append("storages") DEFAULT_FILE_STORAGE = "storages.backends.s3boto3.S3Boto3Storage" + FILE_UPLOAD_HANDLERS.remove("django.core.files.uploadhandler.MemoryFileUploadHandler") if _settings.get("storage.s3.static.enabled", False): STATICFILES_STORAGE = "storages.backends.s3boto3.S3StaticStorage" diff --git a/aleksis/core/static/icons/android_192.png b/aleksis/core/static/icons/android_192.png deleted file mode 100644 index b5f7fec68184883830f68dabc606f7a95c45e8bb..0000000000000000000000000000000000000000 Binary files a/aleksis/core/static/icons/android_192.png and /dev/null differ diff --git a/aleksis/core/static/icons/android_512.png b/aleksis/core/static/icons/android_512.png deleted file mode 100644 index 5e042b4f98ef6dd8056ce643ad16ba085658684e..0000000000000000000000000000000000000000 Binary files a/aleksis/core/static/icons/android_512.png and /dev/null differ diff --git a/aleksis/core/static/icons/apple_114.png b/aleksis/core/static/icons/apple_114.png deleted file mode 100644 index eb8db13ad567105a819dab802b4f7ddd360e34be..0000000000000000000000000000000000000000 Binary files a/aleksis/core/static/icons/apple_114.png and /dev/null differ diff --git a/aleksis/core/static/icons/apple_152.png b/aleksis/core/static/icons/apple_152.png deleted file mode 100644 index 51eaa8d28988a16629e2b884d8de4df58fbadccc..0000000000000000000000000000000000000000 Binary files a/aleksis/core/static/icons/apple_152.png and /dev/null differ diff --git a/aleksis/core/static/icons/apple_180.png b/aleksis/core/static/icons/apple_180.png deleted file mode 100644 index 5c6b70846586ef0bf4bd44d177f6f79b49d1cddd..0000000000000000000000000000000000000000 Binary files a/aleksis/core/static/icons/apple_180.png and /dev/null differ diff --git a/aleksis/core/static/icons/apple_76.png b/aleksis/core/static/icons/apple_76.png deleted file mode 100644 index 3751b84654d01943148fc6f1b90125a4195d4af9..0000000000000000000000000000000000000000 Binary files a/aleksis/core/static/icons/apple_76.png and /dev/null differ diff --git a/aleksis/core/static/icons/favicon_16.png b/aleksis/core/static/icons/favicon_16.png deleted file mode 100644 index f1d02a7a8a34825726d20eeb1f6a63922d1a848e..0000000000000000000000000000000000000000 Binary files a/aleksis/core/static/icons/favicon_16.png and /dev/null differ diff --git a/aleksis/core/static/icons/favicon_32.png b/aleksis/core/static/icons/favicon_32.png deleted file mode 100644 index edc72d4556cce0fde923a0ac3db4d0f94bb74412..0000000000000000000000000000000000000000 Binary files a/aleksis/core/static/icons/favicon_32.png and /dev/null differ diff --git a/aleksis/core/static/icons/favicon_48.png b/aleksis/core/static/img/aleksis-favicon.png similarity index 100% rename from aleksis/core/static/icons/favicon_48.png rename to aleksis/core/static/img/aleksis-favicon.png diff --git a/aleksis/core/static/js/main.js b/aleksis/core/static/js/main.js index 1d2a2fe28e3c4304e72d8abfc398f0fda3908586..119103b5ea3885f290410a42758a5f672caffdc4 100644 --- a/aleksis/core/static/js/main.js +++ b/aleksis/core/static/js/main.js @@ -19,7 +19,8 @@ function initDatePicker(sel) { // Set monday as first day of week firstDay: get_format('FIRST_DAY_OF_WEEK'), - autoClose: true + autoClose: true, + yearRange: [new Date().getFullYear() - 100, new Date().getFullYear() + 100], }); el.datepicker("setDate", $(sel).val()); return el; diff --git a/aleksis/core/templates/core/base.html b/aleksis/core/templates/core/base.html index 6c47c2a3bd0da7ba02e4c8aa96e7a5787cd933c0..06aebc4533369e9b7af39051dcb80713193f50d5 100644 --- a/aleksis/core/templates/core/base.html +++ b/aleksis/core/templates/core/base.html @@ -180,7 +180,7 @@ <span id="doit"></span> {% if request.site.preferences.footer__imprint_url %} <a class="blue-text text-lighten-4" href="{{ request.site.preferences.footer__imprint_url }}"> - {% trans "Impress" %} + {% trans "Imprint" %} </a> {% endif %} {% if request.site.preferences.footer__privacy_url and request.site.preferences.footer__imprint_url %} diff --git a/aleksis/core/util/notifications.py b/aleksis/core/util/notifications.py index 38d27057033752d6ae7cdefce9c53b4728447b80..dac344b7a2e2877d65ff1bc80b580b860bf1067f 100644 --- a/aleksis/core/util/notifications.py +++ b/aleksis/core/util/notifications.py @@ -21,7 +21,7 @@ except ImportError: def send_templated_sms( template_name: str, from_number: str, recipient_list: Sequence[str], context: dict ) -> None: - """Render a plan-text template and send via SMS to all recipients.""" + """Render a plain-text template and send via SMS to all recipients.""" template = get_template(template_name) text = template.render(context) diff --git a/aleksis/core/util/sass_helpers.py b/aleksis/core/util/sass_helpers.py index 2579ed83a6f7d7f143456e227f1c662987ba3f55..21e3d0bacd0700dc7c0db74182e547e6c885172c 100644 --- a/aleksis/core/util/sass_helpers.py +++ b/aleksis/core/util/sass_helpers.py @@ -23,7 +23,7 @@ def get_preference(section: str, name: str) -> str: def clean_scss(*args, **kwargs) -> None: """Unlink compiled CSS (i.e. cache invalidation).""" sass_storage = SassFileStorage() - __, files = sass_storage.listdir("") + __, files = sass_storage.listdir("public") for source_map in filter(lambda x: x.endswith(".css.map"), files): - sass_storage.delete(source_map) + sass_storage.delete(f"public/{source_map}") diff --git a/poetry.lock b/poetry.lock index e2ada35150452f88b9b938018d462f83ba6c94cb..ae88339c6c08269f7afd095c863bf502365245b6 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,7 +13,7 @@ reference = "gitlab" [[package]] name = "aleksis-builddeps" -version = "5+20211215233237.4a1a3adc" +version = "5+20211220215335.6c652982" description = "AlekSIS (School Information System) — Build/Dev dependencies for apps" category = "dev" optional = false @@ -54,7 +54,7 @@ reference = "gitlab" [[package]] name = "amqp" -version = "5.0.7" +version = "5.0.9" description = "Low-level AMQP client for Python (fork of amqplib)." category = "main" optional = false @@ -300,14 +300,14 @@ reference = "gitlab" [[package]] name = "boto3" -version = "1.20.24" +version = "1.20.25" description = "The AWS SDK for Python" category = "main" optional = true python-versions = ">= 3.6" [package.dependencies] -botocore = ">=1.23.24,<1.24.0" +botocore = ">=1.23.25,<1.24.0" jmespath = ">=0.7.1,<1.0.0" s3transfer = ">=0.5.0,<0.6.0" @@ -321,7 +321,7 @@ reference = "gitlab" [[package]] name = "botocore" -version = "1.23.24" +version = "1.23.25" description = "Low-level, data-driven core of boto 3." category = "main" optional = true @@ -374,19 +374,20 @@ reference = "gitlab" [[package]] name = "celery" -version = "5.0.2" +version = "5.1.2" description = "Distributed Task Queue." category = "main" optional = false python-versions = ">=3.6," [package.dependencies] -billiard = ">=3.6.3.0,<4.0" -click = ">=7.0" +billiard = ">=3.6.4.0,<4.0" +click = ">=7.0,<8.0" click-didyoumean = ">=0.0.3" +click-plugins = ">=1.1.1" click-repl = ">=0.1.6" Django = {version = ">=1.11", optional = true, markers = "extra == \"django\""} -kombu = ">=5.0.0,<6.0" +kombu = ">=5.1.0,<6.0" pytz = ">0.0-dev" redis = {version = ">=3.2.0", optional = true, markers = "extra == \"redis\""} vine = ">=5.0.0,<6.0" @@ -394,10 +395,10 @@ vine = ">=5.0.0,<6.0" [package.extras] arangodb = ["pyArango (>=1.3.2)"] auth = ["cryptography"] -azureblockblob = ["azure-storage (==0.36.0)", "azure-common (==1.1.5)", "azure-storage-common (==1.1.0)"] +azureblockblob = ["azure-storage-blob (==12.6.0)"] brotli = ["brotli (>=1.0.0)", "brotlipy (>=0.7.0)"] cassandra = ["cassandra-driver (<3.21.0)"] -consul = ["python-consul"] +consul = ["python-consul2"] cosmosdbsql = ["pydocumentdb (==2.3.2)"] couchbase = ["couchbase (>=3.0.0)"] couchdb = ["pycouchdb"] @@ -407,12 +408,12 @@ elasticsearch = ["elasticsearch"] eventlet = ["eventlet (>=0.26.1)"] gevent = ["gevent (>=1.0.0)"] librabbitmq = ["librabbitmq (>=1.5.0)"] -lzma = ["backports.lzma"] memcache = ["pylibmc"] mongodb = ["pymongo[srv] (>=3.3.0)"] msgpack = ["msgpack"] pymemcache = ["python-memcached"] pyro = ["pyro4"] +pytest = ["pytest-celery"] redis = ["redis (>=3.2.0)"] s3 = ["boto3 (>=1.9.125)"] slmq = ["softlayer-messaging (>=1.0.3)"] @@ -512,14 +513,11 @@ reference = "gitlab" [[package]] name = "click" -version = "8.0.3" +version = "7.1.2" description = "Composable command line interface toolkit" category = "main" optional = false -python-versions = ">=3.6" - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.source] type = "legacy" @@ -542,6 +540,25 @@ type = "legacy" url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple" reference = "gitlab" +[[package]] +name = "click-plugins" +version = "1.1.1" +description = "An extension module for click to enable registering CLI commands via setuptools entry-points." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +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" @@ -802,7 +819,7 @@ reference = "gitlab" [[package]] name = "django-auth-ldap" -version = "3.0.0" +version = "4.0.0" description = "Django LDAP authentication backend." category = "main" optional = true @@ -1048,7 +1065,7 @@ reference = "gitlab" [[package]] name = "django-favicon-plus-reloaded" -version = "1.1.3" +version = "1.1.5" description = "simple Django app which allows you to upload a image and it renders a wide variety for html link tags to display the favicon" category = "main" optional = false @@ -1174,7 +1191,7 @@ reference = "gitlab" [[package]] name = "django-ipware" -version = "4.0.0" +version = "4.0.2" description = "A Django application to retrieve user's IP address" category = "main" optional = false @@ -1291,18 +1308,17 @@ reference = "gitlab" [[package]] name = "django-oauth-toolkit" -version = "1.5.0" +version = "1.6.0" description = "OAuth2 Provider for Django" category = "main" optional = false python-versions = "*" [package.dependencies] -django = ">=2.2" +django = ">=2.2,<4.0.0 || >4.0.0" jwcrypto = ">=0.8.0" oauthlib = ">=3.1.0" requests = ">=2.13.0" -six = "*" [package.source] type = "legacy" @@ -1384,7 +1400,7 @@ reference = "gitlab" [[package]] name = "django-prometheus" -version = "2.1.0" +version = "2.2.0" description = "Django middlewares to monitor your application with Prometheus.io." category = "main" optional = false @@ -3965,7 +3981,7 @@ sentry = ["sentry-sdk"] [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "a862d441f977bd11bacc8f9e020f80a021feff42d9dc942b7aaa3b4de912cc78" +content-hash = "497fd9e9a0ad8940bdf3a8014c0e22f26282b48acc983f553bcfcccb227cea83" [metadata.files] alabaster = [ @@ -3973,12 +3989,12 @@ alabaster = [ {file = "alabaster-0.7.12.tar.gz", hash = "sha256:a661d72d58e6ea8a57f7a86e37d86716863ee5e92788398526d58b26a4e4dc02"}, ] aleksis-builddeps = [ - {file = "AlekSIS-Builddeps-5+20211215233237.4a1a3adc.tar.gz", hash = "sha256:a015c947580768bf77c7c2e5bd2778ec55a909f19bcaf42f673d5d1d88ffd298"}, - {file = "AlekSIS_Builddeps-5+20211215233237.4a1a3adc-py3-none-any.whl", hash = "sha256:93ff1acb87b349165e89a3bd459e9cb47ba092ac7d221da5d495bbc430ad40af"}, + {file = "AlekSIS-Builddeps-5+20211220215335.6c652982.tar.gz", hash = "sha256:e1b5302b70315008077398ba08c4fa8524ef5e406cde4b3997396b9064b1e5bb"}, + {file = "AlekSIS_Builddeps-5+20211220215335.6c652982-py3-none-any.whl", hash = "sha256:da831d7aa5fbbcb3994d5a0ece5e37e04dbd3908125285f549b003a4a7d45446"}, ] amqp = [ - {file = "amqp-5.0.7-py3-none-any.whl", hash = "sha256:4d9cb6b5d69183ba279e97382ff68a071864c25b561d206dab73499d3ed26d1c"}, - {file = "amqp-5.0.7.tar.gz", hash = "sha256:d757b78fd7d3c6bb60e3ee811b68145583643747ed3ec253329f086aa3a72a5d"}, + {file = "amqp-5.0.9-py3-none-any.whl", hash = "sha256:9cd81f7b023fc04bbb108718fbac674f06901b77bfcdce85b10e2a5d0ee91be5"}, + {file = "amqp-5.0.9.tar.gz", hash = "sha256:1e5f707424e544078ca196e72ae6a14887ce74e02bd126be54b7c03c971bef18"}, ] appnope = [ {file = "appnope-0.1.2-py2.py3-none-any.whl", hash = "sha256:93aa393e9d6c54c5cd570ccadd8edad61ea0c4b9ea7a01409020c9aa019eb442"}, @@ -4037,12 +4053,12 @@ bleach = [ {file = "boolean.py-3.8.tar.gz", hash = "sha256:cc24e20f985d60cd4a3a5a1c0956dd12611159d32a75081dabd0c9ab981acaa4"}, ] boto3 = [ - {file = "boto3-1.20.24-py3-none-any.whl", hash = "sha256:8f08e8e94bf107c5e9866684e9aadf8d9f60abed0cfe5c1dba4e7328674a1986"}, - {file = "boto3-1.20.24.tar.gz", hash = "sha256:739705b28e6b2329ea3b481ba801d439c296aaf176f7850729147ba99bbf8a9a"}, + {file = "boto3-1.20.25-py3-none-any.whl", hash = "sha256:a03ab82efcbf457c36dab4afc545d0ddb72b5140c9993cffc78bc23b8d8baa40"}, + {file = "boto3-1.20.25.tar.gz", hash = "sha256:fa686e8e0a0559124aa9f19dcc25e6cc428f18ff11f779bb7346b883b353fdc2"}, ] botocore = [ - {file = "botocore-1.23.24-py3-none-any.whl", hash = "sha256:e78d48c50c8c013fb9b362c6202fece2fe868edfd89b51968080180bdff41617"}, - {file = "botocore-1.23.24.tar.gz", hash = "sha256:43006b4f52d7bb655319d3da0f615cdbee7762853acc1ebcb1d49f962e6b4806"}, + {file = "botocore-1.23.25-py3-none-any.whl", hash = "sha256:98f8a23ca035edfbd8a8028e624eaf08ba22452dd78ad62eeb03fcd0bbd5f58d"}, + {file = "botocore-1.23.25.tar.gz", hash = "sha256:9eb71d5ee1ea335b3968751346601e923c66a7b324b1dc58e360d14e0d2ac136"}, ] bs4 = [ {file = "bs4-0.0.1.tar.gz", hash = "sha256:36ecea1fd7cc5c0c6e4a1ff075df26d50da647b75376626cc186e2212886dd3a"}, @@ -4052,8 +4068,8 @@ calendarweek = [ {file = "calendarweek-0.5.1.tar.gz", hash = "sha256:fffe2db46dc272f2ede867bfe20e9b07fb051429f25441fb45fb2a4dd69ee0c7"}, ] celery = [ - {file = "celery-5.0.2-py3-none-any.whl", hash = "sha256:930c3acd55349d028c4e7104a7d377729cbcca19d9fce470c17172d9e7f9a8b6"}, - {file = "celery-5.0.2.tar.gz", hash = "sha256:012c814967fe89e3f5d2cf49df2dba3de5f29253a7f4f2270e8fce6b901b4ebf"}, + {file = "celery-5.1.2-py3-none-any.whl", hash = "sha256:9dab2170b4038f7bf10ef2861dbf486ddf1d20592290a1040f7b7a1259705d42"}, + {file = "celery-5.1.2.tar.gz", hash = "sha256:8d9a3de9162965e97f8e8cc584c67aad83b3f7a267584fa47701ed11c3e0d4b0"}, ] celery-haystack-ng = [ {file = "celery-haystack-ng-0.20.post2.tar.gz", hash = "sha256:d2e077851f13dddc36fc86134c7c8a937e46ae75e576eb8e77e03b03977fc7bb"}, @@ -4124,13 +4140,17 @@ charset-normalizer = [ {file = "charset_normalizer-2.0.9-py3-none-any.whl", hash = "sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721"}, ] click = [ - {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, - {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, + {file = "click-7.1.2-py2.py3-none-any.whl", hash = "sha256:dacca89f4bfadd5de3d7489b7c8a566eee0d3676333fbb50030263894c38c0dc"}, + {file = "click-7.1.2.tar.gz", hash = "sha256:d2b5255c7c6349bc1bd1e59e08cd12acbbd63ce649f2588755783aa94dfb6b1a"}, ] click-didyoumean = [ {file = "click-didyoumean-0.3.0.tar.gz", hash = "sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035"}, {file = "click_didyoumean-0.3.0-py3-none-any.whl", hash = "sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667"}, ] +click-plugins = [ + {file = "click-plugins-1.1.1.tar.gz", hash = "sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b"}, + {file = "click_plugins-1.1.1-py2.py3-none-any.whl", hash = "sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8"}, +] click-repl = [ {file = "click-repl-0.2.0.tar.gz", hash = "sha256:cd12f68d745bf6151210790540b4cb064c7b13e571bc64b6957d98d120dacfd8"}, {file = "click_repl-0.2.0-py3-none-any.whl", hash = "sha256:94b3fbbc9406a236f176e0506524b2937e4b23b6f4c0c0b2a0a83f8a64e9194b"}, @@ -4253,8 +4273,8 @@ django-appconf = [ {file = "django_appconf-1.0.5-py3-none-any.whl", hash = "sha256:ae9f864ee1958c815a965ed63b3fba4874eec13de10236ba063a788f9a17389d"}, ] django-auth-ldap = [ - {file = "django-auth-ldap-3.0.0.tar.gz", hash = "sha256:1f2d5c562d9ba9a5e9a64099ae9798e1a63840a11afe4d1c4a9c74121f066eaa"}, - {file = "django_auth_ldap-3.0.0-py3-none-any.whl", hash = "sha256:19ee19034f344d9efd07ed88d3187e256ec33ae39d6a47222083b89f7d35c5f6"}, + {file = "django-auth-ldap-4.0.0.tar.gz", hash = "sha256:276f79e624ce083ce13f161387f65ff1c0efe83ef8a42f2b9830d43317b15239"}, + {file = "django_auth_ldap-4.0.0-py3-none-any.whl", hash = "sha256:94119c94981809124d3dc4bed974f71c7a980666896df626f556a88a5fe0b59c"}, ] django-bleach = [ {file = "django-bleach-1.0.0.tar.gz", hash = "sha256:2586b90d641d4d7e70ee353570ad33d3625ed4b97036a3ea5b03ea1bb5bbeccd"}, @@ -4312,8 +4332,8 @@ django-extensions = [ {file = "django_extensions-3.1.5-py3-none-any.whl", hash = "sha256:9238b9e016bb0009d621e05cf56ea8ce5cce9b32e91ad2026996a7377ca28069"}, ] django-favicon-plus-reloaded = [ - {file = "django-favicon-plus-reloaded-1.1.3.tar.gz", hash = "sha256:36c2a1cefc201df8bd132492e2440ccdc3d9ceb8e421b2ca181a4704ebacd190"}, - {file = "django_favicon_plus_reloaded-1.1.3-py3-none-any.whl", hash = "sha256:a60b438360e82bf7075b856ff6a80bae20c825373a58deac627810e478c42be3"}, + {file = "django-favicon-plus-reloaded-1.1.5.tar.gz", hash = "sha256:0714bd22878617f8bb53333ddc06ae7b5071cebff5b5d2a9ebcb58b11c6632dd"}, + {file = "django_favicon_plus_reloaded-1.1.5-py3-none-any.whl", hash = "sha256:b14eba8e4a52e00cf61bb50856f866c964673cd25f88175434854c55d8e1ba99"}, ] django-filter = [ {file = "django-filter-2.4.0.tar.gz", hash = "sha256:84e9d5bb93f237e451db814ed422a3a625751cbc9968b484ecc74964a8696b06"}, @@ -4342,8 +4362,8 @@ django-invitations = [ {file = "django-invitations-1.9.3.tar.gz", hash = "sha256:6077807aa641c7abae9ca418e757c8e3940fb0ce60499dba24c100ad57c61442"}, ] django-ipware = [ - {file = "django-ipware-4.0.0.tar.gz", hash = "sha256:1294f916f3b3475e40e1b0ec1bd320aa2397978eae672721c81cbc2ed517e9ee"}, - {file = "django_ipware-4.0.0-py2.py3-none-any.whl", hash = "sha256:116bd0d7940f09bf7ffd465943992e23d87e772a9d6c0d3a57b74040589a383b"}, + {file = "django-ipware-4.0.2.tar.gz", hash = "sha256:602a58325a4808bd19197fef2676a0b2da2df40d0ecf21be414b2ff48c72ad05"}, + {file = "django_ipware-4.0.2-py2.py3-none-any.whl", hash = "sha256:878dbb06a87e25550798e9ef3204ed70a200dd8b15e47dcef848cf08244f04c9"}, ] django-js-asset = [ {file = "django-js-asset-1.2.2.tar.gz", hash = "sha256:c163ae80d2e0b22d8fb598047cd0dcef31f81830e127cfecae278ad574167260"}, @@ -4373,8 +4393,8 @@ django-model-utils = [ {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"}, - {file = "django_oauth_toolkit-1.5.0-py3-none-any.whl", hash = "sha256:b2e346a7c1e222774bfb370f21b556b92b408395b4c23914e2d1b241b2e5376a"}, + {file = "django-oauth-toolkit-1.6.0.tar.gz", hash = "sha256:5e2a98518fcef3566d5632c7341fd2444323a0b2ae78fd77f89d0046a05905b8"}, + {file = "django_oauth_toolkit-1.6.0-py3-none-any.whl", hash = "sha256:3a488cb87a4dd803487f735d88c21aeec563eac7fb603902031ee7fdb722ae3e"}, ] django-otp = [ {file = "django-otp-1.1.3.tar.gz", hash = "sha256:f002c71d4ea7f514590be00492980d3c87397b73dc20542e1c4fc00b66f2dda1"}, @@ -4393,8 +4413,8 @@ django-polymorphic = [ {file = "django_polymorphic-3.1.0-py3-none-any.whl", hash = "sha256:08bc4f4f4a773a19b2deced5a56deddd1ef56ebd15207bf4052e2901c25ef57e"}, ] django-prometheus = [ - {file = "django-prometheus-2.1.0.tar.gz", hash = "sha256:dd3f8da1399140fbef5c00d1526a23d1ade286b144281c325f8e409a781643f2"}, - {file = "django_prometheus-2.1.0-py2.py3-none-any.whl", hash = "sha256:c338d6efde1ca336e90c540b5e87afe9287d7bcc82d651a778f302b0be17a933"}, + {file = "django-prometheus-2.2.0.tar.gz", hash = "sha256:240378a1307c408bd5fc85614a3a57f1ce633d4a222c9e291e2bbf325173b801"}, + {file = "django_prometheus-2.2.0-py2.py3-none-any.whl", hash = "sha256:e6616770d8820b8834762764bf1b76ec08e1b98e72a6f359d488a2e15fe3537c"}, ] django-redis = [ {file = "django-redis-5.1.0.tar.gz", hash = "sha256:98fb3d31633a1addea1aeb558a647359908bbcf78c0833f99496c5348fe3c1b4"}, diff --git a/pyproject.toml b/pyproject.toml index 927cc2722ab2370ab7f34c18ba41676ab8cd370a..6eb9353380ea0492f2f2886e0b25295749d23e64 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -57,7 +57,7 @@ django-sass-processor = "1.0" libsass = "^0.21.0" colour = "^0.1.5" dynaconf = {version = "^3.1", extras = ["yaml", "toml", "ini"]} -django-auth-ldap = { version = "^3.0", optional = true } +django-auth-ldap = { version = "^4.0", optional = true } django-maintenance-mode = "^0.16.0" django-ipware = "^4.0" django-impersonate = "^1.4"