[llvm-commits] [zorg] r130210 - in /zorg/trunk: llvmlab/llvmlab/ui/templates/index.html lnt/lnt/server/ui/app.py lnt/lnt/server/ui/filters.py lnt/lnt/server/ui/static/style.css lnt/lnt/server/ui/templates/index.html lnt/lnt/server/ui/templates/layout.html lnt/lnt/server/ui/views.py

Daniel Dunbar daniel at zuster.org
Tue Apr 26 10:47:43 PDT 2011


Author: ddunbar
Date: Tue Apr 26 12:47:43 2011
New Revision: 130210

URL: http://llvm.org/viewvc/llvm-project?rev=130210&view=rev
Log:
LNT/Flask: Migrate header, footer, and index.

Added:
    zorg/trunk/lnt/lnt/server/ui/filters.py
Modified:
    zorg/trunk/llvmlab/llvmlab/ui/templates/index.html
    zorg/trunk/lnt/lnt/server/ui/app.py
    zorg/trunk/lnt/lnt/server/ui/static/style.css
    zorg/trunk/lnt/lnt/server/ui/templates/index.html
    zorg/trunk/lnt/lnt/server/ui/templates/layout.html
    zorg/trunk/lnt/lnt/server/ui/views.py

Modified: zorg/trunk/llvmlab/llvmlab/ui/templates/index.html
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/llvmlab/llvmlab/ui/templates/index.html?rev=130210&r1=130209&r2=130210&view=diff
==============================================================================
--- zorg/trunk/llvmlab/llvmlab/ui/templates/index.html (original)
+++ zorg/trunk/llvmlab/llvmlab/ui/templates/index.html Tue Apr 26 12:47:43 2011
@@ -1,4 +1,5 @@
 {% extends "layout.html" %}
+{% set components = [] %}
 {% block title %}home{% endblock %}
 {% block body %}
 

Modified: zorg/trunk/lnt/lnt/server/ui/app.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/app.py?rev=130210&r1=130209&r2=130210&view=diff
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/app.py (original)
+++ zorg/trunk/lnt/lnt/server/ui/app.py Tue Apr 26 12:47:43 2011
@@ -1,20 +1,36 @@
 import logging
 import logging.handlers
 import os
+import time
 
 import flask
+from flask import current_app
 
+import lnt
+import lnt.server.ui.filters
 import lnt.server.ui.views
 
 # FIXME: Redesign this.
 import lnt.viewer.Config
 
+class Request(flask.Request):
+    def __init__(self, *args, **kwargs):
+        super(Request, self).__init__(*args, **kwargs)
+
+        self.request_time = time.time()
+
+    def elapsed_time(self):
+        return time.time() - self.request_time
+
 class App(flask.Flask):
     @staticmethod
     def create_standalone(config_path):
         # Construct the application.
         app = App(__name__)
 
+        # Register additional filters.
+        lnt.server.ui.filters.register(app)
+
         # Load the application configuration.
         app.load_config(config_path)
 
@@ -25,6 +41,13 @@
 
     def __init__(self, name):
         super(App, self).__init__(name)
+        self.start_time = time.time()
+
+        # Override the request class.
+        self.request_class = Request
+
+        # Store a few global things we want available to templates.
+        self.version = lnt.__version__
 
     def load_config(self, config_path):
         config_data = {}
@@ -32,3 +55,7 @@
 
         self.old_config = lnt.viewer.Config.Config.fromData(
             config_path, config_data)
+
+        self.jinja_env.globals.update(
+            app=current_app,
+            old_config=self.old_config)

Added: zorg/trunk/lnt/lnt/server/ui/filters.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/filters.py?rev=130210&view=auto
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/filters.py (added)
+++ zorg/trunk/lnt/lnt/server/ui/filters.py Tue Apr 26 12:47:43 2011
@@ -0,0 +1,11 @@
+import datetime
+
+def filter_asusertime(time):
+    # FIXME: Support alternate timezones?
+    ts = datetime.datetime.fromtimestamp(time)
+    return ts.strftime('%Y-%m-%d %H:%M:%S %Z PST')
+
+def register(app):
+    for name,object in globals().items():
+        if name.startswith('filter_'):
+            app.jinja_env.filters[name[7:]] = object

Modified: zorg/trunk/lnt/lnt/server/ui/static/style.css
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/static/style.css?rev=130210&r1=130209&r2=130210&view=diff
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/static/style.css (original)
+++ zorg/trunk/lnt/lnt/server/ui/static/style.css Tue Apr 26 12:47:43 2011
@@ -1,6 +1,79 @@
+.zorg_navheader {
+  background-color: #cccccc;
+}
+
+body {
+    color:#000000;
+    background-color:#ffffff
+}
+
 body {
-    background-color: #FFFFFF;
-    font-family: "Lucida Grande", "Lucida Sans Unicode", Arial, Verdana,
-                 Helvetica, sans-serif;
-    font-size: small;
+    font-family: Helvetica, sans-serif;
+    font-size:9pt
+}
+
+h1 {
+    font-size: 14pt;
+}
+
+h2 {
+    font-size: 12pt;
+}
+
+table {
+    font-size:9pt
+}
+
+table {
+    border-spacing: 0px;
+    border: 1px solid black
+}
+
+th, table thead {
+    background-color:#eee;
+    color:#666666;
+    font-weight: bold;
+    cursor: default;
+    text-align:center;
+    font-weight: bold;
+    font-family: Verdana;
+}
+
+.W {
+    font-size:0px
+}
+
+th, td {
+    padding:5px;
+    padding-left:8px;
+}
+
+tbody.scrollContent {
+    overflow:auto
+}
+
+.hideable {
+    border-width:thin;
+    border-color:background;
+    border-style:solid;
+    background: #F8F8FF;
+    padding:8px;
+}
+
+/* Nested popups */
+
+.hideable_1 {
+    border-width:thin;
+    border-color:background;
+    border-style:solid;
+    background: #F8F8FF;
+    padding:8px;
+}
+
+.hideable_2 {
+    border-width:thin;
+    border-color:background;
+    border-style:solid;
+    background: #E8E8E8;
+    padding:8px;
 }

Modified: zorg/trunk/lnt/lnt/server/ui/templates/index.html
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/templates/index.html?rev=130210&r1=130209&r2=130210&view=diff
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/templates/index.html (original)
+++ zorg/trunk/lnt/lnt/server/ui/templates/index.html Tue Apr 26 12:47:43 2011
@@ -1,6 +1,14 @@
 {% extends "layout.html" %}
-{% block title %}LNT{% endblock %}
+{% set components = [] %}
+{% block title %}Overview{% endblock %}
 {% block body %}
-WIP
-{% endblock %}
 
+{% if db_info.showGeneral %}
+<hr>
+
+<h3>General Database Access</h3>
+<p><a href="{{url_for('browse')}}">Browse DB</a>
+<p><a href="{{url_for('submit_run')}}">Submit Run</a>
+{% endif %}
+
+{% endblock %}

Modified: zorg/trunk/lnt/lnt/server/ui/templates/layout.html
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/templates/layout.html?rev=130210&r1=130209&r2=130210&view=diff
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/templates/layout.html (original)
+++ zorg/trunk/lnt/lnt/server/ui/templates/layout.html Tue Apr 26 12:47:43 2011
@@ -3,11 +3,76 @@
 <html>
 <head>
   <META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
-  <title>{{ self.title() }}</title>
+  <link rel="icon" type="image/png"
+        href="{{ url_for('.static', filename='favicon.ico') }}">
+  <title>{{old_config.name}}{%
+    for short_name,_ in components
+    %} : {{short_name}}{% endfor %} - {{ self.title() }}</title>
   <link rel="stylesheet" type="text/css"{#
         #} href="{{ url_for('.static', filename='style.css') }}">
+  {% block head %}{% endblock %}
+  <script type='text/javascript'>
+  {% block javascript %}{% endblock %}
+  </script>
 </head>
+{% if self.onload %}
+<body onload="{{ self.onload() }}">
+{% else %}
 <body>
-  <div class="body">{% block body %}{% endblock %}</div>
+{% endif %}
+
+{# Header #}
+
+{# Database selection header. #}
+<div class="zorg_navheader">
+<form method="get" action="{{ url_for('select_db') }}">
+<table style="padding:0.1em;" width="100%%">
+<tr>
+  <td>
+  <strong>
+  [{{ db_name }}]
+  </strong>
+  </td>
+  <td style="text-align:right;">
+  <input type="hidden" name="path" value="{{ request.path }}"/>
+  <strong>Database:</strong>
+  <select name="db" onchange="submit()">
+{% for name in old_config.databases.keys()|sort %}
+    <option{{" selected" if FIXME_is_selected}}>{{ name }}</option>
+{% endfor %}
+  </select>
+  <input type="submit" value="Go"/>
+  </td>
+</tr>
+</table>
+</form>
+</div>
+
+{# Component links #}
+<h2><a href="{{url_for('index')}}">{{old_config.name}}</a>
+{% for short_name,path in components %}
+  : <a href="{{ path }}">{{short_name}}</a>
+{% endfor %}
+ - {{ self.title() }}</h2>
+
+{# Actual body #}
+<div class="body">{% 
+  block body %}{% endblock %}
+</div>
+
+{# Include any database log, if present. #}
+{% if g.db_log %}
+<hr>
+
+<h3>SQL Log</h3>
+<pre>{{g.db_log}}</pre>
+{% endif %}
+
+{# Footer #}
+<hr>
+LNT Version: {{ app.version }}<br>
+Server Started: {{ app.start_time|asusertime }}<br>
+Generated: {{ request.request_time|asusertime }}<br>
+Render Time: {{ "%.2fs" % request.elapsed_time() }}<br>
 </body>
 </html>

Modified: zorg/trunk/lnt/lnt/server/ui/views.py
URL: http://llvm.org/viewvc/llvm-project/zorg/trunk/lnt/lnt/server/ui/views.py?rev=130210&r1=130209&r2=130210&view=diff
==============================================================================
--- zorg/trunk/lnt/lnt/server/ui/views.py (original)
+++ zorg/trunk/lnt/lnt/server/ui/views.py Tue Apr 26 12:47:43 2011
@@ -1,14 +1,62 @@
+import os
+
 import flask
+from flask import abort
+from flask import current_app
 from flask import redirect
 from flask import render_template
+from flask import request
 from flask import url_for
 
 frontend = flask.Module(__name__)
 
- at frontend.route('/')
-def index():
-    return render_template("index.html")
+###
+# Root-Only Routes
 
 @frontend.route('/favicon.ico')
 def favicon_ico():
     return redirect(url_for('.static', filename='favicon.ico'))
+
+ at frontend.route('/select_db')
+def select_db():
+    path = request.args.get('path')
+    db = request.args.get('db')
+    if path is None:
+        abort(400)
+    if db not in current_app.old_config.databases:
+        abort(404)
+
+    # Rewrite the path.
+    new_path = "/db_%s" % db
+    if not path.startswith("/db_"):
+        new_path += path
+    else:
+        if '/' in path[1:]:
+            new_path += "/" + path.split("/", 2)[2]
+    return redirect(request.script_root + new_path)
+
+#####
+# Per-Database Routes
+
+ at frontend.route('/')
+ at frontend.route('/db_<name>')
+ at frontend.route('/db_<name>/')
+def index(name = None):
+    name = name or "default"
+    db_info = current_app.old_config.databases.get(name)
+    return render_template("index.html", db_name=name, db_info=db_info)
+
+###
+# Database Actions
+
+ at frontend.route('/browse')
+def browse(name = None):
+    name = name or "default"
+    db_info = current_app.old_config.databases.get(name)
+    raise NotImplementedError
+
+ at frontend.route('/submitRun')
+def submit_run(name = None):
+    name = name or "default"
+    db_info = current_app.old_config.databases.get(name)
+    raise NotImplementedError





More information about the llvm-commits mailing list