Fix style.

This commit is contained in:
Jelmer Vernooij 2021-03-01 19:01:52 +00:00
parent 1741622d85
commit f8d269b6e5
18 changed files with 337 additions and 317 deletions

View file

@ -17,13 +17,11 @@
class UnsatisfiedRequirements(Exception):
def __init__(self, reqs):
self.requirements = reqs
class Resolver(object):
def install(self, requirements):
raise NotImplementedError(self.install)
@ -38,7 +36,6 @@ class Resolver(object):
class CPANResolver(Resolver):
def __init__(self, session):
self.session = session
@ -47,6 +44,7 @@ class CPANResolver(Resolver):
def install(self, requirements):
from ..requirements import PerlModuleRequirement
missing = []
for requirement in requirements:
if not isinstance(requirement, PerlModuleRequirement):
@ -55,7 +53,8 @@ class CPANResolver(Resolver):
# TODO(jelmer): Specify -T to skip tests?
self.session.check_call(
["cpan", "-i", requirement.module],
user="root", env={"PERL_MM_USE_DEFAULT": "1"}
user="root",
env={"PERL_MM_USE_DEFAULT": "1"},
)
if missing:
raise UnsatisfiedRequirements(missing)
@ -65,7 +64,6 @@ class CPANResolver(Resolver):
class HackageResolver(Resolver):
def __init__(self, session):
self.session = session
@ -74,14 +72,15 @@ class HackageResolver(Resolver):
def install(self, requirements):
from ..requirements import HaskellPackageRequirement
missing = []
for requirement in requirements:
if not isinstance(requirement, HaskellPackageRequirement):
missing.append(requirement)
continue
self.session.check_call(
["cabal", "install", requirement.package],
user="root")
["cabal", "install", requirement.package], user="root"
)
if missing:
raise UnsatisfiedRequirements(missing)
@ -90,7 +89,6 @@ class HackageResolver(Resolver):
class CargoResolver(Resolver):
def __init__(self, session):
self.session = session
@ -99,14 +97,15 @@ class CargoResolver(Resolver):
def install(self, requirements):
from ..requirements import CargoCrateRequirement
missing = []
for requirement in requirements:
if not isinstance(requirement, CargoCrateRequirement):
missing.append(requirement)
continue
self.session.check_call(
["cargo", "install", requirement.crate],
user="root")
["cargo", "install", requirement.crate], user="root"
)
if missing:
raise UnsatisfiedRequirements(missing)
@ -115,7 +114,6 @@ class CargoResolver(Resolver):
class PypiResolver(Resolver):
def __init__(self, session):
self.session = session
@ -124,6 +122,7 @@ class PypiResolver(Resolver):
def install(self, requirements):
from ..requirements import PythonPackageRequirement
missing = []
for requirement in requirements:
if not isinstance(requirement, PythonPackageRequirement):
@ -143,7 +142,6 @@ NPM_COMMAND_PACKAGES = {
class NpmResolver(Resolver):
def __init__(self, session):
self.session = session
@ -152,6 +150,7 @@ class NpmResolver(Resolver):
def install(self, requirements):
from ..requirements import NodePackageRequirement
missing = []
for requirement in requirements:
if not isinstance(requirement, NodePackageRequirement):
@ -191,12 +190,15 @@ class StackedResolver(Resolver):
def native_resolvers(session):
return StackedResolver([
CPANResolver(session),
PypiResolver(session),
NpmResolver(session),
CargoResolver(session),
HackageResolver(session)])
return StackedResolver(
[
CPANResolver(session),
PypiResolver(session),
NpmResolver(session),
CargoResolver(session),
HackageResolver(session),
]
)
class ExplainResolver(Resolver):
@ -215,14 +217,18 @@ def auto_resolver(session):
# TODO(jelmer): if session is SchrootSession or if we're root, use apt
from .apt import AptResolver
from ..session.schroot import SchrootSession
user = session.check_output(['echo', '$USER']).decode().strip()
user = session.check_output(["echo", "$USER"]).decode().strip()
resolvers = []
if isinstance(session, SchrootSession) or user == 'root':
if isinstance(session, SchrootSession) or user == "root":
resolvers.append(AptResolver.from_session(session))
resolvers.extend([
CPANResolver(session),
PypiResolver(session),
NpmResolver(session),
CargoResolver(session),
HackageResolver(session)])
resolvers.extend(
[
CPANResolver(session),
PypiResolver(session),
NpmResolver(session),
CargoResolver(session),
HackageResolver(session),
]
)
return StackedResolver(resolvers)

View file

@ -32,7 +32,6 @@ from ..requirements import (
CHeaderRequirement,
PkgConfigRequirement,
PathRequirement,
Requirement,
JavaScriptRuntimeRequirement,
ValaPackageRequirement,
RubyGemRequirement,
@ -55,20 +54,19 @@ from ..requirements import (
AutoconfMacroRequirement,
PythonModuleRequirement,
PythonPackageRequirement,
)
)
class AptRequirement(Requirement):
def __init__(self, relations):
super(AptRequirement, self).__init__('apt')
super(AptRequirement, self).__init__("apt")
self.relations = relations
@classmethod
def simple(cls, package, minimum_version=None):
rel = {'name': package}
rel = {"name": package}
if minimum_version is not None:
rel['version'] = ('>=', minimum_version)
rel["version"] = (">=", minimum_version)
return cls([[rel]])
@classmethod
@ -81,35 +79,50 @@ class AptRequirement(Requirement):
def touches_package(self, package):
for rel in self.relations:
for entry in rel:
if entry['name'] == package:
if entry["name"] == package:
return True
return False
def python_spec_to_apt_rels(pkg_name, specs):
# TODO(jelmer): Dealing with epoch, etc?
if not specs:
return [[{"name": pkg_name}]]
else:
rels = []
for spec in specs:
c = {">=": ">=", "<=": "<=", "<": "<<", ">": ">>", "=": "="}[spec[0]]
rels.append([{"name": pkg_name, "version": (c, Version(spec[1]))}])
return rels
def get_package_for_python_package(apt_mgr, package, python_version, specs=None):
if python_version == "pypy":
pkg_name = apt_mgr.get_package_for_paths(
["/usr/lib/pypy/dist-packages/%s-.*.egg-info" % package],
regex=True)
["/usr/lib/pypy/dist-packages/%s-.*.egg-info" % package.replace("-", "_")],
regex=True,
)
elif python_version == "cpython2":
pkg_name = apt_mgr.get_package_for_paths(
["/usr/lib/python2\\.[0-9]/dist-packages/%s-.*.egg-info" % package],
regex=True)
[
"/usr/lib/python2\\.[0-9]/dist-packages/%s-.*.egg-info"
% package.replace("-", "_")
],
regex=True,
)
elif python_version == "cpython3":
pkg_name = apt_mgr.get_package_for_paths(
["/usr/lib/python3/dist-packages/%s-.*.egg-info" % package],
regex=True)
[
"/usr/lib/python3/dist-packages/%s-.*.egg-info"
% package.replace("-", "_")
],
regex=True,
)
else:
raise NotImplementedError
if pkg_name is None:
return None
# TODO(jelmer): Dealing with epoch, etc?
if not specs:
rels = [[{'name': pkg_name}]]
else:
rels = []
for spec in specs:
rels.append([{'name': pkg_name, 'version': (spec[0], Version(spec[1]))}])
rels = python_spec_to_apt_rels(pkg_name, specs)
return AptRequirement(rels)
@ -169,13 +182,7 @@ def get_package_for_python_module(apt_mgr, module, python_version, specs):
pkg_name = apt_mgr.get_package_for_paths(paths, regex=True)
if pkg_name is None:
return None
rels = []
if not specs:
rels = [[{'name': pkg_name}]]
else:
rels = []
for spec in specs:
rels.append([{'name': pkg_name, 'version': (spec[0], Version(spec[1]))}])
rels = python_spec_to_apt_rels(pkg_name, specs)
return AptRequirement(rels)
@ -184,8 +191,7 @@ def resolve_binary_req(apt_mgr, req):
paths = [req.binary_name]
else:
paths = [
posixpath.join(dirname, req.binary_name)
for dirname in ["/usr/bin", "/bin"]
posixpath.join(dirname, req.binary_name) for dirname in ["/usr/bin", "/bin"]
]
pkg_name = apt_mgr.get_package_for_paths(paths)
if pkg_name is not None:
@ -200,7 +206,8 @@ def resolve_pkg_config_req(apt_mgr, req):
if package is None:
package = apt_mgr.get_package_for_paths(
[posixpath.join("/usr/lib", ".*", "pkgconfig", req.module + ".pc")],
regex=True)
regex=True,
)
if package is not None:
return AptRequirement.simple(package, minimum_version=req.minimum_version)
return None
@ -228,7 +235,8 @@ def resolve_c_header_req(apt_mgr, req):
def resolve_js_runtime_req(apt_mgr, req):
package = apt_mgr.get_package_for_paths(
["/usr/bin/node", "/usr/bin/duk"], regex=False)
["/usr/bin/node", "/usr/bin/duk"], regex=False
)
if package is not None:
return AptRequirement.simple(package)
return None
@ -249,8 +257,7 @@ def resolve_ruby_gem_req(apt_mgr, req):
"specifications/%s-.*\\.gemspec" % req.gem
)
]
package = apt_mgr.get_package_for_paths(
paths, regex=True)
package = apt_mgr.get_package_for_paths(paths, regex=True)
if package is not None:
return AptRequirement.simple(package, minimum_version=req.minimum_version)
return None
@ -258,8 +265,7 @@ def resolve_ruby_gem_req(apt_mgr, req):
def resolve_go_package_req(apt_mgr, req):
package = apt_mgr.get_package_for_paths(
[posixpath.join("/usr/share/gocode/src", req.package, ".*")],
regex=True
[posixpath.join("/usr/share/gocode/src", req.package, ".*")], regex=True
)
if package is not None:
return AptRequirement.simple(package)
@ -368,7 +374,8 @@ def resolve_java_class_req(apt_mgr, req):
# system :(
# TODO(jelmer): Call in session
output = apt_mgr.session.check_output(
["java-propose-classpath", "-c" + req.classname])
["java-propose-classpath", "-c" + req.classname]
)
classpath = [p for p in output.decode().strip(":").strip().split(":") if p]
if not classpath:
logging.warning("unable to find classpath for %s", req.classname)
@ -422,7 +429,7 @@ def resolve_maven_artifact_req(apt_mgr, req):
def resolve_gnome_common_req(apt_mgr, req):
return AptRequirement.simple('gnome-common')
return AptRequirement.simple("gnome-common")
def resolve_jdk_file_req(apt_mgr, req):
@ -438,8 +445,7 @@ def resolve_perl_module_req(apt_mgr, req):
if req.inc is None:
if req.filename is None:
paths = [posixpath.join(inc, req.relfilename)
for inc in DEFAULT_PERL_PATHS]
paths = [posixpath.join(inc, req.relfilename) for inc in DEFAULT_PERL_PATHS]
elif not posixpath.isabs(req.filename):
return False
else:
@ -495,9 +501,13 @@ def resolve_python_module_req(apt_mgr, req):
def resolve_python_package_req(apt_mgr, req):
if req.python_version == 2:
return get_package_for_python_package(apt_mgr, req.package, "cpython2", req.specs)
return get_package_for_python_package(
apt_mgr, req.package, "cpython2", req.specs
)
elif req.python_version in (None, 3):
return get_package_for_python_package(apt_mgr, req.package, "cpython3", req.specs)
return get_package_for_python_package(
apt_mgr, req.package, "cpython3", req.specs
)
else:
return None
@ -540,7 +550,6 @@ def resolve_requirement_apt(apt_mgr, req: Requirement) -> AptRequirement:
class AptResolver(Resolver):
def __init__(self, apt):
self.apt = apt
@ -570,8 +579,9 @@ class AptResolver(Resolver):
else:
apt_requirements.append(apt_req)
if apt_requirements:
self.apt.satisfy([PkgRelation.str(chain(*[
r.relations for r in apt_requirements]))])
self.apt.satisfy(
[PkgRelation.str(chain(*[r.relations for r in apt_requirements]))]
)
if still_missing:
raise UnsatisfiedRequirements(still_missing)