django-codemod 2.4.4__tar.gz → 2.4.6__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. {django_codemod-2.4.4/src/django_codemod.egg-info → django_codemod-2.4.6}/PKG-INFO +5 -5
  2. {django_codemod-2.4.4 → django_codemod-2.4.6}/README.md +2 -2
  3. {django_codemod-2.4.4 → django_codemod-2.4.6}/pyproject.toml +18 -36
  4. django_codemod-2.4.6/src/django_codemod/__init__.py +1 -0
  5. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/cli.py +2 -1
  6. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/base.py +2 -2
  7. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/models.py +7 -3
  8. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/signals.py +1 -1
  9. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/template_tags.py +2 -0
  10. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/urls.py +2 -0
  11. {django_codemod-2.4.4 → django_codemod-2.4.6/src/django_codemod.egg-info}/PKG-INFO +5 -5
  12. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod.egg-info/requires.txt +2 -2
  13. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/test_cli.py +5 -4
  14. django_codemod-2.4.4/src/django_codemod/__init__.py +0 -1
  15. {django_codemod-2.4.4 → django_codemod-2.4.6}/LICENSE +0 -0
  16. {django_codemod-2.4.4 → django_codemod-2.4.6}/MANIFEST.in +0 -0
  17. {django_codemod-2.4.4 → django_codemod-2.4.6}/docs/Makefile +0 -0
  18. {django_codemod-2.4.4 → django_codemod-2.4.6}/docs/conf.py +0 -0
  19. {django_codemod-2.4.4 → django_codemod-2.4.6}/docs/make.bat +0 -0
  20. {django_codemod-2.4.4 → django_codemod-2.4.6}/setup.cfg +0 -0
  21. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/commands.py +0 -0
  22. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/constants.py +0 -0
  23. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/feature_flags.py +0 -0
  24. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/path_utils.py +0 -0
  25. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/utils/__init__.py +0 -0
  26. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/utils/calls.py +0 -0
  27. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/__init__.py +0 -0
  28. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/admin.py +0 -0
  29. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/core.py +0 -0
  30. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/crypto.py +0 -0
  31. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/decorators.py +0 -0
  32. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/encoding.py +0 -0
  33. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/exceptions.py +0 -0
  34. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/forms.py +0 -0
  35. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/html.py +0 -0
  36. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/http.py +0 -0
  37. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/lru_cache.py +0 -0
  38. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/os_utils.py +0 -0
  39. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/paginator.py +0 -0
  40. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/postgres_fields.py +0 -0
  41. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/shortcuts.py +0 -0
  42. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/template_context.py +0 -0
  43. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/timezone.py +0 -0
  44. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod/visitors/translations.py +0 -0
  45. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod.egg-info/SOURCES.txt +0 -0
  46. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod.egg-info/dependency_links.txt +0 -0
  47. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod.egg-info/entry_points.txt +0 -0
  48. {django_codemod-2.4.4 → django_codemod-2.4.6}/src/django_codemod.egg-info/top_level.txt +0 -0
  49. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/__init__.py +0 -0
  50. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/test_e2e.sh +0 -0
  51. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/test_path_utils.py +0 -0
  52. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/__init__.py +0 -0
  53. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/base.py +0 -0
  54. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_admin.py +0 -0
  55. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_base.py +0 -0
  56. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_core.py +0 -0
  57. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_crypto.py +0 -0
  58. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_decorators.py +0 -0
  59. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_encoding.py +0 -0
  60. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_exceptions.py +0 -0
  61. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_forms.py +0 -0
  62. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_html.py +0 -0
  63. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_http.py +0 -0
  64. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_lru_cache.py +0 -0
  65. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_models.py +0 -0
  66. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_os_utils.py +0 -0
  67. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_paginator.py +0 -0
  68. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_postgres_fields.py +0 -0
  69. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_shortcuts.py +0 -0
  70. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_signals.py +0 -0
  71. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_template_context.py +0 -0
  72. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_template_tags.py +0 -0
  73. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_timezone.py +0 -0
  74. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_translations.py +0 -0
  75. {django_codemod-2.4.4 → django_codemod-2.4.6}/tests/visitors/test_urls.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-codemod
3
- Version: 2.4.4
3
+ Version: 2.4.6
4
4
  Summary: A command line tool to automatically fix Django deprecations.
5
5
  Author-email: Bruno Alla <alla.brunoo@gmail.com>
6
6
  License-Expression: MIT
@@ -25,9 +25,9 @@ Classifier: Topic :: Software Development :: Libraries
25
25
  Requires-Python: >=3.10
26
26
  Description-Content-Type: text/markdown
27
27
  License-File: LICENSE
28
- Requires-Dist: click<8.4
28
+ Requires-Dist: click<8.5
29
29
  Requires-Dist: libcst==1.8.6
30
- Requires-Dist: pathspec<1,>=0.6
30
+ Requires-Dist: pathspec<2,>=0.6
31
31
  Requires-Dist: rich>=10
32
32
  Requires-Dist: rich-click>=1
33
33
  Dynamic: license-file
@@ -57,8 +57,8 @@ Dynamic: license-file
57
57
  <a href="https://github.com/astral-sh/ruff">
58
58
  <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff">
59
59
  </a>
60
- <a href="https://github.com/pre-commit/pre-commit">
61
- <img src="https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=flat-square" alt="pre-commit">
60
+ <a href="https://github.com/j178/prek">
61
+ <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/j178/prek/master/docs/assets/badge-v0.json" alt="prek">
62
62
  </a>
63
63
  </p>
64
64
  <p align="center">
@@ -23,8 +23,8 @@
23
23
  <a href="https://github.com/astral-sh/ruff">
24
24
  <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff">
25
25
  </a>
26
- <a href="https://github.com/pre-commit/pre-commit">
27
- <img src="https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=flat-square" alt="pre-commit">
26
+ <a href="https://github.com/j178/prek">
27
+ <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/j178/prek/master/docs/assets/badge-v0.json" alt="prek">
28
28
  </a>
29
29
  </p>
30
30
  <p align="center">
@@ -4,7 +4,7 @@ requires = [ "setuptools>=77.0.3" ]
4
4
 
5
5
  [project]
6
6
  name = "django-codemod"
7
- version = "2.4.4"
7
+ version = "2.4.6"
8
8
  description = "A command line tool to automatically fix Django deprecations."
9
9
  readme = "README.md"
10
10
  keywords = [
@@ -30,11 +30,10 @@ classifiers = [
30
30
  "Programming Language :: Python :: 3.14",
31
31
  "Topic :: Software Development :: Libraries",
32
32
  ]
33
-
34
33
  dependencies = [
35
- "click<8.4",
34
+ "click<8.5",
36
35
  "libcst==1.8.6",
37
- "pathspec>=0.6,<1",
36
+ "pathspec>=0.6,<2",
38
37
  "rich>=10",
39
38
  "rich-click>=1",
40
39
  ]
@@ -52,6 +51,7 @@ dev = [
52
51
  "pytest>=9,<10",
53
52
  "pytest-cov>=7,<8",
54
53
  "pytest-mock>=3.3,<4",
54
+ "ty==0.0.37",
55
55
  ]
56
56
  docs = [
57
57
  "furo>=2023.5.20; python_version>='3.11'",
@@ -61,7 +61,6 @@ docs = [
61
61
 
62
62
  [tool.ruff]
63
63
  line-length = 88
64
-
65
64
  lint.select = [
66
65
  "B", # flake8-bugbear
67
66
  "C4", # flake8-comprehensions
@@ -99,31 +98,22 @@ lint.isort.known-first-party = [ "django_codemod", "tests" ]
99
98
  [tool.pyproject-fmt]
100
99
  max_supported_python = "3.14"
101
100
 
102
- [tool.pytest.ini_options]
103
- addopts = "-v -Wdefault --cov=django_codemod --cov-report=term-missing:skip-covered"
104
- pythonpath = [ "src" ]
101
+ [tool.ty]
102
+ terminal.error-on-warning = true
105
103
 
106
- [tool.coverage.run]
107
- branch = true
104
+ [tool.pytest]
105
+ minversion = "9.0"
106
+ addopts = [ "-v", "-Wdefault", "--cov=django_codemod", "--cov-report=term-missing:skip-covered" ]
107
+ pythonpath = [ "src" ]
108
108
 
109
- [tool.coverage.report]
110
- exclude_lines = [
109
+ [tool.coverage]
110
+ run.branch = true
111
+ report.exclude_lines = [
111
112
  "pragma: no cover",
112
113
  "raise AssertionError",
113
114
  "raise NotImplementedError",
114
115
  ]
115
116
 
116
- [tool.mypy]
117
- # suppress errors about unsatisfied imports
118
- ignore_missing_imports = true
119
-
120
- no_implicit_optional = true
121
-
122
- # ensure all execution paths are returning
123
- warn_no_return = true
124
-
125
- show_error_codes = true
126
-
127
117
  [tool.semantic_release]
128
118
  version_toml = [ "pyproject.toml:project.version" ]
129
119
  version_variables = [
@@ -135,20 +125,12 @@ uv lock
135
125
  git add uv.lock
136
126
  uv build
137
127
  """
138
-
139
- [tool.semantic_release.changelog]
140
- exclude_commit_patterns = [
128
+ branches.main.match = "main"
129
+ branches.noop.match = "(?!main$)"
130
+ branches.noop.prerelease = true
131
+ changelog.exclude_commit_patterns = [
141
132
  "chore.*",
142
133
  "ci.*",
143
134
  "Merge pull request .*",
144
135
  ]
145
-
146
- [tool.semantic_release.changelog.environment]
147
- keep_trailing_newline = true
148
-
149
- [tool.semantic_release.branches.main]
150
- match = "main"
151
-
152
- [tool.semantic_release.branches.noop]
153
- match = "(?!main$)"
154
- prerelease = true
136
+ changelog.environment.keep_trailing_newline = true
@@ -0,0 +1 @@
1
+ __version__ = "2.4.6"
@@ -5,6 +5,7 @@ from operator import attrgetter
5
5
  from pathlib import Path
6
6
 
7
7
  import rich_click as click
8
+ from click.exceptions import Exit
8
9
  from libcst.codemod import CodemodContext, parallel_exec_transform_with_prettyprint
9
10
  from rich.console import Console
10
11
  from rich.markdown import Markdown
@@ -203,7 +204,7 @@ def call_command(command_instance: BaseCodemodCommand, files: list[Path]):
203
204
  click.echo(f" - Failed to codemod {result.failures} files.")
204
205
  click.echo(f" - {result.warnings} warnings were generated.")
205
206
  if result.failures > 0:
206
- raise click.exceptions.Exit(1)
207
+ raise Exit(1)
207
208
 
208
209
 
209
210
  @djcodemod.command("list")
@@ -38,7 +38,7 @@ class IsTryImportProvider(BatchableMetadataProvider[bool]):
38
38
  def visit_Try(self, node: Try) -> None:
39
39
  self.try_level += 1
40
40
 
41
- def leave_Try(self, node: Try) -> None:
41
+ def leave_Try(self, original_node: Try) -> None:
42
42
  self.try_level -= 1
43
43
 
44
44
  def visit_ImportFrom(self, node: ImportFrom) -> None:
@@ -267,7 +267,7 @@ class BaseRenameTransformer(BaseDjCodemodTransformer, ABC):
267
267
 
268
268
  def resolve_scope(self, node: CSTNode) -> Scope:
269
269
  scopes_map = self.context.wrapper.resolve(ScopeProvider) # type: ignore
270
- return scopes_map[node] # type: ignore
270
+ return scopes_map[node]
271
271
 
272
272
  def save_import_scope(self, import_from: ImportFrom) -> None:
273
273
  scope = self.resolve_scope(import_from)
@@ -134,9 +134,13 @@ class ModelsPermalinkTransformer(BaseDjCodemodTransformer):
134
134
  def leave_Return(
135
135
  self, original_node: Return, updated_node: Return
136
136
  ) -> BaseSmallStatement | FlattenSentinel[BaseSmallStatement] | RemovalSentinel:
137
- if self.visiting_permalink_method and m.matches(
138
- updated_node.value,
139
- m.Tuple(), # type: ignore
137
+ if (
138
+ self.visiting_permalink_method
139
+ and updated_node.value is not None
140
+ and m.matches(
141
+ updated_node.value,
142
+ m.Tuple(),
143
+ )
140
144
  ):
141
145
  elem_0, *elem_1_3 = updated_node.value.elements[:3] # type: ignore
142
146
  args = (
@@ -89,7 +89,7 @@ class SignalDisconnectWeakTransformer(BaseDjCodemodTransformer):
89
89
  should_change = True
90
90
  else:
91
91
  updated_args.append(arg)
92
- last_comma = arg.comma # type: ignore
92
+ last_comma = arg.comma
93
93
  if should_change:
94
94
  # Make sure the end of line is formatted as initially
95
95
  updated_args[-1] = updated_args[-1].with_changes(comma=last_comma)
@@ -1,3 +1,5 @@
1
+ from __future__ import annotations
2
+
1
3
  from collections.abc import Generator, Sequence
2
4
 
3
5
  from libcst import (
@@ -57,6 +57,8 @@ class URLTransformer(BaseFuncRenameTransformer):
57
57
  raise PatternNotSupported()
58
58
  # Extract the URL pattern from the first argument
59
59
  pattern = first_arg.value.evaluated_value
60
+ if not isinstance(pattern, str):
61
+ raise PatternNotSupported()
60
62
  # If we reach this point, we might be able to use `path()`
61
63
  call = self.build_path_call(pattern, other_args)
62
64
  AddImportsVisitor.add_needed_import(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-codemod
3
- Version: 2.4.4
3
+ Version: 2.4.6
4
4
  Summary: A command line tool to automatically fix Django deprecations.
5
5
  Author-email: Bruno Alla <alla.brunoo@gmail.com>
6
6
  License-Expression: MIT
@@ -25,9 +25,9 @@ Classifier: Topic :: Software Development :: Libraries
25
25
  Requires-Python: >=3.10
26
26
  Description-Content-Type: text/markdown
27
27
  License-File: LICENSE
28
- Requires-Dist: click<8.4
28
+ Requires-Dist: click<8.5
29
29
  Requires-Dist: libcst==1.8.6
30
- Requires-Dist: pathspec<1,>=0.6
30
+ Requires-Dist: pathspec<2,>=0.6
31
31
  Requires-Dist: rich>=10
32
32
  Requires-Dist: rich-click>=1
33
33
  Dynamic: license-file
@@ -57,8 +57,8 @@ Dynamic: license-file
57
57
  <a href="https://github.com/astral-sh/ruff">
58
58
  <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff">
59
59
  </a>
60
- <a href="https://github.com/pre-commit/pre-commit">
61
- <img src="https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white&style=flat-square" alt="pre-commit">
60
+ <a href="https://github.com/j178/prek">
61
+ <img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/j178/prek/master/docs/assets/badge-v0.json" alt="prek">
62
62
  </a>
63
63
  </p>
64
64
  <p align="center">
@@ -1,5 +1,5 @@
1
- click<8.4
1
+ click<8.5
2
2
  libcst==1.8.6
3
- pathspec<1,>=0.6
3
+ pathspec<2,>=0.6
4
4
  rich>=10
5
5
  rich-click>=1
@@ -2,6 +2,7 @@ from pathlib import Path
2
2
 
3
3
  import click
4
4
  import pytest
5
+ from click.exceptions import Exit
5
6
  from click.testing import CliRunner
6
7
  from libcst.codemod import CodemodContext, ParallelTransformResult
7
8
 
@@ -131,7 +132,7 @@ def test_call_command_success(command_instance, mocker):
131
132
  successes=1, failures=0, warnings=0, skips=0
132
133
  )
133
134
 
134
- result = cli.call_command(command_instance, ".")
135
+ result = cli.call_command(command_instance, [Path(".")])
135
136
 
136
137
  assert result is None
137
138
 
@@ -145,8 +146,8 @@ def test_call_command_failure(command_instance, mocker):
145
146
  successes=0, failures=1, warnings=0, skips=0
146
147
  )
147
148
 
148
- with pytest.raises(click.exceptions.Exit):
149
- cli.call_command(command_instance, ".")
149
+ with pytest.raises(Exit):
150
+ cli.call_command(command_instance, [Path(".")])
150
151
 
151
152
 
152
153
  @pytest.mark.usefixtures("get_sources_mocked")
@@ -160,7 +161,7 @@ def test_call_command_interrupted(command_instance, mocker):
160
161
  )
161
162
 
162
163
  with pytest.raises(click.Abort):
163
- cli.call_command(command_instance, ".")
164
+ cli.call_command(command_instance, [Path(".")])
164
165
 
165
166
 
166
167
  def _verify_mapping(mapping, version_attr):
@@ -1 +0,0 @@
1
- __version__ = "2.4.4"
File without changes
File without changes