Format the coding style across the codebase using "black" and manual tweaks

The main benefit of this commit is that the use of double quotes
is now consistent.
This commit is contained in:
mprahl
2019-04-25 17:58:44 -04:00
parent 559f0dd922
commit 66c3f82160
78 changed files with 9050 additions and 7438 deletions

View File

@@ -36,13 +36,14 @@ class DBResolver(GenericResolver):
"""
Resolver using the MBS database
"""
backend = 'db'
backend = "db"
def __init__(self, config):
self.config = config
def _get_module(
self, name, stream, version, context, state=models.BUILD_STATES['ready'], strict=False,
self, name, stream, version, context, state=models.BUILD_STATES["ready"], strict=False
):
with models.make_session(self.config) as session:
mb = models.ModuleBuild.get_build_from_nsvc(
@@ -52,7 +53,7 @@ class DBResolver(GenericResolver):
if strict:
raise UnprocessableEntity(
'Cannot find any module builds for %s:%s' % (name, stream))
"Cannot find any module builds for %s:%s" % (name, stream))
def get_module_count(self, **kwargs):
"""
@@ -79,14 +80,22 @@ class DBResolver(GenericResolver):
# Cast the version as an integer so that we get proper ordering
module = query.order_by(
models.ModuleBuild.stream_version.desc(),
sqlalchemy.cast(models.ModuleBuild.version, db.BigInteger).desc()
sqlalchemy.cast(models.ModuleBuild.version, db.BigInteger).desc(),
).first()
if module:
return load_mmd(module.modulemd)
def get_module_modulemds(self, name, stream, version=None, context=None, strict=False,
stream_version_lte=False, virtual_streams=None):
def get_module_modulemds(
self,
name,
stream,
version=None,
context=None,
strict=False,
stream_version_lte=False,
virtual_streams=None,
):
"""
Gets the module modulemds from the resolver.
:param name: a string of the module's name
@@ -108,18 +117,18 @@ class DBResolver(GenericResolver):
mmd = self._get_module(name, stream, version, context, strict=strict)
if mmd is None:
return
return [load_mmd(mmd['modulemd'])]
return [load_mmd(mmd["modulemd"])]
with models.make_session(self.config) as session:
if not version and not context:
if (stream_version_lte and len(str(models.ModuleBuild.get_stream_version(
stream, right_pad=False))) >= 5):
if stream_version_lte and (
len(str(models.ModuleBuild.get_stream_version(stream, right_pad=False))) >= 5
):
stream_version = models.ModuleBuild.get_stream_version(stream)
builds = models.ModuleBuild.get_last_builds_in_stream_version_lte(
session, name, stream_version, virtual_streams)
else:
builds = models.ModuleBuild.get_last_builds_in_stream(
session, name, stream)
builds = models.ModuleBuild.get_last_builds_in_stream(session, name, stream)
else:
raise NotImplementedError(
"This combination of name/stream/version/context is not implemented")
@@ -146,7 +155,7 @@ class DBResolver(GenericResolver):
query = session.query(models.ModuleBuild)
query = query.filter_by(name=name, stream=stream, state=models.BUILD_STATES["ready"])
module_br_alias = aliased(models.ModuleBuild, name='module_br')
module_br_alias = aliased(models.ModuleBuild, name="module_br")
# Shorten this table name for clarity in the query below
mb_to_br = models.module_builds_to_module_buildrequires
# The following joins get added:
@@ -154,14 +163,17 @@ class DBResolver(GenericResolver):
# ON module_builds_to_module_buildrequires.module_id = module_builds.id
# JOIN module_builds AS module_br
# ON module_builds_to_module_buildrequires.module_buildrequire_id = module_br.id
query = query.join(mb_to_br, mb_to_br.c.module_id == models.ModuleBuild.id)\
.join(module_br_alias, mb_to_br.c.module_buildrequire_id == module_br_alias.id)
query = query.join(mb_to_br, mb_to_br.c.module_id == models.ModuleBuild.id).join(
module_br_alias, mb_to_br.c.module_buildrequire_id == module_br_alias.id)
# Get only modules buildrequiring particular base_module_nsvc
n, s, v, c = base_module_nsvc.split(":")
query = query.filter(
module_br_alias.name == n, module_br_alias.stream == s,
module_br_alias.version == v, module_br_alias.context == c)
module_br_alias.name == n,
module_br_alias.stream == s,
module_br_alias.version == v,
module_br_alias.context == c,
)
query = query.order_by(
sqlalchemy.cast(models.ModuleBuild.version, db.BigInteger).desc())
all_builds = query.all()
@@ -178,8 +190,12 @@ class DBResolver(GenericResolver):
builds.append(build)
mmds = [build.mmd() for build in builds]
nsvcs = [":".join([mmd.get_name(), mmd.get_stream(),
str(mmd.get_version()), mmd.get_context()]) for mmd in mmds]
nsvcs = [
":".join(
[mmd.get_name(), mmd.get_stream(), str(mmd.get_version()), mmd.get_context()]
)
for mmd in mmds
]
log.debug("Found: %r", nsvcs)
return mmds
@@ -198,12 +214,12 @@ class DBResolver(GenericResolver):
for key in keys:
results[key] = set()
with models.make_session(self.config) as session:
for module_name, module_info in mmd.get_xmd()['mbs']['buildrequires'].items():
for module_name, module_info in mmd.get_xmd()["mbs"]["buildrequires"].items():
local_modules = models.ModuleBuild.local_modules(
session, module_name, module_info['stream'])
session, module_name, module_info["stream"])
if local_modules:
local_module = local_modules[0]
log.info('Using local module {0!r} to resolve profiles.'.format(local_module))
log.info("Using local module {0!r} to resolve profiles.".format(local_module))
dep_mmd = local_module.mmd()
for key in keys:
if key in dep_mmd.get_profiles().keys():
@@ -211,12 +227,22 @@ class DBResolver(GenericResolver):
continue
build = models.ModuleBuild.get_build_from_nsvc(
session, module_name, module_info['stream'], module_info['version'],
module_info['context'], state=models.BUILD_STATES['ready'])
session,
module_name,
module_info["stream"],
module_info["version"],
module_info["context"],
state=models.BUILD_STATES["ready"],
)
if not build:
raise UnprocessableEntity('The module {}:{}:{}:{} was not found'.format(
module_name, module_info['stream'], module_info['version'],
module_info['context']))
raise UnprocessableEntity(
"The module {}:{}:{}:{} was not found".format(
module_name,
module_info["stream"],
module_info["version"],
module_info["context"],
)
)
dep_mmd = build.mmd()
# Take note of what rpms are in this dep's profile
@@ -227,8 +253,9 @@ class DBResolver(GenericResolver):
# Return the union of all rpms in all profiles of the given keys
return results
def get_module_build_dependencies(self, name=None, stream=None, version=None, context=None,
mmd=None, strict=False):
def get_module_build_dependencies(
self, name=None, stream=None, version=None, context=None, mmd=None, strict=False
):
"""
Returns a dictionary of koji_tag:[mmd, ...] of all the dependencies of input module.
@@ -247,44 +274,57 @@ class DBResolver(GenericResolver):
:return: a dictionary
"""
if mmd:
log.debug('get_module_build_dependencies(mmd={0!r} strict={1!r})'.format(mmd, strict))
log.debug("get_module_build_dependencies(mmd={0!r} strict={1!r})".format(mmd, strict))
elif any(x is None for x in [name, stream, version, context]):
raise RuntimeError('The name, stream, version, and/or context weren\'t specified')
raise RuntimeError("The name, stream, version, and/or context weren't specified")
else:
version = str(version)
log.debug('get_module_build_dependencies({0}, strict={1!r})'.format(
', '.join([name, stream, str(version), context]), strict))
log.debug(
"get_module_build_dependencies({0}, strict={1!r})".format(
", ".join([name, stream, str(version), context]), strict)
)
module_tags = {}
with models.make_session(self.config) as session:
if mmd:
queried_mmd = mmd
nsvc = ':'.join([
mmd.get_name(), mmd.get_stream(), str(mmd.get_version()),
mmd.get_context() or models.DEFAULT_MODULE_CONTEXT])
nsvc = ":".join([
mmd.get_name(),
mmd.get_stream(),
str(mmd.get_version()),
mmd.get_context() or models.DEFAULT_MODULE_CONTEXT,
])
else:
build = models.ModuleBuild.get_build_from_nsvc(
session, name, stream, version, context)
if not build:
raise UnprocessableEntity('The module {} was not found'.format(
':'.join([name, stream, version, context])))
raise UnprocessableEntity(
"The module {} was not found".format(
":".join([name, stream, version, context]))
)
queried_mmd = build.mmd()
nsvc = ':'.join([name, stream, version, context])
nsvc = ":".join([name, stream, version, context])
xmd_mbs = queried_mmd.get_xmd().get('mbs')
if not xmd_mbs or 'buildrequires' not in xmd_mbs.keys():
xmd_mbs = queried_mmd.get_xmd().get("mbs")
if not xmd_mbs or "buildrequires" not in xmd_mbs.keys():
raise RuntimeError(
'The module {} did not contain its modulemd or did not have '
'its xmd attribute filled out in MBS'.format(nsvc))
"The module {} did not contain its modulemd or did not have "
"its xmd attribute filled out in MBS".format(nsvc)
)
buildrequires = xmd_mbs['buildrequires']
buildrequires = xmd_mbs["buildrequires"]
for br_name, details in buildrequires.items():
build = models.ModuleBuild.get_build_from_nsvc(
session, br_name, details['stream'], details['version'], details['context'],
state=models.BUILD_STATES['ready'])
session,
br_name,
details["stream"],
details["version"],
details["context"],
state=models.BUILD_STATES["ready"],
)
if not build:
raise RuntimeError(
'Buildrequired module %s %r does not exist in MBS db' % (br_name, details))
"Buildrequired module %s %r does not exist in MBS db" % (br_name, details))
# If the buildrequire is a meta-data only module with no Koji tag set, then just
# skip it
@@ -325,11 +365,11 @@ class DBResolver(GenericResolver):
if local_modules:
local_build = local_modules[0]
new_requires[module_name] = {
'ref': None,
'stream': local_build.stream,
'version': local_build.version,
'context': local_build.context,
'koji_tag': local_build.koji_tag,
"ref": None,
"stream": local_build.stream,
"version": local_build.version,
"context": local_build.context,
"koji_tag": local_build.koji_tag,
}
continue
@@ -341,29 +381,31 @@ class DBResolver(GenericResolver):
session, module_name, module_stream, module_version, module_context)
if not build:
raise UnprocessableEntity('The module {} was not found'.format(nsvc))
raise UnprocessableEntity("The module {} was not found".format(nsvc))
commit_hash = None
mmd = build.mmd()
mbs_xmd = mmd.get_xmd().get('mbs')
if mbs_xmd and 'commit' in mbs_xmd.keys():
commit_hash = mbs_xmd['commit']
mbs_xmd = mmd.get_xmd().get("mbs")
if mbs_xmd and "commit" in mbs_xmd.keys():
commit_hash = mbs_xmd["commit"]
else:
raise RuntimeError(
'The module "{0}" didn\'t contain a commit hash in its xmd'
.format(module_name))
'The module "{0}" didn\'t contain a commit hash in its xmd'.format(
module_name)
)
if "mse" not in mbs_xmd.keys() or not mbs_xmd["mse"]:
raise RuntimeError(
'The module "{}" is not built using Module Stream Expansion. '
'Please rebuild this module first'.format(nsvc))
"Please rebuild this module first".format(nsvc)
)
new_requires[module_name] = {
'ref': commit_hash,
'stream': module_stream,
'version': build.version,
'context': build.context,
'koji_tag': build.koji_tag,
"ref": commit_hash,
"stream": module_stream,
"version": build.version,
"context": build.context,
"koji_tag": build.koji_tag,
}
return new_requires

View File

@@ -31,7 +31,8 @@ class LocalResolver(DBResolver):
It is subclass of DBResolver with small changes to DBResolver logic to fit
the offline local module builds. See particular methods for more information.
"""
backend = 'local'
backend = "local"
def get_buildrequired_modulemds(self, name, stream, base_module_nsvc):
"""

View File

@@ -64,7 +64,7 @@ class MBSResolver(GenericResolver):
"stream": stream,
"state": state,
"verbose": True,
"order_desc_by": "version"
"order_desc_by": "version",
}
if version is not None:
query["version"] = str(version)
@@ -72,8 +72,9 @@ class MBSResolver(GenericResolver):
query["context"] = context
return query
def _get_modules(self, name, stream, version=None, context=None, state="ready", strict=False,
**kwargs):
def _get_modules(
self, name, stream, version=None, context=None, state="ready", strict=False, **kwargs
):
"""Query and return modules from MBS with specific info
:param str name: module's name.
@@ -133,11 +134,7 @@ class MBSResolver(GenericResolver):
:return: the number of modules that match the provided filter
:rtype: int
"""
query = {
"page": 1,
"per_page": 1,
"short": True,
}
query = {"page": 1, "per_page": 1, "short": True}
query.update(kwargs)
res = self.session.get(self.mbs_prod_url, params=query)
if not res.ok:
@@ -171,8 +168,16 @@ class MBSResolver(GenericResolver):
if data["items"]:
return load_mmd(data["items"][0]["modulemd"])
def get_module_modulemds(self, name, stream, version=None, context=None, strict=False,
stream_version_lte=False, virtual_streams=None):
def get_module_modulemds(
self,
name,
stream,
version=None,
context=None,
strict=False,
stream_version_lte=False,
virtual_streams=None,
):
"""
Gets the module modulemds from the resolver.
:param name: a string of the module's name
@@ -197,8 +202,9 @@ class MBSResolver(GenericResolver):
return [m.mmd() for m in local_modules]
extra_args = {}
if (stream_version_lte and len(str(models.ModuleBuild.get_stream_version(
stream, right_pad=False))) >= 5):
if stream_version_lte and (
len(str(models.ModuleBuild.get_stream_version(stream, right_pad=False))) >= 5
):
stream_version = models.ModuleBuild.get_stream_version(stream)
extra_args["stream_version_lte"] = stream_version
@@ -212,7 +218,7 @@ class MBSResolver(GenericResolver):
mmds = []
for module in modules:
if module:
yaml = module['modulemd']
yaml = module["modulemd"]
if not yaml:
if strict:
@@ -236,9 +242,8 @@ class MBSResolver(GenericResolver):
:rtype: list
:return: List of modulemd metadata.
"""
modules = self._get_modules(name, stream, strict=False,
base_module_br=base_module_nsvc)
return [load_mmd(module['modulemd']) for module in modules]
modules = self._get_modules(name, stream, strict=False, base_module_br=base_module_nsvc)
return [load_mmd(module["modulemd"]) for module in modules]
def resolve_profiles(self, mmd, keys):
"""
@@ -258,13 +263,12 @@ class MBSResolver(GenericResolver):
results = {}
for key in keys:
results[key] = set()
for module_name, module_info in mmd.get_xmd()['mbs']['buildrequires'].items():
for module_name, module_info in mmd.get_xmd()["mbs"]["buildrequires"].items():
local_modules = models.ModuleBuild.local_modules(
db.session, module_name, module_info['stream'])
db.session, module_name, module_info["stream"])
if local_modules:
local_module = local_modules[0]
log.info("Using local module %r to resolve profiles.",
local_module)
log.info("Using local module %r to resolve profiles.", local_module)
dep_mmd = local_module.mmd()
for key in keys:
if key in dep_mmd.get_profiles().keys():
@@ -273,11 +277,15 @@ class MBSResolver(GenericResolver):
# Find the dep in the built modules in MBS
modules = self._get_modules(
module_name, module_info['stream'], module_info['version'],
module_info['context'], strict=True)
module_name,
module_info["stream"],
module_info["version"],
module_info["context"],
strict=True,
)
for module in modules:
yaml = module['modulemd']
yaml = module["modulemd"]
dep_mmd = load_mmd(yaml)
# Take note of what rpms are in this dep's profile.
for key in keys:
@@ -287,8 +295,9 @@ class MBSResolver(GenericResolver):
# Return the union of all rpms in all profiles of the given keys.
return results
def get_module_build_dependencies(self, name=None, stream=None, version=None, context=None,
mmd=None, strict=False):
def get_module_build_dependencies(
self, name=None, stream=None, version=None, context=None, mmd=None, strict=False
):
"""
Returns a dictionary of koji_tag:[mmd, ...] of all the dependencies of input module.
@@ -311,11 +320,13 @@ class MBSResolver(GenericResolver):
if mmd:
log.debug("get_module_build_dependencies(mmd=%r strict=%r)" % (mmd, strict))
elif any(x is None for x in [name, stream, version, context]):
raise RuntimeError('The name, stream, version, and/or context weren\'t specified')
raise RuntimeError("The name, stream, version, and/or context weren't specified")
else:
version = str(version)
log.debug("get_module_build_dependencies(%s, strict=%r)"
% (', '.join([name, stream, str(version), context]), strict))
log.debug(
"get_module_build_dependencies(%s, strict=%r)"
% (", ".join([name, stream, str(version), context]), strict)
)
# This is the set we're going to build up and return.
module_tags = {}
@@ -323,22 +334,24 @@ class MBSResolver(GenericResolver):
if mmd:
queried_mmd = mmd
else:
queried_module = self._get_module(
name, stream, version, context, strict=strict)
yaml = queried_module['modulemd']
queried_module = self._get_module(name, stream, version, context, strict=strict)
yaml = queried_module["modulemd"]
queried_mmd = load_mmd(yaml)
if (not queried_mmd or not queried_mmd.get_xmd().get('mbs') or
'buildrequires' not in queried_mmd.get_xmd()['mbs'].keys()):
if (
not queried_mmd
or not queried_mmd.get_xmd().get("mbs")
or "buildrequires" not in queried_mmd.get_xmd()["mbs"].keys()
):
raise RuntimeError(
'The module "{0!r}" did not contain its modulemd or did not have '
'its xmd attribute filled out in MBS'.format(queried_mmd))
"its xmd attribute filled out in MBS".format(queried_mmd)
)
buildrequires = queried_mmd.get_xmd()['mbs']['buildrequires']
buildrequires = queried_mmd.get_xmd()["mbs"]["buildrequires"]
# Queue up the next tier of deps that we should look at..
for name, details in buildrequires.items():
local_modules = models.ModuleBuild.local_modules(
db.session, name, details['stream'])
local_modules = models.ModuleBuild.local_modules(db.session, name, details["stream"])
if local_modules:
for m in local_modules:
# If the buildrequire is a meta-data only module with no Koji tag set, then just
@@ -351,8 +364,7 @@ class MBSResolver(GenericResolver):
if "context" not in details:
details["context"] = models.DEFAULT_MODULE_CONTEXT
modules = self._get_modules(
name, details['stream'], details['version'],
details['context'], strict=True)
name, details["stream"], details["version"], details["context"], strict=True)
for m in modules:
if m["koji_tag"] in module_tags:
continue
@@ -390,21 +402,20 @@ class MBSResolver(GenericResolver):
"Only N:S or N:S:V:C is accepted by resolve_requires, got %s" % nsvc)
# Try to find out module dependency in the local module builds
# added by utils.load_local_builds(...).
local_modules = models.ModuleBuild.local_modules(
db.session, module_name, module_stream)
local_modules = models.ModuleBuild.local_modules(db.session, module_name, module_stream)
if local_modules:
local_build = local_modules[0]
new_requires[module_name] = {
# The commit ID isn't currently saved in modules.yaml
'ref': None,
'stream': local_build.stream,
'version': local_build.version,
'context': local_build.context,
'koji_tag': local_build.koji_tag,
"ref": None,
"stream": local_build.stream,
"version": local_build.version,
"context": local_build.context,
"koji_tag": local_build.koji_tag,
# No need to set filtered_rpms for local builds, because MBS
# filters the RPMs automatically when the module build is
# done.
'filtered_rpms': []
"filtered_rpms": [],
}
continue
@@ -412,12 +423,12 @@ class MBSResolver(GenericResolver):
version = None
filtered_rpms = []
module = self._get_module(
module_name, module_stream, module_version,
module_context, strict=True)
if module.get('modulemd'):
mmd = load_mmd(module['modulemd'])
if mmd.get_xmd().get('mbs') and 'commit' in mmd.get_xmd()['mbs'].keys():
commit_hash = mmd.get_xmd()['mbs']['commit']
module_name, module_stream, module_version, module_context, strict=True
)
if module.get("modulemd"):
mmd = load_mmd(module["modulemd"])
if mmd.get_xmd().get("mbs") and "commit" in mmd.get_xmd()["mbs"].keys():
commit_hash = mmd.get_xmd()["mbs"]["commit"]
# Find out the particular NVR of filtered packages
if "rpms" in module and mmd.get_rpm_filter().get():
@@ -433,22 +444,23 @@ class MBSResolver(GenericResolver):
continue
filtered_rpms.append(nvr)
if module.get('version'):
version = module['version']
if module.get("version"):
version = module["version"]
if version and commit_hash:
new_requires[module_name] = {
'ref': commit_hash,
'stream': module_stream,
'version': str(version),
'context': module["context"],
'koji_tag': module['koji_tag'],
'filtered_rpms': filtered_rpms,
"ref": commit_hash,
"stream": module_stream,
"version": str(version),
"context": module["context"],
"koji_tag": module["koji_tag"],
"filtered_rpms": filtered_rpms,
}
else:
raise RuntimeError(
'The module "{0}" didn\'t contain either a commit hash or a'
' version in MBS'.format(module_name))
" version in MBS".format(module_name)
)
# If the module is a base module, then import it in the database so that entries in
# the module_builds_to_module_buildrequires table can be created later on
if module_name in conf.base_module_names:
@@ -457,10 +469,10 @@ class MBSResolver(GenericResolver):
return new_requires
def get_modulemd_by_koji_tag(self, tag):
resp = self.session.get(self.mbs_prod_url, params={'koji_tag': tag, 'verbose': True})
resp = self.session.get(self.mbs_prod_url, params={"koji_tag": tag, "verbose": True})
data = resp.json()
if data['items']:
modulemd = data['items'][0]['modulemd']
if data["items"]:
modulemd = data["items"][0]["modulemd"]
return load_mmd(modulemd)
else:
return None

View File

@@ -28,7 +28,7 @@ from module_build_service.resolver.base import GenericResolver
# NOTE: if you are adding a new resolver to MBS please note that you also have to add
# a new resolver to your setup.py and update you egg-info
for entrypoint in pkg_resources.iter_entry_points('mbs.resolver_backends'):
for entrypoint in pkg_resources.iter_entry_points("mbs.resolver_backends"):
GenericResolver.register_backend_class(entrypoint.load())
if not GenericResolver.backends:

View File

@@ -78,13 +78,13 @@ class GenericResolver(six.with_metaclass(ABCMeta)):
@classmethod
def supported_builders(cls):
if cls is GenericResolver:
return {k: v['builders'] for k, v in cls._resolvers.items()}
return {k: v["builders"] for k, v in cls._resolvers.items()}
else:
try:
return cls._resolvers[cls.backend]['builders']
return cls._resolvers[cls.backend]["builders"]
except KeyError:
raise RuntimeError("No configuration of builder backends found "
"for resolver {}".format(cls))
raise RuntimeError(
"No configuration of builder backends found for resolver {}".format(cls))
@classmethod
def is_builder_compatible(cls, builder):
@@ -100,9 +100,12 @@ class GenericResolver(six.with_metaclass(ABCMeta)):
@staticmethod
def extract_modulemd(yaml, strict=False):
log.warning('GenericResolver.extract_modulemd is deprecated. Please call '
'module_build_service.utils.load_mmd in new code.')
log.warning(
"GenericResolver.extract_modulemd is deprecated. Please call "
"module_build_service.utils.load_mmd in new code."
)
from module_build_service.utils import load_mmd
return load_mmd(yaml)
@abstractmethod
@@ -114,8 +117,16 @@ class GenericResolver(six.with_metaclass(ABCMeta)):
raise NotImplementedError()
@abstractmethod
def get_module_modulemds(self, name, stream, version=None, context=None, strict=False,
stream_version_lte=None, virtual_streams=None):
def get_module_modulemds(
self,
name,
stream,
version=None,
context=None,
strict=False,
stream_version_lte=None,
virtual_streams=None,
):
raise NotImplementedError()
@abstractmethod
@@ -127,8 +138,9 @@ class GenericResolver(six.with_metaclass(ABCMeta)):
raise NotImplementedError()
@abstractmethod
def get_module_build_dependencies(self, name=None, stream=None, version=None, mmd=None,
context=None, strict=False):
def get_module_build_dependencies(
self, name=None, stream=None, version=None, mmd=None, context=None, strict=False
):
raise NotImplementedError()
@abstractmethod