lib/my_db.py
author fabien
Sat, 27 Sep 2003 01:44:43 -0400
branchxbelweb
changeset 25 777bcb36f7be
parent 23 69c1f93892dd
child 26 17b0cd274530
permissions -rw-r--r--
[svn r1559] Unicode work around.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
a4c49a0c313b [svn r1527] Premi�re version.
fabien
parents:
diff changeset
     1
#!/usr/bin/python
a4c49a0c313b [svn r1527] Premi�re version.
fabien
parents:
diff changeset
     2
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
     3
import pgdb
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
     4
import config
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
     5
from bkmark import Bookmark
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
     6
import os
0
a4c49a0c313b [svn r1527] Premi�re version.
fabien
parents:
diff changeset
     7
12
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
     8
def sql_quote(str):
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
     9
	return pgdb._quote(str)
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
    10
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    11
class MyDbConnexion:
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    12
	def __init__(self, name):
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    13
		self.cnx = pgdb.connect(database = config.database,
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    14
			host = config.host+':%d'%config.port,
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    15
			user = config.user, password = config.passwd)
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    16
		self.crs = self.cnx.cursor();
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    17
		self.userid = self.get_user_id(name)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    18
		if self.userid == None:
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    19
			self.userid = self.create_user(name)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    20
		else:
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    21
			self.userid = self.userid[0]
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    22
	def get_user_id(self, name):
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    23
		self.crs.execute("""
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    24
			SELECT id FROM users
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    25
			WHERE name = %s;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    26
			""" % (sql_quote(name),))
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    27
		return self.crs.fetchone()
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    28
	def create_user(self, name):
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    29
		id = self.get_next_id('users')
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    30
		self.crs.execute("""
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    31
			INSERT INTO users(id, name)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    32
			VALUES (%d, %s);
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    33
			""" % (id, sql_quote(name)))
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    34
		self.crs.execute("""
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    35
			INSERT INTO keywords(id, userid, name)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    36
			VALUES (0, %d, '--');
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    37
			""" %(id,))
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    38
		self.crs.execute("""
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    39
			INSERT INTO db_sequence(seq_name, userid, nextid)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    40
			VALUES ('keywords', %d, 1);
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    41
			""" %(id,))
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    42
		self.crs.execute("""
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    43
			INSERT INTO db_sequence(seq_name, userid, nextid)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    44
			VALUES ('bookmarks', %d, 0);
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    45
			""" %(id,))
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    46
		self.cnx.commit()
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    47
		return id
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    48
	def delete_user(self, userid):
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    49
		self.crs_execute("""
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    50
			DELETE FROM users WHERE id = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    51
			DELETE FROM bookmarks_keywords WHERE userid = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    52
			DELETE FROM bookmarks WHERE userid = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    53
			DELETE FROM keywords WHERE userid = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    54
			DELETE FROM db_sequence WHERE userid = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    55
			""" % (userid,userid,userid,userid,userid))
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    56
	def add_bookmark(self, bk):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    57
		id = self.get_next_id('bookmarks')
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    58
		self.crs.execute("""
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    59
			INSERT INTO bookmarks(id, userid, url, name, ldesc, added)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    60
			VALUES (%d, %d, %s, %s, %s, %s);
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    61
			INSERT INTO bookmarks_keywords(bookmark, keyword, userid)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    62
			VALUES (%d, 0, %d);
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    63
			""" % (id, self.userid, sql_quote(bk.url),
12
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
    64
			sql_quote(bk.name), sql_quote(bk.desc),
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    65
			sql_quote(bk.added),
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    66
			id, self.userid))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    67
		self.cnx.commit()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    68
		return id
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    69
	def get_bookmarks(self, ids):
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    70
		qry = """
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    71
			SELECT id, url, name, ldesc, added
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    72
			FROM bookmarks
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    73
			WHERE userid = %d AND (id = %d
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    74
			""" % (self.userid, ids.pop(),)
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    75
		for id in ids:
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    76
			qry = qry + " OR id = %d" % (id,)
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    77
		qry = qry + ");"
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    78
		self.crs.execute(qry)
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    79
		bks = []
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    80
		list = self.crs.fetchall()
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    81
		for res in list:
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    82
			bk = Bookmark()
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    83
			bk.id = res[0]
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    84
			bk.url = res[1]
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    85
			bk.name = res[2]
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    86
			bk.desc = res[3]
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    87
			bk.added = res[4]
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    88
			bks.append(bk)
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    89
		return bks
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    90
	def update_bookmark(self, bk):
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    91
		self.crs.execute("""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
    92
			UPDATE bookmarks
12
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
    93
			SET url = %s, name = %s,
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
    94
			ldesc = %s, added = %s
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    95
			WHERE userid = %d AND id = %d;
15
574631f841c3 [svn r1549] Add update/merge/delete keywords.
fabien
parents: 13
diff changeset
    96
			""" % (sql_quote(bk.url), sql_quote(bk.name),
12
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
    97
			sql_quote(bk.desc),
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    98
			sql_quote(bk.added), self.userid, bk.id))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    99
		self.cnx.commit()
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   100
	def update_keywords(self, id, keywords):
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   101
		self.crs.execute("""
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   102
			DELETE FROM bookmarks_keywords
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   103
			WHERE userid = %d AND bookmark = %d AND
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   104
			keyword <> 0;""" % (self.userid, id))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   105
		for kw in keywords:
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   106
			if kw == 0: continue
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   107
			self.crs.execute("""
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   108
				INSERT INTO
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   109
				bookmarks_keywords(bookmark, keyword, userid)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   110
				VALUES (%d, %d, %d);""" % (id, kw, self.userid))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   111
		self.cnx.commit()	
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   112
	def remove_bookmark(self, id):
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   113
		self.crs.execute("""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   114
			DELETE FROM bookmarks_keywords
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   115
			WHERE userid = %d AND bookmark = %d;
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   116
			DELETE FROM bookmarks
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   117
			WHERE userid = %d AND id = %d;
23
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   118
			""" % (self.userid, id, self.userid, id))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   119
		self.cnx.commit()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   120
	def add_keyword(self, name):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   121
		id = self.get_next_id('keywords')
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   122
		self.crs.execute("""
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   123
			INSERT INTO keywords(id, userid, name)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   124
			VALUES (%d, %d, %s);
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   125
			""" % (id, self.userid, sql_quote(name)))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   126
		self.cnx.commit()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   127
		return id
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   128
	def get_keyword(self, id):
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   129
		self.crs.execute("""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   130
			SELECT name FROM keywords
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   131
			WHERE userid = %d AND id = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   132
			""" % (self.userid, id))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   133
		return self.crs.fetchone()[0]
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   134
	def get_keywords(self, bk_id):
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   135
		self.crs.execute("""
23
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   136
			SELECT k.id, k.name
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   137
			FROM keywords k, bookmarks_keywords bk
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   138
			WHERE bk.userid = %d
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   139
			AND k.userid = %d
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   140
			AND bk.bookmark = %d
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   141
			AND k.id = bk.keyword
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   142
			ORDER BY k.id;
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   143
			""" % (self.userid, self.userid, bk_id))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   144
		return self.crs.fetchall()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   145
	def update_keyword(self, id, name):
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   146
		self.crs.execute("""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   147
			UPDATE keywords
12
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
   148
			SET name = %s
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   149
			WHERE userid = %d AND id = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   150
			""" % (sql_quote(name), self.userid, id))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   151
		self.cnx.commit()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   152
	def remove_keyword(self, id):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   153
		if id == 0:
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   154
			raise "Can't remove default keyword!"
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   155
		self.crs.execute("""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   156
			DELETE FROM bookmarks_keywords
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   157
			WHERE keyword = %d AND userid = %d;
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   158
			DELETE FROM keywords
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   159
			WHERE id = %d AND userid = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   160
			""" % (id, self.userid, id, self.userid))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   161
		self.cnx.commit()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   162
	def merge_keywords(self, merge_id, into_id):
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   163
		self.crs.execute("""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   164
			UPDATE bookmarks_keywords
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   165
			SET keyword = %d
15
574631f841c3 [svn r1549] Add update/merge/delete keywords.
fabien
parents: 13
diff changeset
   166
			WHERE keyword = %d
23
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   167
			AND userid = %d
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   168
			AND bookmark NOT IN 
15
574631f841c3 [svn r1549] Add update/merge/delete keywords.
fabien
parents: 13
diff changeset
   169
			  (SELECT bookmark FROM bookmarks_keywords
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   170
			  WHERE userid = %d AND keyword = %d ))
15
574631f841c3 [svn r1549] Add update/merge/delete keywords.
fabien
parents: 13
diff changeset
   171
			;
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   172
			""" % (into_id, merge_id, self.userid,
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   173
			self.userid, merge_id))
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   174
		self.remove_keyword(merge_id)
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   175
	def get_all_keywords(self):
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   176
		"""Return a list of doublets [id, keyword, count]."""
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   177
		self.crs.execute("""SELECT k.id, k.name
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   178
			FROM keywords k
23
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   179
			WHERE k.userid = %d
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   180
			ORDER BY k.id;""" % (self.userid,))
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   181
		res = self.crs.fetchall()
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   182
		return res
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   183
	def get_keywords_count(self):
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   184
		"""Return a list of doublets [id, count].
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   185
Does with a count of zero are ignored."""
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   186
		self.crs.execute("""SELECT bk.keyword, COUNT(bk.keyword)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   187
			FROM bookmarks_keywords bk
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   188
			WHERE bk.userid = %d
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   189
			GROUP BY bk.keyword
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   190
			ORDER BY bk.keyword;""" % (self.userid,))
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   191
		res = self.crs.fetchall()
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   192
		if not res:
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   193
			res = [[0,0]]
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   194
		return res
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   195
	def select_bookmarks(self, has_kw = [0], except_kw = []):
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   196
	        """
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   197
Return a list of id bookmarks who has /has_kw/ set but not /except_kw/.
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   198
"""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   199
		basic_qry = """
23
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   200
		  SELECT bk.bookmark FROM bookmarks_keywords bk
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   201
		  WHERE bk.keyword = %d
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   202
		  AND bk.userid = %d
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   203
		  """
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   204
		
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   205
		qry = basic_qry % (has_kw[0], self.userid)
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   206
		for kw in has_kw[1:]:
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   207
			qry = qry + ("INTERSECT " + basic_qry % (kw, self.userid))
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   208
		for kw in except_kw:
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   209
			qry = qry + ("EXCEPT " + basic_qry % (kw, self.userid))
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   210
		qry = qry + ';'
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   211
		self.crs.execute(qry)
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   212
		return self.crs.fetchall()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   213
	def get_next_id(self, seq_name):
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   214
		if seq_name == 'users':
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   215
			userid = -1
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   216
		else:
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   217
			userid = self.userid
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   218
		self.crs.execute("""
23
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   219
			SELECT nextid FROM db_sequence
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   220
			WHERE seq_name = '%s'
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   221
			AND userid = %d
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   222
			FOR UPDATE;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   223
			""" % (seq_name,userid))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   224
		id = self.crs.fetchone()[0]
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   225
		self.crs.execute("""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   226
			UPDATE db_sequence SET nextid = %d
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   227
			WHERE seq_name = '%s'
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   228
			AND userid = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   229
			""" % (id+1, seq_name, userid))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   230
		return id
0
a4c49a0c313b [svn r1527] Premi�re version.
fabien
parents:
diff changeset
   231
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   232
def connect(username):
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   233
	return MyDbConnexion(username)