flake8: apply E3 rules
This commit is contained in:
parent
05340b146b
commit
0f727a2ab4
32 changed files with 534 additions and 70 deletions
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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('<', '<').\
|
||||
replace('>', '>')
|
||||
|
||||
|
||||
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):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue