Skip to content

Commit 14ff806

Browse files
authored
Merge pull request #411 from TotallyNotRobots/notes-cleanup
Clean up notes plugin
2 parents 6a4b5cf + dacae04 commit 14ff806

File tree

2 files changed

+109
-150
lines changed

2 files changed

+109
-150
lines changed

plugins/notes.py

Lines changed: 68 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
"""
2+
Notes/todo list
3+
"""
14
from datetime import datetime
25

3-
import sqlalchemy
46
from sqlalchemy import (
57
Boolean,
68
Column,
@@ -9,6 +11,8 @@
911
PrimaryKeyConstraint,
1012
String,
1113
Table,
14+
and_,
15+
func,
1216
not_,
1317
)
1418
from sqlalchemy.sql import select
@@ -30,41 +34,37 @@
3034
)
3135

3236

37+
def where_user(server, user):
38+
"""Generate a whereclause to match a user"""
39+
return and_(
40+
table.c.connection == server.lower(),
41+
table.c.user == user.lower(),
42+
)
43+
44+
3345
def read_all_notes(db, server, user, show_deleted=False):
34-
if show_deleted:
35-
query = (
36-
select([table.c.note_id, table.c.text, table.c.added])
37-
.where(table.c.connection == server)
38-
.where(table.c.user == user.lower())
39-
.order_by(table.c.added)
40-
)
41-
else:
42-
query = (
43-
select([table.c.note_id, table.c.text, table.c.added])
44-
.where(table.c.connection == server)
45-
.where(table.c.user == user.lower())
46-
.where(not_(table.c.deleted))
47-
.order_by(table.c.added)
48-
)
46+
query = select([table.c.note_id, table.c.text, table.c.added]).where(
47+
where_user(server, user)
48+
)
49+
50+
if not show_deleted:
51+
query = query.where(not_(table.c.deleted))
52+
53+
query = query.order_by(table.c.added)
4954
return db.execute(query).fetchall()
5055

5156

5257
def delete_all_notes(db, server, user):
53-
query = (
54-
table.update()
55-
.where(table.c.connection == server)
56-
.where(table.c.user == user.lower())
57-
.values(deleted=True)
58-
)
58+
query = table.update().where(where_user(server, user)).values(deleted=True)
59+
5960
db.execute(query)
6061
db.commit()
6162

6263

6364
def read_note(db, server, user, note_id):
6465
query = (
6566
select([table.c.note_id, table.c.text, table.c.added])
66-
.where(table.c.connection == server)
67-
.where(table.c.user == user.lower())
67+
.where(where_user(server, user))
6868
.where(table.c.note_id == note_id)
6969
)
7070
return db.execute(query).fetchone()
@@ -73,8 +73,7 @@ def read_note(db, server, user, note_id):
7373
def delete_note(db, server, user, note_id):
7474
query = (
7575
table.update()
76-
.where(table.c.connection == server)
77-
.where(table.c.user == user.lower())
76+
.where(where_user(server, user))
7877
.where(table.c.note_id == note_id)
7978
.values(deleted=True)
8079
)
@@ -83,9 +82,9 @@ def delete_note(db, server, user, note_id):
8382

8483

8584
def add_note(db, server, user, text):
86-
id_query = select(
87-
[sqlalchemy.sql.expression.func.max(table.c.note_id).label("maxid")]
88-
).where(table.c.user == user.lower())
85+
id_query = select([func.max(table.c.note_id).label("maxid")]).where(
86+
where_user(server, user)
87+
)
8988
max_id = db.execute(id_query).scalar()
9089

9190
if max_id is None:
@@ -117,32 +116,32 @@ def format_note(data):
117116

118117

119118
@hook.command("note", "notes", "todo")
120-
def note(text, conn, nick, db, event):
119+
def note(text, db, event):
121120
"""<add|list|get|del|clear> args - manipulates your list of notes"""
122121
notice = event.notice
123122
args, cmd = parse_args(text)
124123

125124
if cmd in ["add", "new"]:
126-
return cmd_add(args, conn, db, nick, notice)
125+
return cmd_add(args, db, event)
127126

128127
if cmd in ["del", "delete", "remove"]:
129-
return cmd_del(args, conn, db, nick, notice)
128+
return cmd_del(args, db, event)
130129

131130
if cmd == "clear":
132-
cmd_clear(conn, db, nick, notice)
131+
cmd_clear(db, event)
133132
return None
134133

135134
if cmd == "get":
136-
return cmd_get(args, conn, db, nick, notice)
135+
return cmd_get(args, db, event)
137136

138137
if cmd in ["share", "show"]:
139-
return cmd_show(args, conn, db, nick, notice)
138+
return cmd_show(args, db, event)
140139

141140
if cmd == "list":
142-
return cmd_list(conn, db, nick, notice)
141+
return cmd_list(db, event)
143142

144143
if cmd == "listall":
145-
return cmd_listall(conn, db, nick, notice)
144+
return cmd_listall(db, event)
146145

147146
notice("Unknown command: {}".format(cmd))
148147
return None
@@ -159,100 +158,94 @@ def parse_args(text):
159158
return args, cmd
160159

161160

162-
def cmd_clear(conn, db, nick, notice):
161+
def cmd_clear(db, event):
163162
# user is deleting all notes
164-
delete_all_notes(db, conn.name, nick)
165-
notice("All notes deleted!")
163+
delete_all_notes(db, event.conn.name, event.nick)
164+
event.notice("All notes deleted!")
166165

167166

168-
def cmd_listall(conn, db, nick, notice):
167+
def cmd_listall(db, event):
169168
# user is getting all notes including deleted ones
170-
notes = read_all_notes(db, conn.name, nick, show_deleted=True)
169+
notes = read_all_notes(db, event.conn.name, event.nick, show_deleted=True)
171170
if not notes:
172-
notice("You have no notes.")
171+
event.notice("You have no notes.")
173172
return None
174173

175-
notice("All notes for {}:".format(nick))
174+
event.notice("All notes for {}:".format(event.nick))
176175
for n in notes:
177176
# show the note
178177
text = format_note(n)
179-
notice(text)
178+
event.notice(text)
180179

181180
return None
182181

183182

184-
def cmd_list(conn, db, nick, notice):
183+
def cmd_list(db, event):
185184
# user is getting all notes
186-
notes = read_all_notes(db, conn.name, nick)
185+
notes = read_all_notes(db, event.conn.name, event.nick)
187186
if not notes:
188-
notice("You have no notes.")
187+
event.notice("You have no notes.")
189188
return None
190189

191-
notice("All notes for {}:".format(nick))
190+
event.notice("All notes for {}:".format(event.nick))
192191
for n in notes:
193192
# show the note
194193
text = format_note(n)
195-
notice(text)
194+
event.notice(text)
196195

197196
return None
198197

199198

200-
def cmd_show(args, conn, db, nick, notice):
199+
def cmd_show(args, db, event):
201200
# user is sharing a single note
202201
if not args:
203-
return "No note ID provided!"
202+
event.notice("No note ID provided!")
203+
return None
204+
204205
note_id = args[0]
205-
n = read_note(db, conn.name, nick, note_id)
206+
n = read_note(db, event.conn.name, event.nick, note_id)
206207
if not n:
207-
notice("{} is not a valid note ID.".format(note_id))
208+
event.notice("{} is not a valid note ID.".format(note_id))
208209
return None
209210

210211
# show the note
211212
text = format_note(n)
212213
return text
213214

214215

215-
def cmd_get(args, conn, db, nick, notice):
216+
def cmd_get(args, db, event):
216217
# user is getting a single note
217-
if not args:
218-
return "No note ID provided!"
219-
note_id = args[0]
220-
n = read_note(db, conn.name, nick, note_id)
221-
if not n:
222-
notice("{} is not a valid note ID.".format(note_id))
223-
return None
224-
225218
# show the note
226-
text = format_note(n)
227-
notice(text)
228-
return None
219+
text = cmd_show(args, db, event)
220+
if text is not None:
221+
event.notice(text)
229222

230223

231-
def cmd_del(args, conn, db, nick, notice):
224+
def cmd_del(args, db, event):
232225
# user is deleting a note
233226
if not args:
234227
return "No note ID provided!"
235228

236229
# but lets get the note first
237230
note_id = args[0]
238-
n = read_note(db, conn.name, nick, note_id)
231+
n = read_note(db, event.conn.name, event.nick, note_id)
239232
if not n:
240-
notice("#{} is not a valid note ID.".format(note_id))
233+
event.notice("#{} is not a valid note ID.".format(note_id))
241234
return None
242235

243236
# now we delete it
244-
delete_note(db, conn.name, nick, note_id)
245-
notice("Note #{} deleted!".format(note_id))
237+
delete_note(db, event.conn.name, event.nick, note_id)
238+
event.notice("Note #{} deleted!".format(note_id))
246239
return None
247240

248241

249-
def cmd_add(args, conn, db, nick, notice):
250-
# user is adding a note
242+
def cmd_add(args, db, event):
243+
"""user is adding a note"""
251244
if not args:
252245
return "No text provided!"
253246

254247
note_text = " ".join(args)
255248
# add note to database
256-
add_note(db, conn.name, nick, note_text)
257-
notice("Note added!")
249+
add_note(db, event.conn.name, event.nick, note_text)
250+
event.notice("Note added!")
258251
return None

0 commit comments

Comments
 (0)