flake8: apply E3 rules

This commit is contained in:
Yuming Zhu 2020-02-26 02:31:31 +08:00
parent 05340b146b
commit 0f727a2ab4
32 changed files with 534 additions and 70 deletions

View file

@ -48,6 +48,7 @@ _sortbyname = lambda x: x['name']
# loggers
authlogger = logging.getLogger('koji.auth')
def _setUserCookie(environ, user):
options = environ['koji.options']
# include the current time in the cookie so we can verify that
@ -72,6 +73,7 @@ def _setUserCookie(environ, user):
environ['koji.headers'].append(['Set-Cookie', out])
environ['koji.headers'].append(['Cache-Control', 'no-cache="set-cookie"'])
def _clearUserCookie(environ):
cookies = six.moves.http_cookies.SimpleCookie()
cookies['user'] = ''
@ -81,6 +83,7 @@ def _clearUserCookie(environ):
out = c.OutputString()
environ['koji.headers'].append(['Set-Cookie', out])
def _getUserCookie(environ):
options = environ['koji.options']
cookies = six.moves.http_cookies.SimpleCookie(environ.get('HTTP_COOKIE', ''))
@ -118,6 +121,7 @@ def _getUserCookie(environ):
# Otherwise, cookie is valid and current
return user
def _krbLogin(environ, session, principal):
options = environ['koji.options']
wprinc = options['WebPrincipal']
@ -126,6 +130,7 @@ def _krbLogin(environ, session, principal):
return session.krb_login(principal=wprinc, keytab=keytab,
ccache=ccache, proxyuser=principal)
def _sslLogin(environ, session, username):
options = environ['koji.options']
client_cert = options['WebCert']
@ -134,6 +139,7 @@ def _sslLogin(environ, session, username):
return session.ssl_login(client_cert, None, server_ca,
proxyuser=username)
def _assertLogin(environ):
session = environ['koji.session']
options = environ['koji.options']
@ -165,6 +171,7 @@ def _assertLogin(environ):
_redirect(environ, 'login')
assert False # pragma: no cover
def _getServer(environ):
opts = environ['koji.options']
s_opts = {'krbservice': opts['KrbService'],
@ -186,6 +193,7 @@ def _getServer(environ):
environ['koji.session'] = session
return session
def _construct_url(environ, page):
port = environ['SERVER_PORT']
host = environ['SERVER_NAME']
@ -195,14 +203,17 @@ def _construct_url(environ, page):
return "%s://%s%s" % (url_scheme, host, page)
return "%s://%s:%s%s" % (url_scheme, host, port, page)
def _getBaseURL(environ):
base = environ['SCRIPT_NAME']
return _construct_url(environ, base)
def _redirect(environ, location):
environ['koji.redirect'] = location
raise ServerRedirect
def _redirectBack(environ, page, forceSSL):
if page:
# We'll work with the page we were given
@ -227,6 +238,7 @@ def _redirectBack(environ, page, forceSSL):
# and redirect to the page
_redirect(environ, page)
def login(environ, page=None):
session = _getServer(environ)
options = environ['koji.options']
@ -270,6 +282,7 @@ def login(environ, page=None):
# To protect the session cookie, we must forceSSL
_redirectBack(environ, page, forceSSL=True)
def logout(environ, page=None):
user = _getUserCookie(environ)
_clearUserCookie(environ)
@ -278,6 +291,7 @@ def logout(environ, page=None):
_redirectBack(environ, page, forceSSL=False)
def index(environ, packageOrder='package_name', packageStart=None):
values = _initValues(environ)
server = _getServer(environ)
@ -326,6 +340,7 @@ def index(environ, packageOrder='package_name', packageStart=None):
return _genHTML(environ, 'index.chtml')
def notificationedit(environ, notificationID):
server = _getServer(environ)
_assertLogin(environ)
@ -371,6 +386,7 @@ def notificationedit(environ, notificationID):
return _genHTML(environ, 'notificationedit.chtml')
def notificationcreate(environ):
server = _getServer(environ)
_assertLogin(environ)
@ -415,6 +431,7 @@ def notificationcreate(environ):
return _genHTML(environ, 'notificationedit.chtml')
def notificationdelete(environ, notificationID):
server = _getServer(environ)
_assertLogin(environ)
@ -428,6 +445,7 @@ def notificationdelete(environ, notificationID):
_redirect(environ, 'index')
# All Tasks
_TASKS = ['build',
'buildSRPMFromSCM',
@ -463,6 +481,7 @@ _TOPLEVEL_TASKS = ['build', 'buildNotification', 'chainbuild', 'maven', 'chainma
# Tasks that can have children
_PARENT_TASKS = ['build', 'chainbuild', 'maven', 'chainmaven', 'winbuild', 'newRepo', 'distRepo', 'wrapperRPM', 'livecd', 'appliance', 'image', 'livemedia']
def tasks(environ, owner=None, state='active', view='tree', method='all', hostID=None, channelID=None, start=None, order='-id'):
values = _initValues(environ, 'Tasks', 'tasks')
server = _getServer(environ)
@ -566,6 +585,7 @@ def tasks(environ, owner=None, state='active', view='tree', method='all', hostID
return _genHTML(environ, 'tasks.chtml')
def taskinfo(environ, taskID):
server = _getServer(environ)
values = _initValues(environ, 'Task Info', 'tasks')
@ -712,6 +732,7 @@ def taskinfo(environ, taskID):
values['params_parsed'] = None
return _genHTML(environ, 'taskinfo.chtml')
def taskstatus(environ, taskID):
server = _getServer(environ)
@ -726,6 +747,7 @@ def taskstatus(environ, taskID):
output += '%s:%s:%s\n' % (volume, filename, file_stats['st_size'])
return output
def resubmittask(environ, taskID):
server = _getServer(environ)
_assertLogin(environ)
@ -734,6 +756,7 @@ def resubmittask(environ, taskID):
newTaskID = server.resubmitTask(taskID)
_redirect(environ, 'taskinfo?taskID=%i' % newTaskID)
def canceltask(environ, taskID):
server = _getServer(environ)
_assertLogin(environ)
@ -742,11 +765,13 @@ def canceltask(environ, taskID):
server.cancelTask(taskID)
_redirect(environ, 'taskinfo?taskID=%i' % taskID)
def _sortByExtAndName(item):
"""Sort filename tuples key function, first by extension, and then by name."""
kRoot, kExt = os.path.splitext(os.path.basename(item[1]))
return (kExt, kRoot)
def getfile(environ, taskID, name, volume='DEFAULT', offset=None, size=None):
server = _getServer(environ)
taskID = int(taskID)
@ -810,6 +835,7 @@ def _chunk_file(server, environ, taskID, name, offset, size, volume):
offset += content_length
remaining -= content_length
def tags(environ, start=None, order=None, childID=None):
values = _initValues(environ, 'Tags', 'tags')
server = _getServer(environ)
@ -830,8 +856,10 @@ def tags(environ, start=None, order=None, childID=None):
return _genHTML(environ, 'tags.chtml')
_PREFIX_CHARS = [chr(char) for char in list(range(48, 58)) + list(range(97, 123))]
def packages(environ, tagID=None, userID=None, order='package_name', start=None, prefix=None, inherited='1'):
values = _initValues(environ, 'Packages', 'packages')
server = _getServer(environ)
@ -866,6 +894,7 @@ def packages(environ, tagID=None, userID=None, order='package_name', start=None,
return _genHTML(environ, 'packages.chtml')
def packageinfo(environ, packageID, tagOrder='name', tagStart=None, buildOrder='-completion_time', buildStart=None):
values = _initValues(environ, 'Package Info', 'packages')
server = _getServer(environ)
@ -888,6 +917,7 @@ def packageinfo(environ, packageID, tagOrder='name', tagStart=None, buildOrder='
return _genHTML(environ, 'packageinfo.chtml')
def taginfo(environ, tagID, all='0', packageOrder='package_name', packageStart=None, buildOrder='-completion_time', buildStart=None, childID=None):
values = _initValues(environ, 'Tag Info', 'tags')
server = _getServer(environ)
@ -943,6 +973,7 @@ def taginfo(environ, tagID, all='0', packageOrder='package_name', packageStart=N
return _genHTML(environ, 'taginfo.chtml')
def tagcreate(environ):
server = _getServer(environ)
_assertLogin(environ)
@ -978,6 +1009,7 @@ def tagcreate(environ):
return _genHTML(environ, 'tagedit.chtml')
def tagedit(environ, tagID):
server = _getServer(environ)
_assertLogin(environ)
@ -1020,6 +1052,7 @@ def tagedit(environ, tagID):
return _genHTML(environ, 'tagedit.chtml')
def tagdelete(environ, tagID):
server = _getServer(environ)
_assertLogin(environ)
@ -1033,6 +1066,7 @@ def tagdelete(environ, tagID):
_redirect(environ, 'tags')
def tagparent(environ, tagID, parentID, action):
server = _getServer(environ)
_assertLogin(environ)
@ -1096,6 +1130,7 @@ def tagparent(environ, tagID, parentID, action):
_redirect(environ, 'taginfo?tagID=%i' % tag['id'])
def externalrepoinfo(environ, extrepoID):
values = _initValues(environ, 'External Repo Info', 'tags')
server = _getServer(environ)
@ -1111,6 +1146,7 @@ def externalrepoinfo(environ, extrepoID):
return _genHTML(environ, 'externalrepoinfo.chtml')
def buildinfo(environ, buildID):
values = _initValues(environ, 'Build Info', 'builds')
server = _getServer(environ)
@ -1236,6 +1272,7 @@ def buildinfo(environ, buildID):
values['pathinfo'] = pathinfo
return _genHTML(environ, 'buildinfo.chtml')
def builds(environ, userID=None, tagID=None, packageID=None, state=None, order='-build_id', start=None, prefix=None, inherited='1', latest='1', type=None):
values = _initValues(environ, 'Builds', 'builds')
server = _getServer(environ)
@ -1319,6 +1356,7 @@ def builds(environ, userID=None, tagID=None, packageID=None, state=None, order='
return _genHTML(environ, 'builds.chtml')
def users(environ, order='name', start=None, prefix=None):
values = _initValues(environ, 'Users', 'users')
server = _getServer(environ)
@ -1338,6 +1376,7 @@ def users(environ, order='name', start=None, prefix=None):
return _genHTML(environ, 'users.chtml')
def userinfo(environ, userID, packageOrder='package_name', packageStart=None, buildOrder='-completion_time', buildStart=None):
values = _initValues(environ, 'User Info', 'users')
server = _getServer(environ)
@ -1360,6 +1399,7 @@ def userinfo(environ, userID, packageOrder='package_name', packageStart=None, bu
return _genHTML(environ, 'userinfo.chtml')
def rpminfo(environ, rpmID, fileOrder='name', fileStart=None, buildrootOrder='-id', buildrootStart=None):
values = _initValues(environ, 'RPM Info', 'builds')
server = _getServer(environ)
@ -1413,6 +1453,7 @@ def rpminfo(environ, rpmID, fileOrder='name', fileStart=None, buildrootOrder='-i
return _genHTML(environ, 'rpminfo.chtml')
def archiveinfo(environ, archiveID, fileOrder='name', fileStart=None, buildrootOrder='-id', buildrootStart=None):
values = _initValues(environ, 'Archive Info', 'builds')
server = _getServer(environ)
@ -1451,6 +1492,7 @@ def archiveinfo(environ, archiveID, fileOrder='name', fileStart=None, buildrootO
return _genHTML(environ, 'archiveinfo.chtml')
def fileinfo(environ, filename, rpmID=None, archiveID=None):
values = _initValues(environ, 'File Info', 'builds')
server = _getServer(environ)
@ -1485,6 +1527,7 @@ def fileinfo(environ, filename, rpmID=None, archiveID=None):
return _genHTML(environ, 'fileinfo.chtml')
def cancelbuild(environ, buildID):
server = _getServer(environ)
_assertLogin(environ)
@ -1500,6 +1543,7 @@ def cancelbuild(environ, buildID):
_redirect(environ, 'buildinfo?buildID=%i' % build['id'])
def hosts(environ, state='enabled', start=None, order='name'):
values = _initValues(environ, 'Hosts', 'hosts')
server = _getServer(environ)
@ -1530,6 +1574,7 @@ def hosts(environ, state='enabled', start=None, order='name'):
return _genHTML(environ, 'hosts.chtml')
def hostinfo(environ, hostID=None, userID=None):
values = _initValues(environ, 'Host Info', 'hosts')
server = _getServer(environ)
@ -1570,6 +1615,7 @@ def hostinfo(environ, hostID=None, userID=None):
return _genHTML(environ, 'hostinfo.chtml')
def hostedit(environ, hostID):
server = _getServer(environ)
_assertLogin(environ)
@ -1619,6 +1665,7 @@ def hostedit(environ, hostID):
return _genHTML(environ, 'hostedit.chtml')
def disablehost(environ, hostID):
server = _getServer(environ)
_assertLogin(environ)
@ -1629,6 +1676,7 @@ def disablehost(environ, hostID):
_redirect(environ, 'hostinfo?hostID=%i' % host['id'])
def enablehost(environ, hostID):
server = _getServer(environ)
_assertLogin(environ)
@ -1639,6 +1687,7 @@ def enablehost(environ, hostID):
_redirect(environ, 'hostinfo?hostID=%i' % host['id'])
def channelinfo(environ, channelID):
values = _initValues(environ, 'Channel Info', 'hosts')
server = _getServer(environ)
@ -1665,6 +1714,7 @@ def channelinfo(environ, channelID):
return _genHTML(environ, 'channelinfo.chtml')
def buildrootinfo(environ, buildrootID, builtStart=None, builtOrder=None, componentStart=None, componentOrder=None):
values = _initValues(environ, 'Buildroot Info', 'hosts')
server = _getServer(environ)
@ -1688,6 +1738,7 @@ def buildrootinfo(environ, buildrootID, builtStart=None, builtOrder=None, compon
return _genHTML(environ, template)
def rpmlist(environ, type, buildrootID=None, imageID=None, start=None, order='nvr'):
"""
rpmlist requires a buildrootID OR an imageID to be passed in. From one
@ -1739,6 +1790,7 @@ def rpmlist(environ, type, buildrootID=None, imageID=None, start=None, order='nv
return _genHTML(environ, 'rpmlist.chtml')
def archivelist(environ, type, buildrootID=None, imageID=None, start=None, order='filename'):
values = _initValues(environ, 'Archive List', 'hosts')
server = _getServer(environ)
@ -1777,6 +1829,7 @@ def archivelist(environ, type, buildrootID=None, imageID=None, start=None, order
return _genHTML(environ, 'archivelist.chtml')
def buildtargets(environ, start=None, order='name'):
values = _initValues(environ, 'Build Targets', 'buildtargets')
server = _getServer(environ)
@ -1792,6 +1845,7 @@ def buildtargets(environ, start=None, order='name'):
return _genHTML(environ, 'buildtargets.chtml')
def buildtargetinfo(environ, targetID=None, name=None):
values = _initValues(environ, 'Build Target Info', 'buildtargets')
server = _getServer(environ)
@ -1821,6 +1875,7 @@ def buildtargetinfo(environ, targetID=None, name=None):
return _genHTML(environ, 'buildtargetinfo.chtml')
def buildtargetedit(environ, targetID):
server = _getServer(environ)
_assertLogin(environ)
@ -1860,6 +1915,7 @@ def buildtargetedit(environ, targetID):
return _genHTML(environ, 'buildtargetedit.chtml')
def buildtargetcreate(environ):
server = _getServer(environ)
_assertLogin(environ)
@ -1894,6 +1950,7 @@ def buildtargetcreate(environ):
return _genHTML(environ, 'buildtargetedit.chtml')
def buildtargetdelete(environ, targetID):
server = _getServer(environ)
_assertLogin(environ)
@ -1908,11 +1965,13 @@ def buildtargetdelete(environ, targetID):
_redirect(environ, 'buildtargets')
def reports(environ):
_getServer(environ)
_initValues(environ, 'Reports', 'reports')
return _genHTML(environ, 'reports.chtml')
def buildsbyuser(environ, start=None, order='-builds'):
values = _initValues(environ, 'Builds by User', 'reports')
server = _getServer(environ)
@ -1940,6 +1999,7 @@ def buildsbyuser(environ, start=None, order='-builds'):
return _genHTML(environ, 'buildsbyuser.chtml')
def rpmsbyhost(environ, start=None, order=None, hostArch=None, rpmArch=None):
values = _initValues(environ, 'RPMs by Host', 'reports')
server = _getServer(environ)
@ -1981,6 +2041,7 @@ def rpmsbyhost(environ, start=None, order=None, hostArch=None, rpmArch=None):
return _genHTML(environ, 'rpmsbyhost.chtml')
def packagesbyuser(environ, start=None, order=None):
values = _initValues(environ, 'Packages by User', 'reports')
server = _getServer(environ)
@ -2010,6 +2071,7 @@ def packagesbyuser(environ, start=None, order=None):
return _genHTML(environ, 'packagesbyuser.chtml')
def tasksbyhost(environ, start=None, order='-tasks', hostArch=None):
values = _initValues(environ, 'Tasks by Host', 'reports')
server = _getServer(environ)
@ -2046,6 +2108,7 @@ def tasksbyhost(environ, start=None, order='-tasks', hostArch=None):
return _genHTML(environ, 'tasksbyhost.chtml')
def tasksbyuser(environ, start=None, order='-tasks'):
values = _initValues(environ, 'Tasks by User', 'reports')
server = _getServer(environ)
@ -2074,6 +2137,7 @@ def tasksbyuser(environ, start=None, order='-tasks'):
return _genHTML(environ, 'tasksbyuser.chtml')
def buildsbystatus(environ, days='7'):
values = _initValues(environ, 'Builds by Status', 'reports')
server = _getServer(environ)
@ -2109,6 +2173,7 @@ def buildsbystatus(environ, days='7'):
return _genHTML(environ, 'buildsbystatus.chtml')
def buildsbytarget(environ, days='7', start=None, order='-builds'):
values = _initValues(environ, 'Builds by Target', 'reports')
server = _getServer(environ)
@ -2148,12 +2213,14 @@ def buildsbytarget(environ, days='7', start=None, order='-builds'):
return _genHTML(environ, 'buildsbytarget.chtml')
def _filter_hosts_by_arch(hosts, arch):
if arch == '__all__':
return hosts
else:
return [h for h in hosts if arch in h['arches'].split()]
def clusterhealth(environ, arch='__all__'):
values = _initValues(environ, 'Cluster health', 'reports')
server = _getServer(environ)
@ -2204,6 +2271,7 @@ def clusterhealth(environ, arch='__all__'):
values['channels'] = sorted(channels, key=lambda x: x['name'])
return _genHTML(environ, 'clusterhealth.chtml')
def recentbuilds(environ, user=None, tag=None, package=None):
values = _initValues(environ, 'Recent Build RSS')
server = _getServer(environ)
@ -2273,6 +2341,7 @@ def recentbuilds(environ, user=None, tag=None, package=None):
environ['koji.headers'].append(['Content-Type', 'text/xml'])
return _genHTML(environ, 'recentbuilds.chtml')
_infoURLs = {'package': 'packageinfo?packageID=%(id)i',
'build': 'buildinfo?buildID=%(id)i',
'tag': 'taginfo?tagID=%(id)i',
@ -2299,6 +2368,7 @@ _DEFAULT_SEARCH_ORDER = {
# any type not listed will default to 'name'
}
def search(environ, start=None, order=None):
values = _initValues(environ, 'Search', 'search')
server = _getServer(environ)

View file

@ -248,7 +248,6 @@ class Dispatcher(object):
# TODO (warning in header or something?)
return func, data
def _setup(self, environ):
global kojiweb_handlers
global kojiweb

View file

@ -41,6 +41,7 @@ import koji
class NoSuchException(Exception):
pass
try:
# pyOpenSSL might not be around
from OpenSSL.SSL import Error as SSL_Error
@ -51,6 +52,7 @@ except:
themeInfo = {}
themeCache = {}
def _initValues(environ, title='Build System Info', pageID='summary'):
global themeInfo
global themeCache
@ -69,6 +71,7 @@ def _initValues(environ, title='Build System Info', pageID='summary'):
return values
def themePath(path, local=False):
global themeInfo
global themeCache
@ -95,6 +98,7 @@ def themePath(path, local=False):
themeCache[path, local] = ret
return ret
class DecodeUTF8(Cheetah.Filters.Filter):
def filter(self, *args, **kw):
"""Convert all strs to unicode objects"""
@ -106,6 +110,8 @@ class DecodeUTF8(Cheetah.Filters.Filter):
return result
# Escape ampersands so the output can be valid XHTML
class XHTMLFilter(DecodeUTF8):
def filter(self, *args, **kw):
result = super(XHTMLFilter, self).filter(*args, **kw)
@ -116,8 +122,10 @@ class XHTMLFilter(DecodeUTF8):
result = result.replace('>', '>')
return result
TEMPLATES = {}
def _genHTML(environ, fileName):
reqdir = os.path.dirname(environ['SCRIPT_FILENAME'])
if os.getcwd() != reqdir:
@ -154,11 +162,13 @@ def _genHTML(environ, fileName):
else:
return tmpl_inst.respond()
def _truncTime():
now = datetime.datetime.now()
# truncate to the nearest 15 minutes
return now.replace(minute=(now.minute // 15 * 15), second=0, microsecond=0)
def _genToken(environ, tstamp=None):
if 'koji.currentLogin' in environ and environ['koji.currentLogin']:
user = environ['koji.currentLogin']
@ -171,6 +181,7 @@ def _genToken(environ, tstamp=None):
value = value.encode('utf-8')
return hashlib.md5(value).hexdigest()[-8:]
def _getValidTokens(environ):
tokens = []
now = _truncTime()
@ -181,6 +192,7 @@ def _getValidTokens(environ):
tokens.append(token)
return tokens
def toggleOrder(template, sortKey, orderVar='order'):
"""
If orderVar equals 'sortKey', return '-sortKey', else
@ -191,6 +203,7 @@ def toggleOrder(template, sortKey, orderVar='order'):
else:
return sortKey
def toggleSelected(template, var, option, checked=False):
"""
If the passed in variable var equals the literal value in option,
@ -206,6 +219,7 @@ def toggleSelected(template, var, option, checked=False):
else:
return ''
def sortImage(template, sortKey, orderVar='order'):
"""
Return an html img tag suitable for inclusion in the sortKey of a sortable table,
@ -219,6 +233,7 @@ def sortImage(template, sortKey, orderVar='order'):
else:
return ''
def passthrough(template, *vars):
"""
Construct a string suitable for use as URL
@ -239,6 +254,7 @@ def passthrough(template, *vars):
else:
return ''
def passthrough_except(template, *exclude):
"""
Construct a string suitable for use as URL
@ -255,6 +271,7 @@ def passthrough_except(template, *exclude):
passvars.append(var)
return passthrough(template, *passvars)
def sortByKeyFuncNoneGreatest(key):
"""Return a function to sort a list of maps by the given key.
None will sort higher than all other values (instead of lower).
@ -265,6 +282,7 @@ def sortByKeyFuncNoneGreatest(key):
return (v is None, v)
return internal_key
def paginateList(values, data, start, dataName, prefix=None, order=None, noneGreatest=False, pageSize=50):
"""
Slice the 'data' list into one page worth. Start at offset
@ -296,6 +314,7 @@ def paginateList(values, data, start, dataName, prefix=None, order=None, noneGre
return data
def paginateMethod(server, values, methodName, args=None, kw=None,
start=None, dataName=None, prefix=None, order=None, pageSize=50):
"""Paginate the results of the method with the given name when called with the given args and kws.
@ -324,6 +343,7 @@ def paginateMethod(server, values, methodName, args=None, kw=None,
return data
def paginateResults(server, values, methodName, args=None, kw=None,
start=None, dataName=None, prefix=None, order=None, pageSize=50):
"""Paginate the results of the method with the given name when called with the given args and kws.
@ -352,6 +372,7 @@ def paginateResults(server, values, methodName, args=None, kw=None,
return data
def _populateValues(values, dataName, prefix, data, totalRows, start, count, pageSize, order):
"""Populate the values list with the data about the list provided."""
values[dataName] = data
@ -372,21 +393,25 @@ def _populateValues(values, dataName, prefix, data, totalRows, start, count, pag
pages = [page for page in range(0, totalPages) if (abs(page - currentPage) < 100 or ((page + 1) % 100 == 0))]
values[(prefix and prefix + 'Pages') or 'pages'] = pages
def stateName(stateID):
"""Convert a numeric build state into a readable name."""
return koji.BUILD_STATES[stateID].lower()
def imageTag(name):
"""Return an img tag that loads an icon with the given name"""
return '<img class="stateimg" src="%s" title="%s" alt="%s"/>' \
% (themePath("images/%s.png" % name), name, name)
def stateImage(stateID):
"""Return an IMG tag that loads an icon appropriate for
the given state"""
name = stateName(stateID)
return imageTag(name)
def brStateName(stateID):
"""Convert a numeric buildroot state into a readable name."""
if stateID is None:
@ -414,14 +439,17 @@ def repoStateName(stateID):
else:
return 'unknown'
def taskState(stateID):
"""Convert a numeric task state into a readable name"""
return koji.TASK_STATES[stateID].lower()
formatTime = koji.formatTime
formatTimeRSS = koji.formatTimeLong
formatTimeLong = koji.formatTimeLong
def formatTimestampDifference(start_ts, end_ts):
diff = end_ts - start_ts
seconds = diff % 60
@ -431,6 +459,7 @@ def formatTimestampDifference(start_ts, end_ts):
hours = diff
return "%d:%02d:%02d" % (hours, minutes, seconds)
def formatDep(name, version, flags):
"""Format dependency information into
a human-readable format. Copied from
@ -451,6 +480,7 @@ def formatDep(name, version, flags):
s = "%s %s" % (s, version)
return s
def formatMode(mode):
"""Format a numeric mode into a ls-like string describing the access mode."""
if stat.S_ISREG(mode):
@ -485,9 +515,11 @@ def formatMode(mode):
return result
def formatThousands(value):
return '{:,}'.format(value)
def rowToggle(template):
"""If the value of template._rowNum is even, return 'row-even';
if it is odd, return 'row-odd'. Increment the value before checking it.
@ -529,6 +561,7 @@ _fileFlags = {1: 'configuration',
1024: 'unpatched',
2048: 'public key'}
def formatFileFlags(flags):
"""Format rpm fileflags for display. Returns
a list of human-readable strings specifying the
@ -539,6 +572,7 @@ def formatFileFlags(flags):
results.append(desc)
return results
def escapeHTML(value):
"""Replace special characters to the text can be displayed in
an HTML page correctly.
@ -554,6 +588,7 @@ def escapeHTML(value):
replace('<', '&lt;').\
replace('>', '&gt;')
def authToken(template, first=False, form=False):
"""Return the current authToken if it exists.
If form is True, return it enclosed in a hidden input field.
@ -571,6 +606,7 @@ def authToken(template, first=False, form=False):
else:
return ''
def explainError(error):
"""Explain an exception in user-consumable terms
@ -643,6 +679,7 @@ class TaskResultFragment(object):
- composer
- empty_str_placeholder
"""
def __init__(self, text='', size=None, need_escape=None, begin_tag='',
end_tag='', composer=None, empty_str_placeholder=None):
self.text = text
@ -688,6 +725,7 @@ class TaskResultLine(object):
- end_tag
- composer
"""
def __init__(self, fragments=None, need_escape=None, begin_tag='',
end_tag='<br />', composer=None):
if fragments is None:
@ -755,6 +793,7 @@ def _parse_value(key, value, sep=', '):
return TaskResultFragment(text=_str, need_escape=need_escape,
begin_tag=begin_tag, end_tag=end_tag)
def task_result_to_html(result=None, exc_class=None,
max_abbr_lines=None, max_abbr_len=None,
abbr_postscript=None):