Skip to content

Commit 4dc26f4

Browse files
joshyuJosh Yu
andauthored
Feat: add Django 42 Support (#1459)
* feat: Add Django 4.2 support * update * update tox.ini * update test requirements * fix: flake8 and isort errors * update setup.py * doc: update readme.rst file --------- Co-authored-by: Josh Yu <joshyu@foxmail.com>
1 parent 256fa14 commit 4dc26f4

File tree

15 files changed

+108
-59
lines changed

15 files changed

+108
-59
lines changed

.github/workflows/test.yml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@ jobs:
1515
django-3.1.txt,
1616
django-3.2.txt,
1717
django-4.0.txt,
18-
django-4.1.txt
18+
django-4.1.txt,
19+
django-4.2.txt,
1920
]
2021
exclude:
2122
- python-version: 3.7
2223
requirements-file: django-4.0.txt
2324
- python-version: 3.7
2425
requirements-file: django-4.1.txt
26+
- python-version: 3.7
27+
requirements-file: django-4.2.txt
2528
- python-version: 3.9
2629
requirements-file: django-2.2.txt
2730
- python-version: 3.10

CHANGELOG.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22
CHANGELOG
33
=========
44

5+
Unreleased
6+
==========
7+
* Add Django 4.2 support
8+
* fix tests
9+
510
2.2.6 (2023-07-03)
611
==================
712

README.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ Django Filer
77
**django Filer** is a file management application for django that makes
88
handling of files and images a breeze.
99

10+
.. warning::
11+
django-filer 2.x is susceptible to SVG XSS attacks and we strongly recommend upgrading it to 3.x.
12+
1013
.. note::
1114

1215
This project is endorsed by the `django CMS Association <https://www.django-cms.org/en/about-us/>`_.

aldryn_config.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,12 @@ def to_settings(self, data, settings):
4747
# If the DEFAULT_FILE_STORAGE has been set to a value known by
4848
# aldryn-django, then use that as THUMBNAIL_DEFAULT_STORAGE as well.
4949
for storage_backend in storage.SCHEMES.values():
50-
if storage_backend == settings['DEFAULT_FILE_STORAGE']:
50+
# Process before django 4.2
51+
if storage_backend == settings.get('DEFAULT_FILE_STORAGE', None):
52+
settings['THUMBNAIL_DEFAULT_STORAGE'] = storage_backend
53+
break
54+
# Process django 4.2 and after
55+
if storage_backend == settings.get('STORAGES', {}).get('default', {}).get('BACKEND', None):
5156
settings['THUMBNAIL_DEFAULT_STORAGE'] = storage_backend
5257
break
5358
return settings

filer/__init__.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,3 @@
1414
"""
1515

1616
__version__ = '2.2.6'
17-
18-
default_app_config = 'filer.apps.FilerConfig'

filer/admin/clipboardadmin.py

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
from django.contrib import admin
22
from django.forms.models import modelform_factory
33
from django.http import JsonResponse
4-
from django.urls import re_path
4+
from django.urls import path
55
from django.views.decorators.csrf import csrf_exempt
66

77
from .. import settings as filer_settings
@@ -35,21 +35,21 @@ class ClipboardAdmin(admin.ModelAdmin):
3535

3636
def get_urls(self):
3737
return [
38-
re_path(r'^operations/paste_clipboard_to_folder/$',
39-
self.admin_site.admin_view(views.paste_clipboard_to_folder),
40-
name='filer-paste_clipboard_to_folder'),
41-
re_path(r'^operations/discard_clipboard/$',
42-
self.admin_site.admin_view(views.discard_clipboard),
43-
name='filer-discard_clipboard'),
44-
re_path(r'^operations/delete_clipboard/$',
45-
self.admin_site.admin_view(views.delete_clipboard),
46-
name='filer-delete_clipboard'),
47-
re_path(r'^operations/upload/(?P<folder_id>[0-9]+)/$',
48-
ajax_upload,
49-
name='filer-ajax_upload'),
50-
re_path(r'^operations/upload/no_folder/$',
51-
ajax_upload,
52-
name='filer-ajax_upload'),
38+
path('operations/paste_clipboard_to_folder/',
39+
self.admin_site.admin_view(views.paste_clipboard_to_folder),
40+
name='filer-paste_clipboard_to_folder'),
41+
path('operations/discard_clipboard/',
42+
self.admin_site.admin_view(views.discard_clipboard),
43+
name='filer-discard_clipboard'),
44+
path('operations/delete_clipboard/',
45+
self.admin_site.admin_view(views.delete_clipboard),
46+
name='filer-delete_clipboard'),
47+
path('operations/upload/<int:folder_id>/',
48+
ajax_upload,
49+
name='filer-ajax_upload'),
50+
path('operations/upload/no_folder/',
51+
ajax_upload,
52+
name='filer-ajax_upload'),
5353
] + super().get_urls()
5454

5555
def get_model_perms(self, *args, **kwargs):
@@ -123,7 +123,7 @@ def ajax_upload(request, folder_id=None):
123123
'file_id': file_obj.pk,
124124
}
125125
# prepare preview thumbnail
126-
if type(file_obj) == Image:
126+
if isinstance(file_obj, Image):
127127
thumbnail_180_options = {
128128
'size': (180, 180),
129129
'crop': True,

filer/admin/folderadmin.py

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from django.db import models, router
1616
from django.http import HttpResponse, HttpResponseRedirect
1717
from django.shortcuts import get_object_or_404, render
18-
from django.urls import re_path, reverse
18+
from django.urls import path, reverse
1919
from django.utils.encoding import force_str
2020
from django.utils.html import escape, format_html
2121
from django.utils.safestring import mark_safe
@@ -200,35 +200,35 @@ def get_urls(self):
200200
return [
201201
# we override the default list view with our own directory listing
202202
# of the root directories
203-
re_path(r'^$',
204-
self.admin_site.admin_view(self.directory_listing),
205-
name='filer-directory_listing-root'),
206-
207-
re_path(r'^last/$',
208-
self.admin_site.admin_view(self.directory_listing),
209-
{'viewtype': 'last'},
210-
name='filer-directory_listing-last'),
211-
212-
re_path(r'^(?P<folder_id>\d+)/list/$',
213-
self.admin_site.admin_view(self.directory_listing),
214-
name='filer-directory_listing'),
215-
216-
re_path(r'^(?P<folder_id>\d+)/make_folder/$',
217-
self.admin_site.admin_view(views.make_folder),
218-
name='filer-directory_listing-make_folder'),
219-
re_path(r'^make_folder/$',
220-
self.admin_site.admin_view(views.make_folder),
221-
name='filer-directory_listing-make_root_folder'),
222-
223-
re_path(r'^images_with_missing_data/$',
224-
self.admin_site.admin_view(self.directory_listing),
225-
{'viewtype': 'images_with_missing_data'},
226-
name='filer-directory_listing-images_with_missing_data'),
227-
228-
re_path(r'^unfiled_images/$',
229-
self.admin_site.admin_view(self.directory_listing),
230-
{'viewtype': 'unfiled_images'},
231-
name='filer-directory_listing-unfiled_images'),
203+
path('',
204+
self.admin_site.admin_view(self.directory_listing),
205+
name='filer-directory_listing-root'),
206+
207+
path('last/',
208+
self.admin_site.admin_view(self.directory_listing),
209+
{'viewtype': 'last'},
210+
name='filer-directory_listing-last'),
211+
212+
path('<int:folder_id>/list/',
213+
self.admin_site.admin_view(self.directory_listing),
214+
name='filer-directory_listing'),
215+
216+
path('<int:folder_id>/make_folder/',
217+
self.admin_site.admin_view(views.make_folder),
218+
name='filer-directory_listing-make_folder'),
219+
path('make_folder/',
220+
self.admin_site.admin_view(views.make_folder),
221+
name='filer-directory_listing-make_root_folder'),
222+
223+
path('images_with_missing_data/',
224+
self.admin_site.admin_view(self.directory_listing),
225+
{'viewtype': 'images_with_missing_data'},
226+
name='filer-directory_listing-images_with_missing_data'),
227+
228+
path('unfiled_images/',
229+
self.admin_site.admin_view(self.directory_listing),
230+
{'viewtype': 'unfiled_images'},
231+
name='filer-directory_listing-unfiled_images'),
232232
] + super().get_urls()
233233

234234
# custom views

filer/utils/files.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def handle_upload(request):
2222
filename = request.GET.get('qqfile', False) or request.GET.get('filename', False) or ''
2323

2424
try:
25-
content_length = int(request.META['CONTENT_LENGTH'])
25+
content_length = int(request.headers['content-length'])
2626
except (IndexError, TypeError, ValueError):
2727
content_length = None
2828

setup.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
'Framework :: Django :: 3.2',
3333
'Framework :: Django :: 4.0',
3434
'Framework :: Django :: 4.1',
35+
'Framework :: Django :: 4.2',
3536
'Framework :: Django CMS',
3637
'Framework :: Django CMS :: 3.6',
3738
'Framework :: Django CMS :: 3.7',

tests/requirements/base.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ django-mptt
66
coverage
77
isort
88
flake8
9+
packaging

0 commit comments

Comments
 (0)