1
+ """
2
+ Notes/todo list
3
+ """
1
4
from datetime import datetime
2
5
3
- import sqlalchemy
4
6
from sqlalchemy import (
5
7
Boolean ,
6
8
Column ,
9
11
PrimaryKeyConstraint ,
10
12
String ,
11
13
Table ,
14
+ and_ ,
15
+ func ,
12
16
not_ ,
13
17
)
14
18
from sqlalchemy .sql import select
30
34
)
31
35
32
36
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
+
33
45
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 )
49
54
return db .execute (query ).fetchall ()
50
55
51
56
52
57
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
+
59
60
db .execute (query )
60
61
db .commit ()
61
62
62
63
63
64
def read_note (db , server , user , note_id ):
64
65
query = (
65
66
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 ))
68
68
.where (table .c .note_id == note_id )
69
69
)
70
70
return db .execute (query ).fetchone ()
@@ -73,8 +73,7 @@ def read_note(db, server, user, note_id):
73
73
def delete_note (db , server , user , note_id ):
74
74
query = (
75
75
table .update ()
76
- .where (table .c .connection == server )
77
- .where (table .c .user == user .lower ())
76
+ .where (where_user (server , user ))
78
77
.where (table .c .note_id == note_id )
79
78
.values (deleted = True )
80
79
)
@@ -83,9 +82,9 @@ def delete_note(db, server, user, note_id):
83
82
84
83
85
84
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
+ )
89
88
max_id = db .execute (id_query ).scalar ()
90
89
91
90
if max_id is None :
@@ -117,32 +116,32 @@ def format_note(data):
117
116
118
117
119
118
@hook .command ("note" , "notes" , "todo" )
120
- def note (text , conn , nick , db , event ):
119
+ def note (text , db , event ):
121
120
"""<add|list|get|del|clear> args - manipulates your list of notes"""
122
121
notice = event .notice
123
122
args , cmd = parse_args (text )
124
123
125
124
if cmd in ["add" , "new" ]:
126
- return cmd_add (args , conn , db , nick , notice )
125
+ return cmd_add (args , db , event )
127
126
128
127
if cmd in ["del" , "delete" , "remove" ]:
129
- return cmd_del (args , conn , db , nick , notice )
128
+ return cmd_del (args , db , event )
130
129
131
130
if cmd == "clear" :
132
- cmd_clear (conn , db , nick , notice )
131
+ cmd_clear (db , event )
133
132
return None
134
133
135
134
if cmd == "get" :
136
- return cmd_get (args , conn , db , nick , notice )
135
+ return cmd_get (args , db , event )
137
136
138
137
if cmd in ["share" , "show" ]:
139
- return cmd_show (args , conn , db , nick , notice )
138
+ return cmd_show (args , db , event )
140
139
141
140
if cmd == "list" :
142
- return cmd_list (conn , db , nick , notice )
141
+ return cmd_list (db , event )
143
142
144
143
if cmd == "listall" :
145
- return cmd_listall (conn , db , nick , notice )
144
+ return cmd_listall (db , event )
146
145
147
146
notice ("Unknown command: {}" .format (cmd ))
148
147
return None
@@ -159,100 +158,94 @@ def parse_args(text):
159
158
return args , cmd
160
159
161
160
162
- def cmd_clear (conn , db , nick , notice ):
161
+ def cmd_clear (db , event ):
163
162
# 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!" )
166
165
167
166
168
- def cmd_listall (conn , db , nick , notice ):
167
+ def cmd_listall (db , event ):
169
168
# 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 )
171
170
if not notes :
172
- notice ("You have no notes." )
171
+ event . notice ("You have no notes." )
173
172
return None
174
173
175
- notice ("All notes for {}:" .format (nick ))
174
+ event . notice ("All notes for {}:" .format (event . nick ))
176
175
for n in notes :
177
176
# show the note
178
177
text = format_note (n )
179
- notice (text )
178
+ event . notice (text )
180
179
181
180
return None
182
181
183
182
184
- def cmd_list (conn , db , nick , notice ):
183
+ def cmd_list (db , event ):
185
184
# 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 )
187
186
if not notes :
188
- notice ("You have no notes." )
187
+ event . notice ("You have no notes." )
189
188
return None
190
189
191
- notice ("All notes for {}:" .format (nick ))
190
+ event . notice ("All notes for {}:" .format (event . nick ))
192
191
for n in notes :
193
192
# show the note
194
193
text = format_note (n )
195
- notice (text )
194
+ event . notice (text )
196
195
197
196
return None
198
197
199
198
200
- def cmd_show (args , conn , db , nick , notice ):
199
+ def cmd_show (args , db , event ):
201
200
# user is sharing a single note
202
201
if not args :
203
- return "No note ID provided!"
202
+ event .notice ("No note ID provided!" )
203
+ return None
204
+
204
205
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 )
206
207
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 ))
208
209
return None
209
210
210
211
# show the note
211
212
text = format_note (n )
212
213
return text
213
214
214
215
215
- def cmd_get (args , conn , db , nick , notice ):
216
+ def cmd_get (args , db , event ):
216
217
# 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
-
225
218
# 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 )
229
222
230
223
231
- def cmd_del (args , conn , db , nick , notice ):
224
+ def cmd_del (args , db , event ):
232
225
# user is deleting a note
233
226
if not args :
234
227
return "No note ID provided!"
235
228
236
229
# but lets get the note first
237
230
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 )
239
232
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 ))
241
234
return None
242
235
243
236
# 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 ))
246
239
return None
247
240
248
241
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"""
251
244
if not args :
252
245
return "No text provided!"
253
246
254
247
note_text = " " .join (args )
255
248
# 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!" )
258
251
return None
0 commit comments