From b460c07dbc21e54235728a34c5ac4b2d26688c44 Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 31 Mar 2025 11:16:47 +0300 Subject: [PATCH 1/7] Pin ruff version; add it to pre-commit --- .pre-commit-config.yaml | 7 +++++++ tox.ini | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index f650287..421e1d6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,3 +19,10 @@ repos: hooks: - id: "commitizen" stages: ["commit-msg"] + + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.11.2 + hooks: + - id: ruff + args: + - --fix diff --git a/tox.ini b/tox.ini index b1d9db7..bb36d5a 100644 --- a/tox.ini +++ b/tox.ini @@ -69,5 +69,5 @@ skip_install = true commands = ruff check django_vite deps = - ruff + ruff~=0.11.2 skip_install = true From b7e4c212bab00d73d52c821fe4931025b621f1ee Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 31 Mar 2025 11:22:11 +0300 Subject: [PATCH 2/7] Sort imports --- django_vite/__init__.py | 1 - django_vite/core/asset_loader.py | 6 +++--- django_vite/templatetags/django_vite.py | 3 +-- tests/conftest.py | 3 ++- tests/tests/templatetags/test_vite_asset.py | 4 +++- tests/tests/templatetags/test_vite_asset_url.py | 1 + tests/tests/templatetags/test_vite_legacy_asset.py | 1 + tests/tests/templatetags/test_vite_legacy_polyfills.py | 1 + tests/tests/templatetags/test_vite_preload_asset.py | 1 + tests/tests/test_asset_loader.py | 10 +++++----- 10 files changed, 18 insertions(+), 13 deletions(-) diff --git a/django_vite/__init__.py b/django_vite/__init__.py index 110be3a..cbb5eb5 100644 --- a/django_vite/__init__.py +++ b/django_vite/__init__.py @@ -1,4 +1,3 @@ from .core.asset_loader import DjangoViteConfig - __all__ = ["DjangoViteConfig"] diff --git a/django_vite/core/asset_loader.py b/django_vite/core/asset_loader.py index 28554fb..ce9af91 100644 --- a/django_vite/core/asset_loader.py +++ b/django_vite/core/asset_loader.py @@ -1,8 +1,8 @@ import json +import warnings from pathlib import Path -from typing import Dict, List, Callable, NamedTuple, Optional, Union, Set +from typing import Callable, Dict, List, NamedTuple, Optional, Set, Union from urllib.parse import urljoin -import warnings from django.apps import apps from django.conf import settings @@ -10,9 +10,9 @@ from django.utils.module_loading import import_string from django_vite.core.exceptions import ( - DjangoViteManifestError, DjangoViteAssetNotFoundError, DjangoViteConfigNotFoundError, + DjangoViteManifestError, ) from django_vite.core.tag_generator import Tag, TagGenerator, attrs_to_str diff --git a/django_vite/templatetags/django_vite.py b/django_vite/templatetags/django_vite.py index 280e66d..5aad202 100644 --- a/django_vite/templatetags/django_vite.py +++ b/django_vite/templatetags/django_vite.py @@ -3,8 +3,7 @@ from django import template from django.utils.safestring import mark_safe -from django_vite.core.asset_loader import DjangoViteAssetLoader, DEFAULT_APP_NAME - +from django_vite.core.asset_loader import DEFAULT_APP_NAME, DjangoViteAssetLoader register = template.Library() diff --git a/tests/conftest.py b/tests/conftest.py index 9c0efac..8f902ee 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -1,4 +1,5 @@ -from typing import Dict, Any +from typing import Any, Dict + import pytest from django_vite.core.asset_loader import DjangoViteAssetLoader diff --git a/tests/tests/templatetags/test_vite_asset.py b/tests/tests/templatetags/test_vite_asset.py index ebb5d0c..04a9bd3 100644 --- a/tests/tests/templatetags/test_vite_asset.py +++ b/tests/tests/templatetags/test_vite_asset.py @@ -1,8 +1,10 @@ +from pathlib import Path + import pytest from bs4 import BeautifulSoup -from pathlib import Path from django.conf import settings from django.template import Context, Template, TemplateSyntaxError + from django_vite.core.exceptions import ( DjangoViteAssetNotFoundError, DjangoViteConfigNotFoundError, diff --git a/tests/tests/templatetags/test_vite_asset_url.py b/tests/tests/templatetags/test_vite_asset_url.py index c84c6c3..47b1c04 100644 --- a/tests/tests/templatetags/test_vite_asset_url.py +++ b/tests/tests/templatetags/test_vite_asset_url.py @@ -1,6 +1,7 @@ import pytest from bs4 import BeautifulSoup from django.template import Context, Template + from django_vite.core.exceptions import DjangoViteAssetNotFoundError diff --git a/tests/tests/templatetags/test_vite_legacy_asset.py b/tests/tests/templatetags/test_vite_legacy_asset.py index d44d9d9..958a147 100644 --- a/tests/tests/templatetags/test_vite_legacy_asset.py +++ b/tests/tests/templatetags/test_vite_legacy_asset.py @@ -1,6 +1,7 @@ import pytest from bs4 import BeautifulSoup from django.template import Context, Template + from django_vite.core.exceptions import DjangoViteAssetNotFoundError diff --git a/tests/tests/templatetags/test_vite_legacy_polyfills.py b/tests/tests/templatetags/test_vite_legacy_polyfills.py index a4740d2..c042b85 100644 --- a/tests/tests/templatetags/test_vite_legacy_polyfills.py +++ b/tests/tests/templatetags/test_vite_legacy_polyfills.py @@ -1,6 +1,7 @@ import pytest from bs4 import BeautifulSoup from django.template import Context, Template + from django_vite.core.exceptions import DjangoViteAssetNotFoundError diff --git a/tests/tests/templatetags/test_vite_preload_asset.py b/tests/tests/templatetags/test_vite_preload_asset.py index 4f66cab..451a95b 100644 --- a/tests/tests/templatetags/test_vite_preload_asset.py +++ b/tests/tests/templatetags/test_vite_preload_asset.py @@ -1,6 +1,7 @@ import pytest from bs4 import BeautifulSoup from django.template import Context, Template + from django_vite.core.exceptions import DjangoViteAssetNotFoundError diff --git a/tests/tests/test_asset_loader.py b/tests/tests/test_asset_loader.py index 081de5a..acf00a2 100644 --- a/tests/tests/test_asset_loader.py +++ b/tests/tests/test_asset_loader.py @@ -1,13 +1,13 @@ +from pathlib import Path + import pytest +from django.conf import settings +from django_vite.apps import check_loader_instance from django_vite.core.asset_loader import ( - DjangoViteConfig, DjangoViteAssetLoader, + DjangoViteConfig, ) -from pathlib import Path -from django.conf import settings -from django_vite.core.asset_loader import DjangoViteConfig -from django_vite.apps import check_loader_instance def test_django_vite_asset_loader_cannot_be_instantiated(): From bf2765c05c0c8f08240c213469c35d082fb29f8e Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 31 Mar 2025 11:22:24 +0300 Subject: [PATCH 3/7] Add explicit stacklevel= parameters to warnings --- django_vite/core/asset_loader.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/django_vite/core/asset_loader.py b/django_vite/core/asset_loader.py index ce9af91..bd1f97d 100644 --- a/django_vite/core/asset_loader.py +++ b/django_vite/core/asset_loader.py @@ -758,6 +758,7 @@ def _apply_legacy_django_vite_settings(cls): f"settings will be ignored since you have a {cls.DJANGO_VITE}" " setting configured. Please remove those legacy django-vite settings.", DeprecationWarning, + stacklevel=2, ) return @@ -767,6 +768,7 @@ def _apply_legacy_django_vite_settings(cls): "in future releases of django-vite. Please switch to defining your " f'settings as {cls.DJANGO_VITE} = {{"default": {{...}},}}.', DeprecationWarning, + stacklevel=2, ) legacy_config = {} From 270c46532761c0fd9a705c64c454728500add164 Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 31 Mar 2025 11:22:58 +0300 Subject: [PATCH 4/7] Modernize Ruff configuration --- pyproject.toml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 3fc9f6c..e0aa2a7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -13,7 +13,7 @@ filterwarnings = "ignore::DeprecationWarning:django_vite.*" [tool.black] line-length = 88 -[tool.ruff] +[tool.ruff.lint] select = [ "E", # pycodestyle "F", # pyflakes @@ -25,6 +25,12 @@ select = [ "I", # isort ] +ignore = [ + "E501", # line too long (taken care of by formatter) + "PT012", # multiple statements in `pytest.raises` (TODO: fix?) + "SIM105", # `contextlib.suppress` is slower than try-except, so do not suggest it +] + # do not autofix the following violations due to bad DX: unfixable = [ "F401", # Module imported but unused From a7d99c7ebc3c6d8525af4ec73bf6e8579546426d Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 31 Mar 2025 11:24:13 +0300 Subject: [PATCH 5/7] Apply Ruff autofixes --- tests/conftest.py | 6 +++--- tests/tests/templatetags/test_vite_asset.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index 8f902ee..b406e9e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -13,7 +13,7 @@ def reload_django_vite(): DjangoViteAssetLoader.instance() -@pytest.fixture() +@pytest.fixture def patch_settings(request, settings): """ 1. Patch new settings into django.conf.settings. @@ -47,14 +47,14 @@ def _patch_settings(new_settings: Dict[str, Any]): reload_django_vite() -@pytest.fixture() +@pytest.fixture def delete_settings(patch_settings): """ Unset settings that are part of the default test settings.py """ def _delete_settings(*settings_to_delete: str): - new_settings = {key: __PYTEST_DELETE__ for key in settings_to_delete} + new_settings = dict.fromkeys(settings_to_delete, __PYTEST_DELETE__) return patch_settings(new_settings) return _delete_settings diff --git a/tests/tests/templatetags/test_vite_asset.py b/tests/tests/templatetags/test_vite_asset.py index 04a9bd3..ea51ace 100644 --- a/tests/tests/templatetags/test_vite_asset.py +++ b/tests/tests/templatetags/test_vite_asset.py @@ -259,7 +259,7 @@ def test_vite_asset_nonexistent_app(dev_mode_true): assert "Cannot find bad_app in DJANGO_VITE settings" in str(error) -@pytest.fixture() +@pytest.fixture def external_vue_app(patch_settings, settings): def _wrapper(dev_mode: bool): return patch_settings( From 7a13a1e48b6901a9d31eb74f446611ec2802b695 Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 31 Mar 2025 11:24:19 +0300 Subject: [PATCH 6/7] Remove copy-pasted test case --- tests/tests/test_asset_loader.py | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tests/tests/test_asset_loader.py b/tests/tests/test_asset_loader.py index acf00a2..5c9cb2d 100644 --- a/tests/tests/test_asset_loader.py +++ b/tests/tests/test_asset_loader.py @@ -127,12 +127,6 @@ def test_parse_manifest_during_dev_mode(dev_mode_true): assert manifest_client._parse_manifest() == manifest_client.ParsedManifestOutput() -def test_parse_manifest_during_dev_mode(dev_mode_true): - default_app = DjangoViteAssetLoader.instance()._apps["default"] - manifest_client = default_app.manifest - assert manifest_client._parse_manifest() == manifest_client.ParsedManifestOutput() - - @pytest.mark.parametrize( "patch_settings", [ From 656050ace5c99f030ab4b85ae10e21ee8c33a19c Mon Sep 17 00:00:00 2001 From: Aarni Koskela Date: Mon, 31 Mar 2025 11:25:29 +0300 Subject: [PATCH 7/7] Use ruff for formatting too --- .pre-commit-config.yaml | 6 +----- pyproject.toml | 2 +- tox.ini | 5 ++--- 3 files changed, 4 insertions(+), 9 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 421e1d6..ea5b8c2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -9,11 +9,6 @@ repos: args: ["--fix=lf"] - id: "trailing-whitespace" - - repo: "https://github.com/psf/black" - rev: "23.3.0" - hooks: - - id: "black" - - repo: "https://github.com/commitizen-tools/commitizen" rev: "v3.13.0" hooks: @@ -26,3 +21,4 @@ repos: - id: ruff args: - --fix + - id: ruff-format diff --git a/pyproject.toml b/pyproject.toml index e0aa2a7..3f30b88 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -10,7 +10,7 @@ addopts = ''' ''' filterwarnings = "ignore::DeprecationWarning:django_vite.*" -[tool.black] +[tool.ruff] line-length = 88 [tool.ruff.lint] diff --git a/tox.ini b/tox.ini index bb36d5a..6b45a03 100644 --- a/tox.ini +++ b/tox.ini @@ -58,11 +58,10 @@ ignore_outcome = django-latest: True [testenv:codestyle] -basepython = python3 commands = - black --check --diff . + ruff format --check --diff . deps = - black + ruff~=0.11.2 skip_install = true [testenv:lint]