From 54f549821c396fb61c2d68d46bde2f4060c441e3 Mon Sep 17 00:00:00 2001 From: Jorrit Schaap <schaap@astron.nl> Date: Mon, 13 Jun 2016 13:07:28 +0000 Subject: [PATCH] Task #8887: added two methods to browse the tasks/claims in html tables. --- .../lib/webservice.py | 131 ++++++++++++++++++ 1 file changed, 131 insertions(+) diff --git a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py index ae017193d75..8ea09345b4c 100755 --- a/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py +++ b/SAS/ResourceAssignment/ResourceAssignmentEditor/lib/webservice.py @@ -313,6 +313,137 @@ def getUpdateEvents(): def getLofarTime(): return jsonify({'lofarTime': asIsoFormat(datetime.utcnow())}) + +#ugly method to generate html tables for all tasks +@app.route('/tasks.html') +def getTasksHtml(): + tasks = rarpc.getTasks() + if not tasks: + abort(404) + + updateTaskMomDetails(tasks, momrpc) + + html = '<!DOCTYPE html><html><head><title>Tasks</title><style>table, th, td {border: 1px solid black; border-collapse: collapse; padding: 4px;}</style></head><body><table style="width:100%">\n' + + props = sorted(tasks[0].keys()) + html += '<tr>%s</tr>\n' % ''.join('<th>%s</th>' % prop for prop in props) + + for task in tasks: + html += '<tr>' + for prop in props: + if prop in task: + if prop == 'id': + html += '<td><a href="/rest/tasks/%s.html">%s</a></td> ' % (task[prop], task[prop]) + else: + html += '<td>%s</td> ' % task[prop] + html += '</tr>\n' + + html += '</table></body></html>\n' + + return html + +#ugly method to generate html tables for the task and it's claims +@app.route('/tasks/<int:task_id>.html', methods=['GET']) +def getTaskHtml(task_id): + task = rarpc.getTask(task_id) + + if not task: + abort(404, 'No such task %s' % task_id) + + task['name'] = 'Task %d' % task['id'] + updateTaskMomDetails(task, momrpc) + + html = '<!DOCTYPE html><html><head><title>Tasks</title><style>table, th, td {border: 1px solid black; border-collapse: collapse; padding: 4px;}</style></head><body><table style="">\n' + + html += '<h1>Task %s</h1>' % task_id + + props = sorted(task.keys()) + html += '<tr><th>key</th><th>value</th></tr>\n' + + for prop in props: + html += '<tr><td>%s</td>' % prop + + if prop == 'id': + html += '<td><a href="/rest/tasks/%s.html">%s</a></td> ' % (task[prop], task[prop]) + elif prop == 'predecessor_ids' or prop == 'successor_ids': + ids = task[prop] + if ids: + html += '<td>%s</td> ' % ', '.join('<a href="/rest/tasks/%s.html">%s</a>' % (id, id) for id in ids) + else: + html += '<td></td> ' + else: + html += '<td>%s</td> ' % task[prop] + + html += '</tr>' + + html += '</table>\n<br>' + + claims = rarpc.getResourceClaims(task_ids=[task_id], extended=True, include_properties=True) + + if claims: + html += '<h1>Claims</h1>' + + for claim in claims: + html += '<table>' + for claim_key,claim_value in claim.items(): + if claim_key == 'properties': + html += '<tr><td>properties</td><td><table>' + if claim_value: + propnames = sorted(claim_value[0].keys()) + html += '<tr>%s</tr>\n' % ''.join('<th>%s</th>' % propname for propname in propnames) + for prop in claim_value: + html += '<tr>%s</tr>\n' % ''.join('<td>%s</td>' % prop[propname] for propname in propnames) + html += '</table></td></tr>' + elif claim_key == 'saps': + html += '<tr><td>saps</td><td><table>' + saps = claim_value + if saps: + sap_keys = ['sap_nr', 'properties'] + html += '<tr>%s</tr>\n' % ''.join('<th>%s</th>' % sap_key for sap_key in sap_keys) + for sap in saps: + html += '<tr>' + for sap_key in sap_keys: + if sap_key == 'properties': + html += '<td><table>' + sap_props = sap[sap_key] + if sap_props: + propnames = sorted(sap_props[0].keys()) + html += '<tr>%s</tr>\n' % ''.join('<th>%s</th>' % propname for propname in propnames) + for prop in sap_props: + html += '<tr>%s</tr>\n' % ''.join('<td>%s</td>' % prop[propname] for propname in propnames) + html += '</table></td>' + else: + html += '<td>%s</td>' % (sap[sap_key]) + html += '</tr>' + html += '</table></td></tr>' + else: + html += '<tr><td>%s</td><td>%s</td></tr>' % (claim_key,claim_value) + html += '</table>' + html += '<br>' + + html += '</body></html>\n' + + return html + +@app.route('/rest/tasks/<int:task_id>/resourceclaims.html', methods=['GET']) +@gzipped +def resourceClaimsForTaskHtml(task_id): + claims = rarpc.getResourceClaims(task_ids=[task_id], extended=True, include_properties=True) + + if not claims: + abort(404, 'No resource claims for task %s' % task_id) + + html = '<!DOCTYPE html><html><head><title>Tasks</title><style>table, th, td {border: 1px solid black; border-collapse: collapse; padding: 4px;}</style></head><body><table style="">\n' + + for claim in claims: + html += '<tr><td>%s</td>' % claim + + html += '</table></body></html>\n' + + return html + + + def main(): # make sure we run in UTC timezone import os -- GitLab