(dependencies, python_version)
| 41 | |
| 42 | |
| 43 | def _get_minimum_versions(dependencies, python_version): |
| 44 | min_versions = {} |
| 45 | for dependency in dependencies: |
| 46 | if '@' in dependency: |
| 47 | name, url = dependency.split(' @ ') |
| 48 | min_versions[name] = f'{url}#egg={name}' |
| 49 | continue |
| 50 | |
| 51 | req = Requirement(dependency) |
| 52 | if ';' in dependency: |
| 53 | marker = req.marker |
| 54 | if marker and not marker.evaluate({'python_version': python_version}): |
| 55 | continue # Skip this dependency if the marker does not apply to the current Python version |
| 56 | |
| 57 | if req.name not in min_versions: |
| 58 | min_version = next( |
| 59 | (spec.version for spec in req.specifier if spec.operator in ('>=', '==')), None |
| 60 | ) |
| 61 | if min_version: |
| 62 | min_versions[req.name] = f'{req.name}=={min_version}' |
| 63 | |
| 64 | elif '@' not in min_versions[req.name]: |
| 65 | existing_version = Version(min_versions[req.name].split('==')[1]) |
| 66 | new_version = next( |
| 67 | (spec.version for spec in req.specifier if spec.operator in ('>=', '==')), |
| 68 | existing_version, |
| 69 | ) |
| 70 | if isinstance(new_version, str): |
| 71 | new_version = Version(new_version) |
| 72 | if new_version > existing_version: |
| 73 | min_versions[req.name] = ( |
| 74 | f'{req.name}=={new_version}' # Change when a valid newer version is found |
| 75 | ) |
| 76 | |
| 77 | return list(min_versions.values()) |
| 78 | |
| 79 | |
| 80 | @task |
no outgoing calls