From 079509a36c653fa982380b8f9f1f475571b83c04 Mon Sep 17 00:00:00 2001 From: erikvw Date: Fri, 29 Mar 2024 09:10:53 -0500 Subject: [PATCH 1/5] initialize local thread --- multisite/threadlocals.py | 2 ++ multisite/utils.py | 9 ++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/multisite/threadlocals.py b/multisite/threadlocals.py index fb82f23..0b80560 100644 --- a/multisite/threadlocals.py +++ b/multisite/threadlocals.py @@ -4,6 +4,8 @@ from django.conf import settings from django.core.exceptions import ImproperlyConfigured +_thread_locals = local() + class SiteID(local): """ diff --git a/multisite/utils.py b/multisite/utils.py index ecd2105..e5dab8b 100644 --- a/multisite/utils.py +++ b/multisite/utils.py @@ -1,5 +1,6 @@ from __future__ import annotations +import sys from typing import TYPE_CHECKING, Callable from django.apps import apps as django_apps @@ -89,12 +90,18 @@ def create_or_sync_missing_canonical_from_site_domain(apps: AppConfig | None = N create_or_sync_alias_from_site(site=site, apps=apps) -def create_or_sync_canonical_from_all_sites(apps: AppConfig | None = None) -> None: +def create_or_sync_canonical_from_all_sites( + apps: AppConfig | None = None, verbose: bool | None = None +) -> None: """Create or sync canonical Alias objects from all Site objects. Renamed canonical manager method ``sync_all``. """ + if verbose: + sys.stdout.write(" * Syncing canonical from site domain ... \n") sync_canonical_from_site_domain(apps=apps) + if verbose: + sys.stdout.write(" * Syncing missing canonical from site domain ... \n") create_or_sync_missing_canonical_from_site_domain(apps=apps) From 1a92cb35ef37f82a1a15dc8e66a094c6b8388690 Mon Sep 17 00:00:00 2001 From: Erik van Widenfelt Date: Fri, 29 Mar 2024 09:20:08 -0500 Subject: [PATCH 2/5] Update README.rst --- README.rst | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.rst b/README.rst index c67b015..a04d167 100644 --- a/README.rst +++ b/README.rst @@ -1,4 +1,4 @@ -|pypi| |actions| |codecov| |downloads| |maintainability| |black| + |actions| |codecov| |downloads| |maintainability| |black| @@ -198,7 +198,7 @@ To run the tests:: .. |pypi| image:: https://img.shields.io/pypi/v/django-multisite2.svg - :target: https://pypi.python.org/pypi/django-multisite2 + :target: https://pypi.python.org/pypi/django-multisite2 .. |actions| image:: https://github.com/erikvw/django-multisite2/actions/workflows/build.yml/badge.svg :target: https://github.com/erikvw/django-multisite2/actions/workflows/build.yml From 260f6d2d1973ac6ba85833a28836acc74b6754d9 Mon Sep 17 00:00:00 2001 From: Erik van Widenfelt Date: Fri, 29 Mar 2024 09:20:36 -0500 Subject: [PATCH 3/5] Update README.rst --- README.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.rst b/README.rst index a04d167..f8c0aa5 100644 --- a/README.rst +++ b/README.rst @@ -19,7 +19,7 @@ Install with pip: .. code-block:: - pip install django-multisite2 + pip install django-multisite2 (no release yet) Replace your ``SITE_ID`` in ``settings.py`` to: From 08ee180bc35cae4b03a0682ac9137437f09f0866 Mon Sep 17 00:00:00 2001 From: erikvw Date: Sat, 30 Mar 2024 20:08:49 -0500 Subject: [PATCH 4/5] call get_response last in dynamic middleware --- .../middleware/dynamic_site_middleware.py | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/multisite/middleware/dynamic_site_middleware.py b/multisite/middleware/dynamic_site_middleware.py index 20cd0a4..dfa94e2 100644 --- a/multisite/middleware/dynamic_site_middleware.py +++ b/multisite/middleware/dynamic_site_middleware.py @@ -51,9 +51,8 @@ def __init__(self, get_response): post_delete.connect(self.site_deleted_hook, sender=Site) def __call__(self, request): - response = self.get_response(request) # if 500 here -> Site ObjectDoesNotExist was raised by get_current_site() - debug_check_status_code(response, request=request) + # debug_check_status_code(response, request=request) try: netloc = request.get_host().lower() except DisallowedHost as e: @@ -66,7 +65,7 @@ def __call__(self, request): # found Alias self.cache.set(cache_key, alias) settings.SITE_ID.set(alias.site_id) - response = self.redirect_to_canonical(request, response, alias) + response = self.redirect_to_canonical(request, alias) elif (alias := self.get_alias(netloc)) is None: # Cache missed, fallback using settings.MULTISITE_FALLBACK debug_raise_cache_missed_exception(netloc, alias) @@ -77,17 +76,21 @@ def __call__(self, request): self.cache.set(cache_key, alias) settings.SITE_ID.set(alias.site_id) SITE_CACHE[settings.SITE_ID] = alias.site # Pre-populate SITE_CACHE - response = self.redirect_to_canonical(request, response, alias) - debug_check_status_code(response, netloc=netloc, alias=alias, site=alias.site) - return response + response = self.redirect_to_canonical(request, alias) + # debug_check_status_code(response, netloc=netloc, alias=alias, site=alias.site) + return response or self.get_response(request) @staticmethod - def redirect_to_canonical(request, response, alias: Alias) -> HttpResponse: + def redirect_to_canonical(request, alias: Alias) -> HttpResponse | None: if not alias.redirect_to_canonical or alias.is_canonical: - return response - url = urlsplit(request.build_absolute_uri(request.get_full_path())) - url = urlunsplit((url.scheme, alias.site.domain, url.path, url.query, url.fragment)) - return HttpResponsePermanentRedirect(url) + response = None + else: + url = urlsplit(request.build_absolute_uri(request.get_full_path())) + url = urlunsplit( + (url.scheme, alias.site.domain, url.path, url.query, url.fragment) + ) + response = HttpResponsePermanentRedirect(url) + return response def get_cache_key(self, netloc): """Returns a cache key based on ``netloc``.""" From 8fd473cdc953145abf6e45c0d53cbfe3e7a7e8e7 Mon Sep 17 00:00:00 2001 From: erikvw Date: Sat, 30 Mar 2024 20:24:09 -0500 Subject: [PATCH 5/5] CHANGES --- CHANGELOG.rst => CHANGES | 14 +++++++++++--- multisite/threadlocals.py | 2 -- 2 files changed, 11 insertions(+), 5 deletions(-) rename CHANGELOG.rst => CHANGES (85%) diff --git a/CHANGELOG.rst b/CHANGES similarity index 85% rename from CHANGELOG.rst rename to CHANGES index db059b1..1e2cc1e 100644 --- a/CHANGELOG.rst +++ b/CHANGES @@ -2,9 +2,17 @@ Release Notes ============= -2.0.1 ------ -- change rel.to to related_model (Django 4.2) +2.0.0 +----- + - major refactor, drop support for lower than py 3.11 and DJ4.2 + - drop pytest, use unitests / runtests.py + - replace rel.to with related_model (Django 4.2) + - remove deprecated `process_requests` + - add more specific exception handling + - add MULTISITE_REGISTER_POST_MIGRATE_SYNC_ALIAS settings attr + to allow user to connect signal outside of multisite + - drop template loader code. Maybe add back later + - remove unused ThreadLocalsMiddleware 1.9.0 ----- diff --git a/multisite/threadlocals.py b/multisite/threadlocals.py index 0b80560..fb82f23 100644 --- a/multisite/threadlocals.py +++ b/multisite/threadlocals.py @@ -4,8 +4,6 @@ from django.conf import settings from django.core.exceptions import ImproperlyConfigured -_thread_locals = local() - class SiteID(local): """