def edit(reqs, name, replacement): key = requirement.canonical_name(name) if not replacement: reqs.pop(key, None) else: reqs[key] = [ (requirement.Requirement('', '', '', '', replacement), '')] result = [] for entries in reqs.values(): for entry, _ in entries: result.append(entry) return requirement.Requirements(sorted(result))
def edit(reqs, name, replacement): key = requirement.canonical_name(name) if not replacement: reqs.pop(key, None) else: reqs[key] = [(requirement.Requirement('', '', '', '', replacement), '')] result = [] for entries in reqs.values(): for entry, _ in entries: result.append(entry) return requirement.Requirements(sorted(result))
def _combine_freezes(freezes, blacklist=None): """Combine multiple freezes into a single structure. This deals with the variation between different python versions by generating environment markers when different pythons need different versions of a dependency. :param freezes: A list of (python_version, frozen_requirements) tuples. :param blacklist: An iterable of package names to exclude. These packages won't be included in the output. :return: A list of '\n' terminated lines for a requirements file. """ packages = {} # {package : {version : [py_version]}} excludes = frozenset((requirement.canonical_name(s) for s in blacklist) if blacklist else ()) reference_versions = [] for py_version, freeze in freezes: if py_version in reference_versions: raise Exception("Duplicate python %s" % py_version) reference_versions.append(py_version) for package, version in freeze: packages.setdefault( package, {}).setdefault(version, []).append(py_version) for package, versions in sorted(packages.items()): if package.lower() in excludes: continue if (len(versions) != 1 or list(versions.values())[0] != reference_versions): # markers for version, py_versions in sorted(versions.items()): # Once the ecosystem matures, we can consider using OR. for py_version in sorted(py_versions): yield ( "%s===%s;python_version=='%s'\n" % (package, version, py_version)) else: # no markers yield '%s===%s\n' % (package, list(versions.keys())[0])
def test_underscores(self): self.assertEqual('foo-bar', requirement.canonical_name('Foo_bar'))