-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathmain.py
127 lines (114 loc) · 4.26 KB
/
main.py
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
import os
def send_messages(request):
if request.method == 'GET':
return "<script>window.location.href='https://github.com/LittleTalksOrg/little-talks-server'</script>"
else:
if request.form['msg']!='':
insert_msg(request)
return get_msgs(request)
def insert_msg(request):
conn = get_db_conn()
cursor = conn.cursor()
try:
cursor.execute(get_insert_msg_query().format(os.environ['MSG_TABLE'], request.form['nickname'],request.form['msg'],request.form['lat'],request.form['lng'],request.remote_addr))
conn.commit()
conn.close()
except:
create_database()
insert_msg(request)
conn.close()
def get_msgs(request):
LOCATION_PRECISION = 0.005
WHITE = '\033[1;0m'
LIGHT_WHITE = '\033[1;2m'
GREEN = '\033[1;32m'
DARKGREEN = '\033[1;31m'
conn = get_db_conn()
cursor = conn.cursor()
try:
min_lat = float(request.form['lat'])-LOCATION_PRECISION
max_lat = float(request.form['lat'])+LOCATION_PRECISION
min_lng = float(request.form['lng'])-LOCATION_PRECISION
max_lng = float(request.form['lng'])+LOCATION_PRECISION
except:
return "invalid latitude '{}' or longitud '{}'".format(request.form['lat'],request.form['lng'])
try:
query = """
SELECT *
FROM {}
WHERE
lat >= {}
AND lat <= {}
AND lng >= {}
AND lng <= {}
ORDER BY id DESC
LIMIT 25
""".format(os.environ['MSG_TABLE'], min_lat,max_lat,min_lng,max_lng)
cursor.execute(query)
except:
conn.close()
create_database()
return get_msgs(request)
returnString = ""
test = cursor.fetchall()
for linha in test:
returnString = DARKGREEN + "(" + str(linha[5]) + ") " + linha[1] + " said: #" + str(linha[0]) + " " + GREEN + linha[2] + WHITE +"\n" + returnString
conn.close()
return LIGHT_WHITE+"You are at "+request.form['lat']+","+request.form['lng']+" as "+request.form['nickname']+"\n"+WHITE+returnString
def get_db_conn():
if os.environ['DB'] =='psql':
import psycopg2
PS_DATABASE = os.environ['PS_DATABASE']
PS_USER = os.environ['PS_USER']
PS_PASSWORD = os.environ['PS_PASSWORD']
PS_HOST = os.environ['PS_HOST']
PS_PORT = os.environ['PS_PORT']
return psycopg2.connect(database = PS_DATABASE, user = PS_USER, password = PS_PASSWORD, host = PS_HOST, port = PS_PORT)
else:
import sqlite3
return sqlite3.connect('msgs.db')
def create_database():
conn = get_db_conn()
cursor = conn.cursor()
# criando a tabela (schema)
cursor.execute(get_create_table_msg_query())
conn.commit()
conn.close()
print('Tabela criada com sucesso.')
return 'ok'
def get_insert_msg_query():
if os.environ['DB'] =='psql':
return """
INSERT INTO {} (nickname, msg, lat, lng, ip_address, created_at)
VALUES ('{}', '{}', {}, {}, '{}', NOW())
"""
else: #sqlite
return """
INSERT INTO {} (nickname, msg, lat, lng, ip_address, created_at)
VALUES ('{}', '{}', {}, {}, '{}', strftime('%Y-%m-%d %H-%M-%S','now'))
"""
def get_create_table_msg_query():
if os.environ['DB'] =='psql':
return """
CREATE TABLE IF NOT EXISTS {} (
id SERIAL,
nickname TEXT NOT NULL,
msg TEXT NOT NULL,
lat REAL NULL,
lng REAL NULL,
created_at TIMESTAMP NULL,
ip_address TEXT NULL
);
""".format(os.environ['MSG_TABLE'])
else: #sqlite
return """
CREATE TABLE IF NOT EXISTS {} (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
nickname TEXT NOT NULL,
msg TEXT NOT NULL,
lat REAL NULL,
lng REAL NULL,
created_at DATETIME NULL,
ip_address TEXT NULL
);
""".format(os.environ['MSG_TABLE'])