Citing from reindent docs:
Change Python (.py) files to use 4-space indents and no hard tab
characters. Also trim excess spaces and tabs from ends of lines, and
remove empty lines at the end of files. Also ensure the last line
ends with a newline.
Citing from PEP 8:
Use 4 spaces per indentation level.
Python 2 code indented with a mixture of tabs and spaces should be
converted to using spaces exclusively.
Don't write string literals that rely on significant trailing
whitespace. Such trailing whitespace is visually indistinguishable
and some editors (or more recently, reindent.py) will trim them.
Also PyLint recommends not to have trailing whitespace on any line.
---
builder/kojid | 140 +++++++++++++++++++++---------------------
cli/koji | 70 ++++++++++-----------
hub/kojihub.py | 28 ++++-----
hub/kojixmlrpc.py | 6 +-
koji/__init__.py | 4 +-
koji/auth.py | 10 +--
koji/context.py | 2 +-
koji/daemon.py | 2 +-
koji/db.py | 2 +-
koji/plugin.py | 2 +-
koji/policy.py | 3 +-
koji/server.py | 1 -
koji/ssl/SSLCommon.py | 1 -
koji/ssl/SSLConnection.py | 1 -
koji/ssl/XMLRPCServerProxy.py | 1 -
koji/tasks.py | 2 +-
koji/util.py | 2 +-
plugins/messagebus.py | 26 ++++----
plugins/runroot.py | 2 -
util/koji-gc | 1 -
util/koji-shadow | 1 -
util/kojira | 4 +-
vm/kojikamid.py | 6 +-
www/kojiweb/index.py | 98 ++++++++++++++---------------
www/lib/kojiweb/util.py | 15 +++--
25 files changed, 210 insertions(+), 220 deletions(-)
diff --git a/builder/kojid b/builder/kojid
index 3df0588..ae33e15 100755
--- a/builder/kojid
+++ b/builder/kojid
@@ -5,7 +5,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
@@ -1032,11 +1032,11 @@ class BaseBuildTask(BaseTaskHandler):
tag_arches = [koji.canonArch(a) for a in tag['arches'].split()]
host_arches = hostdata['arches'].split()
if not set(tag_arches).intersection(host_arches):
- self.logger.info('Task %s (%s): tag arches (%s) and ' \
- 'host arches (%s) are disjoint' % \
- (self.id, self.method,
- ', '.join(tag_arches), ', '.join(host_arches)))
- return False
+ self.logger.info('Task %s (%s): tag arches (%s) and ' \
+ 'host arches (%s) are disjoint' % \
+ (self.id, self.method,
+ ', '.join(tag_arches), ', '.join(host_arches)))
+ return False
#otherwise...
# This is in principle an error condition, but this is not a good place
# to fail. Instead we proceed and let the task fail normally.
@@ -2389,7 +2389,7 @@ class ImageTask(BaseTaskHandler):
def fetchKickstart(self, broot, ksfile):
"""
- Retrieve the kickstart file we were given (locally or remotely) and
+ Retrieve the kickstart file we were given (locally or remotely) and
upload it.
Note that if the KS file existed locally, then "ksfile" is a relative
@@ -2488,7 +2488,7 @@ class ImageTask(BaseTaskHandler):
# Write out the new ks file. Note that things may not be in the same
# order and comments in the original ks file may be lost.
- kskoji = os.path.join('/tmp', 'koji-image-%s-%i.ks' %
+ kskoji = os.path.join('/tmp', 'koji-image-%s-%i.ks' %
(target_info['build_tag_name'], self.id))
kojikspath = os.path.join(broot.rootdir(), kskoji[1:])
outfile = open(kojikspath, 'w')
@@ -2503,7 +2503,7 @@ class ImageTask(BaseTaskHandler):
def getImagePackages(self, cachepath):
"""
- Read RPM header information from the yum cache available in the
+ Read RPM header information from the yum cache available in the
given path. Returns a list of dictionaries for each RPM included.
"""
found = False
@@ -2524,8 +2524,8 @@ class ImageTask(BaseTaskHandler):
raise koji.LiveCDError, 'No repos found in yum cache!'
return hdrlist
-# ApplianceTask begins with a mock chroot, and then installs appliance-tools
-# into it via the appliance-build group. appliance-creator is then executed
+# ApplianceTask begins with a mock chroot, and then installs appliance-tools
+# into it via the appliance-build group. appliance-creator is then executed
# in the chroot to create the appliance image.
#
class ApplianceTask(ImageTask):
@@ -2548,7 +2548,7 @@ class ApplianceTask(ImageTask):
if opts == None:
opts = {}
self.opts = opts
- broot = self.makeImgBuildRoot(build_tag, repo_info, arch,
+ broot = self.makeImgBuildRoot(build_tag, repo_info, arch,
'appliance-build')
kspath = self.fetchKickstart(broot, ksfile)
self.readKickstart(kspath, opts)
@@ -2561,11 +2561,11 @@ class ApplianceTask(ImageTask):
app_log = '/tmp/appliance.log'
os.mkdir(opath)
- cmd = ['/usr/bin/appliance-creator', '-c', kskoji, '-d', '-v',
+ cmd = ['/usr/bin/appliance-creator', '-c', kskoji, '-d', '-v',
'--logfile', app_log, '--cache', cachedir, '-o', odir]
for arg_name in ('vmem', 'vcpu', 'format'):
arg = opts.get(arg_name)
- if arg != None:
+ if arg != None:
cmd.extend(['--%s' % arg_name, arg])
appname = '%s-%s-%s' % (name, version, release)
cmd.extend(['--name', appname])
@@ -2582,7 +2582,7 @@ class ApplianceTask(ImageTask):
results = []
for directory, subdirs, files in os.walk(opath):
for f in files:
- results.append(os.path.join(broot.rootdir(), 'tmp',
+ results.append(os.path.join(broot.rootdir(), 'tmp',
directory, f))
self.logger.debug('output: %s' % results)
if len(results) == 0:
@@ -2610,7 +2610,7 @@ class ApplianceTask(ImageTask):
cachedir[1:]))
broot.markExternalRPMs(hdrlist)
imgdata['rpmlist'] = hdrlist
-
+
broot.expire()
return imgdata
@@ -2706,7 +2706,7 @@ class LiveCDTask(ImageTask):
livecd_log = '/tmp/livecd.log'
cmd = ['/usr/bin/livecd-creator', '-c', kskoji, '-d', '-v',
'--logfile', livecd_log, '--cache', cachedir]
- # we set the fs label to the same as the isoname if it exists,
+ # we set the fs label to the same as the isoname if it exists,
# taking at most 32 characters
isoname = '%s-%s-%s' % (name, version, release)
cmd.extend(['-f', isoname[:32]])
@@ -3398,7 +3398,7 @@ class BaseImageTask(OzImageTask):
class BuildIndirectionImageTask(OzImageTask):
Methods = ['indirectionimage']
- # So, these are copied directly from the base image class
+ # So, these are copied directly from the base image class
# Realistically, we want to inherit methods from both BuildImageTask
# and OzImageTask.
# TODO: refactor - my initial suggestion would be to have OzImageTask
@@ -3427,7 +3427,7 @@ class BuildIndirectionImageTask(OzImageTask):
def fetchHubOrSCM(self, filepath, fileurl):
"""
Retrieve a file either from the hub or a remote scm
-
+
If fileurl is None we assume we are being asked to retrieve from
the hub and that filepath is relative to /mnt/koji/work.
if fileurl contains a value we assume a remote SCM.
@@ -3466,7 +3466,7 @@ class BuildIndirectionImageTask(OzImageTask):
def _task_to_image(task_id):
""" Take a task ID and turn it into an Image Factory Base Image object """
pim = PersistentImageManager.default_manager()
- taskinfo = self.session.getTaskInfo(task_id)
+ taskinfo = self.session.getTaskInfo(task_id)
taskstate = koji.TASK_STATES[taskinfo['state']].lower()
if taskstate != 'closed':
raise koji.BuildError("Input task (%d) must be in closed state - current state is (%s)" %
@@ -3475,21 +3475,21 @@ class BuildIndirectionImageTask(OzImageTask):
if taskmethod != "createImage":
raise koji.BuildError("Input task method must be 'createImage' - actual method (%s)" %
(taskmethod))
- result = self.session.getTaskResult(task_id)
- files = self.session.listTaskOutput(task_id)
+ result = self.session.getTaskResult(task_id)
+ files = self.session.listTaskOutput(task_id)
# This approach works for both scratch and saved/formal images
# The downside is that we depend on the output file naming convention
- def _match_name(inlist, namere):
- for filename in inlist:
- if re.search(namere, filename):
- return filename
- task_diskimage = _match_name(result['files'], ".*qcow2$")
- task_tdl = _match_name(result['files'], "tdl.*xml")
+ def _match_name(inlist, namere):
+ for filename in inlist:
+ if re.search(namere, filename):
+ return filename
+ task_diskimage = _match_name(result['files'], ".*qcow2$")
+ task_tdl = _match_name(result['files'], "tdl.*xml")
- task_dir = os.path.join(koji.pathinfo.work(),koji.pathinfo.taskrelpath(task_id))
- diskimage_full = os.path.join(task_dir, task_diskimage)
- tdl_full = os.path.join(task_dir, task_tdl)
+ task_dir = os.path.join(koji.pathinfo.work(),koji.pathinfo.taskrelpath(task_id))
+ diskimage_full = os.path.join(task_dir, task_diskimage)
+ tdl_full = os.path.join(task_dir, task_tdl)
if not (os.path.isfile(diskimage_full) and os.path.isfile(tdl_full)):
raise koji.BuildError("Missing TDL or qcow2 image for task (%d) - possible expired scratch build" % (task_id))
@@ -3508,7 +3508,7 @@ class BuildIndirectionImageTask(OzImageTask):
factory_base_image.status = 'COMPLETE'
# Now save it
pim.save_image(factory_base_image)
-
+
# We can now reference this object directly or via its UUID in persistent storage
return factory_base_image
@@ -3518,10 +3518,10 @@ class BuildIndirectionImageTask(OzImageTask):
build = self.session.getBuild(nvr)
if not build:
raise koji.BuildError("Could not find build for (%s)" % (nvr))
-
+
buildarchives = self.session.listArchives(build['id'])
if not buildarchives:
- raise koji.Builderror("Could not retrieve archives for build (%s) from NVR (%s)" %
+ raise koji.Builderror("Could not retrieve archives for build (%s) from NVR (%s)" %
(build['id'], nvr))
buildfiles = [ x['filename'] for x in buildarchives ]
@@ -3539,7 +3539,7 @@ class BuildIndirectionImageTask(OzImageTask):
tdl_full = os.path.join(builddir, build_tdl)
if not (os.path.isfile(diskimage_full) and os.path.isfile(tdl_full)):
- raise koji.BuildError("Missing TDL (%s) or qcow2 (%s) image for image (%s) - this should never happen" %
+ raise koji.BuildError("Missing TDL (%s) or qcow2 (%s) image for image (%s) - this should never happen" %
(build_tdl, build_diskimage, nvr))
# The sequence to recreate a valid persistent image is as follows
@@ -3588,12 +3588,12 @@ class BuildIndirectionImageTask(OzImageTask):
release = opts['release']
# TODO: Another mostly copy-paste
- if not release:
- release = self.getRelease(name, version)
- if '-' in version:
- raise koji.ApplianceError('The Version may not have a hyphen')
- if '-' in release:
- raise koji.ApplianceError('The Release may not have a hyphen')
+ if not release:
+ release = self.getRelease(name, version)
+ if '-' in version:
+ raise koji.ApplianceError('The Version may not have a hyphen')
+ if '-' in release:
+ raise koji.ApplianceError('The Release may not have a hyphen')
indirection_template = self.fetchHubOrSCM(opts.get('indirection_template'),
opts.get('indirection_template_url'))
@@ -3601,24 +3601,24 @@ class BuildIndirectionImageTask(OzImageTask):
self.logger.debug('Got indirection template %s' % (indirection_template))
try:
- if opts['utility_image_build']:
- utility_factory_image = _nvr_to_image(opts['utility_image_build'], opts['arch'])
- else:
- utility_factory_image = _task_to_image(int(opts['utility_image_task']))
-
- if opts['base_image_build']:
- base_factory_image = _nvr_to_image(opts['base_image_build'], opts['arch'])
- else:
- base_factory_image = _task_to_image(int(opts['base_image_task']))
+ if opts['utility_image_build']:
+ utility_factory_image = _nvr_to_image(opts['utility_image_build'], opts['arch'])
+ else:
+ utility_factory_image = _task_to_image(int(opts['utility_image_task']))
+
+ if opts['base_image_build']:
+ base_factory_image = _nvr_to_image(opts['base_image_build'], opts['arch'])
+ else:
+ base_factory_image = _task_to_image(int(opts['base_image_task']))
except Exception, e:
self.logger.exception(e)
raise
# OK - We have a template and two input images - lets build
- bld_info = None
- if not opts['scratch']:
- bld_info = self.initImageBuild(name, version, release,
- target_info, opts)
+ bld_info = None
+ if not opts['scratch']:
+ bld_info = self.initImageBuild(name, version, release,
+ target_info, opts)
try:
return self._do_indirection(opts, base_factory_image, utility_factory_image,
@@ -3667,9 +3667,9 @@ class BuildIndirectionImageTask(OzImageTask):
open(target_image.data, "w").write("Mock build from task ID: %s" %
(str(self.id)))
target_image.status='COMPLETE'
- else:
+ else:
target = bd.builder_for_target_image('indirection',
- image_id=base_factory_image.identifier,
+ image_id=base_factory_image.identifier,
parameters=params)
target.target_thread.join()
except Exception, e:
@@ -3697,7 +3697,7 @@ class BuildIndirectionImageTask(OzImageTask):
myresults['logs'] = [ os.path.basename(ozlog) ]
myresults['arch'] = opts['arch']
# TODO: This should instead track the two input images: base and utility
- myresults['rpmlist'] = [ ]
+ myresults['rpmlist'] = [ ]
# This is compatible with some helper methods originally implemented for the base
# image build. In the original usage, the dict contains an entry per build arch
@@ -3825,7 +3825,7 @@ class BuildSRPMFromSCMTask(BaseBuildTask):
raise koji.BuildError, "Multiple srpms found in %s: %s" % (sourcedir, ", ".join(srpms))
else:
srpm = srpms[0]
-
+
# check srpm name
h = koji.get_rpm_header(srpm)
name = h[rpm.RPMTAG_NAME]
@@ -3844,7 +3844,7 @@ class BuildSRPMFromSCMTask(BaseBuildTask):
broot.expire()
return {'srpm': "%s/%s" % (uploadpath, srpm_name),
- 'logs': ["%s/%s" % (uploadpath, os.path.basename(f))
+ 'logs': ["%s/%s" % (uploadpath, os.path.basename(f))
for f in log_files],
'brootid': brootid,
}
@@ -3969,16 +3969,16 @@ Build Info: %(weburl)s/buildinfo?buildID=%(build_id)i\r
if not data:
data = {}
taskinfo = self.session.getTaskInfo(task_id)
-
+
if not taskinfo:
# invalid task_id
return data
-
+
if taskinfo['host_id']:
hostinfo = self.session.getHost(taskinfo['host_id'])
else:
hostinfo = None
-
+
result = None
try:
result = self.session.getTaskResult(task_id)
@@ -3994,17 +3994,17 @@ Build Info: %(weburl)s/buildinfo?buildID=%(build_id)i\r
sys.exc_clear()
if not result:
result = 'Unknown'
-
+
files = self.session.listTaskOutput(task_id)
logs = [filename for filename in files if filename.endswith('.log')]
rpms = [filename for filename in files if filename.endswith('.rpm') and not filename.endswith('.src.rpm')]
srpms = [filename for filename in files if filename.endswith('.src.rpm')]
misc = [filename for filename in files if filename not in logs + rpms + srpms]
-
+
logs.sort()
rpms.sort()
misc.sort()
-
+
data[task_id] = {}
data[task_id]['id'] = taskinfo['id']
data[task_id]['method'] = taskinfo['method']
@@ -4018,7 +4018,7 @@ Build Info: %(weburl)s/buildinfo?buildID=%(build_id)i\r
data[task_id]['rpms'] = rpms
data[task_id]['srpms'] = srpms
data[task_id]['misc'] = misc
-
+
children = self.session.getTaskChildren(task_id)
for child in children:
data = self._getTaskData(child['id'], data)
@@ -4057,7 +4057,7 @@ Build Info: %(weburl)s/buildinfo?buildID=%(build_id)i\r
elif build['state'] == koji.BUILD_STATES['FAILED']:
failure_data = task_data[task_id]['result']
failed_hosts = ['%s (%s)' % (task['host'], task['arch']) for task in task_data.values() if task['host'] and task['state'] == 'failed']
- failure_info = "\r\n%s (%d) failed on %s:\r\n %s" % (build_nvr, build_id,
+ failure_info = "\r\n%s (%d) failed on %s:\r\n %s" % (build_nvr, build_id,
', '.join(failed_hosts),
failure_data)
@@ -4066,14 +4066,14 @@ Build Info: %(weburl)s/buildinfo?buildID=%(build_id)i\r
tasks = {'failed' : [task for task in task_data.values() if task['state'] == 'failed'],
'canceled' : [task for task in task_data.values() if task['state'] == 'canceled'],
'closed' : [task for task in task_data.values() if task['state'] == 'closed']}
-
+
srpms = []
for taskinfo in task_data.values():
for srpmfile in taskinfo['srpms']:
srpms.append(srpmfile)
srpms = self.uniq(srpms)
srpms.sort()
-
+
if srpms:
output = "SRPMS:\r\n"
for srpm in srpms:
@@ -4564,7 +4564,7 @@ if __name__ == "__main__":
except koji.AuthError, e:
quit("Error: Unable to log in: %s" % e)
except xmlrpclib.ProtocolError:
- quit("Error: Unable to connect to server %s" % (options.server))
+ quit("Error: Unable to connect to server %s" % (options.server))
elif options.user:
try:
# authenticate using user/password
diff --git a/cli/koji b/cli/koji
index bfb0955..839f7d6 100755
--- a/cli/koji
+++ b/cli/koji
@@ -6,7 +6,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
@@ -141,7 +141,7 @@ def get_options():
parser.add_option("--debug-xmlrpc", action="store_true", default=False,
help=_("show xmlrpc debug output"))
parser.add_option("-q", "--quiet", action="store_true", default=False,
- help=_("run quietly"))
+ help=_("run quietly"))
parser.add_option("--skip-main", action="store_true", default=False,
help=_("don't actually run main"))
parser.add_option("-s", "--server", help=_("url of XMLRPC server"))
@@ -205,7 +205,7 @@ def get_options():
'krbservice': 'host',
'cert': '~/.koji/client.crt',
'ca': '~/.koji/clientca.crt',
- 'serverca': '~/.koji/serverca.crt',
+ 'serverca': '~/.koji/serverca.crt',
'authtype': None
}
#note: later config files override earlier ones
@@ -263,7 +263,7 @@ def get_options():
# expand paths here, so we don't have to worry about it later
value = os.path.expanduser(getattr(options, name))
setattr(options, name, value)
-
+
#honor topdir
if options.topdir:
koji.BASEDIR = options.topdir
@@ -427,7 +427,7 @@ def display_task_results(tasks):
for task in [task for task in tasks.values() if task.level == 0]:
state = task.info['state']
task_label = task.str()
-
+
if state == koji.TASK_STATES['CLOSED']:
print '%s completed successfully' % task_label
elif state == koji.TASK_STATES['FAILED']:
@@ -526,7 +526,7 @@ def watch_logs(session, tasklist, opts):
while contents:
if not taskoffsets.has_key(log):
taskoffsets[log] = 0
-
+
contents = session.downloadTaskOutput(task_id, log, taskoffsets[log], 16384)
taskoffsets[log] += len(contents)
if contents:
@@ -556,7 +556,7 @@ def handle_add_group(options, session, args):
assert False
tag = args[0]
group = args[1]
-
+
activate_session(session)
if not session.hasPerm('admin'):
print "This action requires admin privileges"
@@ -566,7 +566,7 @@ def handle_add_group(options, session, args):
if not dsttag:
print "Unknown tag: %s" % tag
return 1
-
+
groups = dict([(p['name'], p['group_id']) for p in session.getTagGroups(tag, inherit=False)])
group_id = groups.get(group, None)
if group_id is not None:
@@ -574,7 +574,7 @@ def handle_add_group(options, session, args):
return 1
session.groupListAdd(tag, group)
-
+
def handle_add_host(options, session, args):
"[admin] Add a host"
usage = _("usage: %prog add-host [options] hostname arch [arch2 ...]")
@@ -694,7 +694,7 @@ def handle_remove_host_from_channel(options, session, args):
if channel not in hostchannels:
print "Host %s is not a member of channel %s" % (host, channel)
return 1
-
+
session.removeHostFromChannel(host, channel)
def handle_remove_channel(options, session, args):
@@ -903,7 +903,7 @@ def handle_build(options, session, args):
parser.error(_("Exactly two arguments (a build target and a SCM URL or srpm file) are required"))
assert False
if build_opts.arch_override and not build_opts.scratch:
- parser.error(_("--arch_override is only allowed for --scratch builds"))
+ parser.error(_("--arch_override is only allowed for --scratch builds"))
activate_session(session)
target = args[0]
if target.lower() == "none" and build_opts.repo_id:
@@ -987,7 +987,7 @@ def handle_chain_build(options, session, args):
return 1
sources = args[1:]
-
+
src_list = []
build_level = []
#src_lists is a list of lists of sources to build.
@@ -1017,7 +1017,7 @@ def handle_chain_build(options, session, args):
if build_opts.background:
#relative to koji.PRIO_DEFAULT
priority = 5
-
+
task_id = session.chainBuild(src_list, target, priority=priority)
print "Created task:", task_id
@@ -2534,7 +2534,7 @@ def anon_handle_latest_build(options, session, args):
print "%-40s %-20s %s" % ("Build","Tag","Built by")
print "%s %s %s" % ("-"*40, "-"*20, "-"*16)
options.quiet = True
-
+
output = [ fmt % x for x in data]
output.sort()
for line in output:
@@ -2927,7 +2927,7 @@ def anon_handle_list_hosts(options, session, args):
for host in hosts:
session.getLastHostUpdate(host['id'])
updateList = session.multiCall()
-
+
for host, [update] in zip(hosts, updateList):
if update is None:
host['update'] = '-'
@@ -3166,12 +3166,12 @@ def handle_clone_tag(options, session, args):
activate_session(session)
if not session.hasPerm('admin') and not options.test:
- print "This action requires admin privileges"
- return
+ print "This action requires admin privileges"
+ return
if args[0] == args[1]:
sys.stdout.write('Source and destination tags must be different.\n')
- return
+ return
# store tags.
srctag = session.getTag(args[0])
dsttag = session.getTag(args[1])
@@ -3433,7 +3433,7 @@ def handle_add_target(options, session, args):
if not session.hasPerm('admin'):
print "This action requires admin privileges"
return 1
-
+
chkbuildtag = session.getTag(build_tag)
chkdesttag = session.getTag(dest_tag)
if not chkbuildtag:
@@ -3445,7 +3445,7 @@ def handle_add_target(options, session, args):
if not chkdesttag:
print "Destination tag does not exist: %s" % dest_tag
return 1
-
+
session.createBuildTarget(name, build_tag, dest_tag)
def handle_edit_target(options, session, args):
@@ -3509,13 +3509,13 @@ def handle_remove_target(options, session, args):
if not session.hasPerm('admin'):
print "This action requires admin privileges"
return
-
+
target = args[0]
target_info = session.getBuildTarget(target)
if not target_info:
print "Build target %s does not exist" % target
return 1
-
+
session.deleteBuildTarget(target_info['id'])
def handle_remove_tag(options, session, args):
@@ -4680,7 +4680,7 @@ def handle_edit_tag_inheritance(options, session, args):
return 1
print _("Error: Key constraints may be broken. Exiting.")
return 1
-
+
# len(data) == 1
data = data[0]
@@ -5101,7 +5101,7 @@ def handle_image_build_indirection(options, session, args):
usage += _("\n %prog image-build --config FILE")
usage += _("\n\n(Specify the --help global option for a list of other " +
"help options)")
- parser = OptionParser(usage=usage)
+ parser = OptionParser(usage=usage)
parser.add_option("--config",
help=_("Use a configuration file to define image-build options " +
"instead of command line options (they will be ignored)."))
@@ -5151,19 +5151,19 @@ def _build_image_indirection(options, task_opts, session, args):
"""
# Do some sanity checks before even attempting to create the session
- if not (bool(task_opts.utility_image_task) !=
+ if not (bool(task_opts.utility_image_task) !=
bool(task_opts.utility_image_build)):
raise koji.GenericError, _("You must specify either a utility-image task or build ID/NVR")
- if not (bool(task_opts.base_image_task) !=
+ if not (bool(task_opts.base_image_task) !=
bool(task_opts.base_image_build)):
raise koji.GenericError, _("You must specify either a base-image task or build ID/NVR")
required_opts = [ 'name', 'version', 'arch', 'target', 'indirection_template', 'results_loc' ]
optional_opts = [ 'indirection_template_url', 'scratch', 'utility_image_task', 'utility_image_build',
- 'base_image_task', 'base_image_build', 'release', 'skip_tag' ]
+ 'base_image_task', 'base_image_build', 'release', 'skip_tag' ]
- missing = [ ]
+ missing = [ ]
for opt in required_opts:
if not getattr(task_opts, opt, None):
missing.append(opt)
@@ -5909,7 +5909,7 @@ def handle_move_build(opts, session, args):
activate_session(session)
tasks = []
builds = []
-
+
if options.all:
for arg in args[2:]:
pkg = session.getPackage(arg)
@@ -5923,10 +5923,10 @@ def handle_move_build(opts, session, args):
build = session.getBuild(arg)
if not build:
print _("Invalid build %s, skipping." % arg)
- continue
+ continue
if not build in builds:
builds.append(build)
-
+
for build in builds:
task_id = session.moveBuild(args[0], args[1], build['id'], options.force)
tasks.append(task_id)
@@ -6045,7 +6045,7 @@ def anon_handle_download_build(options, session, args):
elif len(args) > 1:
parser.error(_("Only a single package N-V-R or build ID may be specified"))
assert False
-
+
activate_session(session)
build = args[0]
@@ -6060,7 +6060,7 @@ def anon_handle_download_build(options, session, args):
print "No associated builds for task %s" % build
return 1
build = builds[0]['build_id']
-
+
if suboptions.latestfrom:
# We want the latest build, not a specific build
try:
@@ -6074,7 +6074,7 @@ def anon_handle_download_build(options, session, args):
info = builds[0]
else:
info = session.getBuild(build)
-
+
if info is None:
print "No such build: %s" % build
return 1
@@ -6134,7 +6134,7 @@ def anon_handle_download_build(options, session, args):
pg = None
else:
pg = progress.TextMeter()
-
+
for url, relpath in urls:
file = grabber.urlopen(url, progress_obj=pg, text=relpath)
diff --git a/hub/kojihub.py b/hub/kojihub.py
index 9decf7c..3cb9648 100644
--- a/hub/kojihub.py
+++ b/hub/kojihub.py
@@ -5,7 +5,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
@@ -3442,8 +3442,8 @@ def list_rpms(buildID=None, buildrootID=None, imageID=None, componentBuildrootID
# image specific constraints
if imageID != None:
- clauses.append('image_listing.image_id = %(imageID)i')
- joins.append('image_listing ON rpminfo.id = image_listing.rpm_id')
+ clauses.append('image_listing.image_id = %(imageID)i')
+ joins.append('image_listing ON rpminfo.id = image_listing.rpm_id')
if hostID != None:
joins.append('buildroot ON rpminfo.buildroot_id = buildroot.id')
@@ -3553,7 +3553,7 @@ def list_archives(buildID=None, buildrootID=None, componentBuildrootID=None, hos
checksum_type: the checksum type (integer)
If componentBuildrootID is specified, then the map will also contain the following key:
- project: whether the archive was pulled in as a project dependency, or as part of the
+ project: whether the archive was pulled in as a project dependency, or as part of the
build environment setup (boolean)
If 'type' is specified, then the archives listed will be limited
@@ -3590,7 +3590,7 @@ def list_archives(buildID=None, buildrootID=None, componentBuildrootID=None, hos
an empty list is returned.
"""
values = {}
-
+
tables = ['archiveinfo']
joins = ['archivetypes on archiveinfo.type_id = archivetypes.id']
fields = [('archiveinfo.id', 'id'),
@@ -5949,7 +5949,7 @@ def get_notification_recipients(build, tag_id, state):
for this tag and the user who submitted the build. The list will not contain
duplicates.
"""
-
+
clauses = []
if build:
@@ -7542,7 +7542,7 @@ class RootExports(object):
"""
Import an archive file and associate it with a build. The archive can
be any non-rpm filetype supported by Koji.
-
+
filepath: path to the archive file (relative to the Koji workdir)
buildinfo: information about the build to associate the archive with
May be a string (NVR), integer (buildID), or dict (containing keys: name, version, release)
@@ -8557,7 +8557,7 @@ class RootExports(object):
raise koji.GenericError, 'user already exists: %s' % username
if krb_principal and get_user(krb_principal):
raise koji.GenericError, 'user with this Kerberos principal already exists: %s' % krb_principal
-
+
return context.session.createUser(username, status=status, krb_principal=krb_principal)
def enableUser(self, username):
@@ -8566,14 +8566,14 @@ class RootExports(object):
if not user:
raise koji.GenericError, 'unknown user: %s' % username
set_user_status(user, koji.USER_STATUS['NORMAL'])
-
+
def disableUser(self, username):
"""Disable logins by the specified user"""
user = get_user(username)
if not user:
raise koji.GenericError, 'unknown user: %s' % username
set_user_status(user, koji.USER_STATUS['BLOCKED'])
-
+
#group management calls
newGroup = staticmethod(new_group)
addGroupMember = staticmethod(add_group_member)
@@ -9223,11 +9223,11 @@ class RootExports(object):
notificationUser = self.getUser(user_id)
if not notificationUser:
raise koji.GenericError, 'invalid user ID: %s' % user_id
-
+
if not (notificationUser['id'] == currentUser['id'] or self.hasPerm('admin')):
raise koji.GenericError, 'user %s cannot create notifications for user %s' % \
(currentUser['name'], notificationUser['name'])
-
+
email = '%s@%s' % (notificationUser['name'], context.opts['EmailDomain'])
insert = """INSERT INTO build_notifications
(user_id, package_id, tag_id, success_only, email)
@@ -10076,7 +10076,7 @@ class HostExports(object):
if len(poms) == 0:
pass
elif len(poms) == 1:
- # This directory has a .pom file, so get the Maven group_id,
+ # This directory has a .pom file, so get the Maven group_id,
# artifact_id, and version from it and associate those with
# the artifacts in this directory
pom_path = os.path.join(maven_task_dir, relpath, poms[0])
@@ -10317,7 +10317,7 @@ class HostExports(object):
def importImage(self, task_id, build_id, results):
"""
- Import a built image, populating the database with metadata and
+ Import a built image, populating the database with metadata and
moving the image to its final location.
"""
for sub_results in results.values():
diff --git a/hub/kojixmlrpc.py b/hub/kojixmlrpc.py
index 67cb8ee..0e51012 100644
--- a/hub/kojixmlrpc.py
+++ b/hub/kojixmlrpc.py
@@ -3,7 +3,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
@@ -292,7 +292,7 @@ class ModXMLRPCRequestHandler(object):
if context.opts.get('LockOut') and \
context.method not in ('login', 'krbLogin', 'sslLogin', 'logout') and \
not context.session.hasPerm('admin'):
- raise koji.ServerOffline, "Server disabled for maintenance"
+ raise koji.ServerOffline, "Server disabled for maintenance"
def _dispatch(self, method, params):
func = self._get_handler(method)
@@ -569,7 +569,7 @@ def get_policy(opts, plugins):
if pname != test.policy:
continue
elif pname not in test.policy:
- continue
+ continue
# in case of name overlap, last one wins
# hence plugins can override builtin tests
merged[name] = test
diff --git a/koji/__init__.py b/koji/__init__.py
index d133ed1..24f0808 100644
--- a/koji/__init__.py
+++ b/koji/__init__.py
@@ -5,7 +5,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
@@ -987,7 +987,7 @@ def parse_pom(path=None, contents=None):
raise GenericError, 'either a path to a pom file or the contents of a pom file must be specified'
# A common problem is non-UTF8 characters in XML files, so we'll convert the string first
-
+
contents = fixEncoding(contents)
try:
diff --git a/koji/auth.py b/koji/auth.py
index 8e51ec7..d419d77 100644
--- a/koji/auth.py
+++ b/koji/auth.py
@@ -3,7 +3,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
@@ -247,7 +247,7 @@ class Session(object):
if not result:
raise koji.AuthError, 'invalid user_id: %s' % user_id
name, usertype, status = result
-
+
if status != koji.USER_STATUS['NORMAL']:
raise koji.AuthError, 'logins by %s are not allowed' % name
@@ -394,7 +394,7 @@ class Session(object):
raise koji.AuthError, '%s is not authorized to login other users' % client_dn
else:
username = client_name
-
+
cursor = context.cnx.cursor()
query = """SELECT id FROM users
WHERE name = %(username)s"""
@@ -596,7 +596,7 @@ class Session(object):
"""
if not name:
raise koji.GenericError, 'a user must have a non-empty name'
-
+
if usertype == None:
usertype = koji.USERTYPES['NORMAL']
elif not koji.USERTYPES.get(usertype):
@@ -606,7 +606,7 @@ class Session(object):
status = koji.USER_STATUS['NORMAL']
elif not koji.USER_STATUS.get(status):
raise koji.GenericError, 'invalid status: %s' % status
-
+
cursor = context.cnx.cursor()
select = """SELECT nextval('users_id_seq')"""
cursor.execute(select, locals())
diff --git a/koji/context.py b/koji/context.py
index f904bed..b05e3a3 100755
--- a/koji/context.py
+++ b/koji/context.py
@@ -3,7 +3,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
diff --git a/koji/daemon.py b/koji/daemon.py
index b9f3070..d76355b 100644
--- a/koji/daemon.py
+++ b/koji/daemon.py
@@ -4,7 +4,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
diff --git a/koji/db.py b/koji/db.py
index f5f6104..dcd2461 100644
--- a/koji/db.py
+++ b/koji/db.py
@@ -5,7 +5,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
diff --git a/koji/plugin.py b/koji/plugin.py
index e189d1f..cbb245e 100644
--- a/koji/plugin.py
+++ b/koji/plugin.py
@@ -3,7 +3,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
diff --git a/koji/policy.py b/koji/policy.py
index 47e7237..653f414 100644
--- a/koji/policy.py
+++ b/koji/policy.py
@@ -2,7 +2,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
@@ -368,4 +368,3 @@ def findSimpleTests(namespace):
ret.setdefault(name, value)
#...so first test wins in case of name overlap
return ret
-
diff --git a/koji/server.py b/koji/server.py
index 7d9ed3e..7cc8be8 100644
--- a/koji/server.py
+++ b/koji/server.py
@@ -187,4 +187,3 @@ class InputWrapper(object):
while line:
yield line
line = self.readline()
-
diff --git a/koji/ssl/SSLCommon.py b/koji/ssl/SSLCommon.py
index 5cb722d..0d3fb94 100644
--- a/koji/ssl/SSLCommon.py
+++ b/koji/ssl/SSLCommon.py
@@ -139,4 +139,3 @@ class PlgHTTPS(httplib.HTTP):
def __init__(self, host='', port=None, ssl_context=None, strict=None, timeout=None):
self._setup(self._connection_class(host, port, ssl_context, strict, timeout))
-
diff --git a/koji/ssl/SSLConnection.py b/koji/ssl/SSLConnection.py
index 1bb9e76..5a45095 100644
--- a/koji/ssl/SSLConnection.py
+++ b/koji/ssl/SSLConnection.py
@@ -156,4 +156,3 @@ class PlgFileObject(socket._fileobject):
self._sock.close()
finally:
self._sock = None
-
diff --git a/koji/ssl/XMLRPCServerProxy.py b/koji/ssl/XMLRPCServerProxy.py
index 40b174d..16de619 100644
--- a/koji/ssl/XMLRPCServerProxy.py
+++ b/koji/ssl/XMLRPCServerProxy.py
@@ -176,4 +176,3 @@ if __name__ == '__main__':
except KeyboardInterrupt:
os._exit(0)
print "All done. (%d timed out)" % tm.get()
-
diff --git a/koji/tasks.py b/koji/tasks.py
index 46a7099..0d9a003 100644
--- a/koji/tasks.py
+++ b/koji/tasks.py
@@ -4,7 +4,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
diff --git a/koji/util.py b/koji/util.py
index e7c95a7..80e511f 100644
--- a/koji/util.py
+++ b/koji/util.py
@@ -2,7 +2,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
diff --git a/plugins/messagebus.py b/plugins/messagebus.py
index a23bc94..4ebf806 100644
--- a/plugins/messagebus.py
+++ b/plugins/messagebus.py
@@ -22,19 +22,19 @@ session = None
target = None
def connect_timeout(host, port, timeout):
- for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
- af, socktype, proto, canonname, sa = res
- sock = socket.socket(af, socktype, proto)
- sock.settimeout(timeout)
- try:
- sock.connect(sa)
- break
- except socket.error, msg:
- sock.close()
- else:
- # If we got here then we couldn't connect (yet)
- raise
- return sock
+ for res in socket.getaddrinfo(host, port, 0, socket.SOCK_STREAM):
+ af, socktype, proto, canonname, sa = res
+ sock = socket.socket(af, socktype, proto)
+ sock.settimeout(timeout)
+ try:
+ sock.connect(sa)
+ break
+ except socket.error, msg:
+ sock.close()
+ else:
+ # If we got here then we couldn't connect (yet)
+ raise
+ return sock
class tlstimeout(qpid.messaging.transports.tls):
def __init__(self, conn, host, port):
diff --git a/plugins/runroot.py b/plugins/runroot.py
index 427d483..86b6892 100644
--- a/plugins/runroot.py
+++ b/plugins/runroot.py
@@ -319,5 +319,3 @@ class RunRootTask(tasks.BaseTaskHandler):
os.unlink(fn)
except OSError:
pass
-
-
diff --git a/util/koji-gc b/util/koji-gc
index 871c7f8..2d61aa4 100755
--- a/util/koji-gc
+++ b/util/koji-gc
@@ -957,4 +957,3 @@ if __name__ == "__main__":
pass
if not options.skip_main:
sys.exit(rv)
-
diff --git a/util/koji-shadow b/util/koji-shadow
index cdeef8c..3b62776 100755
--- a/util/koji-shadow
+++ b/util/koji-shadow
@@ -1328,4 +1328,3 @@ if __name__ == "__main__":
except:
pass
sys.exit(rv)
-
diff --git a/util/kojira b/util/kojira
index fe827be..c18f63b 100755
--- a/util/kojira
+++ b/util/kojira
@@ -5,7 +5,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
@@ -130,7 +130,7 @@ class ManagedRepo(object):
if not tag_info:
tag_info = getTag(self.session, self.tag_id, self.event_id)
if not tag_info:
- self.logger.warn('Could not get info for tag %i, skipping delete of repo %i' %
+ self.logger.warn('Could not get info for tag %i, skipping delete of repo %i' %
(self.tag_id, self.repo_id))
return False
tag_name = tag_info['name']
diff --git a/vm/kojikamid.py b/vm/kojikamid.py
index c142267..15c0570 100755
--- a/vm/kojikamid.py
+++ b/vm/kojikamid.py
@@ -6,7 +6,7 @@
#
# Koji is free software; you can redistribute it and/or
# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation;
+# License as published by the Free Software Foundation;
# version 2.1 of the License.
#
# This software is distributed in the hope that it will be useful,
@@ -276,7 +276,7 @@ class WindowsBuild(object):
continue
tokens = entry.split(':')
filename = tokens[0]
- for var in ('name', 'version', 'release'):
+ for var in ('name', 'version', 'release'):
filename = filename.replace('$' + var, getattr(self, var))
metadata = {}
metadata['platforms'] = tokens[1].split(',')
@@ -589,7 +589,7 @@ def get_mgmt_server():
macaddr, gateway, MANAGER_PORT)
server = xmlrpclib.ServerProxy('http://%s:%s/' %
(gateway, MANAGER_PORT), allow_none=True)
- # we would set a timeout on the socket here, but that is apparently not
+ # we would set a timeout on the socket here, but that is apparently not
# supported by python/cygwin/Windows
task_port = server.getPort(macaddr)
logger.debug('found task-specific port %s', task_port)
diff --git a/www/kojiweb/index.py b/www/kojiweb/index.py
index ff15a5f..4be6131 100644
--- a/www/kojiweb/index.py
+++ b/www/kojiweb/index.py
@@ -286,7 +286,7 @@ def index(environ, packageOrder='package_name', packageStart=None):
if user:
packages = kojiweb.util.paginateResults(server, values, 'listPackages', kw={'userID': user['id'], 'with_dups': True},
start=packageStart, dataName='packages', prefix='package', order=packageOrder, pageSize=10)
-
+
notifs = server.getBuildNotifications(user['id'])
notifs.sort(kojiweb.util.sortByKeyFunc('id'))
# XXX Make this a multicall
@@ -294,21 +294,21 @@ def index(environ, packageOrder='package_name', packageStart=None):
notif['package'] = None
if notif['package_id']:
notif['package'] = server.getPackage(notif['package_id'])
-
+
notif['tag'] = None
if notif['tag_id']:
notif['tag'] = server.getTag(notif['tag_id'])
values['notifs'] = notifs
-
+
values['user'] = user
values['welcomeMessage'] = environ['koji.options']['KojiGreeting']
-
+
return _genHTML(environ, 'index.chtml')
def notificationedit(environ, notificationID):
server = _getServer(environ)
_assertLogin(environ)
-
+
notificationID = int(notificationID)
notification = server.getBuildNotification(notificationID)
if notification == None:
@@ -399,7 +399,7 @@ def notificationcreate(environ):
def notificationdelete(environ, notificationID):
server = _getServer(environ)
_assertLogin(environ)
-
+
notificationID = int(notificationID)
notification = server.getBuildNotification(notificationID)
if not notification:
@@ -491,7 +491,7 @@ def tasks(environ, owner=None, state='active', view='tree', method='all', hostID
if view in ('tree', 'toplevel'):
opts['parent'] = None
-
+
if state == 'active':
opts['state'] = [koji.TASK_STATES['FREE'], koji.TASK_STATES['OPEN'], koji.TASK_STATES['ASSIGNED']]
elif state == 'all':
@@ -531,7 +531,7 @@ def tasks(environ, owner=None, state='active', view='tree', method='all', hostID
tasks = kojiweb.util.paginateMethod(server, values, 'listTasks', kw={'opts': opts},
start=start, dataName='tasks', prefix='task', order=order)
-
+
if view == 'tree':
server.multicall = True
for task in tasks:
@@ -577,7 +577,7 @@ def taskinfo(environ, taskID):
values['parent'] = parent
else:
values['parent'] = None
-
+
descendents = server.getTaskDescendents(task['id'], request=True)
values['descendents'] = descendents
@@ -641,7 +641,7 @@ def taskinfo(environ, taskID):
values['wrapTask'] = wrapTask
elif task['method'] == 'restartVerify':
values['rtask'] = server.getTaskInfo(params[0], request=True)
-
+
if task['state'] in (koji.TASK_STATES['CLOSED'], koji.TASK_STATES['FAILED']):
try:
result = server.getTaskResult(task['id'])
@@ -688,7 +688,7 @@ def taskstatus(environ, taskID):
def resubmittask(environ, taskID):
server = _getServer(environ)
_assertLogin(environ)
-
+
taskID = int(taskID)
newTaskID = server.resubmitTask(taskID)
_redirect(environ, 'taskinfo?taskID=%i' % newTaskID)
@@ -817,13 +817,13 @@ def packages(environ, tagID=None, userID=None, order='package_name', start=None,
values['prefix'] = prefix
inherited = int(inherited)
values['inherited'] = inherited
-
+
packages = kojiweb.util.paginateResults(server, values, 'listPackages',
kw={'tagID': tagID, 'userID': userID, 'prefix': prefix, 'inherited': bool(inherited)},
start=start, dataName='packages', prefix='package', order=order)
-
+
values['chars'] = _PREFIX_CHARS
-
+
return _genHTML(environ, 'packages.chtml')
def packageinfo(environ, packageID, tagOrder='name', tagStart=None, buildOrder='-completion_time', buildStart=None):
@@ -840,7 +840,7 @@ def packageinfo(environ, packageID, tagOrder='name', tagStart=None, buildOrder='
values['package'] = package
values['packageID'] = package['id']
-
+
tags = kojiweb.util.paginateMethod(server, values, 'listTags', kw={'package': package['id']},
start=tagStart, dataName='tags', prefix='tag', order=tagOrder)
builds = kojiweb.util.paginateMethod(server, values, 'listBuilds', kw={'packageID': package['id']},
@@ -966,7 +966,7 @@ def tagedit(environ, tagID):
params['maven_include_all'] = bool(form.has_key('maven_include_all'))
server.editTag2(tag['id'], **params)
-
+
_redirect(environ, 'taginfo?tagID=%i' % tag['id'])
elif form.has_key('cancel'):
_redirect(environ, 'taginfo?tagID=%i' % tag['id'])
@@ -1016,7 +1016,7 @@ def tagparent(environ, tagID, parentID, action):
data = server.getInheritanceData(tag['id'])
data.append(newDatum)
-
+
server.setInheritanceData(tag['id'], data)
elif form.has_key('cancel'):
pass
@@ -1039,7 +1039,7 @@ def tagparent(environ, tagID, parentID, action):
values['inheritanceData'] = inheritanceData[0]
else:
raise koji.GenericError, 'tag %i has tag %i listed as a parent more than once' % (tag['id'], parent['id'])
-
+
return _genHTML(environ, 'tagparent.chtml')
elif action == 'remove':
data = server.getInheritanceData(tag['id'])
@@ -1076,7 +1076,7 @@ def buildinfo(environ, buildID):
server = _getServer(environ)
buildID = int(buildID)
-
+
build = server.getBuild(buildID)
values['title'] = koji.buildLabel(build) + ' | Build Info'
@@ -1170,7 +1170,7 @@ def buildinfo(environ, buildID):
values['imagebuild'] = imagebuild
values['archives'] = archives
values['archivesByExt'] = archivesByExt
-
+
values['noarch_log_dest'] = noarch_log_dest
if environ['koji.currentUser']:
values['perms'] = server.getUserPerms(environ['koji.currentUser']['id'])
@@ -1243,7 +1243,7 @@ def builds(environ, userID=None, tagID=None, packageID=None, state=None, order='
if prefix not in _PREFIX_CHARS:
prefix = None
values['prefix'] = prefix
-
+
values['order'] = order
if type in ('maven', 'win', 'image'):
pass
@@ -1274,7 +1274,7 @@ def builds(environ, userID=None, tagID=None, packageID=None, state=None, order='
'type': type,
'state': state, 'prefix': prefix},
start=start, dataName='builds', prefix='build', order=order)
-
+
values['chars'] = _PREFIX_CHARS
return _genHTML(environ, 'builds.chtml')
@@ -1295,7 +1295,7 @@ def users(environ, order='name', start=None, prefix=None):
start=start, dataName='users', prefix='user', order=order)
values['chars'] = _PREFIX_CHARS
-
+
return _genHTML(environ, 'users.chtml')
def userinfo(environ, userID, packageOrder='package_name', packageStart=None, buildOrder='-completion_time', buildStart=None):
@@ -1314,10 +1314,10 @@ def userinfo(environ, userID, packageOrder='package_name', packageStart=None, bu
packages = kojiweb.util.paginateResults(server, values, 'listPackages', kw={'userID': user['id'], 'with_dups': True},
start=packageStart, dataName='packages', prefix='package', order=packageOrder, pageSize=10)
-
+
builds = kojiweb.util.paginateMethod(server, values, 'listBuilds', kw={'userID': user['id']},
start=buildStart, dataName='builds', prefix='build', order=buildOrder, pageSize=10)
-
+
return _genHTML(environ, 'userinfo.chtml')
def rpminfo(environ, rpmID, fileOrder='name', fileStart=None, buildrootOrder='-id', buildrootStart=None):
@@ -1360,7 +1360,7 @@ def rpminfo(environ, rpmID, fileOrder='name', fileStart=None, buildrootOrder='-i
values['build'] = build
values['builtInRoot'] = builtInRoot
values['buildroots'] = buildroots
-
+
files = kojiweb.util.paginateMethod(server, values, 'listRPMFiles', args=[rpm['id']],
start=fileStart, dataName='files', prefix='file', order=fileOrder)
@@ -1408,7 +1408,7 @@ def fileinfo(environ, filename, rpmID=None, archiveID=None):
values['rpm'] = None
values['archive'] = None
-
+
if rpmID:
rpmID = int(rpmID)
rpm = server.getRPM(rpmID)
@@ -1439,7 +1439,7 @@ def fileinfo(environ, filename, rpmID=None, archiveID=None):
def cancelbuild(environ, buildID):
server = _getServer(environ)
_assertLogin(environ)
-
+
buildID = int(buildID)
build = server.getBuild(buildID)
if build == None:
@@ -1468,7 +1468,7 @@ def hosts(environ, state='enabled', start=None, order='name'):
values['state'] = state
hosts = server.listHosts(**args)
-
+
server.multicall = True
for host in hosts:
server.getLastHostUpdate(host['id'])
@@ -1518,7 +1518,7 @@ def hostinfo(environ, hostID=None, userID=None):
values['perms'] = server.getUserPerms(environ['koji.currentUser']['id'])
else:
values['perms'] = []
-
+
return _genHTML(environ, 'hostinfo.chtml')
def hostedit(environ, hostID):
@@ -1630,7 +1630,7 @@ def buildrootinfo(environ, buildrootID, builtStart=None, builtOrder=None, compon
values['buildroot'] = buildroot
values['task'] = task
-
+
return _genHTML(environ, 'buildrootinfo.chtml')
def rpmlist(environ, type, buildrootID=None, imageID=None, start=None, order='nvr'):
@@ -1714,13 +1714,13 @@ def buildtargets(environ, start=None, order='name'):
targets = kojiweb.util.paginateMethod(server, values, 'getBuildTargets',
start=start, dataName='targets', prefix='target', order=order)
-
+
values['order'] = order
if environ['koji.currentUser']:
values['perms'] = server.getUserPerms(environ['koji.currentUser']['id'])
else:
values['perms'] = []
-
+
return _genHTML(environ, 'buildtargets.chtml')
def buildtargetinfo(environ, targetID=None, name=None):
@@ -1733,7 +1733,7 @@ def buildtargetinfo(environ, targetID=None, name=None):
target = server.getBuildTarget(targetID)
elif name != None:
target = server.getBuildTarget(name)
-
+
if target == None:
raise koji.GenericError, 'invalid build target: %s' % (targetID or name)
@@ -1785,7 +1785,7 @@ def buildtargetedit(environ, targetID):
values = _initValues(environ, 'Edit Build Target', 'buildtargets')
tags = server.listTags()
tags.sort(_sortbyname)
-
+
values['target'] = target
values['tags'] = tags
@@ -1810,7 +1810,7 @@ def buildtargetcreate(environ):
if target == None:
raise koji.GenericError, 'error creating build target "%s"' % name
-
+
_redirect(environ, 'buildtargetinfo?targetID=%i' % target['id'])
elif form.has_key('cancel'):
_redirect(environ, 'buildtargets')
@@ -1860,7 +1860,7 @@ def buildsbyuser(environ, start=None, order='-builds'):
user['builds'] = numBuilds
if numBuilds > maxBuilds:
maxBuilds = numBuilds
-
+
values['order'] = order
graphWidth = 400.0
@@ -1893,14 +1893,14 @@ def rpmsbyhost(environ, start=None, order=None, hostArch=None, rpmArch=None):
host['rpms'] = numRPMs
if numRPMs > maxRPMs:
maxRPMs = numRPMs
-
+
values['hostArch'] = hostArch
hostArchList = server.getAllArches()
hostArchList.sort()
values['hostArchList'] = hostArchList
values['rpmArch'] = rpmArch
values['rpmArchList'] = hostArchList + ['noarch', 'src']
-
+
if order == None:
order = '-rpms'
values['order'] = order
@@ -1947,11 +1947,11 @@ def tasksbyhost(environ, start=None, order='-tasks', hostArch=None):
server = _getServer(environ)
maxTasks = 1
-
+
hostArchFilter = hostArch
if hostArchFilter == 'ix86':
hostArchFilter = ['i386', 'i486', 'i586', 'i686']
-
+
hosts = server.listHosts(arches=hostArchFilter)
server.multicall = True
@@ -1963,12 +1963,12 @@ def tasksbyhost(environ, start=None, order='-tasks', hostArch=None):
host['tasks'] = numTasks
if numTasks > maxTasks:
maxTasks = numTasks
-
+
values['hostArch'] = hostArch
hostArchList = server.getAllArches()
hostArchList.sort()
values['hostArchList'] = hostArchList
-
+
values['order'] = order
graphWidth = 400.0
@@ -1984,7 +1984,7 @@ def tasksbyuser(environ, start=None, order='-tasks'):
server = _getServer(environ)
maxTasks = 1
-
+
users = server.listUsers()
server.multicall = True
@@ -1996,7 +1996,7 @@ def tasksbyuser(environ, start=None, order='-tasks'):
user['tasks'] = numTasks
if numTasks > maxTasks:
maxTasks = numTasks
-
+
values['order'] = order
graphWidth = 400.0
@@ -2025,7 +2025,7 @@ def buildsbystatus(environ, days='7'):
server.listBuilds(completeAfter=dateAfter, state=koji.BUILD_STATES['FAILED'], taskID=-1, queryOpts={'countOnly': True})
server.listBuilds(completeAfter=dateAfter, state=koji.BUILD_STATES['CANCELED'], taskID=-1, queryOpts={'countOnly': True})
[[numSucceeded], [numFailed], [numCanceled]] = server.multiCall()
-
+
values['numSucceeded'] = numSucceeded
values['numFailed'] = numFailed
values['numCanceled'] = numCanceled
@@ -2070,7 +2070,7 @@ def buildsbytarget(environ, days='7', start=None, order='-builds'):
if builds > maxBuilds:
maxBuilds = builds
- kojiweb.util.paginateList(values, targets.values(), start, 'targets', 'target', order)
+ kojiweb.util.paginateList(values, targets.values(), start, 'targets', 'target', order)
values['order'] = order
@@ -2140,7 +2140,7 @@ def recentbuilds(environ, user=None, tag=None, package=None):
task = None
builds[i]['task'] = task
builds[i]['changelog'] = clogs[i][0]
-
+
values['tag'] = tagObj
values['user'] = userObj
values['package'] = packageObj
@@ -2197,7 +2197,7 @@ def search(environ, start=None, order='name'):
raise koji.GenericError, 'unknown search type: %s' % type
values['infoURL'] = infoURL
values['order'] = order
-
+
results = kojiweb.util.paginateMethod(server, values, 'search', args=(terms, type, match),
start=start, dataName='results', prefix='result', order=order)
if not start and len(results) == 1:
diff --git a/www/lib/kojiweb/util.py b/www/lib/kojiweb/util.py
index ae00757..ebb9f49 100644
--- a/www/lib/kojiweb/util.py
+++ b/www/lib/kojiweb/util.py
@@ -225,7 +225,7 @@ def passthrough_except(template, *exclude):
previously used
#attr _PASSTHROUGH = ...
to define the list of variable names to be passed-through.
- Any variables names passed in will be excluded from the
+ Any variables names passed in will be excluded from the
list of variables in the output string.
"""
passvars = []
@@ -245,7 +245,7 @@ def sortByKeyFunc(key, noneGreatest=False):
cmpFunc = lambda a, b: (a is None or b is None) and -(cmp(a, b)) or cmp(a, b)
else:
cmpFunc = cmp
-
+
if key.startswith('-'):
key = key[1:]
sortFunc = lambda a, b: cmpFunc(b[key], a[key])
@@ -265,7 +265,7 @@ def paginateList(values, data, start, dataName, prefix=None, order=None, noneGre
"""
if order != None:
data.sort(sortByKeyFunc(order, noneGreatest))
-
+
totalRows = len(data)
if start:
@@ -277,7 +277,7 @@ def paginateList(values, data, start, dataName, prefix=None, order=None, noneGre
count = len(data)
_populateValues(values, dataName, prefix, data, totalRows, start, count, pageSize, order)
-
+
return data
def paginateMethod(server, values, methodName, args=None, kw=None,
@@ -294,10 +294,10 @@ def paginateMethod(server, values, methodName, args=None, kw=None,
start = 0
if not dataName:
raise StandardError, 'dataName must be specified'
-
+
kw['queryOpts'] = {'countOnly': True}
totalRows = getattr(server, methodName)(*args, **kw)
-
+
kw['queryOpts'] = {'order': order,
'offset': start,
'limit': pageSize}
@@ -402,7 +402,7 @@ def formatDep(name, version, flags):
a human-readable format. Copied from
rpmUtils/miscutils.py:formatRequires()"""
s = name
-
+
if flags:
if flags & (koji.RPMSENSE_LESS | koji.RPMSENSE_GREATER |
koji.RPMSENSE_EQUAL):
@@ -567,4 +567,3 @@ a network issue or load issues on the server."""
else:
str = "An error has occurred while processing your request."
return str, level
-
--
1.9.3