Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(487)

Side by Side Diff: appengine/machine_provider/handlers_frontend.py

Issue 2196623004: Add basic Machine Provider UI (Closed) Base URL: https://github.com/luci/luci-py.git@master
Patch Set: Fix Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « appengine/machine_provider/handlers_cron.py ('k') | appengine/machine_provider/main.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Copyright 2016 The LUCI Authors. All rights reserved.
2 # Use of this source code is governed under the Apache License, Version 2.0
3 # that can be found in the LICENSE file.
4
5 """Front-end UI."""
6
7 import logging
8 import os
9
10 import webapp2
11
12 from components import auth
13 from components import datastore_utils
14 from components import template
15 from components import utils
16
17 import models
18
19
20 THIS_DIR = os.path.dirname(os.path.abspath(__file__))
21
22
23 class CatalogHandler(auth.AuthenticatingHandler):
24 """Catalog handler."""
25
26 @auth.require(auth.is_admin)
27 def get(self, machine_id=None):
28 params = {
29 'machines': [],
30 'next_page_token': None,
31 }
32 if machine_id:
33 machine = models.CatalogMachineEntry.get_by_id(machine_id)
34 if not machine:
35 self.abort(404)
36 params['machines'] = [machine]
37 else:
38 query = models.CatalogMachineEntry.query().order(
39 models.CatalogMachineEntry.dimensions.hostname)
40 page_token = self.request.get('page_token') or ''
41 params['machines'], params['next_page_token'] = (
42 datastore_utils.fetch_page(query, 50, page_token))
43
44 self.response.write(
45 template.render('templates/catalog.html', params=params))
46
47
48 class LeaseRequestHandler(auth.AuthenticatingHandler):
49 """Lease request handler."""
50
51 @auth.require(auth.is_admin)
52 def get(self, lease_id=None):
53 params = {
54 'lease_requests': [],
55 'next_page_token': None,
56 'now_ts': utils.time_time(),
57 }
58 if lease_id:
59 lease_request = models.LeaseRequest.get_by_id(lease_id)
60 if not lease_request:
61 self.abort(404)
62 params['lease_requests'] = [lease_request]
63 else:
64 query = models.LeaseRequest.query().order(
65 -models.LeaseRequest.last_modified_ts)
66 page_token = self.request.get('page_token') or ''
67 params['lease_requests'], params['next_page_token'] = (
68 datastore_utils.fetch_page(query, 50, page_token))
69
70 self.response.write(template.render('templates/leases.html', params=params))
71
72
73 class RootHandler(auth.AuthenticatingHandler):
74 """Root handler."""
75
76 @auth.public
77 def get(self):
78 params = {
79 'is_admin': auth.is_admin(),
80 }
81
82 self.response.write(template.render('templates/root.html', params=params))
83
84
85 def create_frontend_app():
86 template.bootstrap({
87 'templates': os.path.join(THIS_DIR, 'templates'),
88 })
89
90 return webapp2.WSGIApplication([
91 webapp2.Route('/', handler=RootHandler),
92 webapp2.Route('/catalog', handler=CatalogHandler),
93 webapp2.Route('/catalog/<machine_id>', handler=CatalogHandler),
94 webapp2.Route('/leases', handler=LeaseRequestHandler),
95 webapp2.Route('/leases/<lease_id>', handler=LeaseRequestHandler),
96 ])
OLDNEW
« no previous file with comments | « appengine/machine_provider/handlers_cron.py ('k') | appengine/machine_provider/main.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698