forked from martincesnovar/borza-kriptovalut
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodeli.py
More file actions
349 lines (295 loc) · 11.9 KB
/
Copy pathmodeli.py
File metadata and controls
349 lines (295 loc) · 11.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
import sqlite3
import datetime
import dobi_zneske
con = sqlite3.connect('Kriptovalute.db')
cur = con.cursor()
###########################################################################
# #
# OSEBNI PODATKI LASTNIKA #
# #
###########################################################################
def mail_v_bazi(mail):
sql = '''SELECT 1 FROM oseba WHERE mail = ?'''
cur = con.execute(sql, [mail])
return cur.fetchall()
def mail(username):
cur = con.execute("SELECT mail FROM oseba WHERE mail=(?)",
[username])
return cur.fetchone()
def podatki_vsi():
'''funckija vrne vse lastnike'''
sql = '''SELECT * FROM oseba'''
cur = con.execute(sql)
return cur.fetchall()
def podatki(id_st):
'''funckija vrne ime lastnika z id_st-jem id'''
sql = '''SELECT *
FROM oseba
WHERE id = ?'''
for pod in con.execute(sql,[id_st]):
return pod
def ime(id_st):
'''funckija vrne ime lastnika z id_st-jem id'''
sql = '''SELECT ime
FROM oseba
WHERE id = ?'''
for ime in con.execute(sql,[id_st]):
return ime[0]
def priimek(id_st):
'''funckija vrne priimek lastnika z id-jem id'''
sql = '''SELECT priimek
FROM oseba
WHERE id = ?'''
for priimek in con.execute(sql,[id_st]):
return priimek[0]
def geslo(id_st):
'''funckija vrne md5 geslo lastnika z id_st-jem id'''
sql = '''SELECT geslo
FROM oseba
WHERE id = ?'''
for geslo in con.execute(sql,[id_st]):
return geslo[0]
def id_st(mail):
'''funckija vrne id lastnika z mailom
za prijavo preko maila.'''
sql = '''SELECT id
FROM oseba
WHERE mail = ?'''
for id_s in con.execute(sql,[mail]):
return id_s[0]
def id_je_v_bazi(id):
'''Funkcija vrne True ali False glede na to, če id je v bazi'''
sql = '''SELECT id FROM oseba'''
sezID = []
for idVBazi in con.execute(sql):
sezID.append(idVBazi[0])
# pogledamo če id je v bazi
return id in set(sezID)
def poisci_osebo(ime, priimek):
''' funkcija poisce lastnike, ki imajo skupne podatke ime, priimek'''
sql =''' SELECT id, ime, priimek, mail, stanje FROM oseba WHERE ime LIKE ? AND priimek LIKE ? '''
sezOseb = []
for id, ime, priimek, mail, geslo in con.execute(sql, ['%'+ime+'%', '%'+priimek+'%']):
sezOseb.append([id, ime, priimek, mail, geslo])
return sezOseb
def seznam_valut():
sql = '''SELECT * FROM Valuta'''
sez = []
podatki = dobi_zneske.vrni_podatke()
for k, ime in con.execute(sql):
spletna = dobi_zneske.generiraj_spletno(ime.lower())
vrednost, evri, cas = podatki.get(ime.lower(),(0,0,0))
if (vrednost, cas) != (0, 0):
sez.append((k, ime, spletna, vrednost, evri, dobi_zneske.datum(cas)))
return sez
def ime_valute(id):
sql = '''SELECT ime FROM Valuta
WHERE id = (?)'''
for ime in con.execute(sql,[id]):
return ime[0]
def kupljene_valute(id):
sql = '''SELECT valuta, vrednost,
SUM(kolicina) as kolicina, max(Datum) as datum FROM lastnistvo_valut
WHERE (SELECT id FROM Oseba
WHERE lastnistvo_valut.lastnik = (?))
GROUP BY valuta'''
sez = []
for valuta, vrednost, kolicina, datum in con.execute(sql,[id]):
sez.append((valuta, ime_valute(valuta), vrednost, kolicina, datum))
return sez
def zasluzek(id):
sql='''SELECT Valuta,-SUM(kolicina* cena)
FROM Zgodovina WHERE (?) = Oseba
GROUP BY Oseba, Valuta'''
sez = [[],[]]
for valuta,vrednost in con.execute(sql,[id]):
if vrednost >= 0:
sez[0].append([valuta,round(vrednost,2)])
else:
sez[1].append([valuta,round(vrednost,2)])
return sez
def vrni_zgodovino(id):
'''[id, valuta, kolicina, cena, datum]'''
sez = []
sql='''SELECT * FROM Zgodovina WHERE
Zgodovina.Oseba = (?)'''
for el in con.execute(sql, [id]):
sez.append(el)
return sez
def izpis_lastnikov_valut():
sql = '''SELECT Oseba.ime, Oseba.priimek,Oseba.mail,valuta.ime,
lastnistvo_valut.kolicina, lastnistvo_valut.vrednost,lastnistvo_valut.Datum FROM Oseba
JOIN lastnistvo_valut ON Oseba.id = lastnistvo_valut.lastnik
JOIN Valuta on Valuta.id = lastnistvo_valut.valuta'''
return list(con.execute(sql))
def izpis_lastnikov_valute(valuta):
sql = '''SELECT Oseba.ime, Oseba.priimek,Oseba.mail,valuta.ime,
lastnistvo_valut.kolicina, lastnistvo_valut.vrednost,lastnistvo_valut.Datum FROM Oseba
JOIN lastnistvo_valut ON Oseba.id = lastnistvo_valut.lastnik
JOIN Valuta on Valuta.id = lastnistvo_valut.valuta
WHERE Valuta.id = (?)'''
return list(con.execute(sql,[valuta]))
def lozerji():
sql = '''SELECT id, ime, priimek, mail, -SUM(kolicina*cena) FROM Oseba
JOIN Zgodovina ON Oseba.id = Zgodovina.Oseba
GROUP BY mail
HAVING -SUM(kolicina*cena) < 0'''
return list(con.execute(sql))
def vrednost_valut():
'''vrne koliko imajo osebe vredne valute'''
sql = '''
SELECT id, ime, priimek, mail, SUM(kolicina*vrednost) FROM lastnistvo_valut
JOIN Oseba ON lastnistvo_valut.lastnik = Oseba.id
GROUP BY mail'''
return list(con.execute(sql))
###########################################################################
# #
# DODAJANJE V BAZO #
# #
###########################################################################
def dodaj_osebo(ime, priimek, mail, geslo):
'''funkcija doda novega lastnika in sicer osnovne podatke'''
sql = ''' INSERT INTO oseba (ime, priimek, mail, geslo)
VALUES (?,?,?,?)'''
con.execute(sql, [ime, priimek, mail, geslo])
con.commit()
def dodaj_v_zgodovino(lastnik, valuta, kolicina, cena, datum = datetime.datetime.now()):
sql = '''INSERT INTO Zgodovina (Oseba, Valuta, kolicina, cena)
VALUES (?,?,?,?)'''
con.execute(sql,[lastnik, valuta, kolicina, cena])
con.commit()
def kupi_valuto(lastnik, valuta, vrednost, kolicina, datum = datetime.datetime.now()):
sql = '''INSERT INTO lastnistvo_valut (lastnik, valuta, vrednost, kolicina)
VALUES (?,?,?,?)'''
dodaj_v_zgodovino(int(lastnik), valuta, float(kolicina), float(vrednost),datum)
con.execute(sql,[int(lastnik), valuta, float(vrednost), float(kolicina)])
con.commit()
def _dodaj_valute(naslov = 'https://bittrex.com/api/v1.1/public/getcurrencies'):
''' funkcija doda kriptovaluto v bazo'''
sql = '''INSERT INTO Valuta (id, ime)
VALUES (?,?)'''
napaka = None
try:
for kratica, ime, _ in dobi_zneske.imena_valut(naslov):
con.execute(sql,[kratica, ime])
except Exception as e:
napaka = e
finally:
con.commit()
return napaka
def dodaj_valute():
sql = '''DELETE FROM Valuta'''
if _dodaj_valute():
con.execute(sql)
con.commit()
_dodaj_valute()
return
def dodaj_nove_valute(naslov = 'https://bittrex.com/api/v1.1/public/getcurrencies'):
'''funkcija doda nove valute'''
sql = '''SELECT ime FROM valuta'''
sql_vstavi = '''INSERT INTO Valuta (id, ime)
VALUES (?,?)'''
mn = set()
for valuta, in con.execute(sql):
mn.add(valuta)
for kratica, ime, _ in dobi_zneske.imena_valut(naslov):
if ime not in mn:
con.execute(sql_vstavi,[kratica, ime])
con.commit()
return
###########################################################################
# #
# ODSTRANJEVANJE IZ BAZE #
# #
###########################################################################
def prodaj_valuto(lastnik, valuta, kolicina,cena,vse=False):
sql_1 = '''SELECT kolicina FROM lastnistvo_valut
WHERE (SELECT id FROM oseba WHERE (SELECT id FROM Valuta
WHERE (?) = lastnistvo_valut.lastnik AND (?) = lastnistvo_valut.valuta))'''
for kol in con.execute(sql_1,[lastnik, valuta]):
dodaj_v_zgodovino(lastnik,valuta,-float(kolicina),cena)
prodaj = max(kol[0]-float(kolicina),0)
if vse or prodaj==0:
sql = '''DELETE FROM lastnistvo_valut
WHERE (SELECT id FROM oseba WHERE (SELECT id FROM Valuta
WHERE (?) = lastnistvo_valut.lastnik AND (?) = lastnistvo_valut.valuta))'''
con.execute(sql,[int(lastnik), valuta])
else:
sql = '''UPDATE lastnistvo_valut
SET kolicina = (?), Datum = datetime('now')
WHERE (SELECT id FROM oseba WHERE (SELECT id FROM Valuta
WHERE (?) = lastnistvo_valut.lastnik AND (?) = lastnistvo_valut.valuta))'''
con.execute(sql,[prodaj, int(lastnik), valuta])
con.commit()
def zbrisi_zgodovino(lastnik):
sql = '''DELETE FROM Zgodovina
WHERE (?) = Oseba'''
con.execute(sql,[lastnik])
con.commit()
def zbrisi_zgodovino_valuta(id):
sql = '''DELETE FROM Zgodovina
WHERE (?) = Valuta'''
con.execute(sql,[id])
con.commit()
def _zbrisi_valuto(id):
sql = '''DELETE FROM Valuta
WHERE id = (?)'''
con.execute(sql,[id])
con.commit()
def _zbrisi_valute(id):
sql = '''DELETE FROM Valuta'''
con.execute(sql)
con.commit()
def zbrisi_valuto(id):
for _, _, mail, _, kolicina, cena, _ in izpis_lastnikov_valute(id):
id_s = id_st(mail)
prodaj_valuto(id_s,id,kolicina,cena,True)
zbrisi_zgodovino_valuta(id)
_zbrisi_valuto(id)
def zbrisi_valute():
for valuta,_,_,_,_,_ in seznam_valut():
zbrisi_valuto(valuta)
def zbrisi_vse_osebe():
for id,_,_,_,_ in podatki_vsi():
zapri_racun(id)
def _zbrisi_osebo(id_osebe):
''' funkcija odstrani osebo'''
sql = '''DELETE FROM oseba
WHERE oseba.id = (?)'''
con.execute(sql,[id_osebe])
con.commit()
def zapri_racun(id_osebe):
'''proda vse kriptovalute in zbriše osebo'''
sql = '''SELECT * FROM lastnistvo_valut
WHERE lastnik = (?)'''
for id_o, id_valute, vrednost, kolicina, _ in con.execute(sql,[id_osebe]):
prodaj_valuto(int(id_osebe), id_valute, kolicina,0.0,True)
zbrisi_zgodovino(int(id_osebe))
_zbrisi_osebo(id_osebe)
###########################################################################
# #
# POSODABLJANJE BAZE #
# #
###########################################################################
def spremeni_osebo(id, ime, priimek, mail, geslo):
sql = ''' UPDATE oseba
SET ime = (?), priimek = (?), mail = (?), geslo = (?)
WHERE id = (?)'''
con.execute(sql, [ime, priimek, mail, geslo, id])
con.commit()
###########################################################################
# #
# POMOŽNE FUNKCIJE #
# #
###########################################################################
def vsi_podatki(id_st):
sez = []
valute = seznam_valut()
lastnistvo = kupljene_valute(id_st)
for el in valute:
kratica,ime,stran,vrednost_t,evri,datum=el
for el in lastnistvo:
kra,ime1,vrednost,kolicina,datum1=el
if kratica == kra:
sez.append((kra, ime, vrednost, vrednost_t, kolicina, datum1))
return sez