Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
support for django 3.0, see #380
  • Loading branch information
sehmaschine committed Jan 6, 2020
1 parent 01d7739 commit 4c1a86d
Show file tree
Hide file tree
Showing 11 changed files with 73 additions and 60 deletions.
5 changes: 5 additions & 0 deletions .editorconfig
@@ -0,0 +1,5 @@
[*.py]
known_django=django
known_filebrowser=filebrowser
known_grappelli=grappelli
sections=FUTURE,STDLIB,DJANGO,FILEBROWSER,GRAPPELLI,THIRDPARTY,FIRSTPARTY,LOCALFOLDER
14 changes: 9 additions & 5 deletions filebrowser/base.py
Expand Up @@ -7,13 +7,17 @@
import tempfile
import time

from six import python_2_unicode_compatible, string_types

from django.core.files import File
from django.utils.encoding import python_2_unicode_compatible, force_text
from django.utils.six import string_types
from django.utils.encoding import force_str
from django.utils.functional import cached_property
from filebrowser.settings import (ADMIN_VERSIONS, DEFAULT_PERMISSIONS,
EXTENSIONS, IMAGE_MAXBLOCK, SELECT_FORMATS,
STRICT_PIL, VERSION_QUALITY, VERSIONS,
VERSIONS_BASEDIR)
from filebrowser.utils import get_modified_time, path_strip, process_image

from filebrowser.settings import EXTENSIONS, SELECT_FORMATS, VERSIONS, ADMIN_VERSIONS, VERSIONS_BASEDIR, VERSION_QUALITY, STRICT_PIL, IMAGE_MAXBLOCK, DEFAULT_PERMISSIONS
from filebrowser.utils import path_strip, process_image, get_modified_time
from .namers import get_namer

if STRICT_PIL:
Expand Down Expand Up @@ -225,7 +229,7 @@ def __init__(self, path, site=None):
self.mimetype = mimetypes.guess_type(self.filename)

def __str__(self):
return force_text(self.path)
return force_str(self.path)

@property
def name(self):
Expand Down
9 changes: 4 additions & 5 deletions filebrowser/decorators.py
Expand Up @@ -4,24 +4,23 @@

from django.contrib import messages
from django.core.exceptions import ImproperlyConfigured
from django.urls import reverse
from django.http import HttpResponseRedirect
from django.utils.encoding import smart_text
from django.urls import reverse
from django.utils.encoding import smart_str
from django.utils.translation import ugettext as _

from filebrowser.templatetags.fb_tags import query_helper


def get_path(path, site):
converted_path = smart_text(os.path.join(site.directory, path))
converted_path = smart_str(os.path.join(site.directory, path))
if not path.startswith('.') and not os.path.isabs(converted_path):
if site.storage.isdir(converted_path):
return path


def get_file(path, filename, site):
# Files and directories are valid
converted_path = smart_text(os.path.join(site.directory, path, filename))
converted_path = smart_str(os.path.join(site.directory, path, filename))
if not path.startswith('.') and not filename.startswith('.') and not os.path.isabs(converted_path):
if site.storage.isfile(converted_path) or site.storage.isdir(converted_path):
return filename
Expand Down
7 changes: 3 additions & 4 deletions filebrowser/management/commands/fb_version_generate.py
Expand Up @@ -3,13 +3,12 @@
import os
import re

from six.moves import input

from django.conf import settings
from django.core.management.base import BaseCommand, CommandError
from django.utils.six.moves import input

from filebrowser.base import FileListing
from filebrowser.settings import EXTENSION_LIST, EXCLUDE, DIRECTORY, VERSIONS

from filebrowser.settings import DIRECTORY, EXCLUDE, EXTENSION_LIST, VERSIONS

filter_re = []
for exp in EXCLUDE:
Expand Down
4 changes: 2 additions & 2 deletions filebrowser/management/commands/fb_version_remove.py
Expand Up @@ -3,10 +3,10 @@
import re
import sys

from six.moves import input

from django.conf import settings
from django.core.management.base import BaseCommand, CommandError
from django.utils.six.moves import input

from filebrowser.settings import EXCLUDE, EXTENSIONS


Expand Down
11 changes: 7 additions & 4 deletions filebrowser/namers.py
@@ -1,10 +1,13 @@
from __future__ import unicode_literals

import re
from django.utils import six

import six

from django.utils.encoding import force_str
from django.utils.module_loading import import_string
from django.utils.encoding import force_text

from .settings import VERSIONS, VERSION_NAMER
from .settings import VERSION_NAMER, VERSIONS


def get_namer(**kwargs):
Expand Down Expand Up @@ -35,7 +38,7 @@ class OptionsNamer(VersionNamer):

def get_version_name(self):
name = "{root}_{options}{extension}".format(
root=force_text(self.file_object.filename_root),
root=force_str(self.file_object.filename_root),
options=self.options_as_string,
extension=self.file_object.extension,
)
Expand Down
50 changes: 27 additions & 23 deletions filebrowser/sites.py
Expand Up @@ -2,34 +2,40 @@

import os
import re
from time import gmtime, strftime, localtime, time
from time import gmtime, localtime, strftime, time

from django import forms
from django.contrib import messages
from django.contrib.admin.views.decorators import staff_member_required
from django.core.files.storage import DefaultStorage, default_storage, FileSystemStorage
from django.core.paginator import Paginator, InvalidPage, EmptyPage
from django.urls import reverse, get_urlconf, get_resolver
from django.http import HttpResponseRedirect, HttpResponseBadRequest
from django.shortcuts import render, HttpResponse
from django.core.files.storage import (DefaultStorage, FileSystemStorage,
default_storage)
from django.core.paginator import EmptyPage, InvalidPage, Paginator
from django.http import HttpResponseBadRequest, HttpResponseRedirect
from django.shortcuts import HttpResponse, render
from django.template import RequestContext as Context
from django.urls import get_resolver, get_urlconf, reverse
from django.utils.encoding import smart_str
from django.utils.translation import ugettext as _
from django.views.decorators.cache import never_cache
from django.views.decorators.csrf import csrf_exempt
try:
from django.utils.encoding import smart_text
except ImportError:
from django.utils.encoding import smart_unicode as smart_text

from filebrowser import signals
# Default actions
from filebrowser.actions import (flip_horizontal, flip_vertical,
rotate_90_clockwise,
rotate_90_counterclockwise, rotate_180)
from filebrowser.base import FileListing, FileObject
from filebrowser.decorators import path_exists, file_exists
from filebrowser.decorators import file_exists, path_exists
from filebrowser.settings import (ADMIN_THUMBNAIL, ADMIN_VERSIONS,
CONVERT_FILENAME, DEFAULT_PERMISSIONS,
DEFAULT_SORTING_BY, DEFAULT_SORTING_ORDER,
DIRECTORY, EXCLUDE, EXTENSION_LIST,
EXTENSIONS, LIST_PER_PAGE, MAX_UPLOAD_SIZE,
NORMALIZE_FILENAME, OVERWRITE_EXISTING,
SEARCH_TRAVERSE, SELECT_FORMATS,
UPLOAD_TEMPDIR, VERSIONS, VERSIONS_BASEDIR)
from filebrowser.storage import FileSystemStorageMixin
from filebrowser.templatetags.fb_tags import query_helper
from filebrowser.utils import convert_filename
from filebrowser.settings import (DIRECTORY, EXTENSIONS, SELECT_FORMATS, ADMIN_VERSIONS, ADMIN_THUMBNAIL, MAX_UPLOAD_SIZE, NORMALIZE_FILENAME,
CONVERT_FILENAME, SEARCH_TRAVERSE, EXCLUDE, VERSIONS, VERSIONS_BASEDIR, EXTENSION_LIST, DEFAULT_SORTING_BY, DEFAULT_SORTING_ORDER,
LIST_PER_PAGE, OVERWRITE_EXISTING, DEFAULT_PERMISSIONS, UPLOAD_TEMPDIR)

try:
import json
Expand Down Expand Up @@ -576,20 +582,20 @@ def _upload_file(self, request):
uploadedfile = handle_file_upload(path, filedata, site=self)

if file_already_exists and OVERWRITE_EXISTING:
old_file = smart_text(file_path)
new_file = smart_text(uploadedfile)
old_file = smart_str(file_path)
new_file = smart_str(uploadedfile)
self.storage.move(new_file, old_file, allow_overwrite=True)
full_path = FileObject(smart_text(old_file), site=self).path_full
full_path = FileObject(smart_str(old_file), site=self).path_full
else:
file_name = smart_text(uploadedfile)
file_name = smart_str(uploadedfile)
filedata.name = os.path.relpath(file_name, path)
full_path = FileObject(smart_text(file_name), site=self).path_full
full_path = FileObject(smart_str(file_name), site=self).path_full

# set permissions
if DEFAULT_PERMISSIONS is not None:
os.chmod(full_path, DEFAULT_PERMISSIONS)

f = FileObject(smart_text(file_name), site=self)
f = FileObject(smart_str(file_name), site=self)
signals.filebrowser_post_upload.send(sender=request, path=folder, file=f, site=self)

# let Ajax Upload know whether we saved it or not
Expand All @@ -600,8 +606,6 @@ def _upload_file(self, request):
# Default FileBrowser site
site = FileBrowserSite(name='filebrowser', storage=storage)

# Default actions
from filebrowser.actions import flip_horizontal, flip_vertical, rotate_90_clockwise, rotate_90_counterclockwise, rotate_180
site.add_action(flip_horizontal)
site.add_action(flip_vertical)
site.add_action(rotate_90_clockwise)
Expand Down
5 changes: 2 additions & 3 deletions filebrowser/storage.py
Expand Up @@ -4,8 +4,7 @@
import shutil

from django.core.files.move import file_move_safe
from django.utils.encoding import smart_text

from django.utils.encoding import smart_str
from filebrowser.base import FileObject
from filebrowser.settings import DEFAULT_PERMISSIONS

Expand Down Expand Up @@ -72,7 +71,7 @@ def rmtree(self, name):
shutil.rmtree(self.path(name))

def setpermission(self, name):
full_path = FileObject(smart_text(name), site=self).path_full
full_path = FileObject(smart_str(name), site=self).path_full
os.chmod(full_path, DEFAULT_PERMISSIONS)


Expand Down
12 changes: 6 additions & 6 deletions filebrowser/utils.py
@@ -1,15 +1,15 @@
# coding: utf-8

import re
import math
import os
import re
import unicodedata
import math

from django.utils import six
from django.utils.module_loading import import_string
import six

from filebrowser.settings import STRICT_PIL, NORMALIZE_FILENAME, CONVERT_FILENAME
from filebrowser.settings import VERSION_PROCESSORS
from django.utils.module_loading import import_string
from filebrowser.settings import (CONVERT_FILENAME, NORMALIZE_FILENAME,
STRICT_PIL, VERSION_PROCESSORS)

if STRICT_PIL:
from PIL import Image
Expand Down
10 changes: 5 additions & 5 deletions tests/test_base.py
@@ -1,15 +1,15 @@
# coding: utf-8

import os
import ntpath
import os
import posixpath
import shutil

from mock import patch

from filebrowser.base import FileObject, FileListing
from filebrowser.sites import site
from filebrowser.base import FileListing, FileObject
from filebrowser.settings import VERSIONS
from filebrowser.sites import site

from mock import patch
from tests import FilebrowserTestCase as TestCase


Expand Down
6 changes: 3 additions & 3 deletions tests/test_commands.py
@@ -1,13 +1,13 @@
# coding: utf-8

import os
import sys
import shutil
import sys

from six import StringIO

from django.conf import settings
from django.core.management import call_command
from django.utils.six import StringIO

from filebrowser.settings import DIRECTORY
from tests import FilebrowserTestCase as TestCase

Expand Down

0 comments on commit 4c1a86d

Please sign in to comment.