From a8a6a208b1eb8b49077af9b5d38154c1ada990e7 Mon Sep 17 00:00:00 2001 From: Brice Gros Date: Tue, 21 Jan 2020 14:22:37 +0100 Subject: [PATCH 01/99] fix Domain.generate_ns_secret() storing bytes object into Domain.nameserver_update_secret instead of a string --- CHANGES.rst | 1 + src/nsupdate/main/models.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES.rst b/CHANGES.rst index 45c1c8be..28520f21 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -21,6 +21,7 @@ New Features: Fixes: - fixed misc. crashes +- fixed Domain.generate_ns_secret() storing bytes object into Domain.nameserver_update_secret leading to trying to insert the string representation of the bytes object, so 91 characters in a varchar(88) Other changes: diff --git a/src/nsupdate/main/models.py b/src/nsupdate/main/models.py index 5cc69cae..9a4485dd 100644 --- a/src/nsupdate/main/models.py +++ b/src/nsupdate/main/models.py @@ -141,7 +141,7 @@ def generate_ns_secret(self): user_model = get_user_model() secret = user_model.objects.make_random_password(length=bitlength // 8) secret = secret.encode('utf-8') - self.nameserver_update_secret = secret_base64 = base64.b64encode(secret) + self.nameserver_update_secret = secret_base64 = base64.b64encode(secret).decode('utf-8') self.save() return secret_base64 From c500696487f953274d0513f4aa8dbf60fec7c1a2 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 8 Nov 2021 22:44:04 +0100 Subject: [PATCH 02/99] enable blacklisting of email addresses (regex) we had email domain blacklisting before, but this is more powerful. --- src/nsupdate/accounts/registration_form.py | 10 +++++----- src/nsupdate/settings/base.py | 7 ++++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/src/nsupdate/accounts/registration_form.py b/src/nsupdate/accounts/registration_form.py index 99e2a74b..d65a4cc2 100644 --- a/src/nsupdate/accounts/registration_form.py +++ b/src/nsupdate/accounts/registration_form.py @@ -21,7 +21,7 @@ resolver.nameservers = settings.NAMESERVERS -maildomain_blacklist = settings.MAILDOMAIN_BLACKLIST.strip().splitlines() +email_blacklist = settings.EMAIL_BLACKLIST.strip().splitlines() def check_mx(domain): @@ -49,9 +49,9 @@ def check_mx(domain): return valid -def check_blacklist(domain): - for blacklisted_re in maildomain_blacklist: - if re.search(blacklisted_re, domain): +def check_blacklist(email): + for blacklisted_re in email_blacklist: + if re.search(blacklisted_re, email): return False return True @@ -68,7 +68,7 @@ def clean_email(self): valid_mx = check_mx(domain) except Exception as e: logger.exception('RegistrationFormValidateEmail raised an exception:') - not_blacklisted = check_blacklist(domain) + not_blacklisted = check_blacklist(email) if valid_mx and not_blacklisted: return email logger.info('RegistrationFormValidateEmail: rejecting email address %r' % email) diff --git a/src/nsupdate/settings/base.py b/src/nsupdate/settings/base.py index 76063e8d..47c140e6 100644 --- a/src/nsupdate/settings/base.py +++ b/src/nsupdate/settings/base.py @@ -62,12 +62,13 @@ # please configure your own nameservers in your local settings file. NAMESERVERS = ['8.8.8.8', '1.1.1.1', ] -# registration email validation: disallow specific email domains, +# registration email validation: disallow specific email patterns, # e.g. domains that have a non-working mx / that are frequently abused. # we use a multiline string here with one regex per line (used with re.search). -# the domains given below are just examples, please configure your own +# the patterns given below are just examples, please configure your own # regexes in your local settings file. -MAILDOMAIN_BLACKLIST = r""" +EMAIL_BLACKLIST = r""" +foobar@example\.org$ mailcatch\.com$ mailspam\.xyz$ """ From f6a6eeca08f491e32a1127394082560d4be86c27 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 8 Nov 2021 22:57:52 +0100 Subject: [PATCH 03/99] try to identify&remove illegal/abusive users --- src/nsupdate/management/commands/illegal.py | 57 +++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/nsupdate/management/commands/illegal.py diff --git a/src/nsupdate/management/commands/illegal.py b/src/nsupdate/management/commands/illegal.py new file mode 100644 index 00000000..cb767f0e --- /dev/null +++ b/src/nsupdate/management/commands/illegal.py @@ -0,0 +1,57 @@ +""" +try to identify users / hosts doing illegal / questionable things +""" + +import time +from collections import defaultdict + +from django.core.management.base import BaseCommand +from django.db import transaction +from django.db.utils import OperationalError + +from nsupdate.main.models import Host +from nsupdate.main import dnstools + + +class Command(BaseCommand): + help = 'try to identify users / hosts doing illegal / questionable things' + + def handle(self, *args, **options): + ip_to_hosts = defaultdict(list) + for host in Host.objects.all(): + fqdn = host.get_fqdn() + try: + ip = dnstools.query_ns(fqdn, 'A') + ip_to_hosts[ip].append(host) + except: + pass + ips = sorted(ip_to_hosts.keys(), key=lambda ip: len(ip_to_hosts[ip]), reverse=True) + for ip in ips: + users = {} + hosts_of_user = defaultdict(list) + hosts = ip_to_hosts[ip] + ip_refcount = len(hosts) + print("IP %s is referred to by %d hosts." % (ip, ip_refcount)) + for host in hosts: + user = host.created_by + users[user.id] = user + hosts_of_user[user.id].append(host) + response = None + for user_id in users: + user = users[user_id] + count = len(hosts_of_user[user_id]) + hostname_samples = ', '.join(h.name for h in hosts_of_user[user_id][:10]) + print("User %s (%s) has created %d hosts all pointing to same IP as %d other hostnames." % (user.username, user.email, count, ip_refcount - count)) + print("Hostname samples: %s" % (hostname_samples, )) + if response != 'Y': + response = input("Delete user? no [default], y = yes, Y = YES to all, a = abort > ") + if response.lower() == 'y': + while True: + try: + user.delete() + break + except OperationalError: + # database is locked + time.sleep(0.1) + if response.lower() == 'a': + break From 1792c6922320e3b35e11929f585c4510fa7c7861 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Mon, 8 Nov 2021 23:34:33 +0100 Subject: [PATCH 04/99] strip prefix-length / netmask if present, fixes #470 --- src/nsupdate/api/views.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/nsupdate/api/views.py b/src/nsupdate/api/views.py index bd7cd6ec..7be115eb 100644 --- a/src/nsupdate/api/views.py +++ b/src/nsupdate/api/views.py @@ -355,6 +355,10 @@ def _update_or_delete(host, ipaddr, secure=False, logger=None, _delete=False): # https://github.com/rthalley/dnspython/issues/41 # TODO: reproduce and submit traceback to issue 41 ipaddr = str(ipaddr) + if '/' in ipaddr: + # looks like there is a trailing /xx prefix length / netmask - get rid of it. + # by doing this we support myip= of FritzBox. + ipaddr = ipaddr.rsplit('/')[0] kind = check_ip(ipaddr, ('ipv4', 'ipv6')) rdtype = 'A' if kind == 'ipv4' else 'AAAA' IPNetwork(ipaddr) # raise AddrFormatError here if there is an issue with ipaddr, see #394 From a5db72c8d715a0dfa30017c9d964aead4d4fea27 Mon Sep 17 00:00:00 2001 From: Florian Adamsky Date: Wed, 13 Jul 2022 12:17:25 +0200 Subject: [PATCH 05/99] Include note about IPv4 interface ID (#495) docs: include note about IPv4 interface ID The documentation was unclear how I can have the same IPv4 address for a related host. I found the solution in #133 and thought I might help to include this into the documentation. --- docs/user.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/user.rst b/docs/user.rst index 821fb144..6c7ee0a7 100644 --- a/docs/user.rst +++ b/docs/user.rst @@ -216,6 +216,8 @@ Note: make sure you send this device's IPv6 address with the update (myip=...) or run the updater on that device and make sure the request originates from the IPv6 address you want in DNS. +* if you want the related host to point to the same IPv4 address as the main + host (which is often the router), use 0 as the interface ID. Other Services Updaters From 84e3e19af9c733c87b4d66077c9a93280584dead Mon Sep 17 00:00:00 2001 From: Pg Date: Tue, 17 Jan 2023 13:47:09 +0100 Subject: [PATCH 06/99] Update user.rst to add ipv6 support for ddclient ddclient added the ipv6 without patch in 3.8.1, as said on the web interface (https://github.com/nsupdate-info/nsupdate.info/blob/8c391cca886522762663371fd75238c9dae93c38/src/nsupdate/main/templates/main/includes/tabbed_router_configuration.html#L175). Almost all distributions (if not all) have a version greater than 3.8.1. Thus, the documentation can be updated to reflect the current support of ipv6. --- docs/user.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user.rst b/docs/user.rst index 6c7ee0a7..0a5a7048 100644 --- a/docs/user.rst +++ b/docs/user.rst @@ -360,7 +360,7 @@ Here are some clients that likely qualify: - we offer configuration help for it, just copy & paste - good working, reliable - - the official version is IPv4 only, IPv6 support needs a patched version + - IPv4 and IPv6 support - Linux & other POSIX systems * inadyn (>= 1.99.11) From 45dcc59a00bae4007b1a3f9bd1acbc62ba5302ab Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 21:14:27 +0100 Subject: [PATCH 07/99] use tox for invoking pytest/flake8 also: - add pyproject.toml to make recent tools happy - convert config from pytest-pep8 to flake8 - silence all flake8 warnings/errors (needs fixing later) --- pyproject.toml | 3 +++ requirements.d/dev.txt | 6 ++++-- setup.cfg | 32 +++++++++++++++++++++----------- tox.ini | 20 ++++++++++++++++++++ 4 files changed, 48 insertions(+), 13 deletions(-) create mode 100644 pyproject.toml create mode 100644 tox.ini diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..8fd8d67e --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["setuptools", "setuptools-scm"] +build-backend = "setuptools.build_meta" diff --git a/requirements.d/dev.txt b/requirements.d/dev.txt index 8c3992f2..7d18d69c 100644 --- a/requirements.d/dev.txt +++ b/requirements.d/dev.txt @@ -1,7 +1,9 @@ # packages needed for development -r all.txt django-debug-toolbar -pytest>=3.6 +pytest pytest-django -pytest-pep8 +pytest-cov +tox +wheel Sphinx diff --git a/setup.cfg b/setup.cfg index af46bf5e..19c53321 100644 --- a/setup.cfg +++ b/setup.cfg @@ -23,15 +23,25 @@ upload-dir = docs/_build/html [tool:pytest] DJANGO_SETTINGS_MODULE = nsupdate.settings.dev -pep8maxlinelength = 120 -norecursedirs = .git .eggs -pep8ignore = - *.py E124 # closing bracket does not match visual indentation (behaves strange!?) - *.py E125 # continuation line does not distinguish itself from next logical line (difficult to avoid!) - *.py E129 # visually indented line with same indent as next logical line - *.py E402 # we do not care about module level imports being at top of file - *.py E731 # we do assign lambda expressions if we like - *.py W503 # we don't think this is an issue - docs/conf.py ALL # sphinx stuff, automatically generated, don't check this - migrations/*.py ALL # autogenerated by Django +markers = + requires_sequential + +[flake8] +max_line_length = 120 +exclude = build,dist,.git,.idea,.cache,.tox,docs,migrations +ignore = + E124 + E125 + E129 + E402 + E501 + E722 + E731 + F401 + F403 + F405 + F811 + F841 + W503 + W504 diff --git a/tox.ini b/tox.ini new file mode 100644 index 00000000..f6408403 --- /dev/null +++ b/tox.ini @@ -0,0 +1,20 @@ +# tox configuration - if you change anything here, run this to verify: +# tox --recreate + +[tox] +envlist = py{38,39,310} + +[testenv] +deps = + -rrequirements.d/dev.txt +# TODO: currently limited to one simple test until the environment is there to run them all +commands = py.test -v -rs -k "test_basic_auth" --cov=nsupdate --cov-config=.coveragerc --pyargs {posargs:nsupdate} +passenv = * + +[testenv:flake8] +skip_sdist=true +skip_install=true +changedir = +deps = + flake8 +commands = flake8 src scripts conftest.py From 698ec275dee3f3955204fea3fcd1414fe93cd117 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 21:32:37 +0100 Subject: [PATCH 08/99] CI via github actions --- .github/workflows/ci.yml | 104 ++++++++++++++++++++++++++++++++++++++ requirements.d/travis.txt | 8 +-- scripts/travis/install.sh | 6 +-- 3 files changed, 111 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/ci.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 00000000..4fc36bdb --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,104 @@ +# badge: https://github.com/nsupdate-info/nsupdate.info/workflows/CI/badge.svg?branch=master + +name: CI + +on: + push: + branches: [ master ] + paths: + - '**.py' + - '**.yml' + - '**.cfg' + - '**.ini' + - 'requirements.d/*' + - '!docs/**' + pull_request: + branches: [ master ] + paths: + - '**.py' + - '**.yml' + - '**.cfg' + - '**.ini' + - 'requirements.d/*' + - '!docs/**' + +jobs: + lint: + + runs-on: ubuntu-22.04 + timeout-minutes: 10 + + steps: + - uses: actions/checkout@v3 + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: 3.8 + - name: Lint with flake8 + run: | + pip install flake8 + flake8 src scripts conftest.py + + tox: + + needs: lint + strategy: + fail-fast: true + matrix: + include: + - os: ubuntu-22.04 + python-version: '3.8' + toxenv: py38 + - os: ubuntu-22.04 + python-version: '3.9' + toxenv: py39 + - os: ubuntu-22.04 + python-version: '3.10' + toxenv: py310 + + env: + TOXENV: ${{ matrix.toxenv }} + + runs-on: ${{ matrix.os }} + timeout-minutes: 40 + + steps: + - uses: actions/checkout@v3 + with: + # just fetching 1 commit is not enough for setuptools-scm, so we fetch all + fetch-depth: 0 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python-version }} + - name: Cache pip + uses: actions/cache@v3 + with: + path: ~/.cache/pip + key: ${{ runner.os }}-pip-${{ hashFiles('requirements.d/dev.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + ${{ runner.os }}- + + - name: Install OS packages + run: | + DJANGO=2.2 bash scripts/travis/install.sh + + - name: Install Python requirements + run: | + python -m pip install --upgrade pip setuptools wheel + pip install -r requirements.d/dev.txt + - name: Install nsupdate.info + run: | + pip install -e . + - name: run tox env + run: | + tox --skip-missing-interpreters + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + env: + OS: ${{ runner.os }} + python: ${{ matrix.python-version }} + with: + token: ${{ secrets.CODECOV_TOKEN }} + env_vars: OS, python diff --git a/requirements.d/travis.txt b/requirements.d/travis.txt index 5c744afc..8caf8b78 100644 --- a/requirements.d/travis.txt +++ b/requirements.d/travis.txt @@ -2,8 +2,8 @@ # this is mostly the stuff from dev.txt except a few packages not needed # on travis. the desired version of django is installed via .travis.yml. django-debug-toolbar -pytest>=3.6 +pytest pytest-django -pytest-pep8 -coveralls -coverage +pytest-cov +tox +wheel diff --git a/scripts/travis/install.sh b/scripts/travis/install.sh index aea80035..3bfb4c38 100755 --- a/scripts/travis/install.sh +++ b/scripts/travis/install.sh @@ -18,9 +18,9 @@ sudo rm -f /etc/resolv.conf sudo cp scripts/travis/etc/resolv.conf /etc/ sudo chattr +i /etc/resolv.conf -#dig @127.0.0.1 nsupdate.info SOA -#dig @127.0.0.1 tests.nsupdate.info SOA -#sudo netstat -tulpen | grep 53 +dig @127.0.0.1 nsupdate.info SOA +dig @127.0.0.1 tests.nsupdate.info SOA +sudo netstat -tulpen | grep 53 pip install Django~=$DJANGO pip install -r requirements.d/travis.txt From 2cd520e71f874d0d37b6e02f11004b3659b50bf7 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 21:48:02 +0100 Subject: [PATCH 09/99] rename scripts/travis -> ci --- .github/workflows/ci.yml | 2 +- requirements.d/{travis.txt => ci.txt} | 0 scripts/{travis => ci}/etc/bind/named.conf.local | 0 scripts/{travis => ci}/etc/bind/zones/nsupdate.info | 0 scripts/{travis => ci}/etc/bind/zones/tests.nsupdate.info | 0 scripts/{travis => ci}/etc/resolv.conf | 0 scripts/{travis => ci}/install.sh | 8 ++++---- 7 files changed, 5 insertions(+), 5 deletions(-) rename requirements.d/{travis.txt => ci.txt} (100%) rename scripts/{travis => ci}/etc/bind/named.conf.local (100%) rename scripts/{travis => ci}/etc/bind/zones/nsupdate.info (100%) rename scripts/{travis => ci}/etc/bind/zones/tests.nsupdate.info (100%) rename scripts/{travis => ci}/etc/resolv.conf (100%) rename scripts/{travis => ci}/install.sh (74%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4fc36bdb..e0c9e927 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -82,7 +82,7 @@ jobs: - name: Install OS packages run: | - DJANGO=2.2 bash scripts/travis/install.sh + DJANGO=2.2 bash scripts/ci/install.sh - name: Install Python requirements run: | diff --git a/requirements.d/travis.txt b/requirements.d/ci.txt similarity index 100% rename from requirements.d/travis.txt rename to requirements.d/ci.txt diff --git a/scripts/travis/etc/bind/named.conf.local b/scripts/ci/etc/bind/named.conf.local similarity index 100% rename from scripts/travis/etc/bind/named.conf.local rename to scripts/ci/etc/bind/named.conf.local diff --git a/scripts/travis/etc/bind/zones/nsupdate.info b/scripts/ci/etc/bind/zones/nsupdate.info similarity index 100% rename from scripts/travis/etc/bind/zones/nsupdate.info rename to scripts/ci/etc/bind/zones/nsupdate.info diff --git a/scripts/travis/etc/bind/zones/tests.nsupdate.info b/scripts/ci/etc/bind/zones/tests.nsupdate.info similarity index 100% rename from scripts/travis/etc/bind/zones/tests.nsupdate.info rename to scripts/ci/etc/bind/zones/tests.nsupdate.info diff --git a/scripts/travis/etc/resolv.conf b/scripts/ci/etc/resolv.conf similarity index 100% rename from scripts/travis/etc/resolv.conf rename to scripts/ci/etc/resolv.conf diff --git a/scripts/travis/install.sh b/scripts/ci/install.sh similarity index 74% rename from scripts/travis/install.sh rename to scripts/ci/install.sh index 3bfb4c38..ee7c32e2 100755 --- a/scripts/travis/install.sh +++ b/scripts/ci/install.sh @@ -7,15 +7,15 @@ sudo apt-get -y update sudo apt-get -y install bind9 dnsutils e2fsprogs sudo ln -s /var/lib/bind /etc/bind/zones -sudo cp scripts/travis/etc/bind/named.conf.local /etc/bind/ +sudo cp scripts/ci/etc/bind/named.conf.local /etc/bind/ sudo chown bind.bind /etc/bind/named.conf.local -sudo cp scripts/travis/etc/bind/zones/* /etc/bind/zones/ +sudo cp scripts/ci/etc/bind/zones/* /etc/bind/zones/ sudo chown bind.bind /etc/bind/zones/* sudo service bind9 restart sudo dpkg -P ubuntu-minimal resolvconf sudo rm -f /etc/resolv.conf -sudo cp scripts/travis/etc/resolv.conf /etc/ +sudo cp scripts/ci/etc/resolv.conf /etc/ sudo chattr +i /etc/resolv.conf dig @127.0.0.1 nsupdate.info SOA @@ -23,5 +23,5 @@ dig @127.0.0.1 tests.nsupdate.info SOA sudo netstat -tulpen | grep 53 pip install Django~=$DJANGO -pip install -r requirements.d/travis.txt +pip install -r requirements.d/ci.txt pip install -e . From 72800374f9f505b8e3a8e86dbaea8b5ed21c3c1a Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 21:57:25 +0100 Subject: [PATCH 10/99] enable almost all tests (we had "not ddns_client" also on travis ci) --- src/nsupdate/api/_tests/test_api.py | 2 +- tox.ini | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/nsupdate/api/_tests/test_api.py b/src/nsupdate/api/_tests/test_api.py index f6e072b6..330174f1 100644 --- a/src/nsupdate/api/_tests/test_api.py +++ b/src/nsupdate/api/_tests/test_api.py @@ -183,7 +183,7 @@ def test_nic_update_authorized_update_other_services(client): assert response.status_code == 200 # must be good (was different IP) assert response.content == b'good 1.2.3.4' - # XXX test below can not run in parallel (like on travis-ci.org) if updating same + # XXX test below can not run in parallel (like on github) if updating same # "other service" target host # now check if it updated the other service also: assert query_ns(TEST_HOST_OTHER, 'A') == '1.2.3.4' diff --git a/tox.ini b/tox.ini index f6408403..7e74ab93 100644 --- a/tox.ini +++ b/tox.ini @@ -7,8 +7,7 @@ envlist = py{38,39,310} [testenv] deps = -rrequirements.d/dev.txt -# TODO: currently limited to one simple test until the environment is there to run them all -commands = py.test -v -rs -k "test_basic_auth" --cov=nsupdate --cov-config=.coveragerc --pyargs {posargs:nsupdate} +commands = py.test -v -rs -k "not ddns_client" -m "not requires_sequential" --cov=nsupdate --cov-config=.coveragerc --pyargs {posargs:nsupdate} passenv = * [testenv:flake8] From 24a4a4bb84e98384d1bc6f628a7993cf1b084daa Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 22:03:25 +0100 Subject: [PATCH 11/99] setup.py: require six --- setup.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 2ef985e1..ed1f4bc2 100644 --- a/setup.py +++ b/setup.py @@ -38,7 +38,8 @@ 'django-extensions', 'social-auth-app-django', 'requests', # for our ddns_client - 'setuptools_scm' + 'setuptools_scm', + 'six', ], classifiers=[ 'Development Status :: 5 - Production/Stable', From dcfab96da82992e1d4a47b99439b217d6ab3face Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 22:15:12 +0100 Subject: [PATCH 12/99] disable the social_core AUTHENTICATION_BACKENDS --- src/nsupdate/settings/base.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/nsupdate/settings/base.py b/src/nsupdate/settings/base.py index 47c140e6..97273417 100644 --- a/src/nsupdate/settings/base.py +++ b/src/nsupdate/settings/base.py @@ -305,16 +305,16 @@ # python-social-auth settings AUTHENTICATION_BACKENDS = ( - 'social_core.backends.amazon.AmazonOAuth2', - 'social_core.backends.bitbucket.BitbucketOAuth', - 'social_core.backends.disqus.DisqusOAuth2', - 'social_core.backends.dropbox.DropboxOAuth', - 'social_core.backends.github.GithubOAuth2', - 'social_core.backends.google.GoogleOAuth2', - 'social_core.backends.reddit.RedditOAuth2', - 'social_core.backends.soundcloud.SoundcloudOAuth2', - 'social_core.backends.stackoverflow.StackoverflowOAuth2', - 'social_core.backends.twitter.TwitterOAuth', + # 'social_core.backends.amazon.AmazonOAuth2', + # 'social_core.backends.bitbucket.BitbucketOAuth', + # 'social_core.backends.disqus.DisqusOAuth2', + # 'social_core.backends.dropbox.DropboxOAuth', + # 'social_core.backends.github.GithubOAuth2', + # 'social_core.backends.google.GoogleOAuth2', + # 'social_core.backends.reddit.RedditOAuth2', + # 'social_core.backends.soundcloud.SoundcloudOAuth2', + # 'social_core.backends.stackoverflow.StackoverflowOAuth2', + # 'social_core.backends.twitter.TwitterOAuth', 'django.contrib.auth.backends.ModelBackend', ) From 7b6e03d2e494b6470882b08e3a0a56ac0ef7a57f Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 22:21:31 +0100 Subject: [PATCH 13/99] add .tox to .gitignore --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index d0abbdd3..568567b6 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ local_settings.py .coverage .idea/ .cache/ +.tox/ *.sqlite *.egg-info dist/ From 5616458517f5827b76dd315833ddea680edf2d00 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 22:28:32 +0100 Subject: [PATCH 14/99] pytest.yield_fixture -> .fixture --- conftest.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/conftest.py b/conftest.py index 3c3fefcd..d3d7ab66 100644 --- a/conftest.py +++ b/conftest.py @@ -40,7 +40,7 @@ from nsupdate.main.dnstools import update_ns, FQDN -@pytest.yield_fixture(scope="function") +@pytest.fixture(scope="function") def ddns_hostname(): """ get a random hostname for tests and make sure it is removed from dns @@ -53,7 +53,7 @@ def ddns_hostname(): update_ns(fqdn, 'AAAA', action='del') -@pytest.yield_fixture(scope="function") +@pytest.fixture(scope="function") def ddns_fqdn(ddns_hostname): yield FQDN(ddns_hostname, TESTDOMAIN) From 4cc5f1e3c39b1a10ea48f609c7be4e8fbb860183 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 22:38:16 +0100 Subject: [PATCH 15/99] no resolvconf / ubuntu-minimal pkg to remove --- scripts/ci/install.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/ci/install.sh b/scripts/ci/install.sh index ee7c32e2..c87f571e 100755 --- a/scripts/ci/install.sh +++ b/scripts/ci/install.sh @@ -13,7 +13,6 @@ sudo cp scripts/ci/etc/bind/zones/* /etc/bind/zones/ sudo chown bind.bind /etc/bind/zones/* sudo service bind9 restart -sudo dpkg -P ubuntu-minimal resolvconf sudo rm -f /etc/resolv.conf sudo cp scripts/ci/etc/resolv.conf /etc/ sudo chattr +i /etc/resolv.conf From 899d1c2b5cbbffda4a35bcbda870a13545e83c43 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 22:39:20 +0100 Subject: [PATCH 16/99] disable dns debug output --- scripts/ci/install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/ci/install.sh b/scripts/ci/install.sh index c87f571e..dff92065 100755 --- a/scripts/ci/install.sh +++ b/scripts/ci/install.sh @@ -17,9 +17,9 @@ sudo rm -f /etc/resolv.conf sudo cp scripts/ci/etc/resolv.conf /etc/ sudo chattr +i /etc/resolv.conf -dig @127.0.0.1 nsupdate.info SOA -dig @127.0.0.1 tests.nsupdate.info SOA -sudo netstat -tulpen | grep 53 +# dig @127.0.0.1 nsupdate.info SOA +# dig @127.0.0.1 tests.nsupdate.info SOA +# sudo netstat -tulpen | grep 53 pip install Django~=$DJANGO pip install -r requirements.d/ci.txt From c3c48c90fdd0d37e34b5fe092b0b22dc06cc3c4a Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 23:01:37 +0100 Subject: [PATCH 17/99] remove .travis.yml --- .travis.yml | 42 ------------------------------------------ 1 file changed, 42 deletions(-) delete mode 100644 .travis.yml diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 4a4b5a99..00000000 --- a/.travis.yml +++ /dev/null @@ -1,42 +0,0 @@ -sudo: required - -language: python - -os: linux - -env: - global: - - SECRET_KEY=justfortravis - - DNS_RESOLVER_TIMEOUT=15.0 - - DNS_UPDATE_TIMEOUT=30.0 - - TEST_K="not ddns_client" - - TEST_OPTS="" - - COVERAGE="" - -matrix: - include: - - python: "3.5" - dist: xenial - env: DJANGO=2.2 - - python: "3.6" - dist: xenial - env: DJANGO=2.2 - - python: "3.7" - dist: xenial - env: DJANGO=2.2 - - python: "3.8" - dist: xenial - env: DJANGO=2.2 COVERAGE="coverage run -m" TEST_K="not ddns_client" TEST_OPTS="--pep8" - -install: - - ./scripts/travis/install.sh - -script: $COVERAGE py.test $TEST_OPTS -k "$TEST_K" -m "not requires_sequential" - -after_success: - - coveralls - -notifications: - email: - recipients: - - info@nsupdate.info From 0f5d3afc08fdfd555426742ccace67d8513b3933 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 23:02:40 +0100 Subject: [PATCH 18/99] remove travis / google stuff from resolv.conf --- scripts/ci/etc/resolv.conf | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/ci/etc/resolv.conf b/scripts/ci/etc/resolv.conf index 437a6adc..bbc8559c 100644 --- a/scripts/ci/etc/resolv.conf +++ b/scripts/ci/etc/resolv.conf @@ -1,3 +1 @@ nameserver 127.0.0.1 -# nameserver 169.254.169.254 -# search c.travis-ci-prod-5.internal google.internal From 0eedc537f36f71fbb909ab3b43a63ff97bb26491 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 23:03:56 +0100 Subject: [PATCH 19/99] remove travis from comments --- requirements.d/ci.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements.d/ci.txt b/requirements.d/ci.txt index 8caf8b78..b7be0679 100644 --- a/requirements.d/ci.txt +++ b/requirements.d/ci.txt @@ -1,6 +1,6 @@ # packages needed additionally to the ones in setup.py install_requires. # this is mostly the stuff from dev.txt except a few packages not needed -# on travis. the desired version of django is installed via .travis.yml. +# on github ci. the desired version of django is installed via ci.yml. django-debug-toolbar pytest pytest-django From 3808020e81c45af52d4904336126ff863473edcb Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 23:06:25 +0100 Subject: [PATCH 20/99] replace travis build status badge by github ci badge --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index e99507f7..f85d5edc 100644 --- a/README.rst +++ b/README.rst @@ -16,9 +16,9 @@ Software project: https://github.com/nsupdate-info/nsupdate.info :alt: Documentation :target: https://nsupdateinfo.readthedocs.io/en/stable/ -.. |build| image:: https://api.travis-ci.org/nsupdate-info/nsupdate.info.svg +.. |build| image:: https://github.com/nsupdate-info/nsupdate.info/workflows/CI/badge.svg?branch=master :alt: Build Status - :target: https://travis-ci.org/nsupdate-info/nsupdate.info + :target: https://github.com/nsupdate-info/nsupdate.info/actions .. |coverage| image:: https://coveralls.io/repos/nsupdate-info/nsupdate.info/badge.png :alt: Test Coverage From 7d7f09e949450db4fce051a0067801dd82bf5a8b Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 23:08:13 +0100 Subject: [PATCH 21/99] fix MANIFEST.in --- MANIFEST.in | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/MANIFEST.in b/MANIFEST.in index cecec125..35b3ecd2 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -2,8 +2,9 @@ # setuptools_scm - it includes all git-committed files. # but we want to include some non-committed files/dirs needed in # the sdist and exclude some committed files/dirs not needed in the sdist: -exclude .gitattributes .gitignore .travis.yml +exclude .gitattributes .gitignore exclude manage.py requirements.txt prune .tx +prune .github prune logo -prune scripts/travis +prune scripts/ci From 897d1b3eff1067eec3b2ff96578f6001145c08fc Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 23:13:56 +0100 Subject: [PATCH 22/99] setup.py: add python_requires >=3.8, <3.11, classifiers --- setup.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/setup.py b/setup.py index ed1f4bc2..aeecd598 100644 --- a/setup.py +++ b/setup.py @@ -27,6 +27,7 @@ include_package_data=True, zip_safe=False, platforms='any', + python_requires='>=3.8, <3.11', setup_requires=['setuptools_scm'], install_requires=[ 'dnspython', @@ -49,10 +50,9 @@ 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', + 'Programming Language :: Python :: 3.10', 'Topic :: Internet :: Name Service (DNS)', ], ) From f63ca647deed72843a9ee4bdb48b6a883ad97986 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 23:20:47 +0100 Subject: [PATCH 23/99] try longer timeout for dns resolver / updates (as previously seen in .travis.yml) --- tox.ini | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tox.ini b/tox.ini index 7e74ab93..a4e11765 100644 --- a/tox.ini +++ b/tox.ini @@ -7,6 +7,9 @@ envlist = py{38,39,310} [testenv] deps = -rrequirements.d/dev.txt +setenv = + DNS_RESOLVER_TIMEOUT=15.0 + DNS_UPDATE_TIMEOUT=30.0 commands = py.test -v -rs -k "not ddns_client" -m "not requires_sequential" --cov=nsupdate --cov-config=.coveragerc --pyargs {posargs:nsupdate} passenv = * From b555deed9cb0757bee0eee7818751e29eaf367fe Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 23:38:52 +0100 Subject: [PATCH 24/99] install.sh: only install/configure bind --- scripts/ci/install.sh | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/scripts/ci/install.sh b/scripts/ci/install.sh index dff92065..718037d6 100755 --- a/scripts/ci/install.sh +++ b/scripts/ci/install.sh @@ -17,10 +17,6 @@ sudo rm -f /etc/resolv.conf sudo cp scripts/ci/etc/resolv.conf /etc/ sudo chattr +i /etc/resolv.conf -# dig @127.0.0.1 nsupdate.info SOA -# dig @127.0.0.1 tests.nsupdate.info SOA -# sudo netstat -tulpen | grep 53 - -pip install Django~=$DJANGO -pip install -r requirements.d/ci.txt -pip install -e . +dig @127.0.0.1 nsupdate.info SOA +dig @127.0.0.1 tests.nsupdate.info SOA +sudo netstat -tulpen | grep 53 From e0d8c0dbd0c78146b1f20e4fd41ea6e2384d5c6d Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 23:40:02 +0100 Subject: [PATCH 25/99] rename to install-bind.sh --- .github/workflows/ci.yml | 4 ++-- scripts/ci/{install.sh => install-bind.sh} | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename scripts/ci/{install.sh => install-bind.sh} (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e0c9e927..2cfc58cd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -80,9 +80,9 @@ jobs: ${{ runner.os }}-pip- ${{ runner.os }}- - - name: Install OS packages + - name: Install and configure bind run: | - DJANGO=2.2 bash scripts/ci/install.sh + bash scripts/ci/install-bind.sh - name: Install Python requirements run: | diff --git a/scripts/ci/install.sh b/scripts/ci/install-bind.sh similarity index 100% rename from scripts/ci/install.sh rename to scripts/ci/install-bind.sh From 874ff20680d9a98d53ef607996a92f843b58a813 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 23:50:56 +0100 Subject: [PATCH 26/99] remove unused requirements.d/ci.txt --- requirements.d/ci.txt | 9 --------- 1 file changed, 9 deletions(-) delete mode 100644 requirements.d/ci.txt diff --git a/requirements.d/ci.txt b/requirements.d/ci.txt deleted file mode 100644 index b7be0679..00000000 --- a/requirements.d/ci.txt +++ /dev/null @@ -1,9 +0,0 @@ -# packages needed additionally to the ones in setup.py install_requires. -# this is mostly the stuff from dev.txt except a few packages not needed -# on github ci. the desired version of django is installed via ci.yml. -django-debug-toolbar -pytest -pytest-django -pytest-cov -tox -wheel From 2e6bdfd36513397e46fcb211ca9010b6d49c5fd4 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sat, 18 Mar 2023 23:52:54 +0100 Subject: [PATCH 27/99] install python tools and tox directly later, tox will install nsupdate.info and requirements into a virtual env. --- .github/workflows/ci.yml | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2cfc58cd..d4611293 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -83,14 +83,9 @@ jobs: - name: Install and configure bind run: | bash scripts/ci/install-bind.sh - - - name: Install Python requirements - run: | - python -m pip install --upgrade pip setuptools wheel - pip install -r requirements.d/dev.txt - - name: Install nsupdate.info + - name: Install Python tools and tox run: | - pip install -e . + python -m pip install --upgrade pip setuptools wheel tox - name: run tox env run: | tox --skip-missing-interpreters From 6794ae78fc573596995b92b8216fa0fb3b25cdf8 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sun, 19 Mar 2023 00:02:19 +0100 Subject: [PATCH 28/99] for now, skip the broken rev_lookup tests, see #509 --- src/nsupdate/main/_tests/test_dnstools.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/nsupdate/main/_tests/test_dnstools.py b/src/nsupdate/main/_tests/test_dnstools.py index 4d419df9..2763aac4 100644 --- a/src/nsupdate/main/_tests/test_dnstools.py +++ b/src/nsupdate/main/_tests/test_dnstools.py @@ -118,10 +118,12 @@ def test_queries_ok(self, ddns_fqdn): class TestReverseLookup(object): + @pytest.mark.skip(reason="broken, fails always on github CI") def test_rev_lookup_v4(self): name, ip = 'one.one.one.one', '1.1.1.1' assert rev_lookup(ip) == name + @pytest.mark.skip(reason="broken, fails sometimes on github CI") def test_rev_lookup_v6(self): name, ip = 'one.one.one.one', '2606:4700:4700::1111' assert rev_lookup(ip) == name From 9e31404ba24517e65fe97f76cb6db568361b345a Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sun, 19 Mar 2023 10:55:54 +0100 Subject: [PATCH 29/99] readme.rst: fix rtfd badge --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index f85d5edc..2b34c47f 100644 --- a/README.rst +++ b/README.rst @@ -12,7 +12,7 @@ Software project: https://github.com/nsupdate-info/nsupdate.info |doc| |build| |coverage| |package| -.. |doc| image:: https://readthedocs.org/projects/nsupdate/badge/?version=stable +.. |doc| image:: https://readthedocs.org/projects/nsupdateinfo/badge/?version=stable :alt: Documentation :target: https://nsupdateinfo.readthedocs.io/en/stable/ From 5d19f68b2a58c924c3d1b7fb133bb3caabadde2d Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sun, 19 Mar 2023 11:43:08 +0100 Subject: [PATCH 30/99] readme.rst: use the coverage badge from codecov.io --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index 2b34c47f..2be86118 100644 --- a/README.rst +++ b/README.rst @@ -20,9 +20,9 @@ Software project: https://github.com/nsupdate-info/nsupdate.info :alt: Build Status :target: https://github.com/nsupdate-info/nsupdate.info/actions -.. |coverage| image:: https://coveralls.io/repos/nsupdate-info/nsupdate.info/badge.png +.. |coverage| image:: https://codecov.io/gh/nsupdate-info/nsupdate.info/branch/master/graph/badge.svg?token=3qFlVUxINM :alt: Test Coverage - :target: https://coveralls.io/r/nsupdate-info/nsupdate.info + :target: https://codecov.io/gh/nsupdate-info/nsupdate.info .. |package| image:: https://badge.fury.io/py/nsupdate.png :alt: PyPI Package From 873afa586af3eae7641b8c294863904a8fc82fe2 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sun, 19 Mar 2023 14:41:22 +0100 Subject: [PATCH 31/99] fix DNS setup on gh action, fixes #509 - enable TestReverseLookup again - add nslookup/host 1.1.1.1 debug cmds - output DNS / resolver configs before replacing them - bind9: use systemd-resolved as forwarder (guess we can not do full recursive lookups on gh actions) --- scripts/ci/etc/bind/named.conf.options | 24 +++++++++++++++++++++++ scripts/ci/install-bind.sh | 23 ++++++++++++++++++++-- src/nsupdate/main/_tests/test_dnstools.py | 2 -- 3 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 scripts/ci/etc/bind/named.conf.options diff --git a/scripts/ci/etc/bind/named.conf.options b/scripts/ci/etc/bind/named.conf.options new file mode 100644 index 00000000..c1b1a873 --- /dev/null +++ b/scripts/ci/etc/bind/named.conf.options @@ -0,0 +1,24 @@ +options { + directory "/var/cache/bind"; + + // If there is a firewall between you and nameservers you want + // to talk to, you may need to fix the firewall to allow multiple + // ports to talk. See http://www.kb.cert.org/vuls/id/800113 + + // If your ISP provided one or more IP addresses for stable + // nameservers, you probably want to use them as forwarders. + // Uncomment the following block, and insert the addresses replacing + // the all-0's placeholder. + + forwarders { + 127.0.0.53; // systemd-resolved + }; + + //======================================================================== + // If BIND logs error messages about the root key being expired, + // you will need to update your keys. See https://www.isc.org/bind-keys + //======================================================================== + dnssec-validation auto; + + listen-on-v6 { any; }; +}; diff --git a/scripts/ci/install-bind.sh b/scripts/ci/install-bind.sh index 718037d6..74ad60c6 100755 --- a/scripts/ci/install-bind.sh +++ b/scripts/ci/install-bind.sh @@ -4,15 +4,31 @@ sudo apt-get -y update # we install a local bind9 to run the tests against: -sudo apt-get -y install bind9 dnsutils e2fsprogs +sudo apt-get -y install bind9 bind9-dnsutils bind9-host e2fsprogs -sudo ln -s /var/lib/bind /etc/bind/zones +echo "named.conf.local" +cat /etc/bind/named.conf.local sudo cp scripts/ci/etc/bind/named.conf.local /etc/bind/ sudo chown bind.bind /etc/bind/named.conf.local + +echo "named.conf.options" +cat /etc/bind/named.conf.options +sudo cp scripts/ci/etc/bind/named.conf.options /etc/bind/ +sudo chown bind.bind /etc/bind/named.conf.options + +sudo ln -s /var/lib/bind /etc/bind/zones sudo cp scripts/ci/etc/bind/zones/* /etc/bind/zones/ sudo chown bind.bind /etc/bind/zones/* + sudo service bind9 restart +echo "nsswitch.conf" +ls -l /etc/nsswitch.conf +cat /etc/nsswitch.conf + +echo "resolv.conf" +ls -l /etc/resolv.conf +cat /etc/resolv.conf sudo rm -f /etc/resolv.conf sudo cp scripts/ci/etc/resolv.conf /etc/ sudo chattr +i /etc/resolv.conf @@ -20,3 +36,6 @@ sudo chattr +i /etc/resolv.conf dig @127.0.0.1 nsupdate.info SOA dig @127.0.0.1 tests.nsupdate.info SOA sudo netstat -tulpen | grep 53 + +nslookup 1.1.1.1 +host 1.1.1.1 diff --git a/src/nsupdate/main/_tests/test_dnstools.py b/src/nsupdate/main/_tests/test_dnstools.py index 2763aac4..4d419df9 100644 --- a/src/nsupdate/main/_tests/test_dnstools.py +++ b/src/nsupdate/main/_tests/test_dnstools.py @@ -118,12 +118,10 @@ def test_queries_ok(self, ddns_fqdn): class TestReverseLookup(object): - @pytest.mark.skip(reason="broken, fails always on github CI") def test_rev_lookup_v4(self): name, ip = 'one.one.one.one', '1.1.1.1' assert rev_lookup(ip) == name - @pytest.mark.skip(reason="broken, fails sometimes on github CI") def test_rev_lookup_v6(self): name, ip = 'one.one.one.one', '2606:4700:4700::1111' assert rev_lookup(ip) == name From c3721f40f556e31585e398f7aea26c14f72ac9aa Mon Sep 17 00:00:00 2001 From: Daniel Rudolf Date: Sun, 5 Jun 2022 03:44:09 +0200 Subject: [PATCH 32/99] Fix connectivity test when editing domains Fixes #479 --- CHANGES.rst | 1 + src/nsupdate/main/dnstools.py | 9 ++++++--- src/nsupdate/main/forms.py | 2 +- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGES.rst b/CHANGES.rst index 28520f21..0d65a73e 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -22,6 +22,7 @@ Fixes: - fixed misc. crashes - fixed Domain.generate_ns_secret() storing bytes object into Domain.nameserver_update_secret leading to trying to insert the string representation of the bytes object, so 91 characters in a varchar(88) +- fixed connectivity test when editing domains, #479 Other changes: diff --git a/src/nsupdate/main/dnstools.py b/src/nsupdate/main/dnstools.py index fa10b3e1..1b66c17e 100644 --- a/src/nsupdate/main/dnstools.py +++ b/src/nsupdate/main/dnstools.py @@ -105,14 +105,16 @@ def check_ip(ipaddr, keys=('ipv4', 'ipv6')): return keys[af == dns.inet.AF_INET6] -def check_domain(domain): +def check_domain(domain, nameserver_ip): fqdn = FQDN(host="connectivity-test", domain=domain) from .models import Domain d = Domain.objects.get(name=domain) - # temporarily set domain to available to allow add/update/deletes + # temporarily update domain to allow add/update/deletes domain_available_state = d.available + domain_nameserver_ip = d.nameserver_ip d.available = True + d.nameserver_ip = nameserver_ip d.save() try: @@ -123,8 +125,9 @@ def check_domain(domain): raise NameServerNotAvailable(str(e)) finally: - # reset domain available + # reset domain d.available = domain_available_state + d.nameserver_ip = domain_nameserver_ip d.save() diff --git a/src/nsupdate/main/forms.py b/src/nsupdate/main/forms.py index 79441986..56d4e8dd 100644 --- a/src/nsupdate/main/forms.py +++ b/src/nsupdate/main/forms.py @@ -76,7 +76,7 @@ def clean(self): if self.cleaned_data['available']: try: - check_domain(self.instance.name) + check_domain(self.instance.name, cleaned_data['nameserver_ip']) except (NameServerNotAvailable, ): raise forms.ValidationError( From d2f00c9f5ab8105b523a85a12585a6cdae130b43 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Wed, 12 Apr 2023 12:43:27 +0200 Subject: [PATCH 33/99] support and test on Python 3.7 also Debian oldstable ("buster") still has 3.7, so we should not drop it before we upgrade to Django 4 (which requires 3.8). --- .github/workflows/ci.yml | 3 +++ setup.py | 3 ++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d4611293..1cc35c4f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,6 +46,9 @@ jobs: fail-fast: true matrix: include: + - os: ubuntu-22.04 + python-version: '3.7' + toxenv: py37 - os: ubuntu-22.04 python-version: '3.8' toxenv: py38 diff --git a/setup.py b/setup.py index aeecd598..d6d6e71e 100644 --- a/setup.py +++ b/setup.py @@ -27,7 +27,7 @@ include_package_data=True, zip_safe=False, platforms='any', - python_requires='>=3.8, <3.11', + python_requires='>=3.7, <3.11', setup_requires=['setuptools_scm'], install_requires=[ 'dnspython', @@ -50,6 +50,7 @@ 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', From d65e44a2e5f7e319956f5dec4396bd2c91c4809f Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Wed, 12 Apr 2023 13:37:57 +0200 Subject: [PATCH 34/99] add py37 to tox --- tox.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tox.ini b/tox.ini index a4e11765..9a972a58 100644 --- a/tox.ini +++ b/tox.ini @@ -2,7 +2,7 @@ # tox --recreate [tox] -envlist = py{38,39,310} +envlist = py{37,38,39,310} [testenv] deps = From 2dd43b8eb6c720aab38792545424ecba44c04a1d Mon Sep 17 00:00:00 2001 From: Florian Eitel Date: Sun, 15 Jan 2023 12:47:06 +0100 Subject: [PATCH 35/99] Add DEVELOPMENT.md to list common development commands Update `./manage.py` to find application folder in `src/` instead of expecting a toplevel `nsupdate` folder. --- DEVELOPMENT.md | 12 ++++++++++++ manage.py | 3 +++ 2 files changed, 15 insertions(+) create mode 100644 DEVELOPMENT.md diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 00000000..7f6f98f0 --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,12 @@ +# Build locally + +1. Install `build` (see [docs](https://packaging.python.org/en/latest/tutorials/packaging-projects/#generating-distribution-archives) for example via `pacman -S python-build` on ArchLinux +2. Afterwards run the command to generate pip packgases in `dist/`: `pyproject-build` + +NOTE: This is also needed before development because the command generates `./src/nsupdate/_version.py`. + +# Run locally + +1. Create database using `python ./manage.py migrate` +2. Create a superuser with `python ./manage.py createsuperuser` +2. Run the server with `python ./manage.py runserver` diff --git a/manage.py b/manage.py index 115fa210..4c686de2 100755 --- a/manage.py +++ b/manage.py @@ -4,6 +4,9 @@ if __name__ == "__main__": + PROJECT_ROOT = os.path.dirname(__file__) + sys.path.insert(0, os.path.join(PROJECT_ROOT, 'src')) + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "nsupdate.settings.dev") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) From c09e6af73298c4c7ab1634628786bf7e3cbd9033 Mon Sep 17 00:00:00 2001 From: Florian Eitel Date: Sat, 14 Jan 2023 12:27:51 +0100 Subject: [PATCH 36/99] Add Pipfile for dependency tracking It's optional. Keeping the old requirements.txt files around. --- DEVELOPMENT.md | 49 ++- Pipfile | 26 ++ Pipfile.lock | 821 +++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 893 insertions(+), 3 deletions(-) create mode 100644 Pipfile create mode 100644 Pipfile.lock diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 7f6f98f0..3f03a59c 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -1,3 +1,44 @@ +# Dependency management + +Get [Pipenv](https://pipenv.pypa.io/en/latest/installation/) and checkout the [Pipenv Command reference](https://pipenv.pypa.io/en/latest/commands/) + +## Install new dependencies + +https://pipenv.pypa.io/en/latest/commands/#install + +``` +pipenv install mypkg +``` + +## Spawn a shell with correct python paths + +``` +pipenv shell +``` + +Exit the shell with `exit` + +## Dependency maintenance + +### Update requirements.txt files including transitive dependencies + +``` +pipenv update +``` + +NOTE: This is not done today and only a suggestion. + +``` +pipenv requirements --exclude-markers > requirements.d/all.txt +pipenv requirements --exclude-markers --dev-only > requirements.d/dev.txt +``` + +Verify the updated dependencies don't include any security vulnerabilities + +``` +pipenv check +``` + # Build locally 1. Install `build` (see [docs](https://packaging.python.org/en/latest/tutorials/packaging-projects/#generating-distribution-archives) for example via `pacman -S python-build` on ArchLinux @@ -7,6 +48,8 @@ NOTE: This is also needed before development because the command generates `./sr # Run locally -1. Create database using `python ./manage.py migrate` -2. Create a superuser with `python ./manage.py createsuperuser` -2. Run the server with `python ./manage.py runserver` +1. Install dependencies `pipenv install --dev` +2. Generate `src/nsupdate/_version.py` file by running `pyproject-build` +2. Create database using `pipenv run ./manage.py migrate` +3. Create a superuser with `pipenv run ./manage.py createsuperuser` +4. Run the server with `pipenv run ./manage.py runserver` diff --git a/Pipfile b/Pipfile new file mode 100644 index 00000000..f94ffeb6 --- /dev/null +++ b/Pipfile @@ -0,0 +1,26 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +dnspython = "*" +netaddr = "*" +django = "~=2.2.0" +django-bootstrap-form = "*" +django-referrer-policy = "*" +django-registration-redux = "*" +django-extensions = "*" +social-auth-app-django = "*" +requests = "*" +setuptools-scm = "*" + +[dev-packages] +django-debug-toolbar = "*" +pytest = ">=3.6" +pytest-django = "*" +pytest-pep8 = "*" +sphinx = "*" + +[requires] +python_version = "3.10" diff --git a/Pipfile.lock b/Pipfile.lock new file mode 100644 index 00000000..d0da8304 --- /dev/null +++ b/Pipfile.lock @@ -0,0 +1,821 @@ +{ + "_meta": { + "hash": { + "sha256": "3d0c4758aaac50515e8b50fc01d6d9a2ae80961aaed1237721ca3085ed1ca10c" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.10" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "certifi": { + "hashes": [ + "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", + "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" + ], + "markers": "python_version >= '3.6'", + "version": "==2022.12.7" + }, + "cffi": { + "hashes": [ + "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5", + "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef", + "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104", + "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426", + "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405", + "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375", + "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a", + "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e", + "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc", + "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf", + "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185", + "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497", + "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3", + "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35", + "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c", + "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83", + "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21", + "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca", + "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984", + "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac", + "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd", + "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee", + "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a", + "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2", + "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192", + "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7", + "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585", + "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f", + "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e", + "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27", + "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b", + "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e", + "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e", + "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d", + "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c", + "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415", + "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82", + "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02", + "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314", + "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325", + "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c", + "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3", + "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914", + "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045", + "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d", + "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9", + "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5", + "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2", + "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c", + "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3", + "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2", + "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8", + "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d", + "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d", + "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9", + "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162", + "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76", + "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4", + "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e", + "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9", + "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6", + "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b", + "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01", + "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0" + ], + "version": "==1.15.1" + }, + "charset-normalizer": { + "hashes": [ + "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b", + "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42", + "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d", + "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b", + "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a", + "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59", + "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154", + "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1", + "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c", + "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a", + "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d", + "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6", + "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b", + "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b", + "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783", + "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5", + "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918", + "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555", + "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639", + "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786", + "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e", + "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed", + "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820", + "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8", + "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3", + "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541", + "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14", + "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be", + "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e", + "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76", + "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b", + "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c", + "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b", + "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3", + "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc", + "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6", + "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59", + "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4", + "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d", + "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d", + "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3", + "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a", + "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea", + "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6", + "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e", + "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603", + "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24", + "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a", + "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58", + "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678", + "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a", + "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c", + "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6", + "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18", + "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174", + "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317", + "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f", + "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc", + "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837", + "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41", + "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c", + "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579", + "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753", + "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8", + "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291", + "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087", + "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866", + "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3", + "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d", + "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1", + "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca", + "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e", + "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db", + "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72", + "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d", + "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc", + "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539", + "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d", + "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af", + "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b", + "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602", + "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f", + "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478", + "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c", + "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e", + "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479", + "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7", + "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8" + ], + "version": "==3.0.1" + }, + "cryptography": { + "hashes": [ + "sha256:1a6915075c6d3a5e1215eab5d99bcec0da26036ff2102a1038401d6ef5bef25b", + "sha256:1ee1fd0de9851ff32dbbb9362a4d833b579b4a6cc96883e8e6d2ff2a6bc7104f", + "sha256:407cec680e811b4fc829de966f88a7c62a596faa250fc1a4b520a0355b9bc190", + "sha256:50386acb40fbabbceeb2986332f0287f50f29ccf1497bae31cf5c3e7b4f4b34f", + "sha256:6f97109336df5c178ee7c9c711b264c502b905c2d2a29ace99ed761533a3460f", + "sha256:754978da4d0457e7ca176f58c57b1f9de6556591c19b25b8bcce3c77d314f5eb", + "sha256:76c24dd4fd196a80f9f2f5405a778a8ca132f16b10af113474005635fe7e066c", + "sha256:7dacfdeee048814563eaaec7c4743c8aea529fe3dd53127313a792f0dadc1773", + "sha256:80ee674c08aaef194bc4627b7f2956e5ba7ef29c3cc3ca488cf15854838a8f72", + "sha256:844ad4d7c3850081dffba91cdd91950038ee4ac525c575509a42d3fc806b83c8", + "sha256:875aea1039d78557c7c6b4db2fe0e9d2413439f4676310a5f269dd342ca7a717", + "sha256:887cbc1ea60786e534b00ba8b04d1095f4272d380ebd5f7a7eb4cc274710fad9", + "sha256:ad04f413436b0781f20c52a661660f1e23bcd89a0e9bb1d6d20822d048cf2856", + "sha256:bae6c7f4a36a25291b619ad064a30a07110a805d08dc89984f4f441f6c1f3f96", + "sha256:c52a1a6f81e738d07f43dab57831c29e57d21c81a942f4602fac7ee21b27f288", + "sha256:e0a05aee6a82d944f9b4edd6a001178787d1546ec7c6223ee9a848a7ade92e39", + "sha256:e324de6972b151f99dc078defe8fb1b0a82c6498e37bff335f5bc6b1e3ab5a1e", + "sha256:e5d71c5d5bd5b5c3eebcf7c5c2bb332d62ec68921a8c593bea8c394911a005ce", + "sha256:f3ed2d864a2fa1666e749fe52fb8e23d8e06b8012e8bd8147c73797c506e86f1", + "sha256:f671c1bb0d6088e94d61d80c606d65baacc0d374e67bf895148883461cd848de", + "sha256:f6c0db08d81ead9576c4d94bbb27aed8d7a430fa27890f39084c2d0e2ec6b0df", + "sha256:f964c7dcf7802d133e8dbd1565914fa0194f9d683d82411989889ecd701e8adf", + "sha256:fec8b932f51ae245121c4671b4bbc030880f363354b2f0e0bd1366017d891458" + ], + "markers": "python_version >= '3.6'", + "version": "==39.0.0" + }, + "defusedxml": { + "hashes": [ + "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", + "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==0.7.1" + }, + "django": { + "hashes": [ + "sha256:0200b657afbf1bc08003845ddda053c7641b9b24951e52acd51f6abda33a7413", + "sha256:365429d07c1336eb42ba15aa79f45e1c13a0b04d5c21569e7d596696418a6a45" + ], + "index": "pypi", + "version": "==2.2.28" + }, + "django-bootstrap-form": { + "hashes": [ + "sha256:de3f7893e515352834d446c441c0cb861637f92cebbe59d8229469c6cd3dc640" + ], + "index": "pypi", + "version": "==3.4" + }, + "django-extensions": { + "hashes": [ + "sha256:28e1e1bf49f0e00307ba574d645b0af3564c981a6dfc87209d48cb98f77d0b1a", + "sha256:9238b9e016bb0009d621e05cf56ea8ce5cce9b32e91ad2026996a7377ca28069" + ], + "index": "pypi", + "version": "==3.1.5" + }, + "django-referrer-policy": { + "hashes": [ + "sha256:09e134324fa08c10efc12244a4bae7aee5defa7d332b92c603b09258c854615a" + ], + "index": "pypi", + "version": "==1.0" + }, + "django-registration-redux": { + "hashes": [ + "sha256:5079dd36980cc0faddf91a6e991129680410611b1059d8154d064cc0146744b2", + "sha256:88eb98530d98a7e3451bf728c0a5f6fe7ea2f45c65ef18f619ef37b940c854f5" + ], + "index": "pypi", + "version": "==2.11" + }, + "dnspython": { + "hashes": [ + "sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e", + "sha256:a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f" + ], + "index": "pypi", + "version": "==2.2.1" + }, + "idna": { + "hashes": [ + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + ], + "markers": "python_version >= '3.5'", + "version": "==3.4" + }, + "netaddr": { + "hashes": [ + "sha256:9666d0232c32d2656e5e5f8d735f58fd6c7457ce52fc21c98d45f2af78f990ac", + "sha256:d6cc57c7a07b1d9d2e917aa8b36ae8ce61c35ba3fcd1b83ca31c5a0ee2b5a243" + ], + "index": "pypi", + "version": "==0.8.0" + }, + "oauthlib": { + "hashes": [ + "sha256:8139f29aac13e25d502680e9e19963e83f16838d48a0d71c287fe40e7067fbca", + "sha256:9859c40929662bec5d64f34d01c99e093149682a3f38915dc0655d5a633dd918" + ], + "markers": "python_version >= '3.6'", + "version": "==3.2.2" + }, + "packaging": { + "hashes": [ + "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2", + "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" + ], + "markers": "python_version >= '3.7'", + "version": "==23.0" + }, + "pycparser": { + "hashes": [ + "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9", + "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206" + ], + "version": "==2.21" + }, + "pyjwt": { + "hashes": [ + "sha256:69285c7e31fc44f68a1feb309e948e0df53259d579295e6cfe2b1792329f05fd", + "sha256:d83c3d892a77bbb74d3e1a2cfa90afaadb60945205d1095d9221f04466f64c14" + ], + "markers": "python_version >= '3.7'", + "version": "==2.6.0" + }, + "python3-openid": { + "hashes": [ + "sha256:33fbf6928f401e0b790151ed2b5290b02545e8775f982485205a066f874aaeaf", + "sha256:6626f771e0417486701e0b4daff762e7212e820ca5b29fcc0d05f6f8736dfa6b" + ], + "version": "==3.2.0" + }, + "pytz": { + "hashes": [ + "sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a", + "sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd" + ], + "version": "==2022.7" + }, + "requests": { + "hashes": [ + "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa", + "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf" + ], + "index": "pypi", + "version": "==2.28.2" + }, + "requests-oauthlib": { + "hashes": [ + "sha256:2577c501a2fb8d05a304c09d090d6e47c306fef15809d102b327cf8364bddab5", + "sha256:75beac4a47881eeb94d5ea5d6ad31ef88856affe2332b9aafb52c6452ccf0d7a" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.3.1" + }, + "setuptools": { + "hashes": [ + "sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7", + "sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd" + ], + "markers": "python_version >= '3.7'", + "version": "==65.7.0" + }, + "setuptools-scm": { + "hashes": [ + "sha256:6c508345a771aad7d56ebff0e70628bf2b0ec7573762be9960214730de278f27", + "sha256:73988b6d848709e2af142aa48c986ea29592bbcfca5375678064708205253d8e" + ], + "index": "pypi", + "version": "==7.1.0" + }, + "social-auth-app-django": { + "hashes": [ + "sha256:52241a25445a010ab1c108bafff21fc5522d5c8cd0d48a92c39c7371824b065d", + "sha256:b6e3132ce087cdd6e1707aeb1b588be41d318408fcf6395435da0bc6fe9a9795" + ], + "index": "pypi", + "version": "==5.0.0" + }, + "social-auth-core": { + "hashes": [ + "sha256:1e3440d104f743b02dfe258c9d4dba5b4065abf24b2f7eb362b47054d21797df", + "sha256:4686f0e43cf12954216875a32e944847bb1dc69e7cd9573d16a9003bb05ca477" + ], + "markers": "python_version >= '3.6'", + "version": "==4.3.0" + }, + "sqlparse": { + "hashes": [ + "sha256:0323c0ec29cd52bceabc1b4d9d579e311f3e4961b98d174201d5622a23b85e34", + "sha256:69ca804846bb114d2ec380e4360a8a340db83f0ccf3afceeb1404df028f57268" + ], + "markers": "python_version >= '3.5'", + "version": "==0.4.3" + }, + "tomli": { + "hashes": [ + "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", + "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" + ], + "markers": "python_version < '3.11'", + "version": "==2.0.1" + }, + "typing-extensions": { + "hashes": [ + "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", + "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" + ], + "markers": "python_version >= '3.7'", + "version": "==4.4.0" + }, + "urllib3": { + "hashes": [ + "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72", + "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==1.26.14" + } + }, + "develop": { + "alabaster": { + "hashes": [ + "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3", + "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2" + ], + "markers": "python_version >= '3.6'", + "version": "==0.7.13" + }, + "attrs": { + "hashes": [ + "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836", + "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99" + ], + "markers": "python_version >= '3.6'", + "version": "==22.2.0" + }, + "babel": { + "hashes": [ + "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe", + "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6" + ], + "markers": "python_version >= '3.6'", + "version": "==2.11.0" + }, + "certifi": { + "hashes": [ + "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", + "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18" + ], + "markers": "python_version >= '3.6'", + "version": "==2022.12.7" + }, + "charset-normalizer": { + "hashes": [ + "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b", + "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42", + "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d", + "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b", + "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a", + "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59", + "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154", + "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1", + "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c", + "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a", + "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d", + "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6", + "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b", + "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b", + "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783", + "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5", + "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918", + "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555", + "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639", + "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786", + "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e", + "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed", + "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820", + "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8", + "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3", + "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541", + "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14", + "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be", + "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e", + "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76", + "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b", + "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c", + "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b", + "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3", + "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc", + "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6", + "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59", + "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4", + "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d", + "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d", + "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3", + "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a", + "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea", + "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6", + "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e", + "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603", + "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24", + "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a", + "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58", + "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678", + "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a", + "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c", + "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6", + "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18", + "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174", + "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317", + "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f", + "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc", + "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837", + "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41", + "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c", + "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579", + "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753", + "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8", + "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291", + "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087", + "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866", + "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3", + "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d", + "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1", + "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca", + "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e", + "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db", + "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72", + "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d", + "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc", + "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539", + "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d", + "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af", + "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b", + "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602", + "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f", + "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478", + "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c", + "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e", + "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479", + "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7", + "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8" + ], + "version": "==3.0.1" + }, + "django": { + "hashes": [ + "sha256:0200b657afbf1bc08003845ddda053c7641b9b24951e52acd51f6abda33a7413", + "sha256:365429d07c1336eb42ba15aa79f45e1c13a0b04d5c21569e7d596696418a6a45" + ], + "index": "pypi", + "version": "==2.2.28" + }, + "django-debug-toolbar": { + "hashes": [ + "sha256:644bbd5c428d3283aa9115722471769cac1bec189edf3a0c855fd8ff870375a9", + "sha256:6b633b6cfee24f232d73569870f19aa86c819d750e7f3e833f2344a9eb4b4409" + ], + "index": "pypi", + "version": "==3.2.4" + }, + "docutils": { + "hashes": [ + "sha256:33995a6753c30b7f577febfc2c50411fec6aac7f7ffeb7c4cfe5991072dcf9e6", + "sha256:5e1de4d849fee02c63b040a4a3fd567f4ab104defd8a5511fbbc24a8a017efbc" + ], + "markers": "python_version >= '3.7'", + "version": "==0.19" + }, + "exceptiongroup": { + "hashes": [ + "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e", + "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23" + ], + "markers": "python_version < '3.11'", + "version": "==1.1.0" + }, + "execnet": { + "hashes": [ + "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5", + "sha256:a295f7cc774947aac58dde7fdc85f4aa00c42adf5d8f5468fc630c1acf30a142" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", + "version": "==1.9.0" + }, + "idna": { + "hashes": [ + "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4", + "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2" + ], + "markers": "python_version >= '3.5'", + "version": "==3.4" + }, + "imagesize": { + "hashes": [ + "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b", + "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3'", + "version": "==1.4.1" + }, + "iniconfig": { + "hashes": [ + "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", + "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374" + ], + "markers": "python_version >= '3.7'", + "version": "==2.0.0" + }, + "jinja2": { + "hashes": [ + "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", + "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61" + ], + "markers": "python_version >= '3.7'", + "version": "==3.1.2" + }, + "markupsafe": { + "hashes": [ + "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", + "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88", + "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5", + "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7", + "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a", + "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603", + "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1", + "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135", + "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247", + "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6", + "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601", + "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77", + "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02", + "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e", + "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63", + "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f", + "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980", + "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b", + "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812", + "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff", + "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96", + "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1", + "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925", + "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a", + "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6", + "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e", + "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f", + "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4", + "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f", + "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3", + "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c", + "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a", + "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417", + "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a", + "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a", + "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37", + "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452", + "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933", + "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a", + "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7" + ], + "markers": "python_version >= '3.7'", + "version": "==2.1.1" + }, + "packaging": { + "hashes": [ + "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2", + "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" + ], + "markers": "python_version >= '3.7'", + "version": "==23.0" + }, + "pep8": { + "hashes": [ + "sha256:b22cfae5db09833bb9bd7c8463b53e1a9c9b39f12e304a8d0bba729c501827ee", + "sha256:fe249b52e20498e59e0b5c5256aa52ee99fc295b26ec9eaa85776ffdb9fe6374" + ], + "version": "==1.7.1" + }, + "pluggy": { + "hashes": [ + "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", + "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3" + ], + "markers": "python_version >= '3.6'", + "version": "==1.0.0" + }, + "pygments": { + "hashes": [ + "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297", + "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717" + ], + "markers": "python_version >= '3.6'", + "version": "==2.14.0" + }, + "pytest": { + "hashes": [ + "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71", + "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59" + ], + "index": "pypi", + "version": "==7.2.0" + }, + "pytest-cache": { + "hashes": [ + "sha256:be7468edd4d3d83f1e844959fd6e3fd28e77a481440a7118d430130ea31b07a9" + ], + "version": "==1.0" + }, + "pytest-django": { + "hashes": [ + "sha256:c60834861933773109334fe5a53e83d1ef4828f2203a1d6a0fa9972f4f75ab3e", + "sha256:d9076f759bb7c36939dbdd5ae6633c18edfc2902d1a69fdbefd2426b970ce6c2" + ], + "index": "pypi", + "version": "==4.5.2" + }, + "pytest-pep8": { + "hashes": [ + "sha256:032ef7e5fa3ac30f4458c73e05bb67b0f036a8a5cb418a534b3170f89f120318" + ], + "index": "pypi", + "version": "==1.0.6" + }, + "pytz": { + "hashes": [ + "sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a", + "sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd" + ], + "version": "==2022.7" + }, + "requests": { + "hashes": [ + "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa", + "sha256:98b1b2782e3c6c4904938b84c0eb932721069dfdb9134313beff7c83c2df24bf" + ], + "index": "pypi", + "version": "==2.28.2" + }, + "snowballstemmer": { + "hashes": [ + "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1", + "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a" + ], + "version": "==2.2.0" + }, + "sphinx": { + "hashes": [ + "sha256:0dac3b698538ffef41716cf97ba26c1c7788dba73ce6f150c1ff5b4720786dd2", + "sha256:807d1cb3d6be87eb78a381c3e70ebd8d346b9a25f3753e9947e866b2786865fc" + ], + "index": "pypi", + "version": "==6.1.3" + }, + "sphinxcontrib-applehelp": { + "hashes": [ + "sha256:83749f09f6ac843b8cb685277dbc818a8bf2d76cc19602699094fe9a74db529e", + "sha256:ba0f2a22e6eeada8da6428d0d520215ee8864253f32facf958cca81e426f661d" + ], + "markers": "python_version >= '3.8'", + "version": "==1.0.3" + }, + "sphinxcontrib-devhelp": { + "hashes": [ + "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e", + "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4" + ], + "markers": "python_version >= '3.5'", + "version": "==1.0.2" + }, + "sphinxcontrib-htmlhelp": { + "hashes": [ + "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07", + "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2" + ], + "markers": "python_version >= '3.6'", + "version": "==2.0.0" + }, + "sphinxcontrib-jsmath": { + "hashes": [ + "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178", + "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8" + ], + "markers": "python_version >= '3.5'", + "version": "==1.0.1" + }, + "sphinxcontrib-qthelp": { + "hashes": [ + "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72", + "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6" + ], + "markers": "python_version >= '3.5'", + "version": "==1.0.3" + }, + "sphinxcontrib-serializinghtml": { + "hashes": [ + "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd", + "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952" + ], + "markers": "python_version >= '3.5'", + "version": "==1.1.5" + }, + "sqlparse": { + "hashes": [ + "sha256:0323c0ec29cd52bceabc1b4d9d579e311f3e4961b98d174201d5622a23b85e34", + "sha256:69ca804846bb114d2ec380e4360a8a340db83f0ccf3afceeb1404df028f57268" + ], + "markers": "python_version >= '3.5'", + "version": "==0.4.3" + }, + "tomli": { + "hashes": [ + "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", + "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" + ], + "markers": "python_version < '3.11'", + "version": "==2.0.1" + }, + "urllib3": { + "hashes": [ + "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72", + "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1" + ], + "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", + "version": "==1.26.14" + } + } +} From 51ab2a16263de84b43e6237d3d11ad439ae9bede Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Wed, 12 Apr 2023 14:08:36 +0200 Subject: [PATCH 37/99] revert tweaking of sys.path in manage.py this should not be needed if the project is installed, like into a virtual env with: pip install [-e] . --- manage.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/manage.py b/manage.py index 4c686de2..115fa210 100755 --- a/manage.py +++ b/manage.py @@ -4,9 +4,6 @@ if __name__ == "__main__": - PROJECT_ROOT = os.path.dirname(__file__) - sys.path.insert(0, os.path.join(PROJECT_ROOT, 'src')) - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "nsupdate.settings.dev") from django.core.management import execute_from_command_line execute_from_command_line(sys.argv) From 867f83a02f5c886072a05b4b131d957f83b3af05 Mon Sep 17 00:00:00 2001 From: Florian Eitel Date: Sat, 14 Jan 2023 12:45:01 +0100 Subject: [PATCH 38/99] Remove usage of six Dropping support for python 2 because it's dead. six was not declared correctly in requirements.txt and causes troubles. So removing the one usage. --- setup.py | 1 - src/nsupdate/urls.py | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/setup.py b/setup.py index d6d6e71e..262e5dbe 100644 --- a/setup.py +++ b/setup.py @@ -40,7 +40,6 @@ 'social-auth-app-django', 'requests', # for our ddns_client 'setuptools_scm', - 'six', ], classifiers=[ 'Development Status :: 5 - Production/Stable', diff --git a/src/nsupdate/urls.py b/src/nsupdate/urls.py index 01ff6576..e0526ee4 100644 --- a/src/nsupdate/urls.py +++ b/src/nsupdate/urls.py @@ -2,8 +2,6 @@ top-level url dispatching """ -import six - from django.conf import settings from django.conf.urls import include, url from django.contrib import admin @@ -55,7 +53,7 @@ def http_error(request, status, exception=None): except (AttributeError, IndexError): pass else: - if isinstance(message, six.text_type): + if isinstance(message, str): exception_repr = message else: # we do not have an exception for 500 From 0054b0e66b4919e30860c96dbfa9b3a064d92348 Mon Sep 17 00:00:00 2001 From: Florian Eitel Date: Sat, 14 Jan 2023 22:51:07 +0100 Subject: [PATCH 39/99] Update to DropboxOAuth2V2 The old version somehow does not work anymore and throws load errors. (note: this auth is also disabled / commented out, like all other "social auths") --- src/nsupdate/settings/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nsupdate/settings/base.py b/src/nsupdate/settings/base.py index 97273417..7fb0fc5e 100644 --- a/src/nsupdate/settings/base.py +++ b/src/nsupdate/settings/base.py @@ -308,7 +308,7 @@ # 'social_core.backends.amazon.AmazonOAuth2', # 'social_core.backends.bitbucket.BitbucketOAuth', # 'social_core.backends.disqus.DisqusOAuth2', - # 'social_core.backends.dropbox.DropboxOAuth', + # 'social_core.backends.dropbox.DropboxOAuth2V2', # 'social_core.backends.github.GithubOAuth2', # 'social_core.backends.google.GoogleOAuth2', # 'social_core.backends.reddit.RedditOAuth2', From 669f63a0ed6c8c94f935f3c5019d7c547eeb5321 Mon Sep 17 00:00:00 2001 From: Florian Eitel Date: Sat, 14 Jan 2023 12:55:02 +0100 Subject: [PATCH 40/99] Install pylint It helps for the version upgrades to check there are no errors --- .pylintrc | 14 +++ DEVELOPMENT.md | 6 ++ Pipfile | 2 + Pipfile.lock | 212 +++++++++++++++++++++++++++++++++++++++-- requirements.d/dev.txt | 2 + 5 files changed, 226 insertions(+), 10 deletions(-) create mode 100644 .pylintrc diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 00000000..215b1487 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,14 @@ +[MAIN] +# In error mode, messages with a category besides ERROR or FATAL are +# suppressed, and no reports are done by default. Error mode is compatible with +# disabling specific errors. +errors-only=yes + +# List of plugins (as comma separated values of python module names) to load, +# usually to register additional checkers. +load-plugins=pylint_django + +django-settings-module=nsupdate.settings.dev + +[MASTER] +init-hook='import sys; sys.path.append(".")' diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 3f03a59c..de22b9fa 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -53,3 +53,9 @@ NOTE: This is also needed before development because the command generates `./sr 2. Create database using `pipenv run ./manage.py migrate` 3. Create a superuser with `pipenv run ./manage.py createsuperuser` 4. Run the server with `pipenv run ./manage.py runserver` + +# Lint + +Run [pylint](https://pylint.readthedocs.io/en/stable/) in error-only mode to check any problems: `pipenv run pylint src/nsupdate` + +NOTE: The project does not use pylint for formatting. Disabling the `errors-only` mode in `.pylintrc` will show a lot of warnings. diff --git a/Pipfile b/Pipfile index f94ffeb6..c789dacc 100644 --- a/Pipfile +++ b/Pipfile @@ -21,6 +21,8 @@ pytest = ">=3.6" pytest-django = "*" pytest-pep8 = "*" sphinx = "*" +pylint = "*" +pylint-django = "*" [requires] python_version = "3.10" diff --git a/Pipfile.lock b/Pipfile.lock index d0da8304..1c7e9f81 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "3d0c4758aaac50515e8b50fc01d6d9a2ae80961aaed1237721ca3085ed1ca10c" + "sha256": "984dd184466999fd5afc4cfff15571e230e37769e0a7f5f1183a6a6fc404bb54" }, "pipfile-spec": 6, "requires": { @@ -325,10 +325,10 @@ }, "pytz": { "hashes": [ - "sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a", - "sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd" + "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0", + "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a" ], - "version": "==2022.7" + "version": "==2022.7.1" }, "requests": { "hashes": [ @@ -420,6 +420,14 @@ "markers": "python_version >= '3.6'", "version": "==0.7.13" }, + "astroid": { + "hashes": [ + "sha256:3bc7834720e1a24ca797fd785d77efb14f7a28ee8e635ef040b6e2d80ccb3303", + "sha256:8f6a8d40c4ad161d6fc419545ae4b2f275ed86d1c989c97825772120842ee0d2" + ], + "markers": "python_full_version >= '3.7.2'", + "version": "==2.13.2" + }, "attrs": { "hashes": [ "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836", @@ -537,6 +545,14 @@ ], "version": "==3.0.1" }, + "dill": { + "hashes": [ + "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0", + "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373" + ], + "markers": "python_version < '3.11'", + "version": "==0.3.6" + }, "django": { "hashes": [ "sha256:0200b657afbf1bc08003845ddda053c7641b9b24951e52acd51f6abda33a7413", @@ -601,6 +617,14 @@ "markers": "python_version >= '3.7'", "version": "==2.0.0" }, + "isort": { + "hashes": [ + "sha256:6db30c5ded9815d813932c04c2f85a360bcdd35fed496f4d8f35495ef0a261b6", + "sha256:c033fd0edb91000a7f09527fe5c75321878f98322a77ddcc81adbd83724afb7b" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==5.11.4" + }, "jinja2": { "hashes": [ "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852", @@ -609,6 +633,48 @@ "markers": "python_version >= '3.7'", "version": "==3.1.2" }, + "lazy-object-proxy": { + "hashes": [ + "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382", + "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82", + "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9", + "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494", + "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46", + "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30", + "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63", + "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4", + "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae", + "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be", + "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701", + "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd", + "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006", + "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a", + "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586", + "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8", + "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821", + "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07", + "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b", + "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171", + "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b", + "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2", + "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7", + "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4", + "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8", + "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e", + "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f", + "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda", + "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4", + "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e", + "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671", + "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11", + "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455", + "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734", + "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb", + "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59" + ], + "markers": "python_version >= '3.7'", + "version": "==1.9.0" + }, "markupsafe": { "hashes": [ "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", @@ -655,6 +721,14 @@ "markers": "python_version >= '3.7'", "version": "==2.1.1" }, + "mccabe": { + "hashes": [ + "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325", + "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e" + ], + "markers": "python_version >= '3.6'", + "version": "==0.7.0" + }, "packaging": { "hashes": [ "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2", @@ -670,6 +744,14 @@ ], "version": "==1.7.1" }, + "platformdirs": { + "hashes": [ + "sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490", + "sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2" + ], + "markers": "python_version >= '3.7'", + "version": "==2.6.2" + }, "pluggy": { "hashes": [ "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159", @@ -686,13 +768,37 @@ "markers": "python_version >= '3.6'", "version": "==2.14.0" }, + "pylint": { + "hashes": [ + "sha256:9df0d07e8948a1c3ffa3b6e2d7e6e63d9fb457c5da5b961ed63106594780cc7e", + "sha256:b3dc5ef7d33858f297ac0d06cc73862f01e4f2e74025ec3eff347ce0bc60baf5" + ], + "index": "pypi", + "version": "==2.15.10" + }, + "pylint-django": { + "hashes": [ + "sha256:0ac090d106c62fe33782a1d01bda1610b761bb1c9bf5035ced9d5f23a13d8591", + "sha256:56b12b6adf56d548412445bd35483034394a1a94901c3f8571980a13882299d5" + ], + "index": "pypi", + "version": "==2.5.3" + }, + "pylint-plugin-utils": { + "hashes": [ + "sha256:b3d43e85ab74c4f48bb46ae4ce771e39c3a20f8b3d56982ab17aa73b4f98d535", + "sha256:ce48bc0516ae9415dd5c752c940dfe601b18fe0f48aa249f2386adfa95a004dd" + ], + "markers": "python_full_version >= '3.6.2'", + "version": "==0.7" + }, "pytest": { "hashes": [ - "sha256:892f933d339f068883b6fd5a459f03d85bfcb355e4981e146d2c7616c21fef71", - "sha256:c4014eb40e10f11f355ad4e3c2fb2c6c6d1919c73f3b5a433de4708202cade59" + "sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5", + "sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42" ], "index": "pypi", - "version": "==7.2.0" + "version": "==7.2.1" }, "pytest-cache": { "hashes": [ @@ -717,10 +823,10 @@ }, "pytz": { "hashes": [ - "sha256:7ccfae7b4b2c067464a6733c6261673fdb8fd1be905460396b97a073e9fa683a", - "sha256:93007def75ae22f7cd991c84e02d434876818661f8df9ad5df9e950ff4e52cfd" + "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0", + "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a" ], - "version": "==2022.7" + "version": "==2022.7.1" }, "requests": { "hashes": [ @@ -809,6 +915,22 @@ "markers": "python_version < '3.11'", "version": "==2.0.1" }, + "tomlkit": { + "hashes": [ + "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b", + "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73" + ], + "markers": "python_version >= '3.6'", + "version": "==0.11.6" + }, + "typing-extensions": { + "hashes": [ + "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", + "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" + ], + "markers": "python_version >= '3.7'", + "version": "==4.4.0" + }, "urllib3": { "hashes": [ "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72", @@ -816,6 +938,76 @@ ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", "version": "==1.26.14" + }, + "wrapt": { + "hashes": [ + "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3", + "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b", + "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4", + "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2", + "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656", + "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3", + "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff", + "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310", + "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a", + "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57", + "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069", + "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383", + "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe", + "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87", + "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d", + "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b", + "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907", + "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f", + "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0", + "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28", + "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1", + "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853", + "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc", + "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3", + "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3", + "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164", + "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1", + "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c", + "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1", + "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7", + "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1", + "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320", + "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed", + "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1", + "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248", + "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c", + "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456", + "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77", + "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef", + "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1", + "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7", + "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86", + "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4", + "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d", + "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d", + "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8", + "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5", + "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471", + "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00", + "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68", + "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3", + "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d", + "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735", + "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d", + "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569", + "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7", + "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59", + "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5", + "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb", + "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b", + "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f", + "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462", + "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015", + "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af" + ], + "markers": "python_version < '3.11'", + "version": "==1.14.1" } } } diff --git a/requirements.d/dev.txt b/requirements.d/dev.txt index 7d18d69c..a2f8921a 100644 --- a/requirements.d/dev.txt +++ b/requirements.d/dev.txt @@ -6,4 +6,6 @@ pytest-django pytest-cov tox wheel +pylint +pylint-django Sphinx From 1a28f0d30d08cb3f3665335a61bbde2c6bdd509b Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Wed, 12 Apr 2023 14:16:59 +0200 Subject: [PATCH 41/99] Pipfile: minimum requirement is py37 for now --- Pipfile | 2 +- Pipfile.lock | 791 ++++++++++++++++++++++++--------------------------- 2 files changed, 373 insertions(+), 420 deletions(-) diff --git a/Pipfile b/Pipfile index c789dacc..b0deca6b 100644 --- a/Pipfile +++ b/Pipfile @@ -25,4 +25,4 @@ pylint = "*" pylint-django = "*" [requires] -python_version = "3.10" +python_version = "3.7" diff --git a/Pipfile.lock b/Pipfile.lock index 1c7e9f81..f9813000 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,11 +1,11 @@ { "_meta": { "hash": { - "sha256": "984dd184466999fd5afc4cfff15571e230e37769e0a7f5f1183a6a6fc404bb54" + "sha256": "a1d9559f03f1a703f32b3f898105cb7033f741c4da5d0f2cc30c36d6e2ba8abb" }, "pipfile-spec": 6, "requires": { - "python_version": "3.10" + "python_version": "3.7" }, "sources": [ { @@ -95,125 +95,109 @@ }, "charset-normalizer": { "hashes": [ - "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b", - "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42", - "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d", - "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b", - "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a", - "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59", - "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154", - "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1", - "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c", - "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a", - "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d", - "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6", - "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b", - "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b", - "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783", - "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5", - "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918", - "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555", - "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639", - "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786", - "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e", - "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed", - "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820", - "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8", - "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3", - "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541", - "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14", - "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be", - "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e", - "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76", - "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b", - "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c", - "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b", - "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3", - "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc", - "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6", - "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59", - "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4", - "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d", - "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d", - "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3", - "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a", - "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea", - "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6", - "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e", - "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603", - "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24", - "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a", - "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58", - "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678", - "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a", - "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c", - "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6", - "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18", - "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174", - "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317", - "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f", - "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc", - "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837", - "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41", - "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c", - "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579", - "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753", - "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8", - "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291", - "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087", - "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866", - "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3", - "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d", - "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1", - "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca", - "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e", - "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db", - "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72", - "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d", - "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc", - "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539", - "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d", - "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af", - "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b", - "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602", - "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f", - "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478", - "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c", - "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e", - "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479", - "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7", - "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8" - ], - "version": "==3.0.1" + "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6", + "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1", + "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e", + "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373", + "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62", + "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230", + "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be", + "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c", + "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0", + "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448", + "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f", + "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649", + "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d", + "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0", + "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706", + "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a", + "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59", + "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23", + "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5", + "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb", + "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e", + "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e", + "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c", + "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28", + "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d", + "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41", + "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974", + "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce", + "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f", + "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1", + "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d", + "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8", + "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017", + "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31", + "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7", + "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8", + "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e", + "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14", + "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd", + "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d", + "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795", + "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b", + "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b", + "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b", + "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203", + "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f", + "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19", + "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1", + "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a", + "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac", + "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9", + "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0", + "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137", + "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f", + "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6", + "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5", + "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909", + "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f", + "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0", + "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324", + "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755", + "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb", + "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854", + "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c", + "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60", + "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84", + "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0", + "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b", + "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1", + "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531", + "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1", + "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11", + "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326", + "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df", + "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.1.0" }, "cryptography": { "hashes": [ - "sha256:1a6915075c6d3a5e1215eab5d99bcec0da26036ff2102a1038401d6ef5bef25b", - "sha256:1ee1fd0de9851ff32dbbb9362a4d833b579b4a6cc96883e8e6d2ff2a6bc7104f", - "sha256:407cec680e811b4fc829de966f88a7c62a596faa250fc1a4b520a0355b9bc190", - "sha256:50386acb40fbabbceeb2986332f0287f50f29ccf1497bae31cf5c3e7b4f4b34f", - "sha256:6f97109336df5c178ee7c9c711b264c502b905c2d2a29ace99ed761533a3460f", - "sha256:754978da4d0457e7ca176f58c57b1f9de6556591c19b25b8bcce3c77d314f5eb", - "sha256:76c24dd4fd196a80f9f2f5405a778a8ca132f16b10af113474005635fe7e066c", - "sha256:7dacfdeee048814563eaaec7c4743c8aea529fe3dd53127313a792f0dadc1773", - "sha256:80ee674c08aaef194bc4627b7f2956e5ba7ef29c3cc3ca488cf15854838a8f72", - "sha256:844ad4d7c3850081dffba91cdd91950038ee4ac525c575509a42d3fc806b83c8", - "sha256:875aea1039d78557c7c6b4db2fe0e9d2413439f4676310a5f269dd342ca7a717", - "sha256:887cbc1ea60786e534b00ba8b04d1095f4272d380ebd5f7a7eb4cc274710fad9", - "sha256:ad04f413436b0781f20c52a661660f1e23bcd89a0e9bb1d6d20822d048cf2856", - "sha256:bae6c7f4a36a25291b619ad064a30a07110a805d08dc89984f4f441f6c1f3f96", - "sha256:c52a1a6f81e738d07f43dab57831c29e57d21c81a942f4602fac7ee21b27f288", - "sha256:e0a05aee6a82d944f9b4edd6a001178787d1546ec7c6223ee9a848a7ade92e39", - "sha256:e324de6972b151f99dc078defe8fb1b0a82c6498e37bff335f5bc6b1e3ab5a1e", - "sha256:e5d71c5d5bd5b5c3eebcf7c5c2bb332d62ec68921a8c593bea8c394911a005ce", - "sha256:f3ed2d864a2fa1666e749fe52fb8e23d8e06b8012e8bd8147c73797c506e86f1", - "sha256:f671c1bb0d6088e94d61d80c606d65baacc0d374e67bf895148883461cd848de", - "sha256:f6c0db08d81ead9576c4d94bbb27aed8d7a430fa27890f39084c2d0e2ec6b0df", - "sha256:f964c7dcf7802d133e8dbd1565914fa0194f9d683d82411989889ecd701e8adf", - "sha256:fec8b932f51ae245121c4671b4bbc030880f363354b2f0e0bd1366017d891458" + "sha256:0a4e3406cfed6b1f6d6e87ed243363652b2586b2d917b0609ca4f97072994405", + "sha256:1e0af458515d5e4028aad75f3bb3fe7a31e46ad920648cd59b64d3da842e4356", + "sha256:2803f2f8b1e95f614419926c7e6f55d828afc614ca5ed61543877ae668cc3472", + "sha256:28d63d75bf7ae4045b10de5413fb1d6338616e79015999ad9cf6fc538f772d41", + "sha256:32057d3d0ab7d4453778367ca43e99ddb711770477c4f072a51b3ca69602780a", + "sha256:3a4805a4ca729d65570a1b7cac84eac1e431085d40387b7d3bbaa47e39890b88", + "sha256:63dac2d25c47f12a7b8aa60e528bfb3c51c5a6c5a9f7c86987909c6c79765554", + "sha256:650883cc064297ef3676b1db1b7b1df6081794c4ada96fa457253c4cc40f97db", + "sha256:6f2bbd72f717ce33100e6467572abaedc61f1acb87b8d546001328d7f466b778", + "sha256:7c872413353c70e0263a9368c4993710070e70ab3e5318d85510cc91cce77e7c", + "sha256:918cb89086c7d98b1b86b9fdb70c712e5a9325ba6f7d7cfb509e784e0cfc6917", + "sha256:9618a87212cb5200500e304e43691111570e1f10ec3f35569fdfcd17e28fd797", + "sha256:a805a7bce4a77d51696410005b3e85ae2839bad9aa38894afc0aa99d8e0c3160", + "sha256:cc3a621076d824d75ab1e1e530e66e7e8564e357dd723f2533225d40fe35c60c", + "sha256:cd033d74067d8928ef00a6b1327c8ea0452523967ca4463666eeba65ca350d4c", + "sha256:cf91e428c51ef692b82ce786583e214f58392399cf65c341bc7301d096fa3ba2", + "sha256:d36bbeb99704aabefdca5aee4eba04455d7a27ceabd16f3b3ba9bdcc31da86c4", + "sha256:d8aa3609d337ad85e4eb9bb0f8bcf6e4409bfb86e706efa9a027912169e89122", + "sha256:f5d7b79fa56bc29580faafc2ff736ce05ba31feaa9d4735048b0de7d9ceb2b94" ], "markers": "python_version >= '3.6'", - "version": "==39.0.0" + "version": "==40.0.1" }, "defusedxml": { "hashes": [ @@ -255,19 +239,19 @@ }, "django-registration-redux": { "hashes": [ - "sha256:5079dd36980cc0faddf91a6e991129680410611b1059d8154d064cc0146744b2", - "sha256:88eb98530d98a7e3451bf728c0a5f6fe7ea2f45c65ef18f619ef37b940c854f5" + "sha256:2213bbe8732be72724034f4146f0255a7bd666eb5a5e1b2d8d8aa633fe8af894", + "sha256:56fbc7b01a7f0f48812fe4d4e0729d2dac916e16f8aaed36b3f10129f2df9d0f" ], "index": "pypi", - "version": "==2.11" + "version": "==2.12" }, "dnspython": { "hashes": [ - "sha256:0f7569a4a6ff151958b64304071d370daa3243d15941a7beedf0c9fe5105603e", - "sha256:a851e51367fb93e9e1361732c1d60dab63eff98712e503ea7d92e6eccb109b4f" + "sha256:224e32b03eb46be70e12ef6d64e0be123a64e621ab4c0822ff6d450d52a540b9", + "sha256:89141536394f909066cabd112e3e1a37e4e654db00a25308b0f130bc3152eb46" ], "index": "pypi", - "version": "==2.2.1" + "version": "==2.3.0" }, "idna": { "hashes": [ @@ -325,10 +309,10 @@ }, "pytz": { "hashes": [ - "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0", - "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a" + "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588", + "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb" ], - "version": "==2022.7.1" + "version": "==2023.3" }, "requests": { "hashes": [ @@ -348,11 +332,11 @@ }, "setuptools": { "hashes": [ - "sha256:4d3c92fac8f1118bb77a22181355e29c239cabfe2b9effdaa665c66b711136d7", - "sha256:8ab4f1dbf2b4a65f7eec5ad0c620e84c34111a68d3349833494b9088212214dd" + "sha256:257de92a9d50a60b8e22abfcbb771571fde0dbf3ec234463212027a4eeecbe9a", + "sha256:e728ca814a823bf7bf60162daf9db95b93d532948c4c0bea762ce62f60189078" ], "markers": "python_version >= '3.7'", - "version": "==65.7.0" + "version": "==67.6.1" }, "setuptools-scm": { "hashes": [ @@ -364,19 +348,19 @@ }, "social-auth-app-django": { "hashes": [ - "sha256:52241a25445a010ab1c108bafff21fc5522d5c8cd0d48a92c39c7371824b065d", - "sha256:b6e3132ce087cdd6e1707aeb1b588be41d318408fcf6395435da0bc6fe9a9795" + "sha256:e4e9eb2c8c1258f443d4f1c04cb6693c0303e8ee2fa0981ba1b371546195a939", + "sha256:fdf1dc6bcb8b457001d88d2279f637bc9955f1aedf750c627784bb5104601b1c" ], "index": "pypi", - "version": "==5.0.0" + "version": "==5.1.0" }, "social-auth-core": { "hashes": [ - "sha256:1e3440d104f743b02dfe258c9d4dba5b4065abf24b2f7eb362b47054d21797df", - "sha256:4686f0e43cf12954216875a32e944847bb1dc69e7cd9573d16a9003bb05ca477" + "sha256:29f5ea3174162797ccb9b849f7a38a9490bfb920304ecd9b7f63c6c3a5ceb7a3", + "sha256:cff78e0707ed0f6bdd3beec6ce713591875492b98272ea6298cc173912e3234b" ], "markers": "python_version >= '3.6'", - "version": "==4.3.0" + "version": "==4.4.1" }, "sqlparse": { "hashes": [ @@ -386,29 +370,21 @@ "markers": "python_version >= '3.5'", "version": "==0.4.3" }, - "tomli": { - "hashes": [ - "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", - "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" - ], - "markers": "python_version < '3.11'", - "version": "==2.0.1" - }, "typing-extensions": { "hashes": [ - "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", - "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" + "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb", + "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4" ], "markers": "python_version >= '3.7'", - "version": "==4.4.0" + "version": "==4.5.0" }, "urllib3": { "hashes": [ - "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72", - "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1" + "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305", + "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.26.14" + "version": "==1.26.15" } }, "develop": { @@ -422,27 +398,19 @@ }, "astroid": { "hashes": [ - "sha256:3bc7834720e1a24ca797fd785d77efb14f7a28ee8e635ef040b6e2d80ccb3303", - "sha256:8f6a8d40c4ad161d6fc419545ae4b2f275ed86d1c989c97825772120842ee0d2" + "sha256:6e61b85c891ec53b07471aec5878f4ac6446a41e590ede0f2ce095f39f7d49dd", + "sha256:dea89d9f99f491c66ac9c04ebddf91e4acf8bd711722175fe6245c0725cc19bb" ], "markers": "python_full_version >= '3.7.2'", - "version": "==2.13.2" - }, - "attrs": { - "hashes": [ - "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836", - "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99" - ], - "markers": "python_version >= '3.6'", - "version": "==22.2.0" + "version": "==2.15.2" }, "babel": { "hashes": [ - "sha256:1ad3eca1c885218f6dce2ab67291178944f810a10a9b5f3cb8382a5a232b64fe", - "sha256:5ef4b3226b0180dedded4229651c8b0e1a3a6a2837d45a073272f313e4cf97f6" + "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610", + "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455" ], - "markers": "python_version >= '3.6'", - "version": "==2.11.0" + "markers": "python_version >= '3.7'", + "version": "==2.12.1" }, "certifi": { "hashes": [ @@ -454,103 +422,91 @@ }, "charset-normalizer": { "hashes": [ - "sha256:00d3ffdaafe92a5dc603cb9bd5111aaa36dfa187c8285c543be562e61b755f6b", - "sha256:024e606be3ed92216e2b6952ed859d86b4cfa52cd5bc5f050e7dc28f9b43ec42", - "sha256:0298eafff88c99982a4cf66ba2efa1128e4ddaca0b05eec4c456bbc7db691d8d", - "sha256:02a51034802cbf38db3f89c66fb5d2ec57e6fe7ef2f4a44d070a593c3688667b", - "sha256:083c8d17153ecb403e5e1eb76a7ef4babfc2c48d58899c98fcaa04833e7a2f9a", - "sha256:0a11e971ed097d24c534c037d298ad32c6ce81a45736d31e0ff0ad37ab437d59", - "sha256:0bf2dae5291758b6f84cf923bfaa285632816007db0330002fa1de38bfcb7154", - "sha256:0c0a590235ccd933d9892c627dec5bc7511ce6ad6c1011fdf5b11363022746c1", - "sha256:0f438ae3532723fb6ead77e7c604be7c8374094ef4ee2c5e03a3a17f1fca256c", - "sha256:109487860ef6a328f3eec66f2bf78b0b72400280d8f8ea05f69c51644ba6521a", - "sha256:11b53acf2411c3b09e6af37e4b9005cba376c872503c8f28218c7243582df45d", - "sha256:12db3b2c533c23ab812c2b25934f60383361f8a376ae272665f8e48b88e8e1c6", - "sha256:14e76c0f23218b8f46c4d87018ca2e441535aed3632ca134b10239dfb6dadd6b", - "sha256:16a8663d6e281208d78806dbe14ee9903715361cf81f6d4309944e4d1e59ac5b", - "sha256:292d5e8ba896bbfd6334b096e34bffb56161c81408d6d036a7dfa6929cff8783", - "sha256:2c03cc56021a4bd59be889c2b9257dae13bf55041a3372d3295416f86b295fb5", - "sha256:2e396d70bc4ef5325b72b593a72c8979999aa52fb8bcf03f701c1b03e1166918", - "sha256:2edb64ee7bf1ed524a1da60cdcd2e1f6e2b4f66ef7c077680739f1641f62f555", - "sha256:31a9ddf4718d10ae04d9b18801bd776693487cbb57d74cc3458a7673f6f34639", - "sha256:356541bf4381fa35856dafa6a965916e54bed415ad8a24ee6de6e37deccf2786", - "sha256:358a7c4cb8ba9b46c453b1dd8d9e431452d5249072e4f56cfda3149f6ab1405e", - "sha256:37f8febc8ec50c14f3ec9637505f28e58d4f66752207ea177c1d67df25da5aed", - "sha256:39049da0ffb96c8cbb65cbf5c5f3ca3168990adf3551bd1dee10c48fce8ae820", - "sha256:39cf9ed17fe3b1bc81f33c9ceb6ce67683ee7526e65fde1447c772afc54a1bb8", - "sha256:3ae1de54a77dc0d6d5fcf623290af4266412a7c4be0b1ff7444394f03f5c54e3", - "sha256:3b590df687e3c5ee0deef9fc8c547d81986d9a1b56073d82de008744452d6541", - "sha256:3e45867f1f2ab0711d60c6c71746ac53537f1684baa699f4f668d4c6f6ce8e14", - "sha256:3fc1c4a2ffd64890aebdb3f97e1278b0cc72579a08ca4de8cd2c04799a3a22be", - "sha256:4457ea6774b5611f4bed5eaa5df55f70abde42364d498c5134b7ef4c6958e20e", - "sha256:44ba614de5361b3e5278e1241fda3dc1838deed864b50a10d7ce92983797fa76", - "sha256:4a8fcf28c05c1f6d7e177a9a46a1c52798bfe2ad80681d275b10dcf317deaf0b", - "sha256:4b0d02d7102dd0f997580b51edc4cebcf2ab6397a7edf89f1c73b586c614272c", - "sha256:502218f52498a36d6bf5ea77081844017bf7982cdbe521ad85e64cabee1b608b", - "sha256:503e65837c71b875ecdd733877d852adbc465bd82c768a067badd953bf1bc5a3", - "sha256:5995f0164fa7df59db4746112fec3f49c461dd6b31b841873443bdb077c13cfc", - "sha256:59e5686dd847347e55dffcc191a96622f016bc0ad89105e24c14e0d6305acbc6", - "sha256:601f36512f9e28f029d9481bdaf8e89e5148ac5d89cffd3b05cd533eeb423b59", - "sha256:608862a7bf6957f2333fc54ab4399e405baad0163dc9f8d99cb236816db169d4", - "sha256:62595ab75873d50d57323a91dd03e6966eb79c41fa834b7a1661ed043b2d404d", - "sha256:70990b9c51340e4044cfc394a81f614f3f90d41397104d226f21e66de668730d", - "sha256:71140351489970dfe5e60fc621ada3e0f41104a5eddaca47a7acb3c1b851d6d3", - "sha256:72966d1b297c741541ca8cf1223ff262a6febe52481af742036a0b296e35fa5a", - "sha256:74292fc76c905c0ef095fe11e188a32ebd03bc38f3f3e9bcb85e4e6db177b7ea", - "sha256:761e8904c07ad053d285670f36dd94e1b6ab7f16ce62b9805c475b7aa1cffde6", - "sha256:772b87914ff1152b92a197ef4ea40efe27a378606c39446ded52c8f80f79702e", - "sha256:79909e27e8e4fcc9db4addea88aa63f6423ebb171db091fb4373e3312cb6d603", - "sha256:7e189e2e1d3ed2f4aebabd2d5b0f931e883676e51c7624826e0a4e5fe8a0bf24", - "sha256:7eb33a30d75562222b64f569c642ff3dc6689e09adda43a082208397f016c39a", - "sha256:81d6741ab457d14fdedc215516665050f3822d3e56508921cc7239f8c8e66a58", - "sha256:8499ca8f4502af841f68135133d8258f7b32a53a1d594aa98cc52013fff55678", - "sha256:84c3990934bae40ea69a82034912ffe5a62c60bbf6ec5bc9691419641d7d5c9a", - "sha256:87701167f2a5c930b403e9756fab1d31d4d4da52856143b609e30a1ce7160f3c", - "sha256:88600c72ef7587fe1708fd242b385b6ed4b8904976d5da0893e31df8b3480cb6", - "sha256:8ac7b6a045b814cf0c47f3623d21ebd88b3e8cf216a14790b455ea7ff0135d18", - "sha256:8b8af03d2e37866d023ad0ddea594edefc31e827fee64f8de5611a1dbc373174", - "sha256:8c7fe7afa480e3e82eed58e0ca89f751cd14d767638e2550c77a92a9e749c317", - "sha256:8eade758719add78ec36dc13201483f8e9b5d940329285edcd5f70c0a9edbd7f", - "sha256:911d8a40b2bef5b8bbae2e36a0b103f142ac53557ab421dc16ac4aafee6f53dc", - "sha256:93ad6d87ac18e2a90b0fe89df7c65263b9a99a0eb98f0a3d2e079f12a0735837", - "sha256:95dea361dd73757c6f1c0a1480ac499952c16ac83f7f5f4f84f0658a01b8ef41", - "sha256:9ab77acb98eba3fd2a85cd160851816bfce6871d944d885febf012713f06659c", - "sha256:9cb3032517f1627cc012dbc80a8ec976ae76d93ea2b5feaa9d2a5b8882597579", - "sha256:9cf4e8ad252f7c38dd1f676b46514f92dc0ebeb0db5552f5f403509705e24753", - "sha256:9d9153257a3f70d5f69edf2325357251ed20f772b12e593f3b3377b5f78e7ef8", - "sha256:a152f5f33d64a6be73f1d30c9cc82dfc73cec6477ec268e7c6e4c7d23c2d2291", - "sha256:a16418ecf1329f71df119e8a65f3aa68004a3f9383821edcb20f0702934d8087", - "sha256:a60332922359f920193b1d4826953c507a877b523b2395ad7bc716ddd386d866", - "sha256:a8d0fc946c784ff7f7c3742310cc8a57c5c6dc31631269876a88b809dbeff3d3", - "sha256:ab5de034a886f616a5668aa5d098af2b5385ed70142090e2a31bcbd0af0fdb3d", - "sha256:c22d3fe05ce11d3671297dc8973267daa0f938b93ec716e12e0f6dee81591dc1", - "sha256:c2ac1b08635a8cd4e0cbeaf6f5e922085908d48eb05d44c5ae9eabab148512ca", - "sha256:c512accbd6ff0270939b9ac214b84fb5ada5f0409c44298361b2f5e13f9aed9e", - "sha256:c75ffc45f25324e68ab238cb4b5c0a38cd1c3d7f1fb1f72b5541de469e2247db", - "sha256:c95a03c79bbe30eec3ec2b7f076074f4281526724c8685a42872974ef4d36b72", - "sha256:cadaeaba78750d58d3cc6ac4d1fd867da6fc73c88156b7a3212a3cd4819d679d", - "sha256:cd6056167405314a4dc3c173943f11249fa0f1b204f8b51ed4bde1a9cd1834dc", - "sha256:db72b07027db150f468fbada4d85b3b2729a3db39178abf5c543b784c1254539", - "sha256:df2c707231459e8a4028eabcd3cfc827befd635b3ef72eada84ab13b52e1574d", - "sha256:e62164b50f84e20601c1ff8eb55620d2ad25fb81b59e3cd776a1902527a788af", - "sha256:e696f0dd336161fca9adbb846875d40752e6eba585843c768935ba5c9960722b", - "sha256:eaa379fcd227ca235d04152ca6704c7cb55564116f8bc52545ff357628e10602", - "sha256:ebea339af930f8ca5d7a699b921106c6e29c617fe9606fa7baa043c1cdae326f", - "sha256:f4c39b0e3eac288fedc2b43055cfc2ca7a60362d0e5e87a637beac5d801ef478", - "sha256:f5057856d21e7586765171eac8b9fc3f7d44ef39425f85dbcccb13b3ebea806c", - "sha256:f6f45710b4459401609ebebdbcfb34515da4fc2aa886f95107f556ac69a9147e", - "sha256:f97e83fa6c25693c7a35de154681fcc257c1c41b38beb0304b9c4d2d9e164479", - "sha256:f9d0c5c045a3ca9bedfc35dca8526798eb91a07aa7a2c0fee134c6c6f321cbd7", - "sha256:ff6f3db31555657f3163b15a6b7c6938d08df7adbfc9dd13d9d19edad678f1e8" - ], - "version": "==3.0.1" + "sha256:04afa6387e2b282cf78ff3dbce20f0cc071c12dc8f685bd40960cc68644cfea6", + "sha256:04eefcee095f58eaabe6dc3cc2262f3bcd776d2c67005880894f447b3f2cb9c1", + "sha256:0be65ccf618c1e7ac9b849c315cc2e8a8751d9cfdaa43027d4f6624bd587ab7e", + "sha256:0c95f12b74681e9ae127728f7e5409cbbef9cd914d5896ef238cc779b8152373", + "sha256:0ca564606d2caafb0abe6d1b5311c2649e8071eb241b2d64e75a0d0065107e62", + "sha256:10c93628d7497c81686e8e5e557aafa78f230cd9e77dd0c40032ef90c18f2230", + "sha256:11d117e6c63e8f495412d37e7dc2e2fff09c34b2d09dbe2bee3c6229577818be", + "sha256:11d3bcb7be35e7b1bba2c23beedac81ee893ac9871d0ba79effc7fc01167db6c", + "sha256:12a2b561af122e3d94cdb97fe6fb2bb2b82cef0cdca131646fdb940a1eda04f0", + "sha256:12d1a39aa6b8c6f6248bb54550efcc1c38ce0d8096a146638fd4738e42284448", + "sha256:1435ae15108b1cb6fffbcea2af3d468683b7afed0169ad718451f8db5d1aff6f", + "sha256:1c60b9c202d00052183c9be85e5eaf18a4ada0a47d188a83c8f5c5b23252f649", + "sha256:1e8fcdd8f672a1c4fc8d0bd3a2b576b152d2a349782d1eb0f6b8e52e9954731d", + "sha256:20064ead0717cf9a73a6d1e779b23d149b53daf971169289ed2ed43a71e8d3b0", + "sha256:21fa558996782fc226b529fdd2ed7866c2c6ec91cee82735c98a197fae39f706", + "sha256:22908891a380d50738e1f978667536f6c6b526a2064156203d418f4856d6e86a", + "sha256:3160a0fd9754aab7d47f95a6b63ab355388d890163eb03b2d2b87ab0a30cfa59", + "sha256:322102cdf1ab682ecc7d9b1c5eed4ec59657a65e1c146a0da342b78f4112db23", + "sha256:34e0a2f9c370eb95597aae63bf85eb5e96826d81e3dcf88b8886012906f509b5", + "sha256:3573d376454d956553c356df45bb824262c397c6e26ce43e8203c4c540ee0acb", + "sha256:3747443b6a904001473370d7810aa19c3a180ccd52a7157aacc264a5ac79265e", + "sha256:38e812a197bf8e71a59fe55b757a84c1f946d0ac114acafaafaf21667a7e169e", + "sha256:3a06f32c9634a8705f4ca9946d667609f52cf130d5548881401f1eb2c39b1e2c", + "sha256:3a5fc78f9e3f501a1614a98f7c54d3969f3ad9bba8ba3d9b438c3bc5d047dd28", + "sha256:3d9098b479e78c85080c98e1e35ff40b4a31d8953102bb0fd7d1b6f8a2111a3d", + "sha256:3dc5b6a8ecfdc5748a7e429782598e4f17ef378e3e272eeb1340ea57c9109f41", + "sha256:4155b51ae05ed47199dc5b2a4e62abccb274cee6b01da5b895099b61b1982974", + "sha256:49919f8400b5e49e961f320c735388ee686a62327e773fa5b3ce6721f7e785ce", + "sha256:53d0a3fa5f8af98a1e261de6a3943ca631c526635eb5817a87a59d9a57ebf48f", + "sha256:5f008525e02908b20e04707a4f704cd286d94718f48bb33edddc7d7b584dddc1", + "sha256:628c985afb2c7d27a4800bfb609e03985aaecb42f955049957814e0491d4006d", + "sha256:65ed923f84a6844de5fd29726b888e58c62820e0769b76565480e1fdc3d062f8", + "sha256:6734e606355834f13445b6adc38b53c0fd45f1a56a9ba06c2058f86893ae8017", + "sha256:6baf0baf0d5d265fa7944feb9f7451cc316bfe30e8df1a61b1bb08577c554f31", + "sha256:6f4f4668e1831850ebcc2fd0b1cd11721947b6dc7c00bf1c6bd3c929ae14f2c7", + "sha256:6f5c2e7bc8a4bf7c426599765b1bd33217ec84023033672c1e9a8b35eaeaaaf8", + "sha256:6f6c7a8a57e9405cad7485f4c9d3172ae486cfef1344b5ddd8e5239582d7355e", + "sha256:7381c66e0561c5757ffe616af869b916c8b4e42b367ab29fedc98481d1e74e14", + "sha256:73dc03a6a7e30b7edc5b01b601e53e7fc924b04e1835e8e407c12c037e81adbd", + "sha256:74db0052d985cf37fa111828d0dd230776ac99c740e1a758ad99094be4f1803d", + "sha256:75f2568b4189dda1c567339b48cba4ac7384accb9c2a7ed655cd86b04055c795", + "sha256:78cacd03e79d009d95635e7d6ff12c21eb89b894c354bd2b2ed0b4763373693b", + "sha256:80d1543d58bd3d6c271b66abf454d437a438dff01c3e62fdbcd68f2a11310d4b", + "sha256:830d2948a5ec37c386d3170c483063798d7879037492540f10a475e3fd6f244b", + "sha256:891cf9b48776b5c61c700b55a598621fdb7b1e301a550365571e9624f270c203", + "sha256:8f25e17ab3039b05f762b0a55ae0b3632b2e073d9c8fc88e89aca31a6198e88f", + "sha256:9a3267620866c9d17b959a84dd0bd2d45719b817245e49371ead79ed4f710d19", + "sha256:a04f86f41a8916fe45ac5024ec477f41f886b3c435da2d4e3d2709b22ab02af1", + "sha256:aaf53a6cebad0eae578f062c7d462155eada9c172bd8c4d250b8c1d8eb7f916a", + "sha256:abc1185d79f47c0a7aaf7e2412a0eb2c03b724581139193d2d82b3ad8cbb00ac", + "sha256:ac0aa6cd53ab9a31d397f8303f92c42f534693528fafbdb997c82bae6e477ad9", + "sha256:ac3775e3311661d4adace3697a52ac0bab17edd166087d493b52d4f4f553f9f0", + "sha256:b06f0d3bf045158d2fb8837c5785fe9ff9b8c93358be64461a1089f5da983137", + "sha256:b116502087ce8a6b7a5f1814568ccbd0e9f6cfd99948aa59b0e241dc57cf739f", + "sha256:b82fab78e0b1329e183a65260581de4375f619167478dddab510c6c6fb04d9b6", + "sha256:bd7163182133c0c7701b25e604cf1611c0d87712e56e88e7ee5d72deab3e76b5", + "sha256:c36bcbc0d5174a80d6cccf43a0ecaca44e81d25be4b7f90f0ed7bcfbb5a00909", + "sha256:c3af8e0f07399d3176b179f2e2634c3ce9c1301379a6b8c9c9aeecd481da494f", + "sha256:c84132a54c750fda57729d1e2599bb598f5fa0344085dbde5003ba429a4798c0", + "sha256:cb7b2ab0188829593b9de646545175547a70d9a6e2b63bf2cd87a0a391599324", + "sha256:cca4def576f47a09a943666b8f829606bcb17e2bc2d5911a46c8f8da45f56755", + "sha256:cf6511efa4801b9b38dc5546d7547d5b5c6ef4b081c60b23e4d941d0eba9cbeb", + "sha256:d16fd5252f883eb074ca55cb622bc0bee49b979ae4e8639fff6ca3ff44f9f854", + "sha256:d2686f91611f9e17f4548dbf050e75b079bbc2a82be565832bc8ea9047b61c8c", + "sha256:d7fc3fca01da18fbabe4625d64bb612b533533ed10045a2ac3dd194bfa656b60", + "sha256:dd5653e67b149503c68c4018bf07e42eeed6b4e956b24c00ccdf93ac79cdff84", + "sha256:de5695a6f1d8340b12a5d6d4484290ee74d61e467c39ff03b39e30df62cf83a0", + "sha256:e0ac8959c929593fee38da1c2b64ee9778733cdf03c482c9ff1d508b6b593b2b", + "sha256:e1b25e3ad6c909f398df8921780d6a3d120d8c09466720226fc621605b6f92b1", + "sha256:e633940f28c1e913615fd624fcdd72fdba807bf53ea6925d6a588e84e1151531", + "sha256:e89df2958e5159b811af9ff0f92614dabf4ff617c03a4c1c6ff53bf1c399e0e1", + "sha256:ea9f9c6034ea2d93d9147818f17c2a0860d41b71c38b9ce4d55f21b6f9165a11", + "sha256:f645caaf0008bacf349875a974220f1f1da349c5dbe7c4ec93048cdc785a3326", + "sha256:f8303414c7b03f794347ad062c0516cee0e15f7a612abd0ce1e25caf6ceb47df", + "sha256:fca62a8301b605b954ad2e9c3666f9d97f63872aa4efcae5492baca2056b74ab" + ], + "markers": "python_full_version >= '3.7.0'", + "version": "==3.1.0" }, "dill": { "hashes": [ "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0", "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373" ], - "markers": "python_version < '3.11'", + "markers": "python_version >= '3.11'", "version": "==0.3.6" }, "django": { @@ -577,14 +533,6 @@ "markers": "python_version >= '3.7'", "version": "==0.19" }, - "exceptiongroup": { - "hashes": [ - "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e", - "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23" - ], - "markers": "python_version < '3.11'", - "version": "==1.1.0" - }, "execnet": { "hashes": [ "sha256:8f694f3ba9cc92cab508b152dcfe322153975c29bda272e2fd7f3f00f36e47c5", @@ -619,11 +567,11 @@ }, "isort": { "hashes": [ - "sha256:6db30c5ded9815d813932c04c2f85a360bcdd35fed496f4d8f35495ef0a261b6", - "sha256:c033fd0edb91000a7f09527fe5c75321878f98322a77ddcc81adbd83724afb7b" + "sha256:8bef7dde241278824a6d83f44a544709b065191b95b6e50894bdc722fcba0504", + "sha256:f84c2818376e66cf843d497486ea8fed8700b340f308f076c6fb1229dff318b6" ], - "markers": "python_full_version >= '3.7.0'", - "version": "==5.11.4" + "markers": "python_full_version >= '3.8.0'", + "version": "==5.12.0" }, "jinja2": { "hashes": [ @@ -677,49 +625,59 @@ }, "markupsafe": { "hashes": [ - "sha256:0212a68688482dc52b2d45013df70d169f542b7394fc744c02a57374a4207003", - "sha256:089cf3dbf0cd6c100f02945abeb18484bd1ee57a079aefd52cffd17fba910b88", - "sha256:10c1bfff05d95783da83491be968e8fe789263689c02724e0c691933c52994f5", - "sha256:33b74d289bd2f5e527beadcaa3f401e0df0a89927c1559c8566c066fa4248ab7", - "sha256:3799351e2336dc91ea70b034983ee71cf2f9533cdff7c14c90ea126bfd95d65a", - "sha256:3ce11ee3f23f79dbd06fb3d63e2f6af7b12db1d46932fe7bd8afa259a5996603", - "sha256:421be9fbf0ffe9ffd7a378aafebbf6f4602d564d34be190fc19a193232fd12b1", - "sha256:43093fb83d8343aac0b1baa75516da6092f58f41200907ef92448ecab8825135", - "sha256:46d00d6cfecdde84d40e572d63735ef81423ad31184100411e6e3388d405e247", - "sha256:4a33dea2b688b3190ee12bd7cfa29d39c9ed176bda40bfa11099a3ce5d3a7ac6", - "sha256:4b9fe39a2ccc108a4accc2676e77da025ce383c108593d65cc909add5c3bd601", - "sha256:56442863ed2b06d19c37f94d999035e15ee982988920e12a5b4ba29b62ad1f77", - "sha256:671cd1187ed5e62818414afe79ed29da836dde67166a9fac6d435873c44fdd02", - "sha256:694deca8d702d5db21ec83983ce0bb4b26a578e71fbdbd4fdcd387daa90e4d5e", - "sha256:6a074d34ee7a5ce3effbc526b7083ec9731bb3cbf921bbe1d3005d4d2bdb3a63", - "sha256:6d0072fea50feec76a4c418096652f2c3238eaa014b2f94aeb1d56a66b41403f", - "sha256:6fbf47b5d3728c6aea2abb0589b5d30459e369baa772e0f37a0320185e87c980", - "sha256:7f91197cc9e48f989d12e4e6fbc46495c446636dfc81b9ccf50bb0ec74b91d4b", - "sha256:86b1f75c4e7c2ac2ccdaec2b9022845dbb81880ca318bb7a0a01fbf7813e3812", - "sha256:8dc1c72a69aa7e082593c4a203dcf94ddb74bb5c8a731e4e1eb68d031e8498ff", - "sha256:8e3dcf21f367459434c18e71b2a9532d96547aef8a871872a5bd69a715c15f96", - "sha256:8e576a51ad59e4bfaac456023a78f6b5e6e7651dcd383bcc3e18d06f9b55d6d1", - "sha256:96e37a3dc86e80bf81758c152fe66dbf60ed5eca3d26305edf01892257049925", - "sha256:97a68e6ada378df82bc9f16b800ab77cbf4b2fada0081794318520138c088e4a", - "sha256:99a2a507ed3ac881b975a2976d59f38c19386d128e7a9a18b7df6fff1fd4c1d6", - "sha256:a49907dd8420c5685cfa064a1335b6754b74541bbb3706c259c02ed65b644b3e", - "sha256:b09bf97215625a311f669476f44b8b318b075847b49316d3e28c08e41a7a573f", - "sha256:b7bd98b796e2b6553da7225aeb61f447f80a1ca64f41d83612e6139ca5213aa4", - "sha256:b87db4360013327109564f0e591bd2a3b318547bcef31b468a92ee504d07ae4f", - "sha256:bcb3ed405ed3222f9904899563d6fc492ff75cce56cba05e32eff40e6acbeaa3", - "sha256:d4306c36ca495956b6d568d276ac11fdd9c30a36f1b6eb928070dc5360b22e1c", - "sha256:d5ee4f386140395a2c818d149221149c54849dfcfcb9f1debfe07a8b8bd63f9a", - "sha256:dda30ba7e87fbbb7eab1ec9f58678558fd9a6b8b853530e176eabd064da81417", - "sha256:e04e26803c9c3851c931eac40c695602c6295b8d432cbe78609649ad9bd2da8a", - "sha256:e1c0b87e09fa55a220f058d1d49d3fb8df88fbfab58558f1198e08c1e1de842a", - "sha256:e72591e9ecd94d7feb70c1cbd7be7b3ebea3f548870aa91e2732960fa4d57a37", - "sha256:e8c843bbcda3a2f1e3c2ab25913c80a3c5376cd00c6e8c4a86a89a28c8dc5452", - "sha256:efc1913fd2ca4f334418481c7e595c00aad186563bbc1ec76067848c7ca0a933", - "sha256:f121a1420d4e173a5d96e47e9a0c0dcff965afdf1626d28de1460815f7c4ee7a", - "sha256:fc7b548b17d238737688817ab67deebb30e8073c95749d55538ed473130ec0c7" + "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed", + "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc", + "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2", + "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460", + "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7", + "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0", + "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1", + "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa", + "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03", + "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323", + "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65", + "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013", + "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036", + "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f", + "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4", + "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419", + "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2", + "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619", + "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a", + "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a", + "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd", + "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7", + "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666", + "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65", + "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859", + "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625", + "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff", + "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156", + "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd", + "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba", + "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f", + "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1", + "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094", + "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a", + "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513", + "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed", + "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d", + "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3", + "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147", + "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c", + "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603", + "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601", + "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a", + "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1", + "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d", + "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3", + "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54", + "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2", + "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6", + "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58" ], "markers": "python_version >= '3.7'", - "version": "==2.1.1" + "version": "==2.1.2" }, "mccabe": { "hashes": [ @@ -746,11 +704,11 @@ }, "platformdirs": { "hashes": [ - "sha256:83c8f6d04389165de7c9b6f0c682439697887bca0aa2f1c87ef1826be3584490", - "sha256:e1fea1fe471b9ff8332e229df3cb7de4f53eeea4998d3b6bfff542115e998bd2" + "sha256:d5b638ca397f25f979350ff789db335903d7ea010ab28903f57b27e1b16c2b08", + "sha256:ebe11c0d7a805086e99506aa331612429a72ca7cd52a1f0d277dc4adc20cb10e" ], "markers": "python_version >= '3.7'", - "version": "==2.6.2" + "version": "==3.2.0" }, "pluggy": { "hashes": [ @@ -762,19 +720,19 @@ }, "pygments": { "hashes": [ - "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297", - "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717" + "sha256:77a3299119af881904cd5ecd1ac6a66214b6e9bed1f2db16993b54adede64094", + "sha256:f7e36cffc4c517fbc252861b9a6e4644ca0e5abadf9a113c72d1358ad09b9500" ], - "markers": "python_version >= '3.6'", - "version": "==2.14.0" + "markers": "python_version >= '3.7'", + "version": "==2.15.0" }, "pylint": { "hashes": [ - "sha256:9df0d07e8948a1c3ffa3b6e2d7e6e63d9fb457c5da5b961ed63106594780cc7e", - "sha256:b3dc5ef7d33858f297ac0d06cc73862f01e4f2e74025ec3eff347ce0bc60baf5" + "sha256:001cc91366a7df2970941d7e6bbefcbf98694e00102c1f121c531a814ddc2ea8", + "sha256:1b647da5249e7c279118f657ca28b6aaebb299f86bf92affc632acf199f7adbb" ], "index": "pypi", - "version": "==2.15.10" + "version": "==2.17.2" }, "pylint-django": { "hashes": [ @@ -794,11 +752,11 @@ }, "pytest": { "hashes": [ - "sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5", - "sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42" + "sha256:58ecc27ebf0ea643ebfdf7fb1249335da761a00c9f955bcd922349bcb68ee57d", + "sha256:933051fa1bfbd38a21e73c3960cebdad4cf59483ddba7696c48509727e17f201" ], "index": "pypi", - "version": "==7.2.1" + "version": "==7.3.0" }, "pytest-cache": { "hashes": [ @@ -823,10 +781,10 @@ }, "pytz": { "hashes": [ - "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0", - "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a" + "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588", + "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb" ], - "version": "==2022.7.1" + "version": "==2023.3" }, "requests": { "hashes": [ @@ -853,11 +811,11 @@ }, "sphinxcontrib-applehelp": { "hashes": [ - "sha256:83749f09f6ac843b8cb685277dbc818a8bf2d76cc19602699094fe9a74db529e", - "sha256:ba0f2a22e6eeada8da6428d0d520215ee8864253f32facf958cca81e426f661d" + "sha256:29d341f67fb0f6f586b23ad80e072c8e6ad0b48417db2bde114a4c9746feb228", + "sha256:828f867945bbe39817c210a1abfd1bc4895c8b73fcaade56d45357a348a07d7e" ], "markers": "python_version >= '3.8'", - "version": "==1.0.3" + "version": "==1.0.4" }, "sphinxcontrib-devhelp": { "hashes": [ @@ -869,11 +827,11 @@ }, "sphinxcontrib-htmlhelp": { "hashes": [ - "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07", - "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2" + "sha256:0cbdd302815330058422b98a113195c9249825d681e18f11e8b1f78a2f11efff", + "sha256:c38cb46dccf316c79de6e5515e1770414b797162b23cd3d06e67020e1d2a6903" ], - "markers": "python_version >= '3.6'", - "version": "==2.0.0" + "markers": "python_version >= '3.8'", + "version": "==2.0.1" }, "sphinxcontrib-jsmath": { "hashes": [ @@ -907,107 +865,102 @@ "markers": "python_version >= '3.5'", "version": "==0.4.3" }, - "tomli": { - "hashes": [ - "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", - "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f" - ], - "markers": "python_version < '3.11'", - "version": "==2.0.1" - }, "tomlkit": { "hashes": [ - "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b", - "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73" - ], - "markers": "python_version >= '3.6'", - "version": "==0.11.6" - }, - "typing-extensions": { - "hashes": [ - "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa", - "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e" + "sha256:5325463a7da2ef0c6bbfefb62a3dc883aebe679984709aee32a317907d0a8d3c", + "sha256:f392ef70ad87a672f02519f99967d28a4d3047133e2d1df936511465fbb3791d" ], "markers": "python_version >= '3.7'", - "version": "==4.4.0" + "version": "==0.11.7" }, "urllib3": { "hashes": [ - "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72", - "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1" + "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305", + "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5'", - "version": "==1.26.14" + "version": "==1.26.15" }, "wrapt": { "hashes": [ - "sha256:00b6d4ea20a906c0ca56d84f93065b398ab74b927a7a3dbd470f6fc503f95dc3", - "sha256:01c205616a89d09827986bc4e859bcabd64f5a0662a7fe95e0d359424e0e071b", - "sha256:02b41b633c6261feff8ddd8d11c711df6842aba629fdd3da10249a53211a72c4", - "sha256:07f7a7d0f388028b2df1d916e94bbb40624c59b48ecc6cbc232546706fac74c2", - "sha256:11871514607b15cfeb87c547a49bca19fde402f32e2b1c24a632506c0a756656", - "sha256:1b376b3f4896e7930f1f772ac4b064ac12598d1c38d04907e696cc4d794b43d3", - "sha256:21ac0156c4b089b330b7666db40feee30a5d52634cc4560e1905d6529a3897ff", - "sha256:257fd78c513e0fb5cdbe058c27a0624c9884e735bbd131935fd49e9fe719d310", - "sha256:2b39d38039a1fdad98c87279b48bc5dce2c0ca0d73483b12cb72aa9609278e8a", - "sha256:2cf71233a0ed05ccdabe209c606fe0bac7379fdcf687f39b944420d2a09fdb57", - "sha256:2fe803deacd09a233e4762a1adcea5db5d31e6be577a43352936179d14d90069", - "sha256:3232822c7d98d23895ccc443bbdf57c7412c5a65996c30442ebe6ed3df335383", - "sha256:34aa51c45f28ba7f12accd624225e2b1e5a3a45206aa191f6f9aac931d9d56fe", - "sha256:36f582d0c6bc99d5f39cd3ac2a9062e57f3cf606ade29a0a0d6b323462f4dd87", - "sha256:380a85cf89e0e69b7cfbe2ea9f765f004ff419f34194018a6827ac0e3edfed4d", - "sha256:40e7bc81c9e2b2734ea4bc1aceb8a8f0ceaac7c5299bc5d69e37c44d9081d43b", - "sha256:43ca3bbbe97af00f49efb06e352eae40434ca9d915906f77def219b88e85d907", - "sha256:4fcc4649dc762cddacd193e6b55bc02edca674067f5f98166d7713b193932b7f", - "sha256:5a0f54ce2c092aaf439813735584b9537cad479575a09892b8352fea5e988dc0", - "sha256:5a9a0d155deafd9448baff28c08e150d9b24ff010e899311ddd63c45c2445e28", - "sha256:5b02d65b9ccf0ef6c34cba6cf5bf2aab1bb2f49c6090bafeecc9cd81ad4ea1c1", - "sha256:60db23fa423575eeb65ea430cee741acb7c26a1365d103f7b0f6ec412b893853", - "sha256:642c2e7a804fcf18c222e1060df25fc210b9c58db7c91416fb055897fc27e8cc", - "sha256:6a9a25751acb379b466ff6be78a315e2b439d4c94c1e99cb7266d40a537995d3", - "sha256:6b1a564e6cb69922c7fe3a678b9f9a3c54e72b469875aa8018f18b4d1dd1adf3", - "sha256:6d323e1554b3d22cfc03cd3243b5bb815a51f5249fdcbb86fda4bf62bab9e164", - "sha256:6e743de5e9c3d1b7185870f480587b75b1cb604832e380d64f9504a0535912d1", - "sha256:709fe01086a55cf79d20f741f39325018f4df051ef39fe921b1ebe780a66184c", - "sha256:7b7c050ae976e286906dd3f26009e117eb000fb2cf3533398c5ad9ccc86867b1", - "sha256:7d2872609603cb35ca513d7404a94d6d608fc13211563571117046c9d2bcc3d7", - "sha256:7ef58fb89674095bfc57c4069e95d7a31cfdc0939e2a579882ac7d55aadfd2a1", - "sha256:80bb5c256f1415f747011dc3604b59bc1f91c6e7150bd7db03b19170ee06b320", - "sha256:81b19725065dcb43df02b37e03278c011a09e49757287dca60c5aecdd5a0b8ed", - "sha256:833b58d5d0b7e5b9832869f039203389ac7cbf01765639c7309fd50ef619e0b1", - "sha256:88bd7b6bd70a5b6803c1abf6bca012f7ed963e58c68d76ee20b9d751c74a3248", - "sha256:8ad85f7f4e20964db4daadcab70b47ab05c7c1cf2a7c1e51087bfaa83831854c", - "sha256:8c0ce1e99116d5ab21355d8ebe53d9460366704ea38ae4d9f6933188f327b456", - "sha256:8d649d616e5c6a678b26d15ece345354f7c2286acd6db868e65fcc5ff7c24a77", - "sha256:903500616422a40a98a5a3c4ff4ed9d0066f3b4c951fa286018ecdf0750194ef", - "sha256:9736af4641846491aedb3c3f56b9bc5568d92b0692303b5a305301a95dfd38b1", - "sha256:988635d122aaf2bdcef9e795435662bcd65b02f4f4c1ae37fbee7401c440b3a7", - "sha256:9cca3c2cdadb362116235fdbd411735de4328c61425b0aa9f872fd76d02c4e86", - "sha256:9e0fd32e0148dd5dea6af5fee42beb949098564cc23211a88d799e434255a1f4", - "sha256:9f3e6f9e05148ff90002b884fbc2a86bd303ae847e472f44ecc06c2cd2fcdb2d", - "sha256:a85d2b46be66a71bedde836d9e41859879cc54a2a04fad1191eb50c2066f6e9d", - "sha256:a9a52172be0b5aae932bef82a79ec0a0ce87288c7d132946d645eba03f0ad8a8", - "sha256:aa31fdcc33fef9eb2552cbcbfee7773d5a6792c137b359e82879c101e98584c5", - "sha256:b014c23646a467558be7da3d6b9fa409b2c567d2110599b7cf9a0c5992b3b471", - "sha256:b21bb4c09ffabfa0e85e3a6b623e19b80e7acd709b9f91452b8297ace2a8ab00", - "sha256:b5901a312f4d14c59918c221323068fad0540e34324925c8475263841dbdfe68", - "sha256:b9b7a708dd92306328117d8c4b62e2194d00c365f18eff11a9b53c6f923b01e3", - "sha256:d1967f46ea8f2db647c786e78d8cc7e4313dbd1b0aca360592d8027b8508e24d", - "sha256:d52a25136894c63de15a35bc0bdc5adb4b0e173b9c0d07a2be9d3ca64a332735", - "sha256:d77c85fedff92cf788face9bfa3ebaa364448ebb1d765302e9af11bf449ca36d", - "sha256:d79d7d5dc8a32b7093e81e97dad755127ff77bcc899e845f41bf71747af0c569", - "sha256:dbcda74c67263139358f4d188ae5faae95c30929281bc6866d00573783c422b7", - "sha256:ddaea91abf8b0d13443f6dac52e89051a5063c7d014710dcb4d4abb2ff811a59", - "sha256:dee0ce50c6a2dd9056c20db781e9c1cfd33e77d2d569f5d1d9321c641bb903d5", - "sha256:dee60e1de1898bde3b238f18340eec6148986da0455d8ba7848d50470a7a32fb", - "sha256:e2f83e18fe2f4c9e7db597e988f72712c0c3676d337d8b101f6758107c42425b", - "sha256:e3fb1677c720409d5f671e39bac6c9e0e422584e5f518bfd50aa4cbbea02433f", - "sha256:ee2b1b1769f6707a8a445162ea16dddf74285c3964f605877a20e38545c3c462", - "sha256:ee6acae74a2b91865910eef5e7de37dc6895ad96fa23603d1d27ea69df545015", - "sha256:ef3f72c9666bba2bab70d2a8b79f2c6d2c1a42a7f7e2b0ec83bb2f9e383950af" - ], - "markers": "python_version < '3.11'", - "version": "==1.14.1" + "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0", + "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420", + "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a", + "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c", + "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079", + "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923", + "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f", + "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1", + "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8", + "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86", + "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0", + "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364", + "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e", + "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c", + "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e", + "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c", + "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727", + "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff", + "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e", + "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29", + "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7", + "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72", + "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475", + "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a", + "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317", + "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2", + "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd", + "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640", + "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98", + "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248", + "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e", + "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d", + "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec", + "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1", + "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e", + "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9", + "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92", + "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb", + "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094", + "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46", + "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29", + "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd", + "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705", + "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8", + "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975", + "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb", + "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e", + "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b", + "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418", + "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019", + "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1", + "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba", + "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6", + "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2", + "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3", + "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7", + "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752", + "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416", + "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f", + "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1", + "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc", + "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145", + "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee", + "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a", + "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7", + "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b", + "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653", + "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0", + "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90", + "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29", + "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6", + "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034", + "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09", + "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559", + "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639" + ], + "markers": "python_version >= '3.11'", + "version": "==1.15.0" } } } From 8af14e4ee344ebf90b03c67745ad3624adeba35b Mon Sep 17 00:00:00 2001 From: Florian Eitel Date: Sat, 14 Jan 2023 13:00:12 +0100 Subject: [PATCH 42/99] Update to Django 3.0 --- Pipfile | 2 +- Pipfile.lock | 30 +++++++++++++++++++++++------- requirements.d/all.txt | 2 +- setup.py | 2 +- src/nsupdate/accounts/models.py | 5 +---- src/nsupdate/main/models.py | 10 +--------- src/nsupdate/urls.py | 4 ++-- 7 files changed, 30 insertions(+), 25 deletions(-) diff --git a/Pipfile b/Pipfile index b0deca6b..169081fb 100644 --- a/Pipfile +++ b/Pipfile @@ -6,7 +6,7 @@ name = "pypi" [packages] dnspython = "*" netaddr = "*" -django = "~=2.2.0" +django = "~=3.0.0" django-bootstrap-form = "*" django-referrer-policy = "*" django-registration-redux = "*" diff --git a/Pipfile.lock b/Pipfile.lock index f9813000..f675183e 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "a1d9559f03f1a703f32b3f898105cb7033f741c4da5d0f2cc30c36d6e2ba8abb" + "sha256": "c8f86d041c09eb72c87e7a4ced177d70935d23f7123534add1c867a7c7feca06" }, "pipfile-spec": 6, "requires": { @@ -16,6 +16,14 @@ ] }, "default": { + "asgiref": { + "hashes": [ + "sha256:71e68008da809b957b7ee4b43dbccff33d1b23519fb8344e33f049897077afac", + "sha256:9567dfe7bd8d3c8c892227827c41cce860b368104c3431da67a0c5a65a949506" + ], + "markers": "python_version >= '3.7'", + "version": "==3.6.0" + }, "certifi": { "hashes": [ "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3", @@ -209,11 +217,11 @@ }, "django": { "hashes": [ - "sha256:0200b657afbf1bc08003845ddda053c7641b9b24951e52acd51f6abda33a7413", - "sha256:365429d07c1336eb42ba15aa79f45e1c13a0b04d5c21569e7d596696418a6a45" + "sha256:9bc7aa619ed878fedba62ce139abe663a147dccfd20e907725ec11e02a1ca225", + "sha256:d58d8394036db75a81896037d757357e79406e8f68816c3e8a28721c1d9d4c11" ], "index": "pypi", - "version": "==2.2.28" + "version": "==3.0.14" }, "django-bootstrap-form": { "hashes": [ @@ -396,6 +404,14 @@ "markers": "python_version >= '3.6'", "version": "==0.7.13" }, + "asgiref": { + "hashes": [ + "sha256:71e68008da809b957b7ee4b43dbccff33d1b23519fb8344e33f049897077afac", + "sha256:9567dfe7bd8d3c8c892227827c41cce860b368104c3431da67a0c5a65a949506" + ], + "markers": "python_version >= '3.7'", + "version": "==3.6.0" + }, "astroid": { "hashes": [ "sha256:6e61b85c891ec53b07471aec5878f4ac6446a41e590ede0f2ce095f39f7d49dd", @@ -511,11 +527,11 @@ }, "django": { "hashes": [ - "sha256:0200b657afbf1bc08003845ddda053c7641b9b24951e52acd51f6abda33a7413", - "sha256:365429d07c1336eb42ba15aa79f45e1c13a0b04d5c21569e7d596696418a6a45" + "sha256:9bc7aa619ed878fedba62ce139abe663a147dccfd20e907725ec11e02a1ca225", + "sha256:d58d8394036db75a81896037d757357e79406e8f68816c3e8a28721c1d9d4c11" ], "index": "pypi", - "version": "==2.2.28" + "version": "==3.0.14" }, "django-debug-toolbar": { "hashes": [ diff --git a/requirements.d/all.txt b/requirements.d/all.txt index 65eb78fc..6868737f 100644 --- a/requirements.d/all.txt +++ b/requirements.d/all.txt @@ -1,7 +1,7 @@ # packages always needed dnspython netaddr -django~=2.2.0 +django~=3.0.0 django-bootstrap-form django-referrer-policy django-registration-redux diff --git a/setup.py b/setup.py index 262e5dbe..d027232a 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ install_requires=[ 'dnspython', 'netaddr', - 'django>=2.2.0', + 'django>=3.0.0', 'django-bootstrap-form', 'django-referrer-policy', 'django-registration-redux', diff --git a/src/nsupdate/accounts/models.py b/src/nsupdate/accounts/models.py index 50e35c6b..4c29a364 100644 --- a/src/nsupdate/accounts/models.py +++ b/src/nsupdate/accounts/models.py @@ -9,11 +9,8 @@ from django.contrib.auth.signals import user_logged_in from django.utils.translation import ugettext_lazy as _ from django.utils.translation import LANGUAGE_SESSION_KEY -from django.utils.encoding import python_2_unicode_compatible -from django.utils.six import text_type -@python_2_unicode_compatible class UserProfile(models.Model): """ stuff we need additionally to what Django stores in User model @@ -25,7 +22,7 @@ class UserProfile(models.Model): verbose_name=_('language')) def __str__(self): - return u"profile for %s" % text_type(self.user) + return u"profile for %s" % str(self.user) class Meta: verbose_name = _('user profile') diff --git a/src/nsupdate/main/models.py b/src/nsupdate/main/models.py index 9a4485dd..4092981a 100644 --- a/src/nsupdate/main/models.py +++ b/src/nsupdate/main/models.py @@ -18,8 +18,6 @@ from django.contrib.auth.hashers import make_password from django.utils.timezone import now from django.utils.translation import ugettext_lazy as _ -from django.utils.encoding import python_2_unicode_compatible -from django.utils.six import text_type from . import dnstools @@ -34,7 +32,6 @@ def result_fmt(msg): return msg[:RESULT_MSG_LEN] -@python_2_unicode_compatible class BlacklistedHost(models.Model): name_re = models.CharField( _('name RegEx'), @@ -81,7 +78,6 @@ def host_blacklist_validator(value): UPDATE_ALGORITHM_CHOICES = [(k, k) for k in UPDATE_ALGORITHMS] -@python_2_unicode_compatible class Domain(models.Model): name = models.CharField( _("name"), @@ -154,7 +150,6 @@ class Meta: ordering = ('name',) -@python_2_unicode_compatible class Host(models.Model): name = models.CharField( _("name"), @@ -373,7 +368,6 @@ def post_save_host(sender, **kwargs): post_save.connect(post_save_host, sender=Host) -@python_2_unicode_compatible class RelatedHost(models.Model): # host addr = network_of_main_host + interface_id name = models.CharField( @@ -414,7 +408,7 @@ class RelatedHost(models.Model): verbose_name=_("main host")) def __str__(self): - return u"%s.%s" % (self.name, text_type(self.main_host)) + return u"%s.%s" % (self.name, str(self.main_host)) class Meta(object): unique_together = (('name', 'main_host'),) @@ -447,7 +441,6 @@ def get_ipv6(self): pre_delete.connect(pre_delete_host, sender=RelatedHost) -@python_2_unicode_compatible class ServiceUpdater(models.Model): name = models.CharField( _("name"), @@ -491,7 +484,6 @@ class Meta(object): verbose_name_plural = _('service updaters') -@python_2_unicode_compatible class ServiceUpdaterHostConfig(models.Model): service = models.ForeignKey(ServiceUpdater, on_delete=models.CASCADE, verbose_name=_("service")) diff --git a/src/nsupdate/urls.py b/src/nsupdate/urls.py index e0526ee4..6a7b2e02 100644 --- a/src/nsupdate/urls.py +++ b/src/nsupdate/urls.py @@ -5,7 +5,7 @@ from django.conf import settings from django.conf.urls import include, url from django.contrib import admin -from django.contrib.auth import views as auth_views +from django.contrib.auth import login from django.conf.urls.static import static from django.http import HttpResponse from django.views.generic import RedirectView @@ -20,7 +20,7 @@ def remember_me_login(request, *args, **kw): if request.method == 'POST': if request.POST.get('remember_me'): request.session.set_expiry(settings.SESSION_COOKIE_AGE) - return auth_views.login(request, *args, **kw) + return login(request, *args, **kw) urlpatterns = [ From 85ebbb8e8b8272695b99f1b20c9e775222126072 Mon Sep 17 00:00:00 2001 From: Florian Eitel Date: Sat, 14 Jan 2023 13:02:34 +0100 Subject: [PATCH 43/99] Update to Django 3.1 --- Pipfile | 2 +- Pipfile.lock | 14 +++++++------- requirements.d/all.txt | 2 +- setup.py | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/Pipfile b/Pipfile index 169081fb..028a7abc 100644 --- a/Pipfile +++ b/Pipfile @@ -6,7 +6,7 @@ name = "pypi" [packages] dnspython = "*" netaddr = "*" -django = "~=3.0.0" +django = "~=3.1.0" django-bootstrap-form = "*" django-referrer-policy = "*" django-registration-redux = "*" diff --git a/Pipfile.lock b/Pipfile.lock index f675183e..69ee3bb8 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "c8f86d041c09eb72c87e7a4ced177d70935d23f7123534add1c867a7c7feca06" + "sha256": "068fc47382ef1d858d52c0688678e8a15eab6ebf9b377456e11f575055ecfe46" }, "pipfile-spec": 6, "requires": { @@ -217,11 +217,11 @@ }, "django": { "hashes": [ - "sha256:9bc7aa619ed878fedba62ce139abe663a147dccfd20e907725ec11e02a1ca225", - "sha256:d58d8394036db75a81896037d757357e79406e8f68816c3e8a28721c1d9d4c11" + "sha256:0fabc786489af16ad87a8c170ba9d42bfd23f7b699bd5ef05675864e8d012859", + "sha256:72a4a5a136a214c39cf016ccdd6b69e2aa08c7479c66d93f3a9b5e4bb9d8a347" ], "index": "pypi", - "version": "==3.0.14" + "version": "==3.1.14" }, "django-bootstrap-form": { "hashes": [ @@ -527,11 +527,11 @@ }, "django": { "hashes": [ - "sha256:9bc7aa619ed878fedba62ce139abe663a147dccfd20e907725ec11e02a1ca225", - "sha256:d58d8394036db75a81896037d757357e79406e8f68816c3e8a28721c1d9d4c11" + "sha256:0fabc786489af16ad87a8c170ba9d42bfd23f7b699bd5ef05675864e8d012859", + "sha256:72a4a5a136a214c39cf016ccdd6b69e2aa08c7479c66d93f3a9b5e4bb9d8a347" ], "index": "pypi", - "version": "==3.0.14" + "version": "==3.1.14" }, "django-debug-toolbar": { "hashes": [ diff --git a/requirements.d/all.txt b/requirements.d/all.txt index 6868737f..1af602e8 100644 --- a/requirements.d/all.txt +++ b/requirements.d/all.txt @@ -1,7 +1,7 @@ # packages always needed dnspython netaddr -django~=3.0.0 +django~=3.1.0 django-bootstrap-form django-referrer-policy django-registration-redux diff --git a/setup.py b/setup.py index d027232a..d1155120 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ install_requires=[ 'dnspython', 'netaddr', - 'django>=3.0.0', + 'django>=3.1.0', 'django-bootstrap-form', 'django-referrer-policy', 'django-registration-redux', From 6351d0ef151556c9a7ab7e00236a3f9c3d68b83f Mon Sep 17 00:00:00 2001 From: Florian Eitel Date: Sat, 14 Jan 2023 13:05:22 +0100 Subject: [PATCH 44/99] Update to Django 3.2 --- Pipfile | 2 +- Pipfile.lock | 32 ++++++++++++++++---------------- requirements.d/all.txt | 2 +- setup.py | 2 +- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/Pipfile b/Pipfile index 028a7abc..817d7f4e 100644 --- a/Pipfile +++ b/Pipfile @@ -6,7 +6,7 @@ name = "pypi" [packages] dnspython = "*" netaddr = "*" -django = "~=3.1.0" +django = "~=3.2.0" django-bootstrap-form = "*" django-referrer-policy = "*" django-registration-redux = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 69ee3bb8..54938464 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "068fc47382ef1d858d52c0688678e8a15eab6ebf9b377456e11f575055ecfe46" + "sha256": "9156c112ac69696e641f166993b2c500a53de3e891c4beab05abc9bf51e99428" }, "pipfile-spec": 6, "requires": { @@ -217,11 +217,11 @@ }, "django": { "hashes": [ - "sha256:0fabc786489af16ad87a8c170ba9d42bfd23f7b699bd5ef05675864e8d012859", - "sha256:72a4a5a136a214c39cf016ccdd6b69e2aa08c7479c66d93f3a9b5e4bb9d8a347" + "sha256:08208dfe892eb64fff073ca743b3b952311104f939e7f6dae954fe72dcc533ba", + "sha256:4d492d9024c7b3dfababf49f94511ab6a58e2c9c3c7207786f1ba4eb77750706" ], "index": "pypi", - "version": "==3.1.14" + "version": "==3.2.18" }, "django-bootstrap-form": { "hashes": [ @@ -232,11 +232,11 @@ }, "django-extensions": { "hashes": [ - "sha256:28e1e1bf49f0e00307ba574d645b0af3564c981a6dfc87209d48cb98f77d0b1a", - "sha256:9238b9e016bb0009d621e05cf56ea8ce5cce9b32e91ad2026996a7377ca28069" + "sha256:2a4f4d757be2563cd1ff7cfdf2e57468f5f931cc88b23cf82ca75717aae504a4", + "sha256:421464be390289513f86cb5e18eb43e5dc1de8b4c27ba9faa3b91261b0d67e09" ], "index": "pypi", - "version": "==3.1.5" + "version": "==3.2.1" }, "django-referrer-policy": { "hashes": [ @@ -356,11 +356,11 @@ }, "social-auth-app-django": { "hashes": [ - "sha256:e4e9eb2c8c1258f443d4f1c04cb6693c0303e8ee2fa0981ba1b371546195a939", - "sha256:fdf1dc6bcb8b457001d88d2279f637bc9955f1aedf750c627784bb5104601b1c" + "sha256:0347ca4cd23ea9d15a665da9d22950552fb66b95600e6c2ebae38ca883b3a4ed", + "sha256:4a5dae406f3874b4003708ff120c02cb1a4c8eeead56cd163646347309fcd0f8" ], "index": "pypi", - "version": "==5.1.0" + "version": "==5.2.0" }, "social-auth-core": { "hashes": [ @@ -527,19 +527,19 @@ }, "django": { "hashes": [ - "sha256:0fabc786489af16ad87a8c170ba9d42bfd23f7b699bd5ef05675864e8d012859", - "sha256:72a4a5a136a214c39cf016ccdd6b69e2aa08c7479c66d93f3a9b5e4bb9d8a347" + "sha256:08208dfe892eb64fff073ca743b3b952311104f939e7f6dae954fe72dcc533ba", + "sha256:4d492d9024c7b3dfababf49f94511ab6a58e2c9c3c7207786f1ba4eb77750706" ], "index": "pypi", - "version": "==3.1.14" + "version": "==3.2.18" }, "django-debug-toolbar": { "hashes": [ - "sha256:644bbd5c428d3283aa9115722471769cac1bec189edf3a0c855fd8ff870375a9", - "sha256:6b633b6cfee24f232d73569870f19aa86c819d750e7f3e833f2344a9eb4b4409" + "sha256:89619f6e0ea1057dca47bfc429ed99b237ef70074dabc065a7faa5f00e1459cf", + "sha256:bad339d68520652ddc1580c76f136fcbc3e020fd5ed96510a89a02ec81bb3fb1" ], "index": "pypi", - "version": "==3.2.4" + "version": "==4.0.0" }, "docutils": { "hashes": [ diff --git a/requirements.d/all.txt b/requirements.d/all.txt index 1af602e8..69120ac3 100644 --- a/requirements.d/all.txt +++ b/requirements.d/all.txt @@ -1,7 +1,7 @@ # packages always needed dnspython netaddr -django~=3.1.0 +django~=3.2.0 django-bootstrap-form django-referrer-policy django-registration-redux diff --git a/setup.py b/setup.py index d1155120..1db0bd5b 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ install_requires=[ 'dnspython', 'netaddr', - 'django>=3.1.0', + 'django>=3.2.0', 'django-bootstrap-form', 'django-referrer-policy', 'django-registration-redux', From bb88049f1d4de80a333b862ec5286d3446e1b58b Mon Sep 17 00:00:00 2001 From: Florian Eitel Date: Sat, 14 Jan 2023 20:46:50 +0100 Subject: [PATCH 45/99] Add testing in docker I can't run tests in travis and due to the bind9 dependency it's difficult to run on the local machine. Docker is tricky due to changing the nameserver to 127.0.0.1 but with the right parameter it works. There are still a handful of tests failing. I couldn't figure out why yet. --- DEVELOPMENT.md | 7 +++ scripts/docker/Dockerfile | 9 ++++ scripts/docker/bind/named.conf.local | 49 +++++++++++++++++++ scripts/docker/bind/zones/nsupdate.info | 20 ++++++++ scripts/docker/bind/zones/tests.nsupdate.info | 18 +++++++ scripts/docker/test.sh | 12 +++++ 6 files changed, 115 insertions(+) create mode 100644 scripts/docker/Dockerfile create mode 100644 scripts/docker/bind/named.conf.local create mode 100644 scripts/docker/bind/zones/nsupdate.info create mode 100644 scripts/docker/bind/zones/tests.nsupdate.info create mode 100755 scripts/docker/test.sh diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index de22b9fa..1e878231 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -59,3 +59,10 @@ NOTE: This is also needed before development because the command generates `./sr Run [pylint](https://pylint.readthedocs.io/en/stable/) in error-only mode to check any problems: `pipenv run pylint src/nsupdate` NOTE: The project does not use pylint for formatting. Disabling the `errors-only` mode in `.pylintrc` will show a lot of warnings. + +# Run tests + +Tests need to run inside Docker because they depend on specific bind9 config on 127.0.0.1:53. + +1. Build the docker image using: `docker build -t nsupdate scripts/docker/` once +2. Then run tests via `docker run --dns 127.0.0.1 -v $PWD:/app nsupdate` diff --git a/scripts/docker/Dockerfile b/scripts/docker/Dockerfile new file mode 100644 index 00000000..9d08a601 --- /dev/null +++ b/scripts/docker/Dockerfile @@ -0,0 +1,9 @@ +FROM python:3.11-alpine +WORKDIR /app + +RUN apk add bind git +COPY bind/named.conf.local /etc/bind/named.conf.local +COPY bind/zones/ /var/lib/bind/pri/ +RUN chown named -R /var/lib/bind/pri/ + +CMD /app/scripts/docker/test.sh diff --git a/scripts/docker/bind/named.conf.local b/scripts/docker/bind/named.conf.local new file mode 100644 index 00000000..77a78b08 --- /dev/null +++ b/scripts/docker/bind/named.conf.local @@ -0,0 +1,49 @@ +// +// Do any local configuration here +// + +key "nsupdate.info." { + algorithm hmac-sha512; + secret "YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ=="; +}; + +key "tests.nsupdate.info." { + algorithm hmac-sha512; + secret "YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ=="; +}; + +zone "nsupdate.info" { + type master; + file "/var/lib/bind/pri/nsupdate.info"; + update-policy { + // these "deny" entries are needed for the service domain, + // if you add another domain, you may want to check the need + // for other "deny" entries if the zone is not fully available. + // we don't allow updates to the infrastructure hosts: + deny nsupdate.info. name nsupdate.info; + deny nsupdate.info. name www.nsupdate.info; + deny nsupdate.info. name ipv4.nsupdate.info; + deny nsupdate.info. name ipv6.nsupdate.info; + // this host is for testing if the nameserver is configured correctly and reachable + grant nsupdate.info. name connectivity-test.nsupdate.info A; + // but we allow updates to any other host: + grant nsupdate.info. subdomain nsupdate.info; + }; +}; + +zone "tests.nsupdate.info" { + type master; + file "/var/lib/bind/pri/tests.nsupdate.info"; + update-policy { + // these "deny" entries are needed for the service domain, + // if you add another domain, you may want to check the need + // for other "deny" entries if the zone is not fully available. + // we don't allow updates to the infrastructure hosts: + deny tests.nsupdate.info. name tests.nsupdate.info; + deny tests.nsupdate.info. name www.tests.nsupdate.info; + deny tests.nsupdate.info. name ipv4.tests.nsupdate.info; + deny tests.nsupdate.info. name ipv6.tests.nsupdate.info; + // but we allow updates to any other host: + grant tests.nsupdate.info. subdomain tests.nsupdate.info; + }; +}; diff --git a/scripts/docker/bind/zones/nsupdate.info b/scripts/docker/bind/zones/nsupdate.info new file mode 100644 index 00000000..f4764112 --- /dev/null +++ b/scripts/docker/bind/zones/nsupdate.info @@ -0,0 +1,20 @@ +$ORIGIN . +$TTL 3600 ; 1 hour +nsupdate.info IN SOA ns1.nsupdate.info. root.nsupdate.info. ( + 2016081401 ; serial + 7200 ; refresh (2 hours) + 1800 ; retry (30 minutes) + 604800 ; expire (1 week) + 60 ; minimum (1 minute) + ) + NS 127.0.0.1. + A 127.0.0.1 + AAAA ::1 + +$ORIGIN nsupdate.info. +$TTL 3600 ; 1 hour +ipv4 A 127.0.0.1 +ipv6 AAAA ::1 +www A 127.0.0.1 + AAAA ::1 + A 127.0.0.1 diff --git a/scripts/docker/bind/zones/tests.nsupdate.info b/scripts/docker/bind/zones/tests.nsupdate.info new file mode 100644 index 00000000..61277d42 --- /dev/null +++ b/scripts/docker/bind/zones/tests.nsupdate.info @@ -0,0 +1,18 @@ +$ORIGIN . +$TTL 3600 ; 1 hour +tests.nsupdate.info IN SOA ns1.tests.nsupdate.info. root.tests.nsupdate.info. ( + 2016081401 ; serial + 7200 ; refresh (2 hours) + 1800 ; retry (30 minutes) + 604800 ; expire (1 week) + 60 ; minimum (1 minute) + ) + NS 127.0.0.1. + A 127.0.0.1 + AAAA ::1 + +$ORIGIN tests.nsupdate.info. +ipv4 A 1.2.3.4 +ipv6 AAAA ::1 +www A 1.2.3.4 + AAAA ::1 diff --git a/scripts/docker/test.sh b/scripts/docker/test.sh new file mode 100755 index 00000000..02787b62 --- /dev/null +++ b/scripts/docker/test.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +set -euxo pipefail + +cd /tmp && named -g -u named -c /etc/bind/named.conf.local & + +cd /app +pip install -e . +pip install -r requirements.txt + +pylint src/nsupdate +pytest src/nsupdate From a22f98e9f332b7636660d251ba9f41a9317edbf3 Mon Sep 17 00:00:00 2001 From: Florian Eitel Date: Sun, 15 Jan 2023 19:18:07 +0100 Subject: [PATCH 46/99] Update dependency font-awesome to v6.3.0 --- src/nsupdate/templates/base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nsupdate/templates/base.html b/src/nsupdate/templates/base.html index c48b4cd8..7120650c 100644 --- a/src/nsupdate/templates/base.html +++ b/src/nsupdate/templates/base.html @@ -10,7 +10,7 @@ {% block title %}{{ WWW_HOST }}{% endblock %} - + From 8859fb1e0b9caff91234be714109cdaf8be1cfd3 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Wed, 5 Apr 2023 22:59:38 +0200 Subject: [PATCH 47/99] docs: fix typos, phrasing --- DEVELOPMENT.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md index 1e878231..6bfbc254 100644 --- a/DEVELOPMENT.md +++ b/DEVELOPMENT.md @@ -33,7 +33,7 @@ pipenv requirements --exclude-markers > requirements.d/all.txt pipenv requirements --exclude-markers --dev-only > requirements.d/dev.txt ``` -Verify the updated dependencies don't include any security vulnerabilities +Verify the updated dependencies don't include any security vulnerabilities: ``` pipenv check @@ -41,8 +41,8 @@ pipenv check # Build locally -1. Install `build` (see [docs](https://packaging.python.org/en/latest/tutorials/packaging-projects/#generating-distribution-archives) for example via `pacman -S python-build` on ArchLinux -2. Afterwards run the command to generate pip packgases in `dist/`: `pyproject-build` +1. Install `build` (see [docs](https://packaging.python.org/en/latest/tutorials/packaging-projects/#generating-distribution-archives) for example), e.g. via `pacman -S python-build` on ArchLinux +2. Afterwards, run the command to generate pip packages in `dist/`: `pyproject-build` NOTE: This is also needed before development because the command generates `./src/nsupdate/_version.py`. @@ -62,7 +62,8 @@ NOTE: The project does not use pylint for formatting. Disabling the `errors-only # Run tests -Tests need to run inside Docker because they depend on specific bind9 config on 127.0.0.1:53. +Tests need to run inside Docker because they depend on a bind9 nameserver +running a specific configuration on 127.0.0.1:53. -1. Build the docker image using: `docker build -t nsupdate scripts/docker/` once +1. Build the docker image once, using: `docker build -t nsupdate scripts/docker/` 2. Then run tests via `docker run --dns 127.0.0.1 -v $PWD:/app nsupdate` From f1040fefc25fcd487505956b4e5d1804d7f72a36 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Wed, 5 Apr 2023 23:55:07 +0200 Subject: [PATCH 48/99] mv DEVELOPMENT.md docs/project.rst --- DEVELOPMENT.md | 69 ------------------------------------- docs/project.rst | 90 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 90 insertions(+), 69 deletions(-) delete mode 100644 DEVELOPMENT.md diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md deleted file mode 100644 index 6bfbc254..00000000 --- a/DEVELOPMENT.md +++ /dev/null @@ -1,69 +0,0 @@ -# Dependency management - -Get [Pipenv](https://pipenv.pypa.io/en/latest/installation/) and checkout the [Pipenv Command reference](https://pipenv.pypa.io/en/latest/commands/) - -## Install new dependencies - -https://pipenv.pypa.io/en/latest/commands/#install - -``` -pipenv install mypkg -``` - -## Spawn a shell with correct python paths - -``` -pipenv shell -``` - -Exit the shell with `exit` - -## Dependency maintenance - -### Update requirements.txt files including transitive dependencies - -``` -pipenv update -``` - -NOTE: This is not done today and only a suggestion. - -``` -pipenv requirements --exclude-markers > requirements.d/all.txt -pipenv requirements --exclude-markers --dev-only > requirements.d/dev.txt -``` - -Verify the updated dependencies don't include any security vulnerabilities: - -``` -pipenv check -``` - -# Build locally - -1. Install `build` (see [docs](https://packaging.python.org/en/latest/tutorials/packaging-projects/#generating-distribution-archives) for example), e.g. via `pacman -S python-build` on ArchLinux -2. Afterwards, run the command to generate pip packages in `dist/`: `pyproject-build` - -NOTE: This is also needed before development because the command generates `./src/nsupdate/_version.py`. - -# Run locally - -1. Install dependencies `pipenv install --dev` -2. Generate `src/nsupdate/_version.py` file by running `pyproject-build` -2. Create database using `pipenv run ./manage.py migrate` -3. Create a superuser with `pipenv run ./manage.py createsuperuser` -4. Run the server with `pipenv run ./manage.py runserver` - -# Lint - -Run [pylint](https://pylint.readthedocs.io/en/stable/) in error-only mode to check any problems: `pipenv run pylint src/nsupdate` - -NOTE: The project does not use pylint for formatting. Disabling the `errors-only` mode in `.pylintrc` will show a lot of warnings. - -# Run tests - -Tests need to run inside Docker because they depend on a bind9 nameserver -running a specific configuration on 127.0.0.1:53. - -1. Build the docker image once, using: `docker build -t nsupdate scripts/docker/` -2. Then run tests via `docker run --dns 127.0.0.1 -v $PWD:/app nsupdate` diff --git a/docs/project.rst b/docs/project.rst index 0a96e037..c83a9264 100644 --- a/docs/project.rst +++ b/docs/project.rst @@ -64,3 +64,93 @@ Or even better: if you use git, fork our repo, make your changes and submit a pu For small fixes, you can even just edit the files on github (github will then fork, change and submit a pull request automatically). + + +Dependency management +===================== + +Get `Pipenv `_ and checkout the +`Pipenv Command Reference `_. + +Install new dependencies +------------------------ + +See `the pipenv docs `_. + +:: + + pipenv install mypkg + + +Spawn a shell with correct python paths +--------------------------------------- + +:: + + pipenv shell + +Exit the shell with ``exit``. + +Dependency maintenance +---------------------- + +Update requirements.txt files including transitive dependencies +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +:: + + pipenv update + +NOTE: This is not done today and only a suggestion. + +:: + + pipenv requirements --exclude-markers > requirements.d/all.txt + pipenv requirements --exclude-markers --dev-only > requirements.d/dev.txt + +Verify the updated dependencies don't include any security vulnerabilities: + +:: + + pipenv check + + +Build locally +============= + +1. Install `build` (see `its docs `_ + for example), e.g. via ``pacman -S python-build`` on ArchLinux. +2. Afterwards, run the command to generate pip packages in ``dist/``:: + + pyproject-build + +NOTE: This is also needed before development because the command generates ``./src/nsupdate/_version.py``. + +Run locally +=========== + +#. Install dependencies ``pipenv install --dev`` +#. Generate ``src/nsupdate/_version.py`` file by running ``pyproject-build`` +#. Create database using ``pipenv run ./manage.py migrate`` +#. Create a superuser with ``pipenv run ./manage.py createsuperuser`` +#. Run the server with ``pipenv run ./manage.py runserver`` + +Lint +==== + +Run `pylint `_ in +error-only mode to check any problems:: + + pipenv run pylint src/nsupdate + +NOTE: The project does not use pylint for formatting. + Disabling the ``errors-only`` mode in ``.pylintrc`` will show a lot of warnings. + +Run tests +========= + +Tests need to run inside Docker because they depend on a ``bind9`` nameserver +running a specific configuration on ``127.0.0.1:53``. + +#. Build the docker image once, using: ``docker build -t nsupdate scripts/docker/`` +#. Then run tests via ``docker run --dns 127.0.0.1 -v $PWD:/app nsupdate`` From 1b89e8efc47aa7e8966836e4040cebb62ba20e85 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Thu, 13 Apr 2023 11:36:57 +0200 Subject: [PATCH 49/99] docs: misc. minor updates, it's 2023 --- LICENSE | 2 +- docs/conf.py | 2 +- docs/project.rst | 1 - docs/user.rst | 11 ++++------- 4 files changed, 6 insertions(+), 10 deletions(-) diff --git a/LICENSE b/LICENSE index 0f343b84..c4814438 100644 --- a/LICENSE +++ b/LICENSE @@ -1,7 +1,7 @@ This project is licensed under the the 3-clause BSD license (also known as "Revised BSD License", "New BSD License", or "Modified BSD License"): -Copyright (c) 2013-2020, The nsupdate.info Development Team (see AUTHORS file) +Copyright (c) 2013-2023, The nsupdate.info Development Team (see AUTHORS file) All rights reserved. Redistribution and use in source and binary forms, with or without diff --git a/docs/conf.py b/docs/conf.py index 794739d7..89ff0213 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -42,7 +42,7 @@ # General information about the project. project = u'nsupdate.info' -copyright = u'2013-2018, The nsupdate.info Team' +copyright = u'2013-2023, The nsupdate.info Team' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the diff --git a/docs/project.rst b/docs/project.rst index c83a9264..28563e85 100644 --- a/docs/project.rst +++ b/docs/project.rst @@ -31,7 +31,6 @@ You need the transifex-client package so you have the tx command: :: - # currently only works on python 2.x, transifex-client github repo has 3.3 support pip install transifex-client diff --git a/docs/user.rst b/docs/user.rst index 0a5a7048..42e3af12 100644 --- a/docs/user.rst +++ b/docs/user.rst @@ -359,20 +359,17 @@ Here are some clients that likely qualify: * ddclient - we offer configuration help for it, just copy & paste - - good working, reliable - IPv4 and IPv6 support - Linux & other POSIX systems -* inadyn (>= 1.99.11) +* inadyn - we offer configuration help for it, just copy & paste - - good working, reliable - - IPv4 only + - IPv4 and IPv6 support - Linux & other POSIX systems * python-dyndnsc - - still alpha/beta, but works - - IPv4 and good IPv6 support - - Mac OS X, Linux and FreeBSD + - IPv4 and IPv6 support + - macOS, Linux and BSD * whatever your router / gateway / firewall has for dyndns / ddns - quality of update client implementations varies widely From 0913f975e845ff860664391fe7278e833dd43620 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Thu, 13 Apr 2023 11:39:07 +0200 Subject: [PATCH 50/99] setup.py: require django < 4 --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 1db0bd5b..fa1db2c6 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ install_requires=[ 'dnspython', 'netaddr', - 'django>=3.2.0', + 'django>=3.2.0, <4.0.0', 'django-bootstrap-form', 'django-referrer-policy', 'django-registration-redux', From 79f73a09e5db5a8864e13b6247c69985fc3a1729 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Thu, 13 Apr 2023 20:05:52 +0200 Subject: [PATCH 51/99] Revert "disable the social_core AUTHENTICATION_BACKENDS" This reverts commit dcfab96da82992e1d4a47b99439b217d6ab3face. Also: fix to DropBoxOAuth2V2 Reason: Disabling the social auths in the base configuration is not needed because that can be overridden in a site-specific config, e.g.: local_settings.py --- src/nsupdate/settings/base.py | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/nsupdate/settings/base.py b/src/nsupdate/settings/base.py index 7fb0fc5e..addaca24 100644 --- a/src/nsupdate/settings/base.py +++ b/src/nsupdate/settings/base.py @@ -305,16 +305,16 @@ # python-social-auth settings AUTHENTICATION_BACKENDS = ( - # 'social_core.backends.amazon.AmazonOAuth2', - # 'social_core.backends.bitbucket.BitbucketOAuth', - # 'social_core.backends.disqus.DisqusOAuth2', - # 'social_core.backends.dropbox.DropboxOAuth2V2', - # 'social_core.backends.github.GithubOAuth2', - # 'social_core.backends.google.GoogleOAuth2', - # 'social_core.backends.reddit.RedditOAuth2', - # 'social_core.backends.soundcloud.SoundcloudOAuth2', - # 'social_core.backends.stackoverflow.StackoverflowOAuth2', - # 'social_core.backends.twitter.TwitterOAuth', + 'social_core.backends.amazon.AmazonOAuth2', + 'social_core.backends.bitbucket.BitbucketOAuth', + 'social_core.backends.disqus.DisqusOAuth2', + 'social_core.backends.dropbox.DropboxOAuth2V2', + 'social_core.backends.github.GithubOAuth2', + 'social_core.backends.google.GoogleOAuth2', + 'social_core.backends.reddit.RedditOAuth2', + 'social_core.backends.soundcloud.SoundcloudOAuth2', + 'social_core.backends.stackoverflow.StackoverflowOAuth2', + 'social_core.backends.twitter.TwitterOAuth', 'django.contrib.auth.backends.ModelBackend', ) From a90824a6edd7e7c4c0b43fc4dd8b951bdd33e820 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Thu, 13 Apr 2023 20:15:35 +0200 Subject: [PATCH 52/99] Add a hint if no remote account logins are enabled. --- src/nsupdate/login/templates/login.html | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/src/nsupdate/login/templates/login.html b/src/nsupdate/login/templates/login.html index 233b7232..3a695eb2 100644 --- a/src/nsupdate/login/templates/login.html +++ b/src/nsupdate/login/templates/login.html @@ -32,15 +32,22 @@

nsupdate.info logo

{% trans "Login with a remote Account" %}


- From 74a960d706e7d72f51251da60d7f5ba6c214c4f7 Mon Sep 17 00:00:00 2001 From: Daniel Rudolf Date: Tue, 18 Apr 2023 21:21:11 +0200 Subject: [PATCH 53/99] Fix connectivity test when editing domains (again) Fixes #523 --- src/nsupdate/main/forms.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nsupdate/main/forms.py b/src/nsupdate/main/forms.py index 56d4e8dd..708cad26 100644 --- a/src/nsupdate/main/forms.py +++ b/src/nsupdate/main/forms.py @@ -74,7 +74,7 @@ def clean_nameserver_update_secret(self): def clean(self): cleaned_data = super(EditDomainForm, self).clean() - if self.cleaned_data['available']: + if self.cleaned_data['available'] and 'nameserver_ip' in cleaned_data: try: check_domain(self.instance.name, cleaned_data['nameserver_ip']) From 722f76cb2d36023cda62e67c828117817b839fb5 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Tue, 18 Apr 2023 23:11:42 +0200 Subject: [PATCH 54/99] rewrite socket error handling, fixes #522 socket.error is deprecated and is the same as OSError since python 3.3. Of course OSError can mean a lot of stuff, so not sure how that goes... socket.herror is for gethostbyaddr and has some documented h_error values in netdb.h (but, AFAIK, these symbols are not available via python). added a handler for h_error 0 (#522), which crashed since a while. removed some unclear error values, let's see what happens. --- src/nsupdate/main/dnstools.py | 38 ++++++++++++++++++----------------- src/nsupdate/main/views.py | 2 +- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/src/nsupdate/main/dnstools.py b/src/nsupdate/main/dnstools.py index 1b66c17e..94d49131 100644 --- a/src/nsupdate/main/dnstools.py +++ b/src/nsupdate/main/dnstools.py @@ -186,7 +186,7 @@ def delete(fqdn, rdtype=None): except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer): # no dns entry, it is already deleted ok = False - except (dns.resolver.Timeout, dns.resolver.NoNameservers) as e: # socket.error also? + except (dns.resolver.Timeout, dns.resolver.NoNameservers) as e: # OSError (socket.error) also? # maybe could be caused by secondary DNS Timeout and master still ok? # assume the delete is OK... ok = True @@ -215,7 +215,7 @@ def update(fqdn, ipaddr, ttl=60): except (dns.resolver.NXDOMAIN, dns.resolver.NoAnswer): # no dns entry yet, ok ok = True - except (dns.resolver.Timeout, dns.resolver.NoNameservers) as e: # socket.error also? + except (dns.resolver.Timeout, dns.resolver.NoNameservers) as e: # OSError (socket.error) also? # maybe could be caused by secondary DNS Timeout and master still ok? # assume the update is OK... ok = True @@ -264,7 +264,7 @@ def query_ns(fqdn, rdtype, prefer_primary=False): ip = str(list(answer)[0]) logger.debug("query: %s answer: %s" % (fqdn, ip)) return ip - except (dns.resolver.Timeout, dns.resolver.NoNameservers, dns.message.UnknownTSIGKey) as e: # socket.error also? + except (dns.resolver.Timeout, dns.resolver.NoNameservers, dns.message.UnknownTSIGKey) as e: # OSError (socket.error) also? logger.warning("error when querying for name '%s' in zone '%s' with rdtype '%s' [%s]." % ( fqdn.host, origin, rdtype, str(e))) set_ns_availability(origin, False) @@ -287,18 +287,20 @@ def rev_lookup(ipaddr): retries -= 1 try: return socket.gethostbyaddr(ipaddr)[0] - except socket.error as err: - if err.errno in (-5, 4): - # -5 / 4 == no address associated with hostname (invalid ip?) - logger.warning("errno -5 when trying to reverse lookup %r" % ipaddr) - break - if err.errno in (errno.EPERM, ): - # EPERM == 1 == unknown host - break - if err.errno not in (errno.ENOENT, errno.EAGAIN): - # ENOENT == 2 == UDP Packet lost? - # EAGAIN == "try again" - raise + except socket.herror as err: + # note: numeric values taken from linux netdb.h (not: errno.h). + if err.errno in (0, 1, 3, 4, ): + # 0 == Resolver Error 0 (no error), e.g. Host x.x.x.x.in-addr.arpa not found: 2(SERVFAIL) + # 1 == HOST_NOT_FOUND (Authoritative Answer Host not found) + # 3 == NO_RECOVERY (Non recoverable errors, FORMERR, REFUSED, NOTIMP) + # 4 == NO_DATA (Valid name, no data record of requested type) + break # give up + elif err.errno in (2, ): + # 2 == TRY_AGAIN (Non-Authoritative Host not found, or SERVERFAIL) + pass # retry + else: + # something with no specific handling yet + raise # crash time.sleep(delay) delay *= 2 return '' @@ -381,10 +383,10 @@ def update_ns(fqdn, rdtype='A', ipaddr=None, action='upd', ttl=60): raise DnsUpdateError(rcode_text) return response # TODO simplify exception handling when https://github.com/rthalley/dnspython/pull/85 is merged/released - except socket.error as e: - logger.error("socket.error [%s] - zone: %s" % (str(e), origin, )) + except OSError as e: # was: socket.error (deprecated) + logger.error("OSError [%s] - zone: %s" % (str(e), origin, )) set_ns_availability(domain, False) - raise DnsUpdateError("SocketError %d" % e.errno) + raise DnsUpdateError("OSError %s - zone: %s" % (str(e), origin, )) except EOFError as e: logger.error("EOFError [%s] - zone: %s" % (str(e), origin, )) set_ns_availability(domain, False) diff --git a/src/nsupdate/main/views.py b/src/nsupdate/main/views.py index cdb76050..f8db7c3b 100644 --- a/src/nsupdate/main/views.py +++ b/src/nsupdate/main/views.py @@ -240,7 +240,7 @@ def form_valid(self, form): success, level, msg = False, messages.ERROR, 'Host already exists in DNS.' except dnstools.DNSException as e: success, level, msg = False, messages.ERROR, 'DNSException [%s]' % str(e) - except socket.error as err: + except OSError as err: # was: socket.error (deprecated) success, level, msg = False, messages.ERROR, 'Communication to name server failed [%s]' % str(err) else: self.object.created_by = self.request.user From 0087fe37e1e1ce32e699f5deba1b380ea4771f9d Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Tue, 18 Apr 2023 23:38:51 +0200 Subject: [PATCH 55/99] use resolver.resolve, fixes #508 resolver.query is deprecated. --- src/nsupdate/accounts/registration_form.py | 6 +++--- src/nsupdate/main/dnstools.py | 7 ++++--- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/nsupdate/accounts/registration_form.py b/src/nsupdate/accounts/registration_form.py index d65a4cc2..a260d46b 100644 --- a/src/nsupdate/accounts/registration_form.py +++ b/src/nsupdate/accounts/registration_form.py @@ -27,14 +27,14 @@ def check_mx(domain): valid = False try: - mx_answers = resolver.query(domain, 'MX') + mx_answers = resolver.resolve(domain, 'MX', search=True) # domain exists in DNS, domain has MX mx_entries = sorted([(mx_rdata.preference, mx_rdata.exchange) for mx_rdata in mx_answers]) for preference, mx in mx_entries: try: - addr_answers = resolver.query(mx, 'A') + addr_answers = resolver.resolve(mx, 'A', search=True) except dns.resolver.NoAnswer: - addr_answers = resolver.query(mx, 'AAAA') + addr_answers = resolver.resolve(mx, 'AAAA', search=True) # MX has IP addr mx_addrs = [addr_rdata.address for addr_rdata in addr_answers] for mx_addr in mx_addrs: diff --git a/src/nsupdate/main/dnstools.py b/src/nsupdate/main/dnstools.py index 94d49131..83027456 100644 --- a/src/nsupdate/main/dnstools.py +++ b/src/nsupdate/main/dnstools.py @@ -240,7 +240,7 @@ def query_ns(fqdn, rdtype, prefer_primary=False): :type rdtype: int or str :param prefer_primary: whether we rather want to query the primary first :return: IP (as str) - :raises: see dns.resolver.Resolver.query + :raises: see dns.resolver.Resolver.resolve """ assert isinstance(fqdn, FQDN) nameserver, nameserver2, origin = get_ns_info(fqdn)[0:3] @@ -260,11 +260,12 @@ def query_ns(fqdn, rdtype, prefer_primary=False): # (used if flags = None is given). Thus, we explicitly give flags (all off): resolver.flags = 0 try: - answer = resolver.query(str(fqdn), rdtype) + answer = resolver.resolve(str(fqdn), rdtype, search=True) ip = str(list(answer)[0]) logger.debug("query: %s answer: %s" % (fqdn, ip)) return ip - except (dns.resolver.Timeout, dns.resolver.NoNameservers, dns.message.UnknownTSIGKey) as e: # OSError (socket.error) also? + except (dns.resolver.Timeout, dns.resolver.LifetimeTimeout, + dns.resolver.NoNameservers, dns.message.UnknownTSIGKey) as e: # OSError (socket.error) also? logger.warning("error when querying for name '%s' in zone '%s' with rdtype '%s' [%s]." % ( fqdn.host, origin, rdtype, str(e))) set_ns_availability(origin, False) From 3dcf0ee4b9801f7878263ea44fce0cd907d76828 Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Wed, 12 Apr 2023 22:25:16 +0200 Subject: [PATCH 56/99] require python >=3.8 <=3.11 --- .github/workflows/ci.yml | 6 +++--- Pipfile | 2 +- setup.py | 4 ++-- tox.ini | 2 +- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1cc35c4f..6ae88f6a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -46,9 +46,6 @@ jobs: fail-fast: true matrix: include: - - os: ubuntu-22.04 - python-version: '3.7' - toxenv: py37 - os: ubuntu-22.04 python-version: '3.8' toxenv: py38 @@ -58,6 +55,9 @@ jobs: - os: ubuntu-22.04 python-version: '3.10' toxenv: py310 + - os: ubuntu-22.04 + python-version: '3.11' + toxenv: py311 env: TOXENV: ${{ matrix.toxenv }} diff --git a/Pipfile b/Pipfile index 817d7f4e..8f7ab7cf 100644 --- a/Pipfile +++ b/Pipfile @@ -25,4 +25,4 @@ pylint = "*" pylint-django = "*" [requires] -python_version = "3.7" +python_version = "3.8" diff --git a/setup.py b/setup.py index fa1db2c6..12fb57e5 100644 --- a/setup.py +++ b/setup.py @@ -27,7 +27,7 @@ include_package_data=True, zip_safe=False, platforms='any', - python_requires='>=3.7, <3.11', + python_requires='>=3.8, <3.12', setup_requires=['setuptools_scm'], install_requires=[ 'dnspython', @@ -49,10 +49,10 @@ 'Operating System :: OS Independent', 'Programming Language :: Python', 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', 'Programming Language :: Python :: 3.9', 'Programming Language :: Python :: 3.10', + 'Programming Language :: Python :: 3.11', 'Topic :: Internet :: Name Service (DNS)', ], ) diff --git a/tox.ini b/tox.ini index 9a972a58..a5ad3294 100644 --- a/tox.ini +++ b/tox.ini @@ -2,7 +2,7 @@ # tox --recreate [tox] -envlist = py{37,38,39,310} +envlist = py{38,39,310,311} [testenv] deps = From f652751b146ba294b0d317b47f791d6f3b10c465 Mon Sep 17 00:00:00 2001 From: Florian Eitel Date: Sat, 14 Jan 2023 13:23:41 +0100 Subject: [PATCH 57/99] Update to Django 4.0 --- Pipfile | 2 +- Pipfile.lock | 40 ++++--------- requirements.d/all.txt | 2 +- setup.py | 2 +- src/nsupdate/accounts/models.py | 5 +- src/nsupdate/accounts/registration_form.py | 2 +- src/nsupdate/accounts/urls.py | 38 ++++++------ src/nsupdate/accounts/views.py | 2 +- src/nsupdate/login/urls.py | 30 +++++----- src/nsupdate/main/forms.py | 2 +- src/nsupdate/main/models.py | 2 +- src/nsupdate/main/urls.py | 66 ++++++++++----------- src/nsupdate/management/commands/domains.py | 2 +- src/nsupdate/management/commands/faults.py | 2 +- src/nsupdate/management/commands/hosts.py | 2 +- src/nsupdate/management/commands/users.py | 2 +- src/nsupdate/urls.py | 18 +++--- src/nsupdate/utils/_tests/test_mail.py | 2 +- 18 files changed, 104 insertions(+), 117 deletions(-) diff --git a/Pipfile b/Pipfile index 8f7ab7cf..34a4774a 100644 --- a/Pipfile +++ b/Pipfile @@ -6,7 +6,7 @@ name = "pypi" [packages] dnspython = "*" netaddr = "*" -django = "~=3.2.0" +django = "~=4.0.0" django-bootstrap-form = "*" django-referrer-policy = "*" django-registration-redux = "*" diff --git a/Pipfile.lock b/Pipfile.lock index 54938464..8fcfdfb3 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "9156c112ac69696e641f166993b2c500a53de3e891c4beab05abc9bf51e99428" + "sha256": "2692d710e99d9f2b4f09ccf69a0c27aaccfc9540c077e57f6666cc9a38dcab10" }, "pipfile-spec": 6, "requires": { @@ -217,11 +217,11 @@ }, "django": { "hashes": [ - "sha256:08208dfe892eb64fff073ca743b3b952311104f939e7f6dae954fe72dcc533ba", - "sha256:4d492d9024c7b3dfababf49f94511ab6a58e2c9c3c7207786f1ba4eb77750706" + "sha256:2c2f73c16b11cb272c6d5e3b063f0d1be06f378d8dc6005fbe8542565db659cc", + "sha256:4496eb4f65071578b703fdc6e6f29302553c7440e3f77baf4cefa4a4e091fc3d" ], "index": "pypi", - "version": "==3.2.18" + "version": "==4.0.10" }, "django-bootstrap-form": { "hashes": [ @@ -287,11 +287,11 @@ }, "packaging": { "hashes": [ - "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2", - "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" + "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", + "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" ], "markers": "python_version >= '3.7'", - "version": "==23.0" + "version": "==23.1" }, "pycparser": { "hashes": [ @@ -315,13 +315,6 @@ ], "version": "==3.2.0" }, - "pytz": { - "hashes": [ - "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588", - "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb" - ], - "version": "==2023.3" - }, "requests": { "hashes": [ "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa", @@ -527,11 +520,11 @@ }, "django": { "hashes": [ - "sha256:08208dfe892eb64fff073ca743b3b952311104f939e7f6dae954fe72dcc533ba", - "sha256:4d492d9024c7b3dfababf49f94511ab6a58e2c9c3c7207786f1ba4eb77750706" + "sha256:2c2f73c16b11cb272c6d5e3b063f0d1be06f378d8dc6005fbe8542565db659cc", + "sha256:4496eb4f65071578b703fdc6e6f29302553c7440e3f77baf4cefa4a4e091fc3d" ], "index": "pypi", - "version": "==3.2.18" + "version": "==4.0.10" }, "django-debug-toolbar": { "hashes": [ @@ -705,11 +698,11 @@ }, "packaging": { "hashes": [ - "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2", - "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97" + "sha256:994793af429502c4ea2ebf6bf664629d07c1a9fe974af92966e4b8d2df7edc61", + "sha256:a392980d2b6cffa644431898be54b0045151319d1e7ec34f0cfed48767dd334f" ], "markers": "python_version >= '3.7'", - "version": "==23.0" + "version": "==23.1" }, "pep8": { "hashes": [ @@ -795,13 +788,6 @@ "index": "pypi", "version": "==1.0.6" }, - "pytz": { - "hashes": [ - "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588", - "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb" - ], - "version": "==2023.3" - }, "requests": { "hashes": [ "sha256:64299f4909223da747622c030b781c0d7811e359c37124b4bd368fb8c6518baa", diff --git a/requirements.d/all.txt b/requirements.d/all.txt index 69120ac3..2e0c57f7 100644 --- a/requirements.d/all.txt +++ b/requirements.d/all.txt @@ -1,7 +1,7 @@ # packages always needed dnspython netaddr -django~=3.2.0 +django~=4.0.0 django-bootstrap-form django-referrer-policy django-registration-redux diff --git a/setup.py b/setup.py index 12fb57e5..2c38357d 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ install_requires=[ 'dnspython', 'netaddr', - 'django>=3.2.0, <4.0.0', + 'django>=4.0.0', 'django-bootstrap-form', 'django-referrer-policy', 'django-registration-redux', diff --git a/src/nsupdate/accounts/models.py b/src/nsupdate/accounts/models.py index 4c29a364..83ea176d 100644 --- a/src/nsupdate/accounts/models.py +++ b/src/nsupdate/accounts/models.py @@ -7,8 +7,9 @@ from django.db.models.signals import post_save from django.dispatch import receiver from django.contrib.auth.signals import user_logged_in -from django.utils.translation import ugettext_lazy as _ -from django.utils.translation import LANGUAGE_SESSION_KEY +from django.utils.translation import gettext_lazy as _ + +LANGUAGE_SESSION_KEY = "_language" class UserProfile(models.Model): diff --git a/src/nsupdate/accounts/registration_form.py b/src/nsupdate/accounts/registration_form.py index a260d46b..4a221ff2 100644 --- a/src/nsupdate/accounts/registration_form.py +++ b/src/nsupdate/accounts/registration_form.py @@ -7,7 +7,7 @@ from django import forms from django.conf import settings -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from registration.forms import RegistrationForm diff --git a/src/nsupdate/accounts/urls.py b/src/nsupdate/accounts/urls.py index 22f26760..63c1f310 100644 --- a/src/nsupdate/accounts/urls.py +++ b/src/nsupdate/accounts/urls.py @@ -1,4 +1,4 @@ -from django.conf.urls import url +from django.urls import re_path from django.views.generic.base import TemplateView from registration.backends.default.views import ActivationView @@ -8,30 +8,30 @@ urlpatterns = ( - url(r'^profile/', UserProfileView.as_view(), name="account_profile"), - url(r'^settings/', UserChangePasswordView.as_view(), name='account_settings'), - url(r'^delete/', DeleteUserView.as_view(), name="account_delete"), + re_path(r'^profile/', UserProfileView.as_view(), name="account_profile"), + re_path(r'^settings/', UserChangePasswordView.as_view(), name='account_settings'), + re_path(r'^delete/', DeleteUserView.as_view(), name="account_delete"), # registration start - url(r'^activate/complete/$', - TemplateView.as_view(template_name='registration/activation_complete.html'), - name='registration_activation_complete'), + re_path(r'^activate/complete/$', + TemplateView.as_view(template_name='registration/activation_complete.html'), + name='registration_activation_complete'), # Activation keys get matched by \w+ instead of the more specific # [a-fA-F0-9]{40} because a bad activation key should still get to the view; # that way it can return a sensible "invalid key" message instead of a # confusing 404. - url(r'^activate/(?P\w+)/$', - ActivationView.as_view(), - name='registration_activate'), - url(r'^register/$', - RegistrationView.as_view(), - name='registration_register'), - url(r'^register/complete/$', - TemplateView.as_view(template_name='registration/registration_complete.html'), - name='registration_complete'), - url(r'^register/closed/$', - TemplateView.as_view(template_name='registration/registration_closed.html'), - name='registration_disallowed'), + re_path(r'^activate/(?P\w+)/$', + ActivationView.as_view(), + name='registration_activate'), + re_path(r'^register/$', + RegistrationView.as_view(), + name='registration_register'), + re_path(r'^register/complete/$', + TemplateView.as_view(template_name='registration/registration_complete.html'), + name='registration_complete'), + re_path(r'^register/closed/$', + TemplateView.as_view(template_name='registration/registration_closed.html'), + name='registration_disallowed'), # registration end ) diff --git a/src/nsupdate/accounts/views.py b/src/nsupdate/accounts/views.py index a02da32c..dfeaf09f 100644 --- a/src/nsupdate/accounts/views.py +++ b/src/nsupdate/accounts/views.py @@ -10,7 +10,7 @@ from django.urls import reverse, reverse_lazy from django.shortcuts import redirect from django.contrib import messages -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from django.contrib.auth import update_session_auth_hash from .forms import UserForm, UserProfileForm diff --git a/src/nsupdate/login/urls.py b/src/nsupdate/login/urls.py index 03f0d76d..a5ab7036 100644 --- a/src/nsupdate/login/urls.py +++ b/src/nsupdate/login/urls.py @@ -1,25 +1,25 @@ # -*- coding: utf-8 -*- -from django.conf.urls import url +from django.urls import re_path from django.contrib.auth.views import LoginView, LogoutView, \ PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView, PasswordResetCompleteView urlpatterns = ( # login and logout url - url(r'^login/$', LoginView.as_view(template_name='login.html'), name='login'), + re_path(r'^login/$', LoginView.as_view(template_name='login.html'), name='login'), # or use logout with template 'logout.html' - url(r'^logout/$', LogoutView.as_view(), name='logout'), + re_path(r'^logout/$', LogoutView.as_view(), name='logout'), # password reset urls - url(r'^password_reset/$', - PasswordResetView.as_view(template_name='password_reset.html'), - name='password_reset'), - url(r'^password_reset_done/$', - PasswordResetDoneView.as_view(template_name='password_reset_done.html'), - name='password_reset_done'), - url(r'^password_reset_confirm/(?P[0-9A-Za-z_\-]+)/(?P.+)/$', - PasswordResetConfirmView.as_view(template_name='password_reset_confirm.html'), - name='password_reset_confirm'), - url(r'^password_reset_complete/$', - PasswordResetCompleteView.as_view(template_name='password_reset_complete.html'), - name='password_reset_complete'), + re_path(r'^password_reset/$', + PasswordResetView.as_view(template_name='password_reset.html'), + name='password_reset'), + re_path(r'^password_reset_done/$', + PasswordResetDoneView.as_view(template_name='password_reset_done.html'), + name='password_reset_done'), + re_path(r'^password_reset_confirm/(?P[0-9A-Za-z_\-]+)/(?P.+)/$', + PasswordResetConfirmView.as_view(template_name='password_reset_confirm.html'), + name='password_reset_confirm'), + re_path(r'^password_reset_complete/$', + PasswordResetCompleteView.as_view(template_name='password_reset_complete.html'), + name='password_reset_complete'), ) diff --git a/src/nsupdate/main/forms.py b/src/nsupdate/main/forms.py index 708cad26..be58103f 100644 --- a/src/nsupdate/main/forms.py +++ b/src/nsupdate/main/forms.py @@ -6,7 +6,7 @@ import binascii from django import forms -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from .models import Host, RelatedHost, Domain, ServiceUpdaterHostConfig from .dnstools import check_domain, NameServerNotAvailable diff --git a/src/nsupdate/main/models.py b/src/nsupdate/main/models.py index 4092981a..1492e594 100644 --- a/src/nsupdate/main/models.py +++ b/src/nsupdate/main/models.py @@ -17,7 +17,7 @@ from django.db.models.signals import pre_delete, post_save from django.contrib.auth.hashers import make_password from django.utils.timezone import now -from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import gettext_lazy as _ from . import dnstools diff --git a/src/nsupdate/main/urls.py b/src/nsupdate/main/urls.py index 974f919e..f281f710 100644 --- a/src/nsupdate/main/urls.py +++ b/src/nsupdate/main/urls.py @@ -2,7 +2,7 @@ main app url dispatching """ -from django.conf.urls import url +from django.urls import re_path from .views import ( HomeView, OverviewView, HostView, AddHostView, DeleteHostView, AboutView, GenerateSecretView, GenerateNSSecretView, @@ -16,39 +16,39 @@ urlpatterns = ( # interactive web ui - url(r'^$', HomeView.as_view(), name="home"), - url(r'^about/$', AboutView.as_view(), name="about"), - url(r'^custom/(?P