| 53 | |
| 54 | |
| 55 | def _update(old_req, name, version): |
| 56 | parsedreq = parse_req_from_line(old_req.requirement, old_req.line_source) |
| 57 | assert parsedreq.requirement.name == name |
| 58 | specs = parsedreq.requirement.specifier |
| 59 | if len(specs) == 0: |
| 60 | # name-only dep. Nothing to do. Skipping. |
| 61 | return None |
| 62 | elif len(specs) > 1: |
| 63 | LOG.warning( |
| 64 | "Cannot automatically update comma separated version specifier: %s", specs |
| 65 | ) |
| 66 | return None |
| 67 | spec = tuple(specs)[0] |
| 68 | if spec.version != version: |
| 69 | if spec.operator != "==": |
| 70 | LOG.warning( |
| 71 | "Cannot safely auto-change version specifier of %s from %s%s to ==%s", |
| 72 | name, |
| 73 | spec.operator, |
| 74 | spec.version, |
| 75 | version, |
| 76 | ) |
| 77 | else: |
| 78 | # only change pins; ignore any version range |
| 79 | new_spec = spec.__class__(f"=={version}", spec.prereleases or None) |
| 80 | new_specs = specs.__class__([new_spec], specs.prereleases or None) |
| 81 | new_req = copy.deepcopy(parsedreq.requirement) |
| 82 | new_req.specifier = new_specs |
| 83 | return str(new_req) |
| 84 | return None |
| 85 | |
| 86 | |
| 87 | def plan_update(old_reqs, name, version, reqs_updates): |