changeset 13:79cf8ca2a0e5

Dodałem pobieranie informacji o podanym zadaniu oraz pobieranie zadania oczekującego poprzez API
author Michał Rudowicz <michal.rudowicz@fl9.eu>
date Fri, 01 Apr 2011 19:02:08 +0200
parents 5b4688e1964c
children df32c1d01b8d
files frontend/config.ini frontend/mfrontend/db.py frontend/mfrontend/utils.py frontend/mfrontend/views/api.py frontend/mfrontend/views/jobcontrol.py
diffstat 5 files changed, 42 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/frontend/config.ini	Sun Mar 27 17:13:44 2011 +0200
+++ b/frontend/config.ini	Fri Apr 01 19:02:08 2011 +0200
@@ -7,3 +7,5 @@
 Debug = 1
 # Algorytm wyliczający hashe dla haseł
 HashCrypto = sha1
+# Klucz API
+ApiKey = TajnyKluczApi
--- a/frontend/mfrontend/db.py	Sun Mar 27 17:13:44 2011 +0200
+++ b/frontend/mfrontend/db.py	Fri Apr 01 19:02:08 2011 +0200
@@ -126,6 +126,21 @@
         job['state_text'] = states[job['state']]
     return result
 
+def get_waiting_job():
+    """ Funkcja zwraca dane o najstarszym oczekującym zadaniu.
+        @return Dane o zadaniu.
+    """
+    return query_db("SELECT * FROM jobs WHERE state = 0 ORDER BY id ASC",[],one=True)
+
+def get_job_by_id(job_id):
+    """ Funkcja zwraca wszystkie informacje o wybranym zadaniu na podstawie
+        numeru identyfikacyjnego.
+        @param job_id Identyfikator żądanego zadania
+        @return Informacje o żądanym zadaniu.
+    """
+    return query_db("SELECT * FROM jobs WHERE id = ?",
+                   [job_id], one=True)
+
 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.
--- a/frontend/mfrontend/utils.py	Sun Mar 27 17:13:44 2011 +0200
+++ b/frontend/mfrontend/utils.py	Fri Apr 01 19:02:08 2011 +0200
@@ -20,6 +20,7 @@
     config.set('Basic', 'Debug', '0')
     config.set('Basic', 'Secret_Key', randomString(10))
     config.set('Basic', 'HashCrypto', 'sha512')
+    config.set('Basic', 'ApiKey', randomString(10))
     with open('config.ini', 'wb') as configfile:
         config.write(configfile)
 
--- a/frontend/mfrontend/views/api.py	Sun Mar 27 17:13:44 2011 +0200
+++ b/frontend/mfrontend/views/api.py	Fri Apr 01 19:02:08 2011 +0200
@@ -1,22 +1,38 @@
 #!/usr/bin/python
 # -*- coding: utf-8 -*-
 
-from flask import jsonify, Module
+from flask import jsonify, Module, abort
 from mfrontend import db, utils, exceptions, decorators
 api = Module(__name__)
 
-@api.route('/getjob/')
-@decorators.login_required
+@api.route('/getjob/<apikey>/')
 def get_jobs():
+    if apikey != db.config.get('Basic', 'ApiKey'):
+        abort(403)
     return jsonify(jobs = db.get_jobs(None, None, None))
 
-@api.route('/getjob/<int:jobid>/')
-@decorators.login_required
-def get_job(jobid):
+@api.route('/getnextjob/<apikey>/')
+def get_first_waiting_job(apikey):
+    """ Zwraca w formacie JSON informacje o pierwszym
+        czekającym zadaniu.
+        @param apikey   Klucz API.
+        @return         Dane o zadaniu w formacie JSON.
+    """
+    if apikey != db.config.get('Basic', 'ApiKey'):
+        abort(403)
+    return jsonify(job = db.get_waiting_job())
+
+@api.route('/getjob/<apikey>/<int:jobid>/')
+def get_job(apikey, jobid):
     """ Zwraca w formacie JSON informacje o podanym zadaniu.
         Uwaga: użytkownik musi być zalogowany, aby móc pobrać
         informację o zadaniu.
         @param  jobid   Identyfikator żądanego zadania.
         @return         Informacje o zadaniu w formacie JSON.
     """
-    pass #TODO!
+    # jeśli klucz API jest niepoprawny, przerywamy
+    if apikey != db.config.get('Basic','ApiKey'):
+        abort(403)
+    # w innym przypadku zwracamy informacje o zadaniu
+    return jsonify(job = db.get_job_by_id(jobid))
+
--- a/frontend/mfrontend/views/jobcontrol.py	Sun Mar 27 17:13:44 2011 +0200
+++ b/frontend/mfrontend/views/jobcontrol.py	Fri Apr 01 19:02:08 2011 +0200
@@ -24,3 +24,4 @@
         except Exception as e:
             flash(e)
     return render_template('newjob.html')
+