/
friends.py
166 lines (144 loc) · 5.43 KB
/
friends.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
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
from tornado import Server
from friendsconstants import *
from dbuser import User
import sqlite3
import os
import auth
from template_engine import template
DATANAME = os.path.join("data","friends.sqlite")
def _oneway_remove_friend(username, friend):
if username in FRIENDS:
friendslist = FRIENDS[username]
if friend in friendslist:
friendslist.remove(friend)
else:
friendslist = [friend]
FRIENDS[username] = friendslist
def _remove_friend_local(username, friend):
_oneway_remove_friend(friend, username)
_oneway_remove_friend(username, friend)
def remove_friend(username, friend_username):
_remove_friend_local(username, friend_username)
print username, friend_username
cur.execute("DELETE FROM friends WHERE friend = ? AND partner = ?;",(username, friend_username))
cur.execute("DELETE FROM friends WHERE friend = ? AND partner = ?;",(friend_username, username))
conn.commit()
print "After full remove complete: " , FRIENDS
def _oneway_add_friend(username, friend):
if username in FRIENDS:
friendslist = FRIENDS[username]
if friend not in friendslist:
friendslist.append(friend)
else:
friendslist = [friend]
FRIENDS[username] = friendslist
def _add_friend_local(username, friend):
_oneway_add_friend(friend, username)
_oneway_add_friend(username, friend)
def add_friend(username, friend_username):
if is_friend(username, friend_username):
return
_add_friend_local(username, friend_username)
cur.execute("INSERT INTO friends (friend, partner, status) VALUES (?, ?, 'f');",(username, friend_username))
conn.commit()
def get_friends(username):
friendlist = []
if username in FRIENDS:
for friend in FRIENDS[username]:
friendlist.append(User.get(friend))
return friendlist
def is_friend(username, friend):
if username not in FRIENDS:
return False
else:
if friend in FRIENDS[username]:
return True
else:
return False
def add_friend_handler(response, friend_username):
raise Exception('Error!')
def add_friend_email(response):
auth.require_user(response)
user = auth.get_user(response)
if user == None:
return
friend = User.get_from_email(response.get_field("email"))
if friend == None:
pass
else:
add_friend(user.get_username(), friend.get_username())
context = {'user':user, 'friend':friend}
template.render_template('templates/addconfirmation.html', context, response)
def add_friend_user(response):
auth.require_user(response)
user = auth.get_user(response)
if user == None:
return
friend = User.get(response.get_field("user"))
if friend == None:
pass
else:
add_friend(user.get_username(), friend.get_username())
context = {'user':user, 'friend':friend}
template.render_template('templates/addconfirmation.html', context, response)
def remove_friend_handler(response, friend_username):
auth.require_user(response)
user = auth.get_user(response)
if user == None:
return
username = user.get_username()
print '\n\n',username, friend_username, '\n\n'
friend = User.get(friend_username)
remove_friend(username, friend_username)
context = {'user':user, 'friend':friend}
template.render_template('templates/confirmation.html', context, response)
def my_friends(response):
auth.require_user(response)
user = auth.get_user(response)
if user == None:
return
friends = get_friends(user.get_username())
context = {'user':user, 'friends':friends}
template.render_template('templates/friend_list_template.html', context, response)
def show_all_friends(response):
currentusername = response.get_field('user')
html = ""
for i in FRIENDS.keys():
html += "<a href='/friends/%s?user=%s'>%s</a><br />" % (i,currentuser,i)
response.write(ALLFRIENDS % html)
def can_use_wall(user,userorsubject):
#user = User object
#userorsubject = string or int
if user.is_in_subject(userorsubject):
return True
elif is_friend(user.get_username(),userorsubject):
return True
elif user.get_username() == userorsubject:
return True
else:
return False
conn = sqlite3.connect(DATANAME)
cur = conn.cursor()
cur.execute("""
CREATE TABLE IF NOT EXISTS "friends" ("friend" TEXT NOT NULL , "partner" TEXT NOT NULL ,
"status" TEXT NOT NULL , "date" DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY ("friend", "partner"));
""")
FRIENDS ={}
cur.execute("""
SELECT friend, partner
FROM friends
WHERE status ='f';
""")
print "loading data"
for row in cur:
_add_friend_local(str(row[0]), str(row[1]))
add_friend('gman', 'svet')
add_friend('gman', 'smythey')
print "loading sample data"
if __name__ == "__main__":
print "before add\n", FRIENDS
add_friend('gman', 'svet')
print "after add\n", FRIENDS
remove_friend('gman', 'svet')
print "after delete\n", FRIENDS