Target E202 - Whitespace before ')'

https://www.flake8rules.com/rules/E202.html
This commit is contained in:
Stephan Kulow 2022-02-18 17:18:29 +01:00
parent 529d1dafae
commit 54079e949f
30 changed files with 87 additions and 87 deletions

View File

@ -1,4 +1,4 @@
[flake8] [flake8]
exclude = abichecker exclude = abichecker
max-line-length = 100 max-line-length = 100
ignore = W503,W504,E501,F401,E128,E251,E201,E202 ignore = W503,W504,E501,F401,E128,E251,E201

View File

@ -78,7 +78,7 @@ class ReviewBot(object):
return (None|True|False) return (None|True|False)
""" """
DEFAULT_REVIEW_MESSAGES = { 'accepted': 'ok', 'declined': 'review failed' } DEFAULT_REVIEW_MESSAGES = { 'accepted': 'ok', 'declined': 'review failed'}
REVIEW_CHOICES = ('normal', 'no', 'accept', 'accept-onpass', 'fallback-onfail', 'fallback-always') REVIEW_CHOICES = ('normal', 'no', 'accept', 'accept-onpass', 'fallback-onfail', 'fallback-always')
COMMENT_MARKER_REGEX = re.compile(r'<!-- (?P<bot>[^ ]+) state=(?P<state>[^ ]+)(?: result=(?P<result>[^ ]+))? -->') COMMENT_MARKER_REGEX = re.compile(r'<!-- (?P<bot>[^ ]+) state=(?P<state>[^ ]+)(?: result=(?P<result>[^ ]+))? -->')
@ -120,7 +120,7 @@ class ReviewBot(object):
def _load_config(self, handle = None): def _load_config(self, handle = None):
d = self.__class__.config_defaults d = self.__class__.config_defaults
y = yaml.safe_load(handle) if handle is not None else {} y = yaml.safe_load(handle) if handle is not None else {}
return namedtuple('BotConfig', sorted(d.keys()))(*[ y.get(p, d[p]) for p in sorted(d.keys()) ]) return namedtuple('BotConfig', sorted(d.keys()))(*[ y.get(p, d[p]) for p in sorted(d.keys())])
def load_config(self, filename = None): def load_config(self, filename = None):
if filename: if filename:
@ -166,7 +166,7 @@ class ReviewBot(object):
def set_request_ids(self, ids): def set_request_ids(self, ids):
for rqid in ids: for rqid in ids:
u = osc.core.makeurl(self.apiurl, [ 'request', rqid ], { 'withfullhistory': '1' }) u = osc.core.makeurl(self.apiurl, [ 'request', rqid], { 'withfullhistory': '1'})
r = osc.core.http_GET(u) r = osc.core.http_GET(u)
root = ET.parse(r).getroot() root = ET.parse(r).getroot()
req = osc.core.Request() req = osc.core.Request()
@ -559,7 +559,7 @@ class ReviewBot(object):
@staticmethod @staticmethod
@memoize(session=True) @memoize(session=True)
def _get_sourceinfo(apiurl, project, package, rev=None): def _get_sourceinfo(apiurl, project, package, rev=None):
query = { 'view': 'info' } query = { 'view': 'info'}
if rev is not None: if rev is not None:
query['rev'] = rev query['rev'] = rev
url = osc.core.makeurl(apiurl, ('source', project, package), query=query) url = osc.core.makeurl(apiurl, ('source', project, package), query=query)
@ -585,7 +585,7 @@ class ReviewBot(object):
return None return None
props = ('package', 'rev', 'vrev', 'srcmd5', 'lsrcmd5', 'verifymd5') props = ('package', 'rev', 'vrev', 'srcmd5', 'lsrcmd5', 'verifymd5')
return namedtuple('SourceInfo', props)(*[ root.get(p) for p in props ]) return namedtuple('SourceInfo', props)(*[ root.get(p) for p in props])
# TODO: what if there is more than _link? # TODO: what if there is more than _link?
def _get_linktarget_self(self, src_project, src_package): def _get_linktarget_self(self, src_project, src_package):
@ -637,7 +637,7 @@ class ReviewBot(object):
review = "@by_user='%s' and @state='new'" % self.review_user review = "@by_user='%s' and @state='new'" % self.review_user
if self.review_group: if self.review_group:
review = osc.core.xpath_join(review, "@by_group='%s' and @state='new'" % self.review_group) review = osc.core.xpath_join(review, "@by_group='%s' and @state='new'" % self.review_group)
url = osc.core.makeurl(self.apiurl, ('search', 'request'), { 'match': "state/@name='review' and review[%s]" % review, 'withfullhistory': 1 } ) url = osc.core.makeurl(self.apiurl, ('search', 'request'), { 'match': "state/@name='review' and review[%s]" % review, 'withfullhistory': 1})
root = ET.parse(osc.core.http_GET(url)).getroot() root = ET.parse(osc.core.http_GET(url)).getroot()
self.requests = [] self.requests = []
@ -651,7 +651,7 @@ class ReviewBot(object):
def ids_project(self, project, typename): def ids_project(self, project, typename):
url = osc.core.makeurl(self.apiurl, ('search', 'request'), url = osc.core.makeurl(self.apiurl, ('search', 'request'),
{ 'match': "(state/@name='review' or state/@name='new') and (action/target/@project='%s' and action/@type='%s')" % (project, typename), { 'match': "(state/@name='review' or state/@name='new') and (action/target/@project='%s' and action/@type='%s')" % (project, typename),
'withfullhistory': 1 }) 'withfullhistory': 1})
root = ET.parse(osc.core.http_GET(url)).getroot() root = ET.parse(osc.core.http_GET(url)).getroot()
ret = [] ret = []
@ -790,7 +790,7 @@ class ReviewBot(object):
if history_limit: if history_limit:
self.logger.debug("%s not the latest version, checking history", rev) self.logger.debug("%s not the latest version, checking history", rev)
u = osc.core.makeurl(self.apiurl, [ 'source', project, package, '_history' ], { 'limit': history_limit }) u = osc.core.makeurl(self.apiurl, [ 'source', project, package, '_history'], { 'limit': history_limit})
try: try:
r = osc.core.http_GET(u) r = osc.core.http_GET(u)
except HTTPError: except HTTPError:
@ -1002,4 +1002,4 @@ class CommandLineInterface(cmdln.Cmdln):
if __name__ == "__main__": if __name__ == "__main__":
app = CommandLineInterface() app = CommandLineInterface()
sys.exit( app.main() ) sys.exit( app.main())

View File

@ -94,7 +94,7 @@ class ToolBase(object):
def meta_get_packagelist(self, prj, deleted=None, expand=False): def meta_get_packagelist(self, prj, deleted=None, expand=False):
root = ET.fromstring(self._meta_get_packagelist(prj, deleted, expand)) root = ET.fromstring(self._meta_get_packagelist(prj, deleted, expand))
return [ node.get('name') for node in root.findall('entry') if not node.get('name') == '000product' and not node.get('name').startswith('patchinfo.') ] return [ node.get('name') for node in root.findall('entry') if not node.get('name') == '000product' and not node.get('name').startswith('patchinfo.')]
def latest_packages(self, project): def latest_packages(self, project):
data = self.cached_GET(self.makeurl(['project', 'latest_commits', project])) data = self.cached_GET(self.makeurl(['project', 'latest_commits', project]))
@ -204,4 +204,4 @@ class CommandLineInterface(cmdln.Cmdln):
if __name__ == "__main__": if __name__ == "__main__":
app = CommandLineInterface() app = CommandLineInterface()
sys.exit( app.main() ) sys.exit( app.main())

View File

@ -53,7 +53,7 @@ class BiArchTool(ToolBase.ToolBase):
if expand: if expand:
query['expand'] = 1 query['expand'] = 1
root = ET.fromstring(self.cached_GET(self.makeurl(['source', self.project, package], query))) root = ET.fromstring(self.cached_GET(self.makeurl(['source', self.project, package], query)))
return [ node.get('name') for node in root.findall('entry') ] return [ node.get('name') for node in root.findall('entry')]
def has_baselibs(self, package): def has_baselibs(self, package):
if package in self._has_baselibs: if package in self._has_baselibs:
@ -125,7 +125,7 @@ class BiArchTool(ToolBase.ToolBase):
if self.rdeps is not None: if self.rdeps is not None:
return return
self.rdeps = dict() self.rdeps = dict()
url = self.makeurl(['build', self.project, 'standard', self.arch, '_builddepinfo' ], {'view': 'revpkgnames'}) url = self.makeurl(['build', self.project, 'standard', self.arch, '_builddepinfo'], {'view': 'revpkgnames'})
x = ET.fromstring(self.cached_GET(url)) x = ET.fromstring(self.cached_GET(url))
for pnode in x.findall('package'): for pnode in x.findall('package'):
name = pnode.get('name') name = pnode.get('name')
@ -201,7 +201,7 @@ class BiArchTool(ToolBase.ToolBase):
bn = pkgmeta.find('build') bn = pkgmeta.find('build')
if bn is None: if bn is None:
bn = ET.SubElement(pkgmeta, 'build') bn = ET.SubElement(pkgmeta, 'build')
ET.SubElement(bn, 'disable', { 'arch': self.arch }) ET.SubElement(bn, 'disable', { 'arch': self.arch})
changed = True changed = True
if changed: if changed:
@ -214,7 +214,7 @@ class BiArchTool(ToolBase.ToolBase):
self.http_POST(self.makeurl(['build', self.project], { self.http_POST(self.makeurl(['build', self.project], {
'cmd': 'wipe', 'cmd': 'wipe',
'arch': self.arch, 'arch': self.arch,
'package': pkg })) 'package': pkg}))
except HTTPError as e: except HTTPError as e:
logger.error('failed to update %s: %s', pkg, e) logger.error('failed to update %s: %s', pkg, e)
@ -264,7 +264,7 @@ class BiArchTool(ToolBase.ToolBase):
bn = pkgmeta.find('build') bn = pkgmeta.find('build')
if bn is None: if bn is None:
bn = ET.SubElement(pkgmeta, 'build') bn = ET.SubElement(pkgmeta, 'build')
ET.SubElement(bn, 'disable', { 'arch': self.arch }) ET.SubElement(bn, 'disable', { 'arch': self.arch})
changed = True changed = True
else: else:
logger.debug('%s already disabled for %s', pkg, self.arch) logger.debug('%s already disabled for %s', pkg, self.arch)
@ -296,7 +296,7 @@ class BiArchTool(ToolBase.ToolBase):
self.http_POST(self.makeurl(['build', self.project], { self.http_POST(self.makeurl(['build', self.project], {
'cmd': 'wipe', 'cmd': 'wipe',
'arch': self.arch, 'arch': self.arch,
'package': pkg })) 'package': pkg}))
except HTTPError as e: except HTTPError as e:
logger.error('failed to update %s: %s', pkg, e) logger.error('failed to update %s: %s', pkg, e)
@ -371,4 +371,4 @@ class CommandLineInterface(ToolBase.CommandLineInterface):
if __name__ == "__main__": if __name__ == "__main__":
app = CommandLineInterface() app = CommandLineInterface()
sys.exit( app.main() ) sys.exit( app.main())

View File

@ -55,7 +55,7 @@ class BugownerTool(ToolBase.ToolBase):
url = self.makeurl(['person', name]) url = self.makeurl(['person', name])
root = ET.fromstring(self.cached_GET(url)) root = ET.fromstring(self.cached_GET(url))
person = Person(*[ root.find('./{}'.format(field)).text for field in Person._fields ]) person = Person(*[ root.find('./{}'.format(field)).text for field in Person._fields])
self.persons[name] = person self.persons[name] = person
return person return person
@ -116,7 +116,7 @@ class BugownerTool(ToolBase.ToolBase):
logging.debug("%s was last touched by %s, ignored." % (package, user)) logging.debug("%s was last touched by %s, ignored." % (package, user))
return None return None
return [ Owner('person', user) ] return [ Owner('person', user)]
def is_release_manager(self, name): def is_release_manager(self, name):
if self.release_managers is None: if self.release_managers is None:

View File

@ -211,7 +211,7 @@ maintainer/bugowner did not yet find the time to look into the
matter and he/she would certainly appreciate help to get this matter and he/she would certainly appreciate help to get this
sorted. sorted.
""" % { 'project': project } """ % { 'project': project}
for pkg in ProjectComplainList: for pkg in ProjectComplainList:
text += "- %s\n" % pkg text += "- %s\n" % pkg
text += u""" text += u"""
@ -220,7 +220,7 @@ package(s) are going to be removed from %(project)s.
Kind regards, Kind regards,
%(sender)s %(sender)s
""" % { 'project': project, 'sender': sender } """ % { 'project': project, 'sender': sender}
SendMail(logger, project, sender, to, fullname, subject, text) SendMail(logger, project, sender, to, fullname, subject, text)

View File

@ -39,7 +39,7 @@ class MaintenanceChecker(ReviewBot.ReviewBot):
self.logger.debug("%s looks wrong as maintainer, skipped", prj) self.logger.debug("%s looks wrong as maintainer, skipped", prj)
continue continue
self.add_review(req, by_project = prj, by_package = pkg, self.add_review(req, by_project = prj, by_package = pkg,
msg = 'Submission for {} by someone who is not maintainer in the devel project ({}). Please review'.format(pkg, prj) ) msg = 'Submission for {} by someone who is not maintainer in the devel project ({}). Please review'.format(pkg, prj))
@staticmethod @staticmethod
@memoize(session=True) @memoize(session=True)
@ -157,4 +157,4 @@ class MaintenanceChecker(ReviewBot.ReviewBot):
if __name__ == "__main__": if __name__ == "__main__":
app = ReviewBot.CommandLineInterface() app = ReviewBot.CommandLineInterface()
app.clazz = MaintenanceChecker app.clazz = MaintenanceChecker
sys.exit( app.main() ) sys.exit( app.main())

View File

@ -272,7 +272,7 @@ class CheckSource(ReviewBot.ReviewBot):
return True return True
def suppresses_whitelist_warnings( self, source_project, source_package ): def suppresses_whitelist_warnings( self, source_project, source_package):
# checks if there's a rpmlintrc that suppresses warnings that we check # checks if there's a rpmlintrc that suppresses warnings that we check
found_entries = set() found_entries = set()
contents = source_file_load(self.apiurl, source_project, source_package, source_package + '-rpmlintrc') contents = source_file_load(self.apiurl, source_project, source_package, source_package + '-rpmlintrc')
@ -295,7 +295,7 @@ class CheckSource(ReviewBot.ReviewBot):
return found_entries return found_entries
def has_whitelist_warnings( self, source_project, source_package, target_project, target_package ): def has_whitelist_warnings( self, source_project, source_package, target_project, target_package):
# this checks if this is a submit to an product project and it has warnings for non-whitelisted permissions/files # this checks if this is a submit to an product project and it has warnings for non-whitelisted permissions/files
found_entries = set() found_entries = set()
url = osc.core.makeurl(self.apiurl, ['build', target_project]) url = osc.core.makeurl(self.apiurl, ['build', target_project])

View File

@ -21,8 +21,8 @@ class FactorySourceChecker(ReviewBot.ReviewBot):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
ReviewBot.ReviewBot.__init__(self, *args, **kwargs) ReviewBot.ReviewBot.__init__(self, *args, **kwargs)
self.factory = [ "openSUSE:Factory" ] self.factory = [ "openSUSE:Factory"]
self.review_messages = { 'accepted': 'ok', 'declined': 'the package needs to be accepted in Factory first' } self.review_messages = { 'accepted': 'ok', 'declined': 'the package needs to be accepted in Factory first'}
self.history_limit = 5 self.history_limit = 5
def check_source_submission(self, src_project, src_package, src_rev, target_project, target_package): def check_source_submission(self, src_project, src_package, src_rev, target_project, target_package):
@ -165,4 +165,4 @@ class CommandLineInterface(ReviewBot.CommandLineInterface):
if __name__ == "__main__": if __name__ == "__main__":
app = CommandLineInterface() app = CommandLineInterface()
sys.exit( app.main() ) sys.exit( app.main())

View File

@ -18,7 +18,7 @@ class TagChecker(ReviewBot.ReviewBot):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
super(TagChecker, self).__init__(*args, **kwargs) super(TagChecker, self).__init__(*args, **kwargs)
self.factory = [ "openSUSE:Factory" ] self.factory = [ "openSUSE:Factory"]
self.review_messages['declined'] = """ self.review_messages['declined'] = """
(This is a script, so report bugs) (This is a script, so report bugs)
@ -125,7 +125,7 @@ class CommandLineInterface(ReviewBot.CommandLineInterface):
bot = ReviewBot.CommandLineInterface.setup_checker(self) bot = ReviewBot.CommandLineInterface.setup_checker(self)
if self.options.factory: if self.options.factory:
bot.factory = [ self.options.factory ] bot.factory = [ self.options.factory]
return bot return bot

View File

@ -47,11 +47,11 @@ class Fetcher(object):
self.projects.append(Project(self, name, kwargs)) self.projects.append(Project(self, name, kwargs))
def build_summary(self, project, repository): def build_summary(self, project, repository):
url = makeurl(self.apiurl, ['build', project, '_result'], { 'repository': repository, 'view': 'summary' }) url = makeurl(self.apiurl, ['build', project, '_result'], { 'repository': repository, 'view': 'summary'})
try: try:
f = http_GET(url) f = http_GET(url)
except HTTPError: except HTTPError:
return { 'building': -1 } return { 'building': -1}
root = ET.parse(f).getroot() root = ET.parse(f).getroot()
failed = 0 failed = 0
unresolvable = 0 unresolvable = 0
@ -85,7 +85,7 @@ class Fetcher(object):
return { 'building': 10000 - int(building * 10000 / (building + failed + succeeded + broken)), return { 'building': 10000 - int(building * 10000 / (building + failed + succeeded + broken)),
'failed': failed, 'failed': failed,
'broken': broken, 'broken': broken,
'unresolvable': unresolvable } 'unresolvable': unresolvable}
def generate_all_archs(self, project): def generate_all_archs(self, project):
meta = ET.fromstringlist(show_project_meta(self.apiurl, project)) meta = ET.fromstringlist(show_project_meta(self.apiurl, project))

View File

@ -85,7 +85,7 @@ class ChangeLogger(cmdln.Cmdln):
if srpm in changelogs: if srpm in changelogs:
changelogs[srpm]['packages'].append(binrpm) changelogs[srpm]['packages'].append(binrpm)
else: else:
data = { 'packages': [ binrpm ] } data = { 'packages': [ binrpm]}
data['changelogtime'] = h['changelogtime'] data['changelogtime'] = h['changelogtime']
data['changelogtext'] = h['changelogtext'] data['changelogtext'] = h['changelogtext']
for (t, txt) in enumerate(data['changelogtext']): for (t, txt) in enumerate(data['changelogtext']):
@ -104,7 +104,7 @@ class ChangeLogger(cmdln.Cmdln):
# On Tumbleweed, there is no '/suse' prefix # On Tumbleweed, there is no '/suse' prefix
for path in ['/suse/x86_64', '/suse/noarch', '/suse/aarch64', for path in ['/suse/x86_64', '/suse/noarch', '/suse/aarch64',
'/suse/s390x', '/x86_64', '/noarch', '/aarch64', '/s390x' ]: '/suse/s390x', '/x86_64', '/noarch', '/aarch64', '/s390x']:
file_stats = iso.readdir(path) file_stats = iso.readdir(path)
if file_stats is None: if file_stats is None:
continue continue
@ -125,7 +125,7 @@ class ChangeLogger(cmdln.Cmdln):
for pkg in [ os.path.join(root, file) for file in files]: for pkg in [ os.path.join(root, file) for file in files]:
if not pkg.endswith('.rpm'): if not pkg.endswith('.rpm'):
continue continue
h = self.readRpmHeader( pkg ) h = self.readRpmHeader( pkg)
_getdata(h) _getdata(h)
else: else:
raise Exception("don't know what to do with %s" % arg) raise Exception("don't know what to do with %s" % arg)
@ -281,4 +281,4 @@ class ChangeLogger(cmdln.Cmdln):
if __name__ == "__main__": if __name__ == "__main__":
app = ChangeLogger() app = ChangeLogger()
sys.exit( app.main() ) sys.exit( app.main())

View File

@ -228,7 +228,7 @@ class FccSubmitter(object):
def check_multiple_specfiles(self, project, package): def check_multiple_specfiles(self, project, package):
try: try:
url = makeurl(self.apiurl, ['source', project, package], { 'expand': '1' } ) url = makeurl(self.apiurl, ['source', project, package], { 'expand': '1'})
except HTTPError as e: except HTTPError as e:
if e.code == 404: if e.code == 404:
return None return None
@ -241,7 +241,7 @@ class FccSubmitter(object):
else: else:
data['linkinfo'] = None data['linkinfo'] = None
files = [ entry.get('name').replace('.spec', '') for entry in root.findall('entry') if entry.get('name').endswith('.spec') ] files = [ entry.get('name').replace('.spec', '') for entry in root.findall('entry') if entry.get('name').endswith('.spec')]
data['specs'] = files data['specs'] = files
if len(files) > 1: if len(files) > 1:

View File

@ -273,7 +273,7 @@ class LegalAuto(ReviewBot.ReviewBot):
'external_link': tproject} 'external_link': tproject}
if revision: if revision:
params['rev'] = revision params['rev'] = revision
old_id = self.pkg_cache.get(package, { None: None }).get(revision, None) old_id = self.pkg_cache.get(package, { None: None}).get(revision, None)
if old_id: if old_id:
return old_id return old_id
@ -288,7 +288,7 @@ class LegalAuto(ReviewBot.ReviewBot):
return None return None
legaldb_id = obj['saved']['id'] legaldb_id = obj['saved']['id']
self.logger.debug("PKG {}/{}[{}]->{} is {}".format(sproject, package, revision, tproject, legaldb_id)) self.logger.debug("PKG {}/{}[{}]->{} is {}".format(sproject, package, revision, tproject, legaldb_id))
self.pkg_cache[package] = { revision: legaldb_id } self.pkg_cache[package] = { revision: legaldb_id}
if obj['saved']['state'] == 'obsolete': if obj['saved']['state'] == 'obsolete':
url = osc.core.makeurl(self.legaldb, ['packages', 'import', str(legaldb_id)], { url = osc.core.makeurl(self.legaldb, ['packages', 'import', str(legaldb_id)], {
'result': f'Reopened for {tproject}', 'state': 'new', 'result': f'Reopened for {tproject}', 'state': 'new',

View File

@ -22,7 +22,7 @@ class AcceptCommand(object):
def find_new_requests(self, project): def find_new_requests(self, project):
match = f"state/@name='new' and action/target/@project='{project}'" match = f"state/@name='new' and action/target/@project='{project}'"
url = self.api.makeurl(['search', 'request'], { 'match': match }) url = self.api.makeurl(['search', 'request'], { 'match': match})
f = http_GET(url) f = http_GET(url)
root = ET.parse(f).getroot() root = ET.parse(f).getroot()
@ -70,7 +70,7 @@ class AcceptCommand(object):
print('ERROR: Not compatible with force option') print('ERROR: Not compatible with force option')
return False return False
self.requests = { 'delete': [], 'submit': [] } self.requests = { 'delete': [], 'submit': []}
staging_packages = {} staging_packages = {}
if accept_all_green: if accept_all_green:
@ -104,7 +104,7 @@ class AcceptCommand(object):
# we have checked ourselves and accepting one staging project creates a race # we have checked ourselves and accepting one staging project creates a race
# for the other staging projects to appear building again # for the other staging projects to appear building again
opts = { 'force': '1' } opts = { 'force': '1'}
print('triggering staging accepts...') print('triggering staging accepts...')
for project in staging_packages.keys(): for project in staging_packages.keys():

View File

@ -1271,6 +1271,6 @@ def message_suffix(action, message=None):
def request_state_change(apiurl, request_id, state): def request_state_change(apiurl, request_id, state):
query = { 'newstate': state, 'cmd': 'changestate' } query = { 'newstate': state, 'cmd': 'changestate'}
url = makeurl(apiurl, ['request', request_id], query) url = makeurl(apiurl, ['request', request_id], query)
return ET.parse(http_POST(url)).getroot().get('code') return ET.parse(http_POST(url)).getroot().get('code')

View File

@ -198,13 +198,13 @@ def config_resolve_create_workarounds(config, values_workaround, origins_skip):
values_new = deepcopy(values) values_new = deepcopy(values)
values_new.update(values_workaround) values_new.update(values_workaround)
origins.insert(i, { origin_new: values_new }) origins.insert(i, { origin_new: values_new})
def config_resolve_create_family(apiurl, project, config, position, origin, values): def config_resolve_create_family(apiurl, project, config, position, origin, values):
projects = project_list_family_prior_pattern(apiurl, origin, project) projects = project_list_family_prior_pattern(apiurl, origin, project)
for origin_expanded in reversed(projects): for origin_expanded in reversed(projects):
config['origins'].insert(position, { str(origin_expanded): values }) config['origins'].insert(position, { str(origin_expanded): values})
def config_resolve_apply(config, values_apply, key=None, workaround=False, until=None): def config_resolve_apply(config, values_apply, key=None, workaround=False, until=None):

View File

@ -21,7 +21,7 @@ class PrioCommand(object):
req = osc.core.get_request(self.api.apiurl, reqid) req = osc.core.get_request(self.api.apiurl, reqid)
if req.priority == priority: if req.priority == priority:
continue continue
query = { 'cmd': 'setpriority', 'priority': priority } query = { 'cmd': 'setpriority', 'priority': priority}
url = osc.core.makeurl(self.api.apiurl, ['request', reqid], query) url = osc.core.makeurl(self.api.apiurl, ['request', reqid], query)
print(f"raising priority of {r.get('package')} [{r.get('request')}] to {priority}") print(f"raising priority of {r.get('package')} [{r.get('request')}] to {priority}")
try: try:

View File

@ -160,7 +160,7 @@ class RequestFinder(object):
This function is only called for its side effect. This function is only called for its side effect.
""" """
url = self.api.makeurl(['staging', self.api.project, 'staging_projects'], { 'requests': 1 }) url = self.api.makeurl(['staging', self.api.project, 'staging_projects'], { 'requests': 1})
status = ET.parse(self.api.retried_GET(url)).getroot() status = ET.parse(self.api.retried_GET(url)).getroot()
for p in pkgs: for p in pkgs:
@ -180,7 +180,7 @@ class RequestFinder(object):
all requests staged in it all requests staged in it
""" """
project = self.api.prj_from_short(project) project = self.api.prj_from_short(project)
url = self.api.makeurl(['staging', self.api.project, 'staging_projects', project], { 'requests': 1 }) url = self.api.makeurl(['staging', self.api.project, 'staging_projects', project], { 'requests': 1})
try: try:
staging = ET.parse(self.api.retried_GET(url)).getroot() staging = ET.parse(self.api.retried_GET(url)).getroot()
except HTTPError: except HTTPError:

View File

@ -229,7 +229,7 @@ class RequestSplitter(object):
'project': project, 'project': project,
'bootstrapped': bootstrapped, 'bootstrapped': bootstrapped,
# TODO: find better place for splitter info # TODO: find better place for splitter info
'splitter_info': { 'strategy': { 'name': 'none' } }, 'splitter_info': { 'strategy': { 'name': 'none'}},
'status': status 'status': status
} }

View File

@ -44,7 +44,7 @@ class SelectCommand(object):
package = self._package(request) package = self._package(request)
candidates = [] # Store candidates to be supersede by 'request' candidates = [] # Store candidates to be supersede by 'request'
url = self.api.makeurl(['staging', self.api.project, 'staging_projects'], { 'requests': 1 }) url = self.api.makeurl(['staging', self.api.project, 'staging_projects'], { 'requests': 1})
status = ET.parse(self.api.retried_GET(url)).getroot() status = ET.parse(self.api.retried_GET(url)).getroot()
for prj in status.findall('staging_project'): for prj in status.findall('staging_project'):
for req in prj.findall('./staged_requests/request'): for req in prj.findall('./staged_requests/request'):

View File

@ -247,7 +247,7 @@ class StagingAPI(object):
""" """
packages_staged = {} packages_staged = {}
url = self.makeurl(['staging', self.project, 'staging_projects'], { 'requests': 1 }) url = self.makeurl(['staging', self.project, 'staging_projects'], { 'requests': 1})
status = ET.parse(self.retried_GET(url)).getroot() status = ET.parse(self.retried_GET(url)).getroot()
for prj in status.findall('staging_project'): for prj in status.findall('staging_project'):
for req in prj.findall('./staged_requests/request'): for req in prj.findall('./staged_requests/request'):
@ -566,13 +566,13 @@ class StagingAPI(object):
def add_ignored_request(self, request_id, comment): def add_ignored_request(self, request_id, comment):
url = self.makeurl(['staging', self.project, 'excluded_requests']) url = self.makeurl(['staging', self.project, 'excluded_requests'])
root = ET.Element('excluded_requests') root = ET.Element('excluded_requests')
ET.SubElement(root, 'request', { 'id': str(request_id), 'description': comment }) ET.SubElement(root, 'request', { 'id': str(request_id), 'description': comment})
http_POST(url, data=ET.tostring(root)) http_POST(url, data=ET.tostring(root))
def del_ignored_request(self, request_id): def del_ignored_request(self, request_id):
url = self.makeurl(['staging', self.project, 'excluded_requests']) url = self.makeurl(['staging', self.project, 'excluded_requests'])
root = ET.Element('excluded_requests') root = ET.Element('excluded_requests')
ET.SubElement(root, 'request', { 'id': str(request_id) }) ET.SubElement(root, 'request', { 'id': str(request_id)})
http_DELETE(url, data=ET.tostring(root)) http_DELETE(url, data=ET.tostring(root))
@memoize(session=True, add_invalidate=True) @memoize(session=True, add_invalidate=True)
@ -592,7 +592,7 @@ class StagingAPI(object):
where = "@by_group='{}' and @state='new'".format(self.cstaging_group) where = "@by_group='{}' and @state='new'".format(self.cstaging_group)
target = "target[@project='{}']".format(self.project) target = "target[@project='{}']".format(self.project)
query = {'match': f"state/@name='review' and review[{where}] and {target}" } query = {'match': f"state/@name='review' and review[{where}] and {target}"}
if query_extra is not None: if query_extra is not None:
query.update(query_extra) query.update(query_extra)
url = self.makeurl(['search', 'request'], query) url = self.makeurl(['search', 'request'], query)
@ -957,7 +957,7 @@ class StagingAPI(object):
if not project: if not project:
project = self.project project = self.project
url = self.makeurl(['source', project, package], { 'cmd': 'showlinked' }) url = self.makeurl(['source', project, package], { 'cmd': 'showlinked'})
f = http_POST(url) f = http_POST(url)
root = ET.parse(f).getroot() root = ET.parse(f).getroot()
result = [] result = []
@ -984,7 +984,7 @@ class StagingAPI(object):
# now trigger wipebinaries to emulate a delete # now trigger wipebinaries to emulate a delete
self._wipe_package(project, package) self._wipe_package(project, package)
url = self.makeurl(['source', project, package], { 'view': 'getmultibuild' }) url = self.makeurl(['source', project, package], { 'view': 'getmultibuild'})
f = http_GET(url) f = http_GET(url)
root = ET.parse(f).getroot() root = ET.parse(f).getroot()
for entry in root.findall('entry'): for entry in root.findall('entry'):
@ -1148,7 +1148,7 @@ class StagingAPI(object):
return status.tag return status.tag
def switch_flag_in_prj(self, project, flag='build', state='disable', repository=None, arch=None): def switch_flag_in_prj(self, project, flag='build', state='disable', repository=None, arch=None):
query = { 'cmd': 'set_flag', 'flag': flag, 'status': state } query = { 'cmd': 'set_flag', 'flag': flag, 'status': state}
if repository: if repository:
query['repository'] = repository query['repository'] = repository
if arch: if arch:

View File

@ -158,7 +158,7 @@ def mail_send_with_details(relay, sender, subject, to, text, xmailer=None, follo
return return
logger.info("%s: %s", msg['To'], msg['Subject']) logger.info("%s: %s", msg['To'], msg['Subject'])
s = smtplib.SMTP(relay) s = smtplib.SMTP(relay)
s.sendmail(msg['From'], {msg['To'], sender }, msg.as_string()) s.sendmail(msg['From'], {msg['To'], sender}, msg.as_string())
s.quit() s.quit()

View File

@ -263,7 +263,7 @@ class RepoChecker():
query = {'cmd': 'rebuild', 'repository': repository, 'arch': arch, 'package': rebuilds} query = {'cmd': 'rebuild', 'repository': repository, 'arch': arch, 'package': rebuilds}
url = makeurl(self.apiurl, ['build', project]) url = makeurl(self.apiurl, ['build', project])
headers = { 'Content-Type': 'application/x-www-form-urlencoded' } headers = { 'Content-Type': 'application/x-www-form-urlencoded'}
http_request('POST', url, headers, data=urlencode(query, doseq=True)) http_request('POST', url, headers, data=urlencode(query, doseq=True))
self.store_yaml(oldstate, project, repository, arch) self.store_yaml(oldstate, project, repository, arch)

View File

@ -431,7 +431,7 @@ class StagingWorkflow(ABC):
root = ET.fromstring(meta) root = ET.fromstring(meta)
persons = ET.SubElement(root, 'person') persons = ET.SubElement(root, 'person')
for user in users: for user in users:
ET.SubElement(persons, 'person', {'userid': user} ) ET.SubElement(persons, 'person', {'userid': user})
meta = ET.tostring(root) meta = ET.tostring(root)
if name not in self.groups: if name not in self.groups:
@ -855,20 +855,20 @@ class Project(object):
root = ET.fromstring(meta) root = ET.fromstring(meta)
for group in reviewer.get('groups', []): for group in reviewer.get('groups', []):
ET.SubElement(root, 'group', { 'groupid': group, 'role': 'reviewer'} ) ET.SubElement(root, 'group', { 'groupid': group, 'role': 'reviewer'})
for group in reviewer.get('users', []): for group in reviewer.get('users', []):
ET.SubElement(root, 'person', { 'userid': group, 'role': 'reviewer'} ) ET.SubElement(root, 'person', { 'userid': group, 'role': 'reviewer'})
# TODO: avoid this duplication # TODO: avoid this duplication
for group in maintainer.get('groups', []): for group in maintainer.get('groups', []):
ET.SubElement(root, 'group', { 'groupid': group, 'role': 'maintainer'} ) ET.SubElement(root, 'group', { 'groupid': group, 'role': 'maintainer'})
for group in maintainer.get('users', []): for group in maintainer.get('users', []):
ET.SubElement(root, 'person', { 'userid': group, 'role': 'maintainer'} ) ET.SubElement(root, 'person', { 'userid': group, 'role': 'maintainer'})
for link in project_links: for link in project_links:
ET.SubElement(root, 'link', { 'project': link }) ET.SubElement(root, 'link', { 'project': link})
if with_repo: if with_repo:
repo = ET.SubElement(root, 'repository', { 'name': 'standard' }) repo = ET.SubElement(root, 'repository', { 'name': 'standard'})
ET.SubElement(repo, 'arch').text = 'x86_64' ET.SubElement(repo, 'arch').text = 'x86_64'
self.custom_meta(ET.tostring(root)) self.custom_meta(ET.tostring(root))
@ -894,8 +894,8 @@ class Project(object):
:rtype: dict[str, dict or list(str) or bool] :rtype: dict[str, dict or list(str) or bool]
""" """
meta = { meta = {
'reviewer': { 'groups': [], 'users': [] }, 'reviewer': { 'groups': [], 'users': []},
'maintainer': { 'groups': [], 'users': [] }, 'maintainer': { 'groups': [], 'users': []},
'project_links': [], 'project_links': [],
'with_repo': False 'with_repo': False
} }
@ -992,7 +992,7 @@ class Package(object):
if devel_project: if devel_project:
root = ET.fromstring(meta) root = ET.fromstring(meta)
ET.SubElement(root, 'devel', { 'project': devel_project }) ET.SubElement(root, 'devel', { 'project': devel_project})
meta = ET.tostring(root) meta = ET.tostring(root)
url = osc.core.make_meta_url('pkg', (self.project.name, self.name), APIURL) url = osc.core.make_meta_url('pkg', (self.project.name, self.name), APIURL)

View File

@ -33,7 +33,7 @@ class TestCheckSource(OBSLocal.TestCase):
self.wf.create_group(REVIEW_TEAM) self.wf.create_group(REVIEW_TEAM)
self.wf.remote_config_set( self.wf.remote_config_set(
{ 'required-source-maintainer': 'Admin', 'review-team': REVIEW_TEAM } { 'required-source-maintainer': 'Admin', 'review-team': REVIEW_TEAM}
) )
self.bot_user = 'factory-auto' self.bot_user = 'factory-auto'
@ -142,7 +142,7 @@ class TestCheckSource(OBSLocal.TestCase):
# Change the required maintainer # Change the required maintainer
self.wf.create_group(FACTORY_MAINTAINERS.replace('group:', '')) self.wf.create_group(FACTORY_MAINTAINERS.replace('group:', ''))
self.wf.remote_config_set({ 'required-source-maintainer': FACTORY_MAINTAINERS }) self.wf.remote_config_set({ 'required-source-maintainer': FACTORY_MAINTAINERS})
req = self.wf.create_submit_request(SRC_PROJECT, 'blowfish', add_commit = False) req = self.wf.create_submit_request(SRC_PROJECT, 'blowfish', add_commit = False)
@ -172,7 +172,7 @@ class TestCheckSource(OBSLocal.TestCase):
"""Accepts the request when the 'required_maintainer' is a group and is a maintainer for the project""" """Accepts the request when the 'required_maintainer' is a group and is a maintainer for the project"""
group_name = FACTORY_MAINTAINERS.replace('group:', '') group_name = FACTORY_MAINTAINERS.replace('group:', '')
self.wf.create_group(group_name) self.wf.create_group(group_name)
self.wf.remote_config_set({ 'required-source-maintainer': FACTORY_MAINTAINERS }) self.wf.remote_config_set({ 'required-source-maintainer': FACTORY_MAINTAINERS})
self._setup_devel_project(maintainer={'groups': [group_name]}) self._setup_devel_project(maintainer={'groups': [group_name]})
@ -191,7 +191,7 @@ class TestCheckSource(OBSLocal.TestCase):
# Change the required maintainer # Change the required maintainer
group_name = FACTORY_MAINTAINERS.replace('group:', '') group_name = FACTORY_MAINTAINERS.replace('group:', '')
self.wf.create_group(group_name) self.wf.create_group(group_name)
self.wf.remote_config_set({ 'required-source-maintainer': FACTORY_MAINTAINERS }) self.wf.remote_config_set({ 'required-source-maintainer': FACTORY_MAINTAINERS})
self.wf.create_project(SRC_PROJECT.rsplit(':', 1)[0], maintainer={'groups': [group_name]}) self.wf.create_project(SRC_PROJECT.rsplit(':', 1)[0], maintainer={'groups': [group_name]})

View File

@ -153,7 +153,7 @@ class TestFactorySourceAccept(OBSLocal.TestCase):
""") """)
]) ])
result = { 'status': None } result = { 'status': None}
def change_request(result, method, uri, headers): def change_request(result, method, uri, headers):
query = parse_qs(urlparse(uri).query) query = parse_qs(urlparse(uri).query)
@ -275,7 +275,7 @@ class TestFactorySourceAccept(OBSLocal.TestCase):
</collection> </collection>
""") """)
result = { 'factory_source_declined': None } result = { 'factory_source_declined': None}
def change_request(result, method, uri, headers): def change_request(result, method, uri, headers):
query = parse_qs(urlparse(uri).query) query = parse_qs(urlparse(uri).query)

View File

@ -108,7 +108,7 @@ class TestMaintenance(OBSLocal.TestCase):
</directory> </directory>
""") """)
result = { 'devel_review_added': None } result = { 'devel_review_added': None}
def change_request(result, method, uri, headers): def change_request(result, method, uri, headers):
query = parse_qs(urlparse(uri).query) query = parse_qs(urlparse(uri).query)
@ -226,7 +226,7 @@ class TestMaintenance(OBSLocal.TestCase):
</directory> </directory>
""") """)
result = { 'devel_review_added': None } result = { 'devel_review_added': None}
def change_request(result, method, uri, headers): def change_request(result, method, uri, headers):
u = urlparse(uri) u = urlparse(uri)
@ -324,11 +324,11 @@ class TestMaintenance(OBSLocal.TestCase):
<collection/> <collection/>
""") """)
result = { 'factory_review_added': None } result = { 'factory_review_added': None}
def change_request(result, method, uri, headers): def change_request(result, method, uri, headers):
query = parse_qs(urlparse(uri).query) query = parse_qs(urlparse(uri).query)
if query == { 'cmd': ['addreview'], 'by_user': ['factory-source'] }: if query == { 'cmd': ['addreview'], 'by_user': ['factory-source']}:
result['factory_review_added'] = True result['factory_review_added'] = True
return (200, headers, '<status code="ok"/>') return (200, headers, '<status code="ok"/>')

View File

@ -309,7 +309,7 @@ class TestOrigin(OBSLocal.TestCase):
self.origin_config_write([ self.origin_config_write([
{'<devel>': {}}, {'<devel>': {}},
{upstream1_project: {}}, {upstream1_project: {}},
{upstream2_project: { 'pending_submission_consider': True }}, {upstream2_project: { 'pending_submission_consider': True}},
{'*~': {}}, {'*~': {}},
], {'unknown_origin_wait': True}) ], {'unknown_origin_wait': True})
@ -385,8 +385,8 @@ class TestOrigin(OBSLocal.TestCase):
attribute_value_save(self.wf.apiurl, upstream3_project, 'ApprovedRequestSource', '', 'OBS') attribute_value_save(self.wf.apiurl, upstream3_project, 'ApprovedRequestSource', '', 'OBS')
self.origin_config_write([ self.origin_config_write([
{upstream1_project: { 'automatic_updates_initial': True }}, {upstream1_project: { 'automatic_updates_initial': True}},
{upstream2_project: { 'automatic_updates_initial': True }}, {upstream2_project: { 'automatic_updates_initial': True}},
{upstream3_project: {}}, {upstream3_project: {}},
]) ])

View File

@ -255,7 +255,7 @@ class ToTestPublisher(ToTestManager):
return return
status_flag = 'published' status_flag = 'published'
data = {'text': 'tag:{}:{}:{}'.format(snapshot, status_flag, status_flag) } data = {'text': 'tag:{}:{}:{}'.format(snapshot, status_flag, status_flag)}
self.openqa.openqa_request('POST', 'groups/%s/comments' % group_id, data=data) self.openqa.openqa_request('POST', 'groups/%s/comments' % group_id, data=data)
def openqa_group_id(self): def openqa_group_id(self):