This repository was archived by the owner on Apr 5, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdata.py
More file actions
72 lines (54 loc) · 1.87 KB
/
data.py
File metadata and controls
72 lines (54 loc) · 1.87 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
"""All database operations are abstracted here."""
import os, time
import sqlalchemy
from sqlalchemy.exc import IntegrityError
db_uri = os.environ['DATABASE_URL'] # must be set, e.g. 'postgres:///local'
db = None # open_db() must be called before anything else
def open_db():
global db
db = sqlalchemy.create_engine(db_uri)
def close_db():
global db
db.dispose()
db = None
def get_all_links():
return db.execute('select name, url, count from urls order by name')
def get_url(name):
row = db.execute('select url from urls where name = %s', name).first()
return row and row[0]
def update_link(name, new_name, new_url):
return db.execute('update urls set name = %s, url = %s '
'where name = %s', new_name, new_url, name).rowcount > 0
def add_link(name, url):
db.execute('insert into urls (name, url) values (%s, %s)', name, url)
def delete_link(name):
db.execute('delete from urls where name = %s', name)
def update_count(name):
(count,) = db.execute('select count(*) from events where '
'event = %s and name = %s', 'redirect', name).first()
db.execute('update urls set count = %s where name = %s', count, name)
def log(event, name, url):
db.execute('insert into events (time, event, name, url) '
'values (%s, %s, %s, %s)',
int(time.time()*1000), event, name, url)
def reset_app():
"""Not called by the app. Call this to set up a fresh database."""
open_db()
db.execute('''
drop table if exists urls;
create table urls (
name varchar(100) primary key,
url varchar(10000),
count bigint default 0
);
create index on urls (count);
create index on urls (url);
drop table if exists events;
create table events (
time bigint,
event varchar(100),
name varchar(100),
url varchar(10000)
);
create index on events (event, name);
''')