Mercurial > kraina_muminkow
changeset 18:8dabb7e7f039
API zdefiniowane przez szablon
author | Michał Rudowicz <michal.rudowicz@fl9.eu> |
---|---|
date | Mon, 04 Apr 2011 10:44:09 +0200 |
parents | 57a48d2aee18 |
children | 47c1338a3096 |
files | frontend/doc/api.txt frontend/mfrontend/templates/joblist.csv frontend/mfrontend/views/api.py |
diffstat | 3 files changed, 77 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
--- a/frontend/doc/api.txt Sun Apr 03 14:07:19 2011 +0200 +++ b/frontend/doc/api.txt Mon Apr 04 10:44:09 2011 +0200 @@ -1,36 +1,72 @@ Porady dla osób korzystających z API ==================================== +Pobieranie informacji w formacie JSON +------------------------------------- + Pobieranie informacji o zadaniu o danym ID ------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Przy domyślnej konfiguracji pobranie danych o zadaniu o podanym ID wymaga wykonania polecenia GET na elemencie pod adresem -``/api/getjob/<apikey>/<ID>/``, gdzie: - -apikey - Klucz API taki, jak ustawiony w pliku config.ini -ID - Identyfikator zadania +``/api/getjob/<ID>/``, gdzie ID jest identyfikatorem zadania Serwer aplikacji powinien zwrócić dokument w formacie JSON zawierający wszystkie dane znajdujące się w bazie, dotyczące tego zadania. Pobieranie informacji o wszystkich zadaniach --------------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -``/api/getjob/<apikey>/`` , gdzie *apikey* ma takie samo znaczenie jak +``/api/getjob/`` , gdzie *apikey* ma takie samo znaczenie jak powyżej. +Pobieranie informacji w formacie zdefiniowanym przez szablon +------------------------------------------------------------ + +Klucz API +^^^^^^^^^ + +Klucz API, w URLach określany jako ``<apikey>``, jest kluczem pozwalającym na dostęp +do informacji udostępnianych przez API i nie powinien być udostepniany nikomu poza +osobami odpowiedzialnymi za aplikację rozproszoną korzystającą z serwera aplikacji. +Klucz znajduje się w :ref:`config-ini`. + +Szablon pliku +^^^^^^^^^^^^^ + +Szablon pliku znajduje się w katalogu ``mfrontend/templates/joblist.csv`` i może być +dowolnie dostosowywany według potrzeb serwera aplikacji. + +Domyślny szablon pliku: + +.. code-block:: jinja + + {% for job in jobs %} + {{job.id}};{{job.hash}};{{job.method}}; + {% endfor %} + +W razie potrzeby należy dodać kolejne pola w analogiczny sposób. + Pobieranie jednego oczekującego zadania ---------------------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ``/api/getnextjob/<apikey>/`` pobiera następne oczekujące działanie (wg numeru ID, najpierw mniejsze wartości). *Ważne*: samo pobranie informacji **nie** zmienia statusu zadania, trzeba to zrobić ręcznie za pomocą edycji zadania. +Pobieranie informacji o zadaniu o danym ID +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Przy domyślnej konfiguracji pobranie danych o zadaniu o podanym ID wymaga +wykonania polecenia GET na elemencie pod adresem +``/api/getjob/<apikey>/<jobid>/``, gdzie ID jest identyfikatorem zadania + +Serwer aplikacji powinien zwrócić dokument w formacie zdefiniowanym przez szablon +zawierający wszystkie dane znajdujące się w bazie dotyczące tego zadania. + + Modyfikowanie danych zadania ----------------------------- +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Należy wykonać *POST* na URI ``/api/modify/<apikey/<jobid>/``, gdzie:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/frontend/mfrontend/templates/joblist.csv Mon Apr 04 10:44:09 2011 +0200 @@ -0,0 +1,3 @@ +{% for job in jobs %} +{{job.id}};{{job.hash}};{{job.method}};{# W razie czego dodać kolejne pola w ten sam sposób #} +{% endfor %}
--- a/frontend/mfrontend/views/api.py Sun Apr 03 14:07:19 2011 +0200 +++ b/frontend/mfrontend/views/api.py Mon Apr 04 10:44:09 2011 +0200 @@ -2,20 +2,20 @@ # -*- coding: utf-8 -*- from flask import jsonify, Module, abort, request +from flask import render_template from mfrontend import db, utils, exceptions, decorators api = Module(__name__) -@api.route('/getjob/<apikey>/') -def get_jobs(): +@api.route('/getjob/') +@decorators.login_required +def get_jobs_json(): """ Funkcja pobiera informacje o wszystkich zadaniach i zwraca je w formacie JSON. """ - if apikey != db.config.get('Basic', 'ApiKey'): - abort(403) return jsonify(jobs = db.get_jobs(None, None, None)) @api.route('/getnextjob/<apikey>/') -def get_first_waiting_job(apikey): +def get_first_waiting_job_template(apikey): """ Zwraca w formacie JSON informacje o pierwszym czekającym zadaniu. @@ -24,21 +24,35 @@ """ if apikey != db.config.get('Basic', 'ApiKey'): abort(403) - return jsonify(job = db.get_waiting_job()) + return render_template('joblist.csv', + jobs = [ db.get_waiting_job() ] ) -@api.route('/getjob/<apikey>/<int:jobid>/') -def get_job(apikey, jobid): +@api.route('/getjob/<int:jobid>/') +@decorators.login_required +def get_job_json(jobid): """ Zwraca w formacie JSON informacje o podanym zadaniu. - :param jobid: Identyfikator żądanego zadania. - :param apikey: Klucz API + :param jobid: Identyfikator żądanego zadania. + :returns: Informacje o zadaniu w formacie JSON """ - # 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)) +@api.route('/getjob/<apikey>/<int:jobid>/') +def get_job_template(apikey, jobid): + """ Funkcja zwraca informacje o zadaniu o podanym numerze + jobid. + + :param apikey: Klucz API taki, jak ustawiony w config.ini + :param jobid: Numer identyfikacyjny zadania + :returns: Dane o zadaniu wyrenderowane przy pomocy + szablonu joblist.csv + """ + if apikey != db.config.get('Basic', 'ApiKey'): + abort(403) + return render_template('joblist.csv', + jobs = [ db.get_job_by_id(jobid) ] ) + @api.route('/modify/<apikey>/<int:jobid>/', methods=['POST']) def modify_job(apikey, jobid): """ Funkcja pozwalająca na modyfikację wybranego