@@ -60,9 +60,14 @@ def db_conn():
60
60
user_permalink_table = config .get (
61
61
'user_permalink_table' , qwc_config_schema + '.user_permalinks' )
62
62
user_bookmark_table = config .get ('user_bookmark_table' , qwc_config_schema + '.user_bookmarks' )
63
+ store_bookmarks_by_userid = config .get ('store_bookmarks_by_userid' , True )
64
+ if store_bookmarks_by_userid :
65
+ users_table = f'"{ qwc_config_schema } "."users"'
66
+ else :
67
+ users_table = None
63
68
64
69
db = db_engine .db_engine (db_url )
65
- return (db , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table )
70
+ return (db , users_table , permalinks_table , user_permalink_table , user_bookmark_table )
66
71
67
72
68
73
@api .route ('/createpermalink' )
@@ -99,7 +104,7 @@ def post(self):
99
104
}
100
105
101
106
# Insert into databse
102
- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
107
+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
103
108
datastr = json .dumps (data )
104
109
hexdigest = hashlib .sha224 ((datastr + str (time .time ())).encode ('utf-8' )).hexdigest ()[0 :9 ]
105
110
date = datetime .date .today ().strftime (r"%Y-%m-%d" )
@@ -153,7 +158,7 @@ def get(self):
153
158
args = resolvepermalink_parser .parse_args ()
154
159
key = args ['key' ]
155
160
data = {}
156
- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
161
+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
157
162
sql = sql_text ("""
158
163
SELECT data
159
164
FROM {table}
@@ -176,7 +181,7 @@ def get(self):
176
181
if not username :
177
182
return jsonify ({})
178
183
179
- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
184
+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
180
185
sql = sql_text ("""
181
186
SELECT data
182
187
FROM {table}
@@ -218,7 +223,7 @@ def post(self):
218
223
}
219
224
220
225
# Insert into databse
221
- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
226
+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
222
227
datastr = json .dumps (data )
223
228
date = datetime .date .today ().strftime (r"%Y-%m-%d" )
224
229
sql = sql_text ("""
@@ -248,16 +253,23 @@ def get(self):
248
253
config = config_handler .tenant_config (tenant )
249
254
sort_order = config .get ('bookmarks_sort_order' , 'date, description' )
250
255
251
- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
252
- sql = sql_text ("""
253
- WITH "user" AS (
254
- SELECT id FROM "{schema}"."users" WHERE name=:username
255
- )
256
- SELECT data, key, description, to_char(date, 'YYYY-MM-DD') as date
257
- FROM {table}
258
- WHERE user_id = (SELECT id FROM "user")
259
- ORDER BY {sort_order}
260
- """ .format (schema = qwc_config_schema , table = user_bookmark_table , sort_order = sort_order ))
256
+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
257
+ if users_table :
258
+ sql = sql_text ("""
259
+ WITH "user" AS (
260
+ SELECT id FROM {users_table} WHERE name=:username
261
+ )
262
+ SELECT data, key, description, to_char(date, 'YYYY-MM-DD') as date
263
+ FROM {table}
264
+ WHERE user_id = (SELECT id FROM "user")
265
+ ORDER BY {sort_order}
266
+ """ .format (users_table = users_table , table = user_bookmark_table , sort_order = sort_order ))
267
+ else :
268
+ sql = sql_text ("""
269
+ SELECT data, key, description, to_char(date, 'YYYY-MM-DD') as date
270
+ FROM {table}
271
+ WHERE username = :user ORDER BY {sort_order}
272
+ """ .format (table = user_bookmark_table , sort_order = sort_order ))
261
273
try :
262
274
data = []
263
275
with db_engine .connect () as connection :
@@ -303,19 +315,29 @@ def post(self):
303
315
}
304
316
305
317
# Insert into database
306
- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
318
+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
307
319
datastr = json .dumps (data )
308
320
hexdigest = hashlib .sha224 ((datastr + str (time .time ())).encode ('utf-8' )).hexdigest ()[0 :9 ]
309
321
date = datetime .date .today ().strftime (r"%Y-%m-%d" )
310
322
311
323
description = args ['description' ]
312
- sql = sql_text ("""
313
- WITH "user" AS (
314
- SELECT id FROM "{schema}"."users" WHERE name=:username
315
- )
316
- INSERT INTO {table} (user_id, username, data, key, date, description)
317
- VALUES ((SELECT id FROM "user"), :username, :data, :key, :date, :description)
318
- """ .format (schema = qwc_config_schema , table = user_bookmark_table ))
324
+ if users_table :
325
+ sql = sql_text ("""
326
+ WITH "user" AS (
327
+ SELECT id FROM {users_table} WHERE name=:username
328
+ )
329
+ INSERT INTO {table} (user_id, username, data, key, date, description)
330
+ VALUES ((SELECT id FROM "user"), :username, :data, :key, :date, :description)
331
+ """ .format (users_table = users_table , table = user_bookmark_table ))
332
+ else :
333
+ sql = sql_text ("""
334
+ INSERT INTO {table} (username, data, key, date, description)
335
+ VALUES (:user, :data, :key, :date, :description)
336
+ ON CONFLICT (username,key) WHERE username = :user
337
+ DO
338
+ UPDATE
339
+ SET data = :data, date = :date, description = :description
340
+ """ .format (table = user_bookmark_table ))
319
341
320
342
attempts = 0
321
343
while attempts < 100 :
@@ -339,15 +361,22 @@ def get(self, key):
339
361
if not username :
340
362
return jsonify ({"success" : False })
341
363
342
- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
343
- sql = sql_text ("""
344
- WITH "user" AS (
345
- SELECT id FROM "{schema}"."users" WHERE name=:username
346
- )
347
- SELECT data
348
- FROM {table}
349
- WHERE user_id = (SELECT id FROM "user") AND key = :key
350
- """ .format (schema = qwc_config_schema , table = user_bookmark_table ))
364
+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
365
+ if users_table :
366
+ sql = sql_text ("""
367
+ WITH "user" AS (
368
+ SELECT id FROM {users_table} WHERE name=:username
369
+ )
370
+ SELECT data
371
+ FROM {table}
372
+ WHERE user_id = (SELECT id FROM "user") AND key = :key
373
+ """ .format (users_table = users_table , table = user_bookmark_table ))
374
+ else :
375
+ sql = sql_text ("""
376
+ SELECT data
377
+ FROM {table}
378
+ WHERE username = :user and key = :key
379
+ """ .format (table = user_bookmark_table ))
351
380
try :
352
381
with db_engine .connect () as connection :
353
382
data = json .loads (connection .execute (sql , {"username" : username , "key" : key }).mappings ().first ()["data" ])
@@ -364,14 +393,20 @@ def delete(self, key):
364
393
return jsonify ({"success" : False })
365
394
366
395
# Delete into databse
367
- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
368
- sql = sql_text ("""
369
- WITH "user" AS (
370
- SELECT id FROM "{schema}"."users" WHERE name=:username
371
- )
372
- DELETE FROM {table}
373
- WHERE key = :key and user_id = (SELECT id FROM "user")
374
- """ .format (schema = qwc_config_schema , table = user_bookmark_table ))
396
+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
397
+ if users_table :
398
+ sql = sql_text ("""
399
+ WITH "user" AS (
400
+ SELECT id FROM {users_table} WHERE name=:username
401
+ )
402
+ DELETE FROM {table}
403
+ WHERE key = :key and user_id = (SELECT id FROM "user")
404
+ """ .format (users_table = users_table , table = user_bookmark_table ))
405
+ else :
406
+ sql = sql_text ("""
407
+ DELETE FROM {table}
408
+ WHERE key = :key and username = :username
409
+ """ .format (table = user_bookmark_table ))
375
410
376
411
with db_engine .begin () as connection :
377
412
connection .execute (sql , {"key" : key , "username" : username })
@@ -408,19 +443,26 @@ def put(self, key):
408
443
}
409
444
410
445
# Update into databse
411
- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
446
+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
412
447
datastr = json .dumps (data )
413
448
date = datetime .date .today ().strftime (r"%Y-%m-%d" )
414
449
415
450
description = args ['description' ]
416
- sql = sql_text ("""
417
- WITH "user" AS (
418
- SELECT id FROM "{schema}"."users" WHERE name=:username
419
- )
420
- UPDATE {table}
421
- SET username = :username, data = :data, date = :date, description = :description
422
- WHERE user_id = (SELECT id FROM "user") and key = :key
423
- """ .format (schema = qwc_config_schema , table = user_bookmark_table ))
451
+ if users_table :
452
+ sql = sql_text ("""
453
+ WITH "user" AS (
454
+ SELECT id FROM {users_table} WHERE name=:username
455
+ )
456
+ UPDATE {table}
457
+ SET username = :username, data = :data, date = :date, description = :description
458
+ WHERE user_id = (SELECT id FROM "user") and key = :key
459
+ """ .format (users_table = users_table , table = user_bookmark_table ))
460
+ else :
461
+ sql = sql_text ("""
462
+ UPDATE {table}
463
+ SET data = :data, date = :date, description = :description
464
+ WHERE username = :user and key = :key
465
+ """ .format (table = user_bookmark_table ))
424
466
425
467
with db_engine .begin () as connection :
426
468
connection .execute (sql , {"username" : username , "data" : datastr , "key" : key , "date" : date , "description" : description })
@@ -437,7 +479,7 @@ def ready():
437
479
@app .route ("/healthz" , methods = ['GET' ])
438
480
def healthz ():
439
481
try :
440
- db_engine , qwc_config_schema , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
482
+ db_engine , users_table , permalinks_table , user_permalink_table , user_bookmark_table = db_conn ()
441
483
with db_engine .connect () as connection :
442
484
connection .execute (sql_text ("SELECT 1" ))
443
485
except Exception as e :
0 commit comments