Skip to content

Commit

Permalink
Stop generating Python 2 markers for dependency updates (#19386)
Browse files Browse the repository at this point in the history
  • Loading branch information
iliakur authored Jan 14, 2025
1 parent 98fd839 commit 18d32c1
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 40 deletions.
1 change: 1 addition & 0 deletions ddev/changelog.d/19386.fixed
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Stop generating Python 2 markers for dependency updates.
22 changes: 4 additions & 18 deletions ddev/src/ddev/cli/dep/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ def create_dependency_data():
# dependency name ->
# Python major version ->
# dependency definition -> set of checks with definition
return defaultdict(lambda: {'py2': defaultdict(set), 'py3': defaultdict(set)})
return defaultdict(lambda: {'py3': defaultdict(set)})


def load_dependency_data_from_requirements(req_file, dependencies, errors, check_name=None):
Expand Down Expand Up @@ -144,26 +144,12 @@ def load_dependency_data_from_metadata(integration, dependencies, errors):


def set_project_dependency(project, dependency, check_name):
if 'python_version <' in dependency:
project['py2'][dependency].add(check_name)
elif 'python_version >' in dependency:
project['py3'][dependency].add(check_name)
else:
project['py2'][dependency].add(check_name)
project['py3'][dependency].add(check_name)
project['py3'][dependency].add(check_name)


def update_project_dependency(project, dependency):
if 'python_version <' in dependency:
project['py2'][dependency] = project['py2'].popitem()[1]
return project['py2'][dependency]
elif 'python_version >' in dependency:
project['py3'][dependency] = project['py3'].popitem()[1]
return project['py3'][dependency]
else:
project['py2'][dependency] = project['py2'].popitem()[1]
project['py3'][dependency] = project['py3'].popitem()[1]
return project['py2'][dependency] | project['py3'][dependency]
project['py3'][dependency] = project['py3'].popitem()[1]
return project['py3'][dependency]


def get_normalized_dependency(requirement):
Expand Down
34 changes: 13 additions & 21 deletions ddev/src/ddev/cli/dep/updates.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
from collections import defaultdict

import click
from packaging.markers import Marker
from packaging.requirements import Requirement
from packaging.specifiers import SpecifierSet
from packaging.utils import canonicalize_name
Expand Down Expand Up @@ -52,29 +51,22 @@ def updates(app, ctx, sync_dependencies, include_security_deps, batch_size):
elif batch_size is not None and len(updated_packages) >= batch_size:
break

new_python_versions = package_data[name]
dropped_py2 = len(set(new_python_versions.values())) > 1
for python_version, package_version in new_python_versions.items():
dependency_definitions = python_versions[python_version]
if not dependency_definitions or package_version is None:
continue
dependency_definition, checks = dependency_definitions.popitem()
python_version = 'py3'
package_version = package_data[name][python_version]
dependency_definitions = python_versions[python_version]
if not dependency_definitions or package_version is None:
continue
dependency_definition, checks = dependency_definitions.popitem()

requirement = Requirement(dependency_definition)
requirement.specifier = SpecifierSet(f'=={package_version}')
if dropped_py2 and 'python_version' not in dependency_definition:
python_marker = f'python_version {"<" if python_version == "py2" else ">"} "3.0"'
if not requirement.marker:
requirement.marker = Marker(python_marker)
else:
requirement.marker = Marker(f'{requirement.marker} and {python_marker}')
requirement = Requirement(dependency_definition)
requirement.specifier = SpecifierSet(f'=={package_version}')

new_dependency_definition = get_normalized_dependency(requirement)
new_dependency_definition = get_normalized_dependency(requirement)

dependency_definitions[new_dependency_definition] = checks
if dependency_definition != new_dependency_definition:
version_updates[name][package_version].add(python_version)
updated_packages.add(name)
dependency_definitions[new_dependency_definition] = checks
if dependency_definition != new_dependency_definition:
version_updates[name][package_version].add(python_version)
updated_packages.add(name)

if sync_dependencies:
if updated_packages:
Expand Down
2 changes: 1 addition & 1 deletion ddev/tests/cli/test_dep.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ def test_show_updates(self, ddev):
assert (
result.output
== '''1 dependencies are out of sync:
dep-a can be updated to version 1.2.3 on py2 and py3
dep-a can be updated to version 1.2.3 on py3
'''
)
assert result.exit_code != 0
Expand Down

0 comments on commit 18d32c1

Please sign in to comment.