python-update-checker 1.3.0__tar.gz → 1.4.0__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 (25) hide show
  1. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/PKG-INFO +16 -1
  2. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/README.md +15 -0
  3. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/pyproject.toml +4 -4
  4. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/pyproject.toml.orig +5 -5
  5. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/src/puc/__init__.py +1 -1
  6. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/src/puc/pyprojecttoml.py +29 -0
  7. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/tests/data/pyproject.toml +11 -1
  8. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/tests/test_pyproject_toml.py +3 -0
  9. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/.gitignore +0 -0
  10. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/.ruff.toml +0 -0
  11. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/Makefile +0 -0
  12. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/scripts/install_dev.sh +0 -0
  13. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/src/puc/cli.py +0 -0
  14. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/src/puc/dependencies.py +0 -0
  15. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/src/puc/logging.py +0 -0
  16. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/src/puc/requirementstxt.py +0 -0
  17. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/src/puc/uvlock.py +0 -0
  18. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/tests/__init__.py +0 -0
  19. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/tests/data/other-requirements.txt +0 -0
  20. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/tests/data/pyproject_compatible.toml +0 -0
  21. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/tests/data/requirements.txt +0 -0
  22. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/tests/data/uv.lock +0 -0
  23. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/tests/test_latest.py +0 -0
  24. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/tests/test_requirements_txt.py +0 -0
  25. {python_update_checker-1.3.0 → python_update_checker-1.4.0}/tests/test_uv_lock.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-update-checker
3
- Version: 1.3.0
3
+ Version: 1.4.0
4
4
  License-Expression: GPL-3.0-only
5
5
  Classifier: Development Status :: 5 - Production/Stable
6
6
  Classifier: Environment :: Console
@@ -48,6 +48,8 @@ uv sync
48
48
  * supports pyproject.toml, uv.lock and requirements.txt formats
49
49
  * supports `[project.dependencies]`, `[project.optional-dependencies]`
50
50
  and `[dependency-groups]` in pyproject.toml
51
+ * supports legacy dependency format `[tool.uv.dev-dependencies]`
52
+ in pyproject.toml
51
53
  * supports recursive references (-r) in requirements.txt formats
52
54
  * can run in check only mode, ie. it checks if updates are available
53
55
  * limit updates to specific packages
@@ -126,6 +128,19 @@ Dependencies are
126
128
 
127
129
  puc needs Python >= 3.11 since it uses the tomllib Python module.
128
130
 
131
+ ## Updating minimum version requirements
132
+
133
+ Dependencies like `requests>=1.12` or `django>5` specify a
134
+ minimum version requirement.
135
+
136
+ Minimum requirements are necessary to work with different versioned
137
+ dependencies, since different distributions package different
138
+ versions of those dependencies.
139
+ Minimum requirements change when the project uses a
140
+ feature that is only available in newer versions of a dependency.
141
+ This cannot be determined automatically by puc.
142
+ So minimum version requirements should be updated manually.
143
+
129
144
  ## Limitations
130
145
 
131
146
  * No support for custom dependency formats in pyproject.toml
@@ -26,6 +26,8 @@ uv sync
26
26
  * supports pyproject.toml, uv.lock and requirements.txt formats
27
27
  * supports `[project.dependencies]`, `[project.optional-dependencies]`
28
28
  and `[dependency-groups]` in pyproject.toml
29
+ * supports legacy dependency format `[tool.uv.dev-dependencies]`
30
+ in pyproject.toml
29
31
  * supports recursive references (-r) in requirements.txt formats
30
32
  * can run in check only mode, ie. it checks if updates are available
31
33
  * limit updates to specific packages
@@ -104,6 +106,19 @@ Dependencies are
104
106
 
105
107
  puc needs Python >= 3.11 since it uses the tomllib Python module.
106
108
 
109
+ ## Updating minimum version requirements
110
+
111
+ Dependencies like `requests>=1.12` or `django>5` specify a
112
+ minimum version requirement.
113
+
114
+ Minimum requirements are necessary to work with different versioned
115
+ dependencies, since different distributions package different
116
+ versions of those dependencies.
117
+ Minimum requirements change when the project uses a
118
+ feature that is only available in newer versions of a dependency.
119
+ This cannot be determined automatically by puc.
120
+ So minimum version requirements should be updated manually.
121
+
107
122
  ## Limitations
108
123
 
109
124
  * No support for custom dependency formats in pyproject.toml
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-update-checker"
3
- version = "1.3.0"
3
+ version = "1.4.0"
4
4
  readme = "README.md"
5
5
  requires-python = ">=3.11"
6
6
  license = "GPL-3.0-only"
@@ -33,9 +33,9 @@ dev = [
33
33
  "bump2version==1.0.1",
34
34
  "pytest==9.1.1",
35
35
  "ruff==0.16.5",
36
- "rumdl==0.2.62",
36
+ "rumdl==0.2.63",
37
37
  "tombi==1.5.0",
38
- "ty==0.0.75",
38
+ "ty==0.0.77",
39
39
  "zizmor==1.30.0",
40
40
  ]
41
41
 
@@ -45,7 +45,7 @@ build-backend = "uv_build"
45
45
 
46
46
  [tool.project]
47
47
  python_version_dev = "3.14.7"
48
- uv_version_dev = "0.12.10"
48
+ uv_version_dev = "0.12.11"
49
49
 
50
50
  [tool.uv.build-backend]
51
51
  module-name = "puc"
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "python-update-checker"
3
- version = "1.3.0"
3
+ version = "1.4.0"
4
4
  readme = "README.md"
5
5
  requires-python = ">=3.11"
6
6
  license = "GPL-3.0-only"
@@ -18,7 +18,7 @@ classifiers = [
18
18
  "Topic :: Software Development :: Build Tools",
19
19
  ]
20
20
  dependencies = [
21
- # track compatibility for dependencies, do not pin
21
+ # track compatibility, do not pin
22
22
  "packaging>=26.1",
23
23
  ]
24
24
  license_files = [
@@ -44,11 +44,11 @@ dev = [
44
44
  # for python code linting
45
45
  "ruff==0.16.5",
46
46
  # Markdown style checking and formatting
47
- "rumdl==0.2.62",
47
+ "rumdl==0.2.63",
48
48
  # reformat toml files
49
49
  "tombi==1.5.0",
50
50
  # for python type checking
51
- "ty==0.0.75",
51
+ "ty==0.0.77",
52
52
  # for auditing github actions
53
53
  "zizmor==1.30.0",
54
54
  ]
@@ -60,7 +60,7 @@ build-backend = "uv_build"
60
60
  [tool.project]
61
61
  # pin versions of Python and uv for development
62
62
  python_version_dev = "3.14.7"
63
- uv_version_dev = "0.12.10"
63
+ uv_version_dev = "0.12.11"
64
64
 
65
65
  [tool.uv.build-backend]
66
66
  module-name = "puc"
@@ -2,4 +2,4 @@
2
2
  # Copyright: GPL-v3
3
3
  """module file"""
4
4
 
5
- __version__ = "1.3.0"
5
+ __version__ = "1.4.0"
@@ -47,6 +47,11 @@ def handle_pyproject_toml(
47
47
  if not project:
48
48
  logger.warning(f"no project defined in {pyproject_path}")
49
49
  return updatable
50
+ if pyproject.get("tool", {}).get("poetry", {}).get("dependencies", {}):
51
+ logger.warning(f"[tool.poetry.dependencies] detected in {pyproject_path}")
52
+ logger.warning(
53
+ "consider migrating to uv, see https://docs.astral.sh/uv/guides/migration/"
54
+ )
50
55
  projectname = project.get("name", None)
51
56
  logger.debug(f"found project name {projectname}")
52
57
  # project dependencies
@@ -94,6 +99,30 @@ def handle_pyproject_toml(
94
99
  constraint_file=constraint_file,
95
100
  color=color,
96
101
  )
102
+ # update legacy uv dev dependencies
103
+ # See https://docs.astral.sh/uv/concepts/projects/dependencies/#legacy-dev-dependencies
104
+ tool_uv = pyproject.get("tool", {}).get("uv", {})
105
+ deps = tool_uv.get("dev-dependencies", [])
106
+ if deps:
107
+ logger.warning(
108
+ f"Found legacy tool.uv.dev-dependencies in {pyproject_path}, replace with dependency-groups.dev"
109
+ )
110
+ logger.warning(
111
+ "See https://docs.astral.sh/uv/concepts/projects/dependencies/#development-dependencies"
112
+ )
113
+ updatable += update_pyproject_dependencies(
114
+ deps,
115
+ project_dir,
116
+ projectname,
117
+ group="dev",
118
+ command=command,
119
+ packages=packages,
120
+ exclude_newer=exclude_newer,
121
+ exclude_newer_package=exclude_newer_package,
122
+ exclude_packages=exclude_packages,
123
+ constraint_file=constraint_file,
124
+ color=color,
125
+ )
97
126
  if command == "update":
98
127
  logger.info(f"updated {updatable} package version(s) in {pyproject_path}")
99
128
  return updatable
@@ -44,4 +44,14 @@ dev = [
44
44
 
45
45
  env_dev = [
46
46
  {include-group = "dev"},
47
- ]
47
+ ]
48
+
49
+ # legacy dev dependencies of uv
50
+ [tool.uv]
51
+ dev-dependencies = [
52
+ "tombi==1.4.0",
53
+ ]
54
+
55
+ # trigger poetry warning
56
+ [tool.poetry.dependencies]
57
+ pytest = "^5.2"
@@ -46,6 +46,7 @@ class PyprojectTomlTest(unittest.TestCase):
46
46
  self.assertIn("found update 'tensorflow==", output)
47
47
  self.assertIn("found update 'certifi===", output)
48
48
  self.assertIn("skip excluded package 'fragilicous'", output)
49
+ self.assertIn("[tool.poetry.dependencies] detected", output)
49
50
 
50
51
  @needs_program('uv')
51
52
  def test_pyproject_check_package(self):
@@ -76,6 +77,7 @@ class PyprojectTomlTest(unittest.TestCase):
76
77
  "ruff ==0.15.9",
77
78
  "tensorflow==2.14.0",
78
79
  "certifi===2026.1.4",
80
+ "tombi==1.4.0",
79
81
  )
80
82
  with open(filename) as f:
81
83
  content = f.read()
@@ -97,6 +99,7 @@ class PyprojectTomlTest(unittest.TestCase):
97
99
  self.assertIn("updating 'ruff ==", output)
98
100
  self.assertIn("updating 'tensorflow==", output)
99
101
  self.assertIn("updating 'certifi===", output)
102
+ self.assertIn("updating 'tombi==", output)
100
103
  self.assertIn("skip excluded package 'fragilicous'", output)
101
104
  # check that old package versions have been updated
102
105
  with open(filename) as f: