annotate frontend/mfrontend/db.py @ 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 d86794939fe4
children 58a993029d9f
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.
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
35 @return True, jeśli instalacja została wykonana,
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
36 False, jeśli plik '.installed' istnieje.
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
37 """
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
38 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
39 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
40 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
41 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
42 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
43 return True
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
44 else:
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
45 return False
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
46
1
michalr
parents:
diff changeset
47 def query_db(query, args=(), one=False):
michalr
parents:
diff changeset
48 """Funkcja ułatwiająca odpytywanie bazy danych, źródło:
michalr
parents:
diff changeset
49 http://flask.pocoo.org/docs/patterns/sqlite3/
michalr
parents:
diff changeset
50 """
michalr
parents:
diff changeset
51 cur = g.db.execute(query, args)
michalr
parents:
diff changeset
52 rv = [dict((cur.description[idx][0], value)
michalr
parents:
diff changeset
53 for idx, value in enumerate(row)) for row in cur.fetchall()]
michalr
parents:
diff changeset
54 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
55
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
56 def user_can_login(username, password):
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
57 """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
58 po podaniu danego w argumencie hasła.
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
59 @param username Nazwa użytkownika
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
60 @param password Hasło
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
61 @return Prawda, jeśli podane dane są akceptowalne, w przeciwnym
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
62 razie fałsz.
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
63 """
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
64 user = query_db('select * from users where username = ?',
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
65 [username], one=True)
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
66 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
67 return False
cf786ee26a22 MOŻNA SIĘ LOGOWAĆ I WYLOGOWAĆ jestem wspaniały
michalr
parents: 1
diff changeset
68 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
69 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
70 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
71 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
72 # 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
73 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
74
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
75 def register_user(username, password):
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
76 """Funkcja rejestrująca nowego użytkownika w systemie.
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
77 @param username Nazwa nowego użytkownika
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
78 @param password Hasło w czystym tekście, funkcja sama
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
79 zajmie się hashowaniem
3ba60dfc1d64 Dodałem prosty instalator aplikacji tworzący bazę danych ze schematu
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 4
diff changeset
80 """
7
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
81 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
82 [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
83 if user is not None:
7
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
84 raise exceptions.UserExists
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
85 hashedPassword = utils.hashPassword(password)
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
86 # teraz właściwe dodawanie danych do bazy
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
87 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
88 [username, hashedPassword])
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
89 g.db.commit()
d86794939fe4 Rejestracja użytkowników
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 6
diff changeset
90
9
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
91 def get_jobs(owner_id, hash, state):
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
92 """Funkcja pobiera informacje o zadaniach. Możliwe jest filtrowanie zadań.
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
93 @param owner_id Pobiera informacje jedynie o zadaniach stworzonych przez
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
94 użytkownika o podanym id. Jeśli parametr ten jest ustawiony
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
95 na None, to pobiera zadania wszystkich użytkowników.
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
96 @param hash Pobiera informacje o zadaniu o podanym hashu. Jeśli jest ustawione
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
97 na None, to pobiera informacje o wszystkich hashach.
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
98 @param state Pobiera informacje o zadaniach będących w określonym stanie.
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
99 Jeśli jest ustawione na None, to pobiera informację o zadaniach
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
100 znajdujących się w każdym stanie.
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
101 @return Informacje o zadaniach z uwzględnieniem podanych w parametrach filtrów.
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
102 """
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
103 parameters = []
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
104 sqlLine = ""
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
105 if owner_id is not None:
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
106 sqlLine += "owner_id = ?"
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
107 parameters.append(owner_id)
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
108 if hash is not None:
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
109 if not sqlLine == "":
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
110 sqlLine += " AND "
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
111 sqlLine += "hash = ?"
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
112 parameters.append(hash)
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
113 if state is not None:
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
114 if not sqlLine == "":
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
115 sqlLine += " AND "
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
116 sqlLine += "state = ?"
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
117 parameters.append(state)
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
118 if sqlLine == "":
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
119 sqlLine = "select * from jobs;"
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
120 else:
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
121 sqlLine = "select * from jobs where " + sqlLine + ";"
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
122 result = query_db(sqlLine,parameters)
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
123 # teraz trochę upiększamy wynik, np. pobierając nazwy użytkowników
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
124 for job in result:
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
125 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
126 job['state_text'] = states[job['state']]
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
127 return result
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
128
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
129 def get_user_name(user_id):
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
130 """ Funkcja pobiera nazwę użytkownika o podanym identyfikatorze.
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
131 @param user_id Identyfikator użytkownika, którego nazwa jest pożądana.
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
132 @return String zawierający nazwę użytkownika, lub None, jeśli użytkownik nie istnieje.
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
133 """
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
134 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
135 [user_id], one=True)["username"]
9a0a9fa7f91d Dodałem prototyp listy zadań w systemie
Michał Rudowicz <michal.rudowicz@fl9.eu>
parents: 7
diff changeset
136