Last active
October 24, 2023 18:13
-
-
Save merwok/3365ed649500baf0aae3a5f3263fa7b5 to your computer and use it in GitHub Desktop.
Example code to reconcile django-storages and django-filebrowser-no-grappelli https://github.com/smacker/django-filebrowser-no-grappelli/issues/47
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import posixpath | |
from filebrowser.storage import StorageMixin | |
from storages.backends.s3boto3 import S3Boto3Storage | |
class S3Storage(StorageMixin, S3Boto3Storage): | |
"""Integration between filebrowser and S3 storage.""" | |
def isdir(self, name): | |
if not name: | |
# empty name is root dir | |
return True | |
return name.endswith("/") | |
def isfile(self, name): | |
return self.exists(name) | |
def move(self, old_file_name, new_file_name, allow_overwrite=False): | |
raise NotImplementedError() | |
def makedirs(self, name): | |
raise NotImplementedError("can't create directories") | |
def rmtree(self, name): | |
raise NotImplementedError("can't remote directory") | |
def setpermission(self, name): | |
pass | |
def path(self, name): | |
# needed for upload view | |
return posixpath.join("/", name) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Hi, I am trying to make django-filebrowser-no-grappelli work with with s3 and I found your code, but it is giving me the following error:
TypeError at /admin/filebrowser/browse/
'<' not supported between instances of 'NoneType' and 'NoneType'
It seems that something breaks in filebrowser, but I can't understand why this happens. Here is the traceback for your reference:
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/admin/filebrowser/browse/?pop=4&type=image
Django Version: 3.1.4
Python Version: 3.7.2
Installed Applications:
['filebrowser',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'posts.apps.PostsConfig',
'marketing.apps.MarketingConfig',
'users',
'django.contrib.sites',
'django.contrib.sitemaps',
'tinymce',
'crispy_forms',
'storages']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback (most recent call last):
File "/home/edumats/Projects/blog/venv/lib/python3.7/site-packages/django/core/handlers/exception.py", line 47, in inner
response = get_response(request)
File "/home/edumats/Projects/blog/venv/lib/python3.7/site-packages/django/core/handlers/base.py", line 179, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/edumats/Projects/blog/venv/lib/python3.7/site-packages/filebrowser/decorators.py", line 46, in decorator
return function(request, *args, **kwargs)
File "/home/edumats/Projects/blog/venv/lib/python3.7/site-packages/django/contrib/auth/decorators.py", line 21, in _wrapped_view
return view_func(request, *args, **kwargs)
File "/home/edumats/Projects/blog/venv/lib/python3.7/site-packages/django/views/decorators/cache.py", line 44, in _wrapped_view_func
response = view_func(request, *args, **kwargs)
File "/home/edumats/Projects/blog/venv/lib/python3.7/site-packages/django/views/decorators/clickjacking.py", line 33, in wrapped_view
resp = view_func(*args, **kwargs)
File "/home/edumats/Projects/blog/venv/lib/python3.7/site-packages/filebrowser/sites.py", line 310, in browse
listing = filelisting.files_listing_filtered()
File "/home/edumats/Projects/blog/venv/lib/python3.7/site-packages/filebrowser/base.py", line 160, in files_listing_filtered
listing = list(filter(self.filter_func, self.files_listing_total()))
File "/home/edumats/Projects/blog/venv/lib/python3.7/site-packages/filebrowser/base.py", line 137, in files_listing_total
files = self.sort_by_attr(files, self.sorting_by)
File "/home/edumats/Projects/blog/venv/lib/python3.7/site-packages/filebrowser/base.py", line 84, in sort_by_attr
return sorted(seq, key=attrgetter(*attr))
Exception Type: TypeError at /admin/filebrowser/browse/
Exception Value: '<' not supported between instances of 'NoneType' and 'NoneType'