Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#140 Clone redirects app #141

Merged
merged 3 commits into from
Jul 3, 2018
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions refarm_redirects/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
default_app_config = 'refarm_redirects.apps.RedirectsConfig'
7 changes: 7 additions & 0 deletions refarm_redirects/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
from django.apps import AppConfig
from django.utils.translation import ugettext_lazy as _


class RedirectsConfig(AppConfig):
name = 'refarm_redirects'
verbose_name = _('refarm_redirects')
36 changes: 36 additions & 0 deletions refarm_redirects/middleware.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
from django.conf import settings
from django.contrib.redirects.models import Redirect
from django.contrib.redirects.middleware \
import RedirectFallbackMiddleware \
as DjangoRedirectFallbackMiddleware
from django.contrib.sites.shortcuts import get_current_site


class RedirectFallbackMiddleware(DjangoRedirectFallbackMiddleware):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fallback is the wrong part of the class name here, because the PR removes that fallback-like logic in favor of precondition check an existence of redirects

Copy link
Collaborator Author

@duker33 duker33 Jul 3, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@artemiy312 , i'll change it to RedirectAllMiddleware, y

TO-DO

# reloaded this method
# just to drop `response.status_code` status check
# in base class
def process_response(self, request, response):
full_path = request.get_full_path()
current_site = get_current_site(request)

r = None
try:
r = Redirect.objects.get(site=current_site, old_path=full_path)
except Redirect.DoesNotExist:
pass
if r is None and settings.APPEND_SLASH and not request.path.endswith('/'):
try:
r = Redirect.objects.get(
site=current_site,
old_path=request.get_full_path(force_append_slash=True),
)
except Redirect.DoesNotExist:
pass
if r is not None:
if r.new_path == '':
return self.response_gone_class()
return self.response_redirect_class(r.new_path)

# No redirect was found. Return the response.
return response
Empty file.
2 changes: 2 additions & 0 deletions tests/refarm_redirects/test_views.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# @todo:30m Move test case to custom redirects app
# You can find example at SE's tests_views.Redirects app
5 changes: 5 additions & 0 deletions tests/test_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,10 @@
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

# @todo #140:60m Use `refarm-site's` packages with it's prefix.
# For example do `INSTALLED_APPS = ['refarm-site.pages', ...]`
# instead of just `['pages']`.

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
Expand All @@ -76,6 +80,7 @@
'ecommerce',
'pages',
'search',
'refarm_redirects',
'generic_admin',
'tests',
)
Expand Down