Skip to content

Commit 27bda8f

Browse files
authored
Merge pull request #3 from easy-as-python/django-compatibility-update
Updates for Django 1.10+ and Django 2.0+ compatibility
2 parents c74d1ed + 55f8d90 commit 27bda8f

File tree

13 files changed

+81
-10
lines changed

13 files changed

+81
-10
lines changed

‎.travis.yml‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,15 @@ language: python
22
python:
33
- "3.4"
44
- "3.5"
5+
- "3.6"
6+
env:
7+
- DJANGO_VERSION=1.8.18
8+
- DJANGO_VERSION=1.9.13
9+
- DJANGO_VERSION=1.10.8
10+
- DJANGO_VERSION=1.11.9
11+
- DJANGO_VERSION=2.0.1
12+
install:
13+
- pip install -r requirements.txt
14+
- pip install Django==$DJANGO_VERSION
515
script:
616
- python runtests.py

‎README.md‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,14 @@
99
* Add `webmention` to `INSTALLED_APPS`
1010
* Run `manage.py migrate webmention`
1111
* Add `url(r'^webmention', include('webmention.urls', namespace='webmention'))` to top-level `urls.py`
12+
* Use `path('webmention/', include(webmention.urls))` for newer projects
1213
* Run `manage.py test webmention` to ensure unit tests all pass
1314

1415
## Usage
1516

1617
* Include webmention information by either:
17-
* Adding `webmention.middleware.WebMentionMiddleware` to `MIDDLEWARE_CLASSES` (affects all views)
18+
* Installing the middleware in `settings.py` (affects all views)
19+
* Use `webmention.middleware.webmention_middleware` in `MIDDLEWARE` for new projects and projects with Django >= 1.10
20+
* Use `webmention.middleware.WebMentionMiddleware` in `MIDDLEWARE_CLASSES` for older projects
1821
* Decorating a specific view with `webmention.middleware.include_webmention_information`
1922
* View webmention responses in the Django admin tool and mark them as reviewed as needed

‎setup.py‎

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,30 @@
1111

1212
setup(
1313
name='django-webmention',
14-
version='0.0.4',
14+
version='0.1.0',
1515
packages=find_packages(),
1616
description='A pluggable implementation of webmention for Django projects.',
1717
keywords='webmention pingback linkback blogging',
1818
author='Dane Hillard',
1919
author_email='github@danehillard.com',
2020
long_description=readme,
2121
install_requires=requirements,
22-
url='https://github.com/daneah/django-webmention',
22+
url='https://github.com/easy-as-python/django-webmention',
2323
license='MIT',
2424
classifiers=[
2525
'Development Status :: 2 - Pre-Alpha',
2626
'Intended Audience :: Developers',
2727
'Framework :: Django',
2828
'Framework :: Django :: 1.8',
2929
'Framework :: Django :: 1.9',
30+
'Framework :: Django :: 1.10',
31+
'Framework :: Django :: 1.11',
32+
'Framework :: Django :: 2.0',
3033
'Topic :: Internet :: WWW/HTTP :: Indexing/Search',
3134
'License :: OSI Approved :: MIT License',
3235
'Programming Language :: Python :: 3',
3336
'Programming Language :: Python :: 3.4',
3437
'Programming Language :: Python :: 3.5',
38+
'Programming Language :: Python :: 3.6',
3539
],
3640
)

‎webmention/__init__.py‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from . import checks

‎webmention/checks.py‎

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import django
2+
from django.conf import settings
3+
from django.core.checks import Error, register, Tags
4+
5+
6+
@register(Tags.compatibility)
7+
def new_style_middleware_check(app_configs, **kwargs):
8+
errors = []
9+
10+
if django.VERSION[1] >= 10 or django.VERSION[0] > 1:
11+
installed_middlewares = getattr(settings, 'MIDDLEWARE', []) or []
12+
if 'webmention.middleware.WebMentionMiddleware' in installed_middlewares:
13+
errors.append(
14+
Error(
15+
'You are attempting to use an old-style middleware class in the MIDDLEWARE setting',
16+
hint='Either use MIDDLEWARE_CLASSES or use webmention.middleware.webmention_middleware instead',
17+
id='webmention.E001',
18+
)
19+
)
20+
return errors

‎webmention/middleware.py‎

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
from django.core.urlresolvers import reverse
21
from django.utils.decorators import decorator_from_middleware
32

3+
try:
4+
from django.core.urlresolvers import reverse
5+
except ImportError:
6+
from django.urls import reverse
47

5-
class WebMentionMiddleware(object):
6-
def process_response(self, request, response):
8+
9+
def add_webmention_headers_to_response(request, response):
710
link_header = '<{scheme}://{host}{path}>; rel="webmention"'.format(
811
scheme=request.scheme,
912
host=request.META.get('HTTP_HOST'),
@@ -16,4 +19,18 @@ def process_response(self, request, response):
1619

1720
return response
1821

22+
23+
class WebMentionMiddleware(object):
24+
def process_response(self, request, response):
25+
return add_webmention_headers_to_response(request, response)
26+
27+
28+
def webmention_middleware(get_response):
29+
def middleware(request):
30+
response = get_response(request)
31+
return add_webmention_headers_to_response(request, response)
32+
33+
return middleware
34+
35+
1936
include_webmention_information = decorator_from_middleware(WebMentionMiddleware)

‎webmention/resolution.py‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,11 @@
11
import requests
22

33
from urllib.parse import urlparse
4-
from django.core.urlresolvers import resolve, Resolver404
4+
5+
try:
6+
from django.core.urlresolvers import resolve, Resolver404
7+
except ImportError:
8+
from django.urls import resolve, Resolver404
59

610

711
def url_resolves(url):

‎webmention/templatetags/__init__.py‎

Whitespace-only changes.

‎webmention/templatetags/webmention.py‎

Whitespace-only changes.

‎webmention/tests/test_middleware.py‎

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
from unittest.mock import Mock
2-
from django.core.urlresolvers import reverse
2+
3+
try:
4+
from django.core.urlresolvers import reverse
5+
except ImportError:
6+
from django.urls import reverse
37

48
from django.http import HttpResponse
59
from django.test import TestCase, Client

0 commit comments

Comments
 (0)