From 7ac4dd5813a8f1ced12c551c1cd8c8675b88fff5 Mon Sep 17 00:00:00 2001 From: meteogrid Date: Tue, 14 Mar 2023 13:43:17 +0000 Subject: [PATCH 1/6] escapes filename for url --- .../templates/filebrowser/include/filelisting.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/filebrowser_safe/templates/filebrowser/include/filelisting.html b/filebrowser_safe/templates/filebrowser/include/filelisting.html index 7e73aad..8cd9040 100644 --- a/filebrowser_safe/templates/filebrowser/include/filelisting.html +++ b/filebrowser_safe/templates/filebrowser/include/filelisting.html @@ -86,7 +86,7 @@ {% if query.pop != '4' %} - + {% endif %} @@ -98,10 +98,10 @@ {% if file.filetype != 'Folder' %} -
{% csrf_token %}
+
{% csrf_token %}
{% else %} -
{% csrf_token %}
+
{% csrf_token %}
{% endif %} From d05fac8f161e21695c7eb11d88cfb6c840ca7d73 Mon Sep 17 00:00:00 2001 From: meteogrid Date: Wed, 15 Mar 2023 08:01:28 +0000 Subject: [PATCH 2/6] wip --- filebrowser_safe/fields.py | 5 +++-- filebrowser_safe/functions.py | 1 - filebrowser_safe/settings.py | 6 ------ .../templates/filebrowser/include/filelisting.html | 13 +++++++------ filebrowser_safe/templates/filebrowser/index.html | 12 ++++++------ filebrowser_safe/templates/filebrowser/makedir.html | 4 ++-- filebrowser_safe/templates/filebrowser/rename.html | 4 ++-- filebrowser_safe/templates/filebrowser/upload.html | 6 +++--- 8 files changed, 23 insertions(+), 28 deletions(-) diff --git a/filebrowser_safe/fields.py b/filebrowser_safe/fields.py index 67becea..a6d293a 100644 --- a/filebrowser_safe/fields.py +++ b/filebrowser_safe/fields.py @@ -7,6 +7,7 @@ from django.db.models.fields.files import FileDescriptor from django.forms.widgets import Input from django.template.loader import render_to_string +from django.templatetags.static import static from django.utils.encoding import smart_str from django.utils.safestring import mark_safe from django.utils.translation import gettext_lazy as _ @@ -20,7 +21,7 @@ class FileBrowseWidget(Input): input_type = "text" class Media: - js = (os.path.join(fb_settings.URL_FILEBROWSER_MEDIA, "js/AddFileBrowser.js"),) + js = (static("filebrowser/js/AddFileBrowser.js"),) def __init__(self, attrs=None): self.directory = attrs.get("directory", "") @@ -44,7 +45,7 @@ def render(self, name, value, attrs=None, renderer=None): default_storage.makedirs(fullpath) final_attrs = dict(type=self.input_type, name=name, **attrs) final_attrs["search_icon"] = ( - fb_settings.URL_FILEBROWSER_MEDIA + "img/filebrowser_icon_show.gif" + static("filebrowser/img/filebrowser_icon_show.gif") ) final_attrs["directory"] = directory final_attrs["extensions"] = self.extensions diff --git a/filebrowser_safe/functions.py b/filebrowser_safe/functions.py index 783299a..0c5a763 100644 --- a/filebrowser_safe/functions.py +++ b/filebrowser_safe/functions.py @@ -174,7 +174,6 @@ def get_settings_var(): settings_var["MEDIA_URL"] = fb_settings.MEDIA_URL settings_var["DIRECTORY"] = get_directory() # FileBrowser - settings_var["URL_FILEBROWSER_MEDIA"] = fb_settings.URL_FILEBROWSER_MEDIA settings_var["PATH_FILEBROWSER_MEDIA"] = fb_settings.PATH_FILEBROWSER_MEDIA # TinyMCE settings_var["URL_TINYMCE"] = fb_settings.URL_TINYMCE diff --git a/filebrowser_safe/settings.py b/filebrowser_safe/settings.py index ababcfa..f0f5eb4 100644 --- a/filebrowser_safe/settings.py +++ b/filebrowser_safe/settings.py @@ -20,12 +20,6 @@ # DO NOT USE A SLASH AT THE BEGINNING, DO NOT FORGET THE TRAILING SLASH AT THE END. DIRECTORY = getattr(settings, "FILEBROWSER_DIRECTORY", "uploads/") -# The URL/PATH to your filebrowser media-files. -URL_FILEBROWSER_MEDIA = getattr( - settings, - "FILEBROWSER_URL_FILEBROWSER_MEDIA", - "%sfilebrowser/" % settings.STATIC_URL, -) PATH_FILEBROWSER_MEDIA = getattr( settings, "FILEBROWSER_PATH_FILEBROWSER_MEDIA", diff --git a/filebrowser_safe/templates/filebrowser/include/filelisting.html b/filebrowser_safe/templates/filebrowser/include/filelisting.html index 8cd9040..dd34ccf 100644 --- a/filebrowser_safe/templates/filebrowser/include/filelisting.html +++ b/filebrowser_safe/templates/filebrowser/include/filelisting.html @@ -17,7 +17,7 @@ {% if selectable %} {% else %} - + {% endif %} {% endif %} @@ -31,7 +31,7 @@ {% if selectable %} {% else %} - + {% endif %} {% endif %} @@ -45,7 +45,7 @@ {% if selectable %} {% else %} - + {% endif %} {% endif %} @@ -59,15 +59,16 @@ {% if selectable %} {% else %} - + {% endif %} {% endif %} {% endif %} - - + {% with 'filebrowser/'|add:{{ settings_var.URL_FILEBROWSER_MEDIA }}|add:'img/filebrowser_type_'|add:{{ file.filetype|lower }}|add:'.gif' as fileicon %} + diff --git a/filebrowser_safe/templates/filebrowser/index.html b/filebrowser_safe/templates/filebrowser/index.html index 4d064ad..e3bb31b 100644 --- a/filebrowser_safe/templates/filebrowser/index.html +++ b/filebrowser_safe/templates/filebrowser/index.html @@ -7,7 +7,7 @@ {% block stylesheets %} {{ block.super }} - + {% endblock %} @@ -15,21 +15,21 @@ {{ block.super }} {% if query.pop == '1' %} - + {% endif %} {% if query.pop == '2' %} - + {% if query.mce_rdomain %}{% endif %} {% endif %} {% if query.pop == '3' %} - + {% endif %} {% if query.pop == '5' %} - + {% endif %} @@ -43,7 +43,7 @@ {% block rtl_styles %} {{ block.super }} - + {% endblock %} diff --git a/filebrowser_safe/templates/filebrowser/makedir.html b/filebrowser_safe/templates/filebrowser/makedir.html index 88056d8..ee4c1b6 100644 --- a/filebrowser_safe/templates/filebrowser/makedir.html +++ b/filebrowser_safe/templates/filebrowser/makedir.html @@ -7,12 +7,12 @@ {% block stylesheets %} {{ block.super }} - + {% endblock %} {% block rtl_styles %} {{ block.super }} - + {% endblock %} diff --git a/filebrowser_safe/templates/filebrowser/rename.html b/filebrowser_safe/templates/filebrowser/rename.html index a902b86..bceaecf 100644 --- a/filebrowser_safe/templates/filebrowser/rename.html +++ b/filebrowser_safe/templates/filebrowser/rename.html @@ -7,12 +7,12 @@ {% block stylesheets %} {{ block.super }} - + {% endblock %} {% block rtl_styles %} {{ block.super }} - + {% endblock %} diff --git a/filebrowser_safe/templates/filebrowser/upload.html b/filebrowser_safe/templates/filebrowser/upload.html index 4b13b5f..eb5e5ef 100644 --- a/filebrowser_safe/templates/filebrowser/upload.html +++ b/filebrowser_safe/templates/filebrowser/upload.html @@ -7,18 +7,18 @@ {% block stylesheets %} {{ block.super }} - + {% endblock %} {% block rtl_styles %} {{ block.super }} - + {% endblock %} {% block extrahead %} {{ block.super }} - + {% endblock extrahead %} From 13c9a7294e53ca570bd96f5e3bac54016e3dfaf5 Mon Sep 17 00:00:00 2001 From: meteogrid Date: Wed, 15 Mar 2023 08:14:51 +0000 Subject: [PATCH 3/6] py3.6 eol --- .github/workflows/main.yml | 12 ++++-------- setup.cfg | 4 ++-- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index c2b0a55..8bab964 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -15,8 +15,6 @@ jobs: matrix: include: # Django 2.2 - - tox-env: "py36-dj22" - python-version: "3.6" - tox-env: "py37-dj22" python-version: "3.7" - tox-env: "py38-dj22" @@ -24,8 +22,6 @@ jobs: - tox-env: "py39-dj22" python-version: "3.9" # Django 3.0 - - tox-env: "py36-dj30" - python-version: "3.6" - tox-env: "py37-dj30" python-version: "3.7" - tox-env: "py38-dj30" @@ -33,8 +29,6 @@ jobs: - tox-env: "py39-dj30" python-version: "3.9" # Django 3.1 - - tox-env: "py36-dj31" - python-version: "3.6" - tox-env: "py37-dj31" python-version: "3.7" - tox-env: "py38-dj31" @@ -42,8 +36,6 @@ jobs: - tox-env: "py39-dj31" python-version: "3.9" # Django 3.2 - - tox-env: "py36-dj32" - python-version: "3.6" - tox-env: "py37-dj32" python-version: "3.7" - tox-env: "py38-dj32" @@ -52,6 +44,8 @@ jobs: python-version: "3.9" - tox-env: "py310-dj32" python-version: "3.10" + - tox-env: "py311-dj32" + python-version: "3.11" # Django 4.0 - tox-env: "py38-dj40" python-version: "3.8" @@ -59,6 +53,8 @@ jobs: python-version: "3.9" - tox-env: "py310-dj40" python-version: "3.10" + - tox-env: "py311-dj40" + python-version: "3.11" steps: - uses: actions/checkout@v2 diff --git a/setup.cfg b/setup.cfg index fa27b12..95d45df 100644 --- a/setup.cfg +++ b/setup.cfg @@ -13,14 +13,14 @@ license_file = LICENSE classifiers = Programming Language :: Python Programming Language :: Python :: 3 - Programming Language :: Python :: 3.6 Programming Language :: Python :: 3.7 Programming Language :: Python :: 3.8 Programming Language :: Python :: 3.9 Programming Language :: Python :: 3.10 + Programming Language :: Python :: 3.11 [options] -python_requires = >=3.6 +python_requires = >=3.7 packages = find: include_package_data = true From 9cce726b78301d91dd847de795256c5224548ab2 Mon Sep 17 00:00:00 2001 From: meteogrid Date: Wed, 15 Mar 2023 08:44:39 +0000 Subject: [PATCH 4/6] new tag for filetype --- .../templates/filebrowser/include/filelisting.html | 4 +--- filebrowser_safe/templatetags/fb_tags.py | 5 +++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/filebrowser_safe/templates/filebrowser/include/filelisting.html b/filebrowser_safe/templates/filebrowser/include/filelisting.html index dd34ccf..8a83571 100644 --- a/filebrowser_safe/templates/filebrowser/include/filelisting.html +++ b/filebrowser_safe/templates/filebrowser/include/filelisting.html @@ -66,9 +66,7 @@ {% endif %} - {% with 'filebrowser/'|add:{{ settings_var.URL_FILEBROWSER_MEDIA }}|add:'img/filebrowser_type_'|add:{{ file.filetype|lower }}|add:'.gif' as fileicon %} - {% if results_var.images_total %} diff --git a/filebrowser_safe/templatetags/fb_tags.py b/filebrowser_safe/templatetags/fb_tags.py index 9d478ee..3e21158 100644 --- a/filebrowser_safe/templatetags/fb_tags.py +++ b/filebrowser_safe/templatetags/fb_tags.py @@ -1,6 +1,7 @@ import warnings from django import template +from django.templatetags.static import static from urllib.parse import quote @@ -184,3 +185,7 @@ def allowed_extensions_list(separator=","): register.simple_tag(allowed_extensions_list) + +@register.simple_tag +def get_filetype_icon(filetype): + return static(f'filebrowser/img/filebrowser_type_{filetype.lower()}.gif') \ No newline at end of file From b9d578e094dfe5a1f98feb1be89a31bb057ecdf2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcos=20S=C3=A1nchez=20Provencio?= Date: Tue, 2 Sep 2025 18:31:33 +0200 Subject: [PATCH 5/6] pyproject.toml --- pyproject.toml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 pyproject.toml diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..242e366 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,5 @@ +# pyproject.toml +[build-system] +# XXX: If your project needs other packages to build properly, add them to this list. +requires = ["setuptools >= 42.0.0"] +build-backend = "setuptools.build_meta" From 89f454cc587067eb5674e5d25c927e1354905aff Mon Sep 17 00:00:00 2001 From: meteogrid Date: Thu, 12 Mar 2026 18:21:06 +0000 Subject: [PATCH 6/6] django 5 --- filebrowser_safe/views.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/filebrowser_safe/views.py b/filebrowser_safe/views.py index f202242..1664254 100644 --- a/filebrowser_safe/views.py +++ b/filebrowser_safe/views.py @@ -2,7 +2,7 @@ import re from json import dumps -from django import forms +from django import forms, get_version from django.conf import settings as django_settings from django.contrib import messages from django.contrib.admin.views.decorators import staff_member_required @@ -39,20 +39,23 @@ try: from mezzanine.utils.html import escape except ImportError: - escape = lambda s: s # noqa - + def escape(s): return s # noqa +if get_version() > '4': + DEFAULT_FILE_STORAGE = django_settings.STORAGES['default']['BACKEND'] +else: + DEFAULT_FILE_STORAGE = django_settings.DEFAULT_FILE_STORAGE # Add some required methods to FileSystemStorage -storage_class_name = django_settings.DEFAULT_FILE_STORAGE.split(".")[-1] +storage_class_name = DEFAULT_FILE_STORAGE.split(".")[-1] mixin_class_name = "filebrowser_safe.storage.%sMixin" % storage_class_name # Workaround for django-s3-folder-storage -if django_settings.DEFAULT_FILE_STORAGE == "s3_folder_storage.s3.DefaultStorage": +if DEFAULT_FILE_STORAGE == "s3_folder_storage.s3.DefaultStorage": mixin_class_name = "filebrowser_safe.storage.S3BotoStorageMixin" try: mixin_class = import_string(mixin_class_name) - storage_class = import_string(django_settings.DEFAULT_FILE_STORAGE) + storage_class = import_string(DEFAULT_FILE_STORAGE) except ImportError: pass else: