Example #1
0
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))
Example #2
0
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))
Example #3
0
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])
Example #4
0
 def test_underscores(self):
     self.assertEqual('foo-bar', requirement.canonical_name('Foo_bar'))
Example #5
0
 def test_underscores(self):
     self.assertEqual('foo-bar', requirement.canonical_name('Foo_bar'))