changeset 9:9a0a9fa7f91d

Dodałem prototyp listy zadań w systemie
author Michał Rudowicz <michal.rudowicz@fl9.eu>
date Mon, 28 Feb 2011 19:25:51 +0100
parents e00d04093c60
children 58a993029d9f
files frontend/mfrontend/__init__.py frontend/mfrontend/db.py frontend/mfrontend/templates/joblist.html frontend/mfrontend/templates/layout.html frontend/mfrontend/views/jobcontrol.py
diffstat 5 files changed, 93 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/frontend/mfrontend/__init__.py	Mon Feb 28 12:08:57 2011 +0100
+++ b/frontend/mfrontend/__init__.py	Mon Feb 28 19:25:51 2011 +0100
@@ -4,6 +4,7 @@
 import flask
 from ConfigParser import SafeConfigParser, NoSectionError
 from mfrontend.views.frontend import frontend
+from mfrontend.views.jobcontrol import jobcontrol
 from mfrontend import db, utils
 
 
@@ -22,6 +23,7 @@
 
 app = flask.Flask(__name__)
 app.register_module(frontend)
+app.register_module(jobcontrol, url_prefix="/jobs")
 app.config.from_object(__name__)
 app.config.from_envvar('MFRONTEND_SETTINGS', silent=True)
 
--- a/frontend/mfrontend/db.py	Mon Feb 28 12:08:57 2011 +0100
+++ b/frontend/mfrontend/db.py	Mon Feb 28 19:25:51 2011 +0100
@@ -11,6 +11,11 @@
 config = ConfigParser.SafeConfigParser()
 config.read('config.ini')
 
+## Opisy wszystkich stanów zadań
+states = {0 : u'Oczekujące',
+          1 : u'Trwa',
+          2 : u'Zakończone'}
+
 def connect_db():
     """Funkcja łącząca się z bazą danych."""
     g.db = sqlite3.connect(config.get('Basic','Database'))
@@ -83,3 +88,49 @@
             [username, hashedPassword])
     g.db.commit()
 
+def get_jobs(owner_id, hash, state):
+    """Funkcja pobiera informacje o zadaniach. Możliwe jest filtrowanie zadań.
+       @param owner_id  Pobiera informacje jedynie o zadaniach stworzonych przez
+                        użytkownika o podanym id. Jeśli parametr ten jest ustawiony
+                        na None, to pobiera zadania wszystkich użytkowników.
+       @param hash      Pobiera informacje o zadaniu o podanym hashu. Jeśli jest ustawione
+                        na None, to pobiera informacje o wszystkich hashach.
+       @param state     Pobiera informacje o zadaniach będących w określonym stanie.
+                        Jeśli jest ustawione na None, to pobiera informację o zadaniach
+                        znajdujących się w każdym stanie.
+       @return Informacje o zadaniach z uwzględnieniem podanych w parametrach filtrów.
+    """
+    parameters = []
+    sqlLine = ""
+    if owner_id is not None:
+        sqlLine += "owner_id = ?"
+        parameters.append(owner_id)
+    if hash is not None:
+        if not sqlLine == "":
+            sqlLine += " AND "
+        sqlLine += "hash = ?"
+        parameters.append(hash)
+    if state is not None:
+        if not sqlLine == "":
+            sqlLine += " AND "
+        sqlLine += "state = ?"
+        parameters.append(state)
+    if sqlLine == "":
+        sqlLine = "select * from jobs;"
+    else:
+        sqlLine = "select * from jobs where " + sqlLine + ";"
+    result = query_db(sqlLine,parameters)
+    # teraz trochę upiększamy wynik, np. pobierając nazwy użytkowników
+    for job in result:
+        job['username'] = get_user_name(job['owner_id'])
+        job['state_text'] = states[job['state']]
+    return result
+
+def get_user_name(user_id):
+    """ Funkcja pobiera nazwę użytkownika o podanym identyfikatorze.
+        @param user_id  Identyfikator użytkownika, którego nazwa jest pożądana.
+        @return String zawierający nazwę użytkownika, lub None, jeśli użytkownik nie istnieje.
+    """
+    return query_db("SELECT username FROM users WHERE id = ?;",
+                    [user_id], one=True)["username"]
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frontend/mfrontend/templates/joblist.html	Mon Feb 28 19:25:51 2011 +0100
@@ -0,0 +1,24 @@
+{% extends "layout.html" %}
+{% block body %}
+<h2>Lista zadań</h2>
+<table border="1">
+    <tr>
+            <th>id</th>
+            <th>Właściciel</th>
+            <th>Hash</th>
+            <th>Opis</th>
+            <th>Stan</th>
+            <th>Wynik</th>
+    </tr>
+    {% for job in jobs %}
+    <tr>
+        <td>{{ job.id }}</td>
+        <td>{{ job.username }}</td>
+        <td>{{ job.hash }}</td>
+        <td>{{ job.label }}</td>
+        <td>{{ job.state_text }}</td>
+        <td>{{ job.result }}</td>
+    </tr>
+    {% endfor %}
+</table>
+{% endblock %} 
--- a/frontend/mfrontend/templates/layout.html	Mon Feb 28 12:08:57 2011 +0100
+++ b/frontend/mfrontend/templates/layout.html	Mon Feb 28 19:25:51 2011 +0100
@@ -4,10 +4,11 @@
   <h1>NO HEJ</h1>
   <div class=metanav>
   {% if not session.logged_in %}
-  <a href="{{ url_for('login') }}">Zaloguj się</a> | 
-  <a href="{{ url_for('register') }}">Załóż konto</a>
+  <a href="{{ url_for('frontend.login') }}">Zaloguj się</a> | 
+  <a href="{{ url_for('frontend.register') }}">Załóż konto</a>
   {% else %}
-    <a href="{{ url_for('logout') }}">Wyloguj się</a>
+  <a href="{{ url_for('frontend.logout') }}">Wyloguj się</a> | 
+  <a href="{{ url_for('jobcontrol.index') }}">Lista zadań</a>
   {% endif %}
   </div>
   {% for message in get_flashed_messages() %}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/frontend/mfrontend/views/jobcontrol.py	Mon Feb 28 19:25:51 2011 +0100
@@ -0,0 +1,12 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+from flask import Module, render_template, request, url_for
+from flask import escape, session, redirect, flash, abort
+from mfrontend import db, utils, exceptions
+jobcontrol = Module(__name__)
+
+@jobcontrol.route('/')
+def index():
+    jobs = db.get_jobs(None, None, None)
+    return render_template('joblist.html', jobs=jobs)