diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5b7fec42..11edbfc2 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,12 +10,14 @@ jobs: fail-fast: false matrix: python-version: ['3.9', '3.10', '3.11', '3.12', 'pypy-3.10'] - django-version: ['4.1', '4.2', '5.0', '5.1', 'main'] + django-version: ['4.1', '4.2', '5.0', '5.1', '5.2', 'main'] exclude: - python-version: '3.9' django-version: '5.0' - python-version: '3.9' django-version: '5.1' + - python-version: '3.9' + django-version: '5.2' - python-version: '3.9' django-version: 'main' - python-version: 'pypy-3.10' @@ -26,6 +28,8 @@ jobs: django-version: '5.0' - python-version: 'pypy-3.10' django-version: '5.1' + - python-version: 'pypy-3.10' + django-version: '5.2' - python-version: 'pypy-3.10' django-version: 'main' - python-version: '3.12' diff --git a/pipeline/finders.py b/pipeline/finders.py index b0ce890e..e576514d 100644 --- a/pipeline/finders.py +++ b/pipeline/finders.py @@ -18,9 +18,9 @@ class PipelineFinder(BaseStorageFinder): storage = staticfiles_storage - def find(self, path, all=False): + def find(self, path, **kwargs): if not settings.PIPELINE_ENABLED: - return super().find(path, all) + return super().find(path, **kwargs) else: return [] @@ -29,7 +29,7 @@ def list(self, ignore_patterns): class ManifestFinder(BaseFinder): - def find(self, path, all=False): + def find(self, path, **kwargs): """ Looks for files in PIPELINE.STYLESHEETS and PIPELINE.JAVASCRIPT """ @@ -37,7 +37,7 @@ def find(self, path, all=False): for elem in chain(settings.STYLESHEETS.values(), settings.JAVASCRIPT.values()): if normpath(elem["output_filename"]) == normpath(path): match = safe_join(settings.PIPELINE_ROOT, path) - if not all: + if not kwargs.get("find_all", kwargs.get("all", False)): return match matches.append(match) return matches @@ -47,7 +47,7 @@ def list(self, *args): class CachedFileFinder(BaseFinder): - def find(self, path, all=False): + def find(self, path, **kwargs): """ Work out the uncached name of the file and look that up instead """ @@ -56,7 +56,7 @@ def find(self, path, all=False): except ValueError: return [] path = ".".join((start, extn)) - return find(path, all=all) or [] + return find(path, **kwargs) or [] def list(self, *args): return [] diff --git a/pyproject.toml b/pyproject.toml index 369a34e4..271ddccd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -19,6 +19,7 @@ classifiers = [ "Framework :: Django :: 4.2", "Framework :: Django :: 5.0", "Framework :: Django :: 5.1", + "Framework :: Django :: 5.2", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", diff --git a/tests/tests/test_storage.py b/tests/tests/test_storage.py index e0b2bf1e..a8e7105c 100644 --- a/tests/tests/test_storage.py +++ b/tests/tests/test_storage.py @@ -1,5 +1,6 @@ from io import StringIO +import django from django.contrib.staticfiles import finders from django.contrib.staticfiles.storage import staticfiles_storage from django.core.management import call_command @@ -88,6 +89,24 @@ def test_nonexistent_file_pipeline_finder(self): path = finders.find("nothing.css") self.assertIsNone(path) + @modify_settings(STATICFILES_FINDERS={"append": "pipeline.finders.PipelineFinder"}) + def test_nonexistent_file_pipeline_finder_find_all(self): + if django.__version__ < "5.2": + self.skipTest("Only applicable to Django 5.2 and up") + + path = finders.find("nothing.css", find_all=True) + self.assertIsNotNone(path) + self.assertEqual([], path) + + @modify_settings(STATICFILES_FINDERS={"append": "pipeline.finders.PipelineFinder"}) + def test_nonexistent_file_pipeline_finder_all(self): + if django.__version__ < "6.0": + self.skipTest("Only applicable to versions of Django before 6.0") + + path = finders.find("nothing.css", all=True) + self.assertIsNotNone(path) + self.assertEqual([], path) + @modify_settings( STATICFILES_FINDERS={"append": "pipeline.finders.CachedFileFinder"} ) @@ -106,3 +125,21 @@ def test_nonexistent_double_extension_file_pipeline_finder(self): def test_nonexistent_double_extension_file_cached_finder(self): path = finders.find("app.css.map") self.assertIsNone(path) + + @modify_settings(STATICFILES_FINDERS={"append": "pipeline.finders.ManifestFinder"}) + def test_manifest_finder_finds_stylesheet(self): + path = finders.find("screen.css") + self.assertIsNotNone(path) + + path = finders.find("screen.scss") + self.assertIsNone(path) + + @modify_settings(STATICFILES_FINDERS={"append": "pipeline.finders.ManifestFinder"}) + def test_manifest_finder_finds_all_stylesheet(self): + paths = finders.find("screen.css", all=True) + self.assertIsNotNone(paths) + self.assertEqual(1, len(paths)) + + paths = finders.find("screen.scss", all=True) + self.assertIsNotNone(paths) + self.assertEqual([], paths) diff --git a/tox.ini b/tox.ini index 261bed83..2f6bef56 100644 --- a/tox.ini +++ b/tox.ini @@ -5,6 +5,7 @@ envlist = py{39,310,311,312}-dj42 py{310,311,312}-dj50 py{310,311,312}-dj51 + py{310,311,312}-dj52 py{310,311,312}-djmain docs @@ -22,6 +23,7 @@ DJANGO = 4.2: dj42 5.0: dj50 5.1: dj51 + 5.2: dj52 main: djmain [testenv] @@ -38,6 +40,7 @@ deps = dj42: Django>=4.2,<4.3 dj50: Django>=5.0,<5.1 dj51: Django>=5.1,<5.2 + dj52: Django>=5.2,<5.3 djmain: https://github.com/django/django/archive/main.tar.gz jinja2 coverage