Skip to content

Commit

Permalink
Made Django 3.1 compatible
Browse files Browse the repository at this point in the history
  • Loading branch information
idlesign committed Aug 5, 2020
1 parent 3de1a5f commit cee6743
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 21 deletions.
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ python:
- 3.6

env:
- DJANGO="Django>=3.1,<3.2"
- DJANGO="Django>=3.0,<3.1"
- DJANGO="Django>=2.2,<2.3"
- DJANGO="Django>=2.1,<2.2"
Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@ django-sitetree changelog
=========================


Unreleased
----------
* Made Django 3.1 compatible.


v1.15.1 [2020-06-27]
--------------------
* Fix regression preventing LazyTitle to be restored from cache.
Expand Down
20 changes: 11 additions & 9 deletions sitetree/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from django import forms
from django.conf import settings as django_settings
from django.conf.urls import url
from django.conf.urls import re_path
from django.contrib import admin
from django.contrib import messages
from django.contrib.admin.sites import NotRegistered
Expand Down Expand Up @@ -330,28 +330,30 @@ def get_urls(self):
prefix_change = 'change/'

sitetree_urls = [
url(r'^change/$', redirects_handler, name=get_tree_item_url_name('changelist')),
re_path(r'^change/$', redirects_handler, name=get_tree_item_url_name('changelist')),

url(fr'^((?P<tree_id>\d+)/)?{prefix_change}item_add/$',
re_path(fr'^((?P<tree_id>\d+)/)?{prefix_change}item_add/$',
self.admin_site.admin_view(self.tree_admin.item_add), name=get_tree_item_url_name('add')),

url(fr'^(?P<tree_id>\d+)/{prefix_change}item_(?P<item_id>\d+)/$',
re_path(fr'^(?P<tree_id>\d+)/{prefix_change}item_(?P<item_id>\d+)/$',
self.admin_site.admin_view(self.tree_admin.item_edit), name=get_tree_item_url_name('change')),

url(fr'^{prefix_change}item_(?P<item_id>\d+)/$',
re_path(fr'^{prefix_change}item_(?P<item_id>\d+)/$',
self.admin_site.admin_view(self.tree_admin.item_edit), name=get_tree_item_url_name('change')),

url(fr'^((?P<tree_id>\d+)/)?{prefix_change}item_(?P<item_id>\d+)/delete/$',
re_path(fr'^((?P<tree_id>\d+)/)?{prefix_change}item_(?P<item_id>\d+)/delete/$',
self.admin_site.admin_view(self.tree_admin.item_delete), name=get_tree_item_url_name('delete')),

url(fr'^((?P<tree_id>\d+)/)?{prefix_change}item_(?P<item_id>\d+)/history/$',
re_path(fr'^((?P<tree_id>\d+)/)?{prefix_change}item_(?P<item_id>\d+)/history/$',
self.admin_site.admin_view(self.tree_admin.item_history), name=get_tree_item_url_name('history')),

url(fr'^(?P<tree_id>\d+)/{prefix_change}item_(?P<item_id>\d+)/move_(?P<direction>(up|down))/$',
re_path(fr'^(?P<tree_id>\d+)/{prefix_change}item_(?P<item_id>\d+)/move_(?P<direction>(up|down))/$',
self.admin_site.admin_view(self.tree_admin.item_move), name=get_tree_item_url_name('move')),
]
if SMUGGLER_INSTALLED:
sitetree_urls += (url(r'^dump_all/$', self.admin_site.admin_view(self.dump_view), name='sitetree_dump'),)
sitetree_urls += (
re_path(r'^dump_all/$', self.admin_site.admin_view(self.dump_view), name='sitetree_dump'),
)

return sitetree_urls + urls

Expand Down
2 changes: 1 addition & 1 deletion sitetree/fields.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ def _build_choices(self):
context.update({'request': object()})

choices_str = sitetree_tree(
Parser(None), Token(token_type=TOKEN_BLOCK, contents=tree_token)
Parser([]), Token(token_type=TOKEN_BLOCK, contents=tree_token)
).render(context)

tree_choices = [(ITEMS_FIELD_ROOT_ID, self.root_title)]
Expand Down
13 changes: 8 additions & 5 deletions sitetree/sitetreeapp.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,17 @@
from sys import exc_info
from threading import local
from typing import Callable, List, Optional, Dict, Union, Sequence, Any, Tuple
from urllib.parse import quote

from django.conf import settings
from django.core.cache import cache
from django.db.models import signals, QuerySet
from django.template.base import (
FilterExpression, Lexer, Parser, Token, Variable, VariableDoesNotExist, VARIABLE_TAG_START, Context)
FilterExpression, Lexer, Parser, Token, Variable, VariableDoesNotExist, VARIABLE_TAG_START)
from django.template.context import Context
from django.template.defaulttags import url as url_tag
from django.template.loader import get_template
from django.utils import module_loading
from django.utils.http import urlquote
from django.utils.translation import get_language

from .compat import TOKEN_BLOCK, TOKEN_TEXT, TOKEN_VAR
Expand Down Expand Up @@ -640,12 +641,14 @@ def get_tree_current_item(self, tree_alias: str) -> Optional['TreeItemBase']:
self._current_items[tree_alias] = current_item
return None

# urlquote is an attempt to support non-ascii in url.
current_url = self.current_request.path

if isinstance(current_url, str):
current_url = current_url.encode('UTF-8')

if current_url:
current_url = urlquote(current_url)
# url quote is an attempt to support non-ascii in url.
current_url = quote(current_url)

for url_item, url in self._items_urls.items():
# Iterate each as this dict may contains "current" items for various trees.
Expand Down Expand Up @@ -705,7 +708,7 @@ def url(self, sitetree_item: Union['TreeItemBase', FilterExpression], context: C
# Form token to pass to Django 'url' tag.
url_token = f'url {url_pattern} as item.url_resolved'
url_tag(
Parser(None),
Parser([]),
Token(token_type=TOKEN_BLOCK, contents=url_token)
).render(context)

Expand Down
10 changes: 5 additions & 5 deletions sitetree/tests/testapp/urls.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from django.conf.urls import url
from django.conf.urls import re_path
from django.contrib import admin
from django.views.defaults import server_error

Expand All @@ -8,10 +8,10 @@ def raise_exception(request):


urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'contacts/australia/(?P<value>[^/]+)/', lambda r, value: None, name='contacts_australia'),
url(r'contacts/australia/(?P<value>\d+)/', lambda r, value: None, name='contacts_china'),
url(r'raiser/', raise_exception, name='raiser'),
re_path(r'^admin/', admin.site.urls),
re_path(r'contacts/australia/(?P<value>[^/]+)/', lambda r, value: None, name='contacts_australia'),
re_path(r'contacts/australia/(?P<value>\d+)/', lambda r, value: None, name='contacts_china'),
re_path(r'raiser/', raise_exception, name='raiser'),
]

handler500 = lambda request: server_error(request, template_name='my500.html')
3 changes: 2 additions & 1 deletion tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ install_command = pip install {opts} {packages}
skip_missing_interpreters = True

envlist =
py{36,37,38}-django{20,21,22,30}
py{36,37,38}-django{20,21,22,30,31}


[testenv]
Expand All @@ -13,3 +13,4 @@ deps =
django21: Django>=2.1,<2.2
django22: Django>=2.2,<2.3
django30: Django>=3.0,<3.1
django31: Django>=3.1,<3.2

0 comments on commit cee6743

Please sign in to comment.