annotate frontend/mfrontend/db.py @ 25:3a26da290650

merge
author Michał Rudowicz <michal.rudowicz@fl9.eu>
date Mon, 09 May 2011 10:49:01 +0200
parents b75a9ae3a060 9916d46ff096
children 28eb82047167
rev   line source
1
michalr
parents:
diff changeset
1 #!/usr/bin/python
michalr
parents:
diff changeset
2 # -*- coding: utf-8 -*-
michalr
parents:
diff changeset
3
michalr
parents:
diff changeset
4 import sqlite3
michalr
parents:
diff changeset
5 from flask import g
michalr
parents:
diff changeset
6 import ConfigParser
6
27d63cac76ac Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 5
diff changeset
7 from mfrontend import utils, exceptions
5
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
8 from contextlib import closing
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
9 import os.path
1
michalr
parents:
diff changeset
10
michalr
parents:
diff changeset
11 config = ConfigParser.SafeConfigParser()
michalr
parents:
diff changeset
12 config.read('config.ini')
michalr
parents:
diff changeset
13
9
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
14 ## Opisy wszystkich stanów zadań
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
15 states = {0 : u'Oczekujące',
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
16 1 : u'Trwa',
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
17 2 : u'Zakończone'}
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
18
1
michalr
parents:
diff changeset
19 def connect_db():
michalr
parents:
diff changeset
20 """Funkcja łącząca się z bazą danych."""
michalr
parents:
diff changeset
21 g.db = sqlite3.connect(config.get('Basic','Database'))
michalr
parents:
diff changeset
22
michalr
parents:
diff changeset
23 def disconnect_db():
michalr
parents:
diff changeset
24 """Funkcja zamykająca połączenie z bazą danych"""
michalr
parents:
diff changeset
25 g.db.close()
michalr
parents:
diff changeset
26
5
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
27 def init_db():
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
28 """Funkcja przeprowadzająca inicjalizację bazy danych zgodnie
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
29 z plikiem schema.sql. Na podstawie kodu ze strony
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
30 http://flask.pocoo.org/docs/patterns/sqlite3/#initial-schemas
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
31 Instalacja powiedzie się tylko wtedy, gdy w obecnym katalogu
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
32 nie istnieje plik '.installed'. Plik taki jest tworzony
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
33 po każdej instalacji, aby zapobiec operacjom na
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
34 istniejących bazach.
16
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
35
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
36 :returns: True, jeśli instalacja została wykonana,
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
37 False, jeśli plik '.installed' istnieje.
5
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
38 """
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
39 if not os.path.isfile('.installed'):
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
40 with open('schema.sql', 'r') as f:
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
41 g.db.cursor().executescript(f.read())
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
42 g.db.commit()
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
43 open('.installed', 'w').close()
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
44 return True
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
45 else:
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
46 return False
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
47
1
michalr
parents:
diff changeset
48 def query_db(query, args=(), one=False):
16
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
49 """ Funkcja ułatwiająca odpytywanie bazy danych, źródło:
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
50 http://flask.pocoo.org/docs/patterns/sqlite3/
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
51
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
52 :param query: Zapytanie SQL. Wszelkie niewiadome należy
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
53 zastępować znakiem zapytania ("?"), a
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
54 wartości umieszczać na liście w parametrze
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
55 args.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
56 :param args: Lista zawierająca argumenty do zappytania.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
57 :param one: Jeśli ustawione na True, to funkcja zwróci
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
58 tylko jeden element z bazy, w przeciwnym wypadku
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
59 wszystkie spełniające warunek zapytania.
1
michalr
parents:
diff changeset
60 """
michalr
parents:
diff changeset
61 cur = g.db.execute(query, args)
michalr
parents:
diff changeset
62 rv = [dict((cur.description[idx][0], value)
michalr
parents:
diff changeset
63 for idx, value in enumerate(row)) for row in cur.fetchall()]
michalr
parents:
diff changeset
64 return (rv[0] if rv else None) if one else rv
4
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
65
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
66 def user_can_login(username, password):
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
67 """Funkcja sprawdzająca, czy podany użytkownik może sie zalogować
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
68 po podaniu danego w argumencie hasła.
16
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
69
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
70 :param username: Nazwa użytkownika
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
71 :param password: Hasło
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
72 :returns: Prawda, jeśli podane dane są akceptowalne, w przeciwnym
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
73 razie fałsz.
4
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
74 """
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
75 user = query_db('select * from users where username = ?',
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
76 [username], one=True)
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
77 if user is None: # Brak użytkownika o takiej nazwie
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
78 return False
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
79 if user['password'] == utils.hashPassword(password):
6
27d63cac76ac Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 5
diff changeset
80 if not user['activated']:
27d63cac76ac Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 5
diff changeset
81 raise exceptions.UserNotActivated()
27d63cac76ac Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 5
diff changeset
82 return True # Jeśli aktywny i hasło dobre, to wpuszczamy
4
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
83 # Najwyraźniej jest taki użytkownik, ale hasło się nie zgadza
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
84 return False
5
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
85
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
86 def register_user(username, password):
16
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
87 """ Funkcja rejestrująca nowego użytkownika w systemie.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
88
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
89 :param username: Nazwa nowego użytkownika
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
90 :param password: Hasło w czystym tekście, funkcja sama
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
91 zajmie się hashowaniem
5
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
92 """
7
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
93 user = query_db('select * from users where username = ?;',
6
27d63cac76ac Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 5
diff changeset
94 [username], one=True)
27d63cac76ac Konta użytkowników muszą być aktywowane + ładniejsze wyświetlanie błędów przy logowaniu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 5
diff changeset
95 if user is not None:
7
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
96 raise exceptions.UserExists
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
97 hashedPassword = utils.hashPassword(password)
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
98 # teraz właściwe dodawanie danych do bazy
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
99 query_db('INSERT INTO users (username, password, activated) VALUES (?,?,0);',
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
100 [username, hashedPassword])
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
101 g.db.commit()
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
102
9
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
103 def get_jobs(owner_id, hash, state):
16
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
104 """ Funkcja pobiera informacje o zadaniach. Możliwe jest filtrowanie zadań.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
105
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
106 :param owner_id: Pobiera informacje jedynie o zadaniach stworzonych przez
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
107 użytkownika o podanym id. Jeśli parametr ten jest ustawiony
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
108 na None, to pobiera zadania wszystkich użytkowników.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
109 :param hash: Pobiera informacje o zadaniu o podanym hashu. Jeśli jest ustawione
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
110 na None, to pobiera informacje o wszystkich hashach.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
111 :param state: Pobiera informacje o zadaniach będących w określonym stanie.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
112 Jeśli jest ustawione na None, to pobiera informację o zadaniach
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
113 znajdujących się w każdym stanie.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
114 :returns: Informacje o zadaniach z uwzględnieniem podanych w
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
115 parametrach filtrów.
9
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
116 """
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
117 parameters = []
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
118 sqlLine = ""
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
119 if owner_id is not None:
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
120 sqlLine += "owner_id = ?"
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
121 parameters.append(owner_id)
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
122 if hash is not None:
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
123 if not sqlLine == "":
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
124 sqlLine += " AND "
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
125 sqlLine += "hash = ?"
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
126 parameters.append(hash)
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
127 if state is not None:
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
128 if not sqlLine == "":
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
129 sqlLine += " AND "
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
130 sqlLine += "state = ?"
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
131 parameters.append(state)
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
132 if sqlLine == "":
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
133 sqlLine = "select * from jobs;"
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
134 else:
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
135 sqlLine = "select * from jobs where " + sqlLine + ";"
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
136 result = query_db(sqlLine,parameters)
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
137 # teraz trochę upiększamy wynik, np. pobierając nazwy użytkowników
22
9916d46ff096 Wrzucony layout - zostały jakieś drobne poprawki + zmiana źródeł (nie można np utworzyć foldery /pic/ i z niego ściągać obrazków)
mild@mild-laptop
parents: 16
diff changeset
138 index = 0
9
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
139 for job in result:
22
9916d46ff096 Wrzucony layout - zostały jakieś drobne poprawki + zmiana źródeł (nie można np utworzyć foldery /pic/ i z niego ściągać obrazków)
mild@mild-laptop
parents: 16
diff changeset
140 job['index'] = index
9
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
141 job['username'] = get_user_name(job['owner_id'])
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
142 job['state_text'] = states[job['state']]
22
9916d46ff096 Wrzucony layout - zostały jakieś drobne poprawki + zmiana źródeł (nie można np utworzyć foldery /pic/ i z niego ściągać obrazków)
mild@mild-laptop
parents: 16
diff changeset
143 index = index + 1
9
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
144 return result
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
145
13
79cf8ca2a0e5 Dodałem pobieranie informacji o podanym zadaniu oraz pobieranie zadania oczekującego poprzez API
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 10
diff changeset
146 def get_waiting_job():
79cf8ca2a0e5 Dodałem pobieranie informacji o podanym zadaniu oraz pobieranie zadania oczekującego poprzez API
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 10
diff changeset
147 """ Funkcja zwraca dane o najstarszym oczekującym zadaniu.
16
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
148
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
149 :returns: Dane o zadaniu.
13
79cf8ca2a0e5 Dodałem pobieranie informacji o podanym zadaniu oraz pobieranie zadania oczekującego poprzez API
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 10
diff changeset
150 """
79cf8ca2a0e5 Dodałem pobieranie informacji o podanym zadaniu oraz pobieranie zadania oczekującego poprzez API
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 10
diff changeset
151 return query_db("SELECT * FROM jobs WHERE state = 0 ORDER BY id ASC",[],one=True)
79cf8ca2a0e5 Dodałem pobieranie informacji o podanym zadaniu oraz pobieranie zadania oczekującego poprzez API
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 10
diff changeset
152
79cf8ca2a0e5 Dodałem pobieranie informacji o podanym zadaniu oraz pobieranie zadania oczekującego poprzez API
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 10
diff changeset
153 def get_job_by_id(job_id):
79cf8ca2a0e5 Dodałem pobieranie informacji o podanym zadaniu oraz pobieranie zadania oczekującego poprzez API
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 10
diff changeset
154 """ Funkcja zwraca wszystkie informacje o wybranym zadaniu na podstawie
79cf8ca2a0e5 Dodałem pobieranie informacji o podanym zadaniu oraz pobieranie zadania oczekującego poprzez API
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 10
diff changeset
155 numeru identyfikacyjnego.
16
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
156
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
157 :param job_id: Identyfikator żądanego zadania
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
158 :returns: Informacje o żądanym zadaniu.;q
13
79cf8ca2a0e5 Dodałem pobieranie informacji o podanym zadaniu oraz pobieranie zadania oczekującego poprzez API
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 10
diff changeset
159 """
14
df32c1d01b8d Dodałem edycję zadań przez POST, napisałem coś w rodzaju dokumentacji z nudów
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 13
diff changeset
160 return query_db("SELECT * FROM jobs WHERE id = ?;",
13
79cf8ca2a0e5 Dodałem pobieranie informacji o podanym zadaniu oraz pobieranie zadania oczekującego poprzez API
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 10
diff changeset
161 [job_id], one=True)
79cf8ca2a0e5 Dodałem pobieranie informacji o podanym zadaniu oraz pobieranie zadania oczekującego poprzez API
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 10
diff changeset
162
14
df32c1d01b8d Dodałem edycję zadań przez POST, napisałem coś w rodzaju dokumentacji z nudów
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 13
diff changeset
163 def edit_job(job_id, options):
16
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
164 """ Funkcja modyfikująca właściwości zadania o podanym identyfikatorze.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
165
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
166 :param job_id: Identyfikator zadania, które chcemy zmodyfikować.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
167 :param options: Słownik z nowymi wartościami kolumn w tabeli.
14
df32c1d01b8d Dodałem edycję zadań przez POST, napisałem coś w rodzaju dokumentacji z nudów
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 13
diff changeset
168 """
df32c1d01b8d Dodałem edycję zadań przez POST, napisałem coś w rodzaju dokumentacji z nudów
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 13
diff changeset
169 # klucze, których zmianę dopuszczamy
df32c1d01b8d Dodałem edycję zadań przez POST, napisałem coś w rodzaju dokumentacji z nudów
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 13
diff changeset
170 keys = ["label", "state", "result", "percent", "last_checked"]
df32c1d01b8d Dodałem edycję zadań przez POST, napisałem coś w rodzaju dokumentacji z nudów
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 13
diff changeset
171 for key in keys:
df32c1d01b8d Dodałem edycję zadań przez POST, napisałem coś w rodzaju dokumentacji z nudów
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 13
diff changeset
172 if key in options:
df32c1d01b8d Dodałem edycję zadań przez POST, napisałem coś w rodzaju dokumentacji z nudów
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 13
diff changeset
173 query_db("UPDATE jobs SET " + key + " = :value WHERE id = :id",
23
b75a9ae3a060 Poprawiony błąd przy edycji zadań przez POST
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 16
diff changeset
174 {"value":options[key],"id":job_id})
14
df32c1d01b8d Dodałem edycję zadań przez POST, napisałem coś w rodzaju dokumentacji z nudów
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 13
diff changeset
175 g.db.commit()
df32c1d01b8d Dodałem edycję zadań przez POST, napisałem coś w rodzaju dokumentacji z nudów
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 13
diff changeset
176
9
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
177 def get_user_name(user_id):
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
178 """ Funkcja pobiera nazwę użytkownika o podanym identyfikatorze.
14
df32c1d01b8d Dodałem edycję zadań przez POST, napisałem coś w rodzaju dokumentacji z nudów
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 13
diff changeset
179
16
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
180 :param user_id: Identyfikator użytkownika, którego nazwa jest pożądana.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
181 :returns: String zawierający nazwę użytkownika, lub None,
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
182 jeśli użytkownik nie istnieje.
9
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
183 """
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
184 return query_db("SELECT username FROM users WHERE id = ?;",
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
185 [user_id], one=True)["username"]
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
186
10
58a993029d9f Dodawanie nowych zadań i dekorator sprawdzający zalogowanie.
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 9
diff changeset
187 def get_user_id(user_name):
58a993029d9f Dodawanie nowych zadań i dekorator sprawdzający zalogowanie.
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 9
diff changeset
188 """ Funkcja pobiera identyfikator użytkownika na podstawie nazwy.
16
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
189
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
190 :param user_name: Nazwa użytkownika, którego indentyfikator ma zostać zwrócony.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
191 :returns: Identyfikator użytkownika.
10
58a993029d9f Dodawanie nowych zadań i dekorator sprawdzający zalogowanie.
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 9
diff changeset
192 """
58a993029d9f Dodawanie nowych zadań i dekorator sprawdzający zalogowanie.
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 9
diff changeset
193 return query_db("SELECT id FROM users WHERE username = ?;",
58a993029d9f Dodawanie nowych zadań i dekorator sprawdzający zalogowanie.
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 9
diff changeset
194 [user_name], one=True)["id"]
58a993029d9f Dodawanie nowych zadań i dekorator sprawdzający zalogowanie.
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 9
diff changeset
195
16
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
196 def new_job(id, label, hash, method):
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
197 """ Funkcja tworzy nowe zadanie i zapisuje je w bazie danych.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
198
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
199 :param id: Identyfikator użytkownika, który ma zostać oznaczony
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
200 jako właściciel zadania.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
201 :param label: Opis zadania.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
202 :param hash: Hash do zdekodowania.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
203 :param method: Metoda łamania haseł.
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
204 """
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
205 query_db("INSERT INTO jobs (owner_id, label, hash, method) VALUES (?,?,?,?);",
c87f82a15606 Dopisałem co nieco do dokumentacji i małę poprawki w zarządzainu zadaniami
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 14
diff changeset
206 [id, label, hash,method])
10
58a993029d9f Dodawanie nowych zadań i dekorator sprawdzający zalogowanie.
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 9
diff changeset
207 g.db.commit()