lib/my_db.py
author fabien
Mon, 23 Aug 2004 23:30:27 -0400
branchxbelweb
changeset 55 2ae353b7f38a
parent 54 f74bad856bce
child 57 31271426f879
permissions -rw-r--r--
[svn r1739] Add some ideas to implement/clean up.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
     1
import pgdb
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
     2
import config
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
     3
from bkmark import Bookmark
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
     4
import os
0
a4c49a0c313b [svn r1527] Premi�re version.
fabien
parents:
diff changeset
     5
12
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
     6
def sql_quote(str):
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
     7
	return pgdb._quote(str)
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
     8
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
     9
class MyDbConnexion:
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    10
	def __init__(self, name):
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    11
		self.cnx = pgdb.connect(database = config.database,
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    12
			host = config.host+':%d'%config.port,
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    13
			user = config.user, password = config.passwd)
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
    14
		self.crs = self.cnx.cursor();
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    15
		self.userid = self.get_user_id(name)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    16
		if self.userid == None:
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    17
			self.userid = self.create_user(name)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    18
		else:
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    19
			self.userid = self.userid[0]
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    20
	def get_user_id(self, name):
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    21
		self.crs.execute("""
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    22
			SELECT id FROM users
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    23
			WHERE name = %s;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    24
			""" % (sql_quote(name),))
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    25
		return self.crs.fetchone()
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    26
	def create_user(self, name):
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    27
		id = self.get_next_id('users')
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    28
		self.crs.execute("""
44
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
    29
			INSERT INTO users(id, name, full_name)
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
    30
			VALUES (%d, %s, %s);
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
    31
			""" % (id, sql_quote(name), sql_quote(name)))
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    32
		self.crs.execute("""
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    33
			INSERT INTO keywords(id, userid, name)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    34
			VALUES (0, %d, '--');
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    35
			""" %(id,))
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    36
		self.crs.execute("""
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    37
			INSERT INTO db_sequence(seq_name, userid, nextid)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    38
			VALUES ('keywords', %d, 1);
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    39
			""" %(id,))
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    40
		self.crs.execute("""
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    41
			INSERT INTO db_sequence(seq_name, userid, nextid)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    42
			VALUES ('bookmarks', %d, 0);
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    43
			""" %(id,))
38
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    44
		self.crs.execute("""
45
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
    45
			INSERT INTO folders(id, keyword, parent, userid)
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
    46
			VALUES (0, 0, -1, %d);
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
    47
			""" %(id,))
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
    48
		self.crs.execute("""
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
    49
			INSERT INTO db_sequence(seq_name, userid, nextid)
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
    50
			VALUES ('folders', %d, 1);
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
    51
			""" %(id,))
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
    52
		self.crs.execute("""
38
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    53
			INSERT INTO preferences(userid)
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    54
			VALUES (%d);
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    55
			""" %(id,))
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    56
		self.cnx.commit()
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    57
		return id
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    58
	def delete_user(self, userid):
38
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    59
		self.crs.execute("""
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    60
			DELETE FROM users WHERE id = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    61
			DELETE FROM bookmarks_keywords WHERE userid = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    62
			DELETE FROM bookmarks WHERE userid = %d;
47
2781ac85b807 [svn r1604] Implement default_view preferences, which move things around a lot.
fabien
parents: 45
diff changeset
    63
			DELETE FROM preferences WHERE userid = %d;
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    64
			DELETE FROM keywords WHERE userid = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    65
			DELETE FROM db_sequence WHERE userid = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
    66
			""" % (userid,userid,userid,userid,userid))
38
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    67
		self.cnx.commit()
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    68
	def get_preferences(self):
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    69
		self.crs.execute("""
44
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
    70
			SELECT p.keywords_box,
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
    71
			p.keywords_sort, p.keywords_reverse,
47
2781ac85b807 [svn r1604] Implement default_view preferences, which move things around a lot.
fabien
parents: 45
diff changeset
    72
			u.full_name, p.default_view
44
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
    73
			FROM preferences p, users u
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
    74
			WHERE u.id = %d AND p.userid = u.id;
38
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    75
			""" % (self.userid,))
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    76
		res = self.crs.fetchone()
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    77
		return {
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    78
		   'keywords_box' : res[0],
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    79
		   'keywords_sort' : res[1],
44
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
    80
		   'keywords_reverse': res[2],
47
2781ac85b807 [svn r1604] Implement default_view preferences, which move things around a lot.
fabien
parents: 45
diff changeset
    81
		   'fullname': res[3],
2781ac85b807 [svn r1604] Implement default_view preferences, which move things around a lot.
fabien
parents: 45
diff changeset
    82
		   'default_view': res[4]
38
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    83
		   }
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    84
	def set_preferences(self, prefs):
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    85
	        if prefs['keywords_reverse']:
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    86
			rev = 'TRUE'
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    87
		else:
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    88
			rev = 'FALSE'
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    89
		self.crs.execute("""
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    90
			UPDATE preferences
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    91
			SET keywords_box = %d,
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    92
			keywords_sort = %s,
47
2781ac85b807 [svn r1604] Implement default_view preferences, which move things around a lot.
fabien
parents: 45
diff changeset
    93
			keywords_reverse = %s,
2781ac85b807 [svn r1604] Implement default_view preferences, which move things around a lot.
fabien
parents: 45
diff changeset
    94
			default_view = %d
38
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    95
			WHERE userid = %d;
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    96
			""" % (prefs['keywords_box'],
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
    97
			sql_quote(prefs['keywords_sort']),
47
2781ac85b807 [svn r1604] Implement default_view preferences, which move things around a lot.
fabien
parents: 45
diff changeset
    98
			rev, prefs['default_view'], self.userid))
44
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
    99
		self.crs.execute("""
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
   100
			UPDATE users
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
   101
			SET full_name = %s
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
   102
			WHERE id = %d;
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
   103
			""" % (sql_quote(prefs["fullname"]),
87f94936990d [svn r1600] Add display name to preferences.
fabien
parents: 41
diff changeset
   104
				self.userid))
38
c30e2402deca [svn r1582] Add some user preferences support (kw sorting and kw select box size).
fabien
parents: 33
diff changeset
   105
		self.cnx.commit()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   106
	def add_bookmark(self, bk):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   107
		id = self.get_next_id('bookmarks')
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   108
		self.crs.execute("""
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   109
			INSERT INTO bookmarks(id, userid, url, name, ldesc, added)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   110
			VALUES (%d, %d, %s, %s, %s, %s);
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   111
			INSERT INTO bookmarks_keywords(bookmark, keyword, userid)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   112
			VALUES (%d, 0, %d);
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   113
			""" % (id, self.userid, sql_quote(bk.url),
12
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
   114
			sql_quote(bk.name), sql_quote(bk.desc),
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   115
			sql_quote(bk.added),
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   116
			id, self.userid))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   117
		self.cnx.commit()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   118
		return id
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   119
	def get_bookmarks(self, ids):
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   120
		qry = """
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   121
			SELECT id, url, name, ldesc, added
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   122
			FROM bookmarks
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   123
			WHERE userid = %d AND (id = %d
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   124
			""" % (self.userid, ids.pop(),)
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   125
		for id in ids:
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   126
			qry = qry + " OR id = %d" % (id,)
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   127
		qry = qry + ");"
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   128
		self.crs.execute(qry)
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   129
		bks = []
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   130
		list = self.crs.fetchall()
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   131
		for res in list:
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   132
			bk = Bookmark()
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   133
			bk.id = res[0]
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   134
			bk.url = res[1]
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   135
			bk.name = res[2]
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   136
			bk.desc = res[3]
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   137
			bk.added = res[4]
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   138
			bks.append(bk)
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   139
		return bks
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   140
	def update_bookmark(self, bk):
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   141
		self.crs.execute("""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   142
			UPDATE bookmarks
12
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
   143
			SET url = %s, name = %s,
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
   144
			ldesc = %s, added = %s
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   145
			WHERE userid = %d AND id = %d;
15
574631f841c3 [svn r1549] Add update/merge/delete keywords.
fabien
parents: 13
diff changeset
   146
			""" % (sql_quote(bk.url), sql_quote(bk.name),
12
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
   147
			sql_quote(bk.desc),
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   148
			sql_quote(bk.added), self.userid, bk.id))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   149
		self.cnx.commit()
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   150
	def update_keywords(self, id, keywords):
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   151
		self.crs.execute("""
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   152
			DELETE FROM bookmarks_keywords
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   153
			WHERE userid = %d AND bookmark = %d AND
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   154
			keyword <> 0;""" % (self.userid, id))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   155
		for kw in keywords:
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   156
			if kw == 0: continue
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   157
			self.crs.execute("""
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   158
				INSERT INTO
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   159
				bookmarks_keywords(bookmark, keyword, userid)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   160
				VALUES (%d, %d, %d);""" % (id, kw, 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 remove_bookmark(self, 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
			DELETE FROM bookmarks_keywords
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   165
			WHERE userid = %d AND bookmark = %d;
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   166
			DELETE FROM bookmarks
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   167
			WHERE userid = %d AND id = %d;
23
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   168
			""" % (self.userid, id, self.userid, id))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   169
		self.cnx.commit()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   170
	def add_keyword(self, name):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   171
		id = self.get_next_id('keywords')
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   172
		self.crs.execute("""
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   173
			INSERT INTO keywords(id, userid, name)
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   174
			VALUES (%d, %d, %s);
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   175
			""" % (id, self.userid, sql_quote(name)))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   176
		self.cnx.commit()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   177
		return id
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   178
	def get_keyword(self, id):
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   179
		self.crs.execute("""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   180
			SELECT name FROM keywords
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   181
			WHERE userid = %d AND id = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   182
			""" % (self.userid, id))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   183
		return self.crs.fetchone()[0]
33
db91081e5a78 [svn r1577] Various change to the new interface.
fabien
parents: 26
diff changeset
   184
	def get_keywords(self, bk_ids):
db91081e5a78 [svn r1577] Various change to the new interface.
fabien
parents: 26
diff changeset
   185
		if len(bk_ids) == 0:
db91081e5a78 [svn r1577] Various change to the new interface.
fabien
parents: 26
diff changeset
   186
			return []
db91081e5a78 [svn r1577] Various change to the new interface.
fabien
parents: 26
diff changeset
   187
		qry = """
db91081e5a78 [svn r1577] Various change to the new interface.
fabien
parents: 26
diff changeset
   188
			SELECT DISTINCT k.id, k.name
23
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   189
			FROM keywords k, bookmarks_keywords bk
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   190
			WHERE bk.userid = %d
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   191
			AND k.userid = %d
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   192
			AND k.id = bk.keyword
33
db91081e5a78 [svn r1577] Various change to the new interface.
fabien
parents: 26
diff changeset
   193
			AND (
db91081e5a78 [svn r1577] Various change to the new interface.
fabien
parents: 26
diff changeset
   194
			""" % (self.userid, self.userid)
db91081e5a78 [svn r1577] Various change to the new interface.
fabien
parents: 26
diff changeset
   195
		for id in bk_ids:
41
7b7cd0e74ee3 [svn r1585] Restrict keywords count to selection.
fabien
parents: 38
diff changeset
   196
			qry += "bk.bookmark = %d OR " % (id,)
33
db91081e5a78 [svn r1577] Various change to the new interface.
fabien
parents: 26
diff changeset
   197
		qry = qry[:-3] + ") ORDER BY k.id;"
db91081e5a78 [svn r1577] Various change to the new interface.
fabien
parents: 26
diff changeset
   198
		self.crs.execute(qry)
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   199
		return self.crs.fetchall()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   200
	def update_keyword(self, id, name):
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   201
		self.crs.execute("""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   202
			UPDATE keywords
12
800be3836f3b [svn r1546] Correctly quote data in SQL.
fabien
parents: 8
diff changeset
   203
			SET name = %s
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   204
			WHERE userid = %d AND id = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   205
			""" % (sql_quote(name), self.userid, id))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   206
		self.cnx.commit()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   207
	def remove_keyword(self, id):
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   208
		if id == 0:
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   209
			raise "Can't remove default keyword!"
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   210
		self.crs.execute("""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   211
			DELETE FROM bookmarks_keywords
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   212
			WHERE keyword = %d AND userid = %d;
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   213
			DELETE FROM keywords
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   214
			WHERE id = %d AND userid = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   215
			""" % (id, self.userid, id, self.userid))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   216
		self.cnx.commit()
50
5275135955c0 [svn r1607] Add remove flag to the keyword merging.
fabien
parents: 47
diff changeset
   217
	def add_keywords(self, add_id, into_id):
5275135955c0 [svn r1607] Add remove flag to the keyword merging.
fabien
parents: 47
diff changeset
   218
		self.crs.execute("""
5275135955c0 [svn r1607] Add remove flag to the keyword merging.
fabien
parents: 47
diff changeset
   219
			INSERT INTO bookmarks_keywords (userid,
5275135955c0 [svn r1607] Add remove flag to the keyword merging.
fabien
parents: 47
diff changeset
   220
			bookmark, keyword)
53
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   221
			SELECT %d, bookmark, %d
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   222
			FROM bookmarks_keywords
50
5275135955c0 [svn r1607] Add remove flag to the keyword merging.
fabien
parents: 47
diff changeset
   223
			WHERE keyword = %d
5275135955c0 [svn r1607] Add remove flag to the keyword merging.
fabien
parents: 47
diff changeset
   224
			AND userid = %d
5275135955c0 [svn r1607] Add remove flag to the keyword merging.
fabien
parents: 47
diff changeset
   225
			AND bookmark NOT IN 
5275135955c0 [svn r1607] Add remove flag to the keyword merging.
fabien
parents: 47
diff changeset
   226
			  (SELECT bookmark FROM bookmarks_keywords
5275135955c0 [svn r1607] Add remove flag to the keyword merging.
fabien
parents: 47
diff changeset
   227
			  WHERE userid = %d AND keyword = %d )
5275135955c0 [svn r1607] Add remove flag to the keyword merging.
fabien
parents: 47
diff changeset
   228
			;
5275135955c0 [svn r1607] Add remove flag to the keyword merging.
fabien
parents: 47
diff changeset
   229
			""" % (self.userid, into_id, add_id, self.userid,
5275135955c0 [svn r1607] Add remove flag to the keyword merging.
fabien
parents: 47
diff changeset
   230
			self.userid, into_id))
5275135955c0 [svn r1607] Add remove flag to the keyword merging.
fabien
parents: 47
diff changeset
   231
		self.cnx.commit()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   232
	def merge_keywords(self, merge_id, into_id):
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   233
		self.crs.execute("""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   234
			UPDATE bookmarks_keywords
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   235
			SET keyword = %d
15
574631f841c3 [svn r1549] Add update/merge/delete keywords.
fabien
parents: 13
diff changeset
   236
			WHERE keyword = %d
23
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   237
			AND userid = %d
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   238
			AND bookmark NOT IN 
15
574631f841c3 [svn r1549] Add update/merge/delete keywords.
fabien
parents: 13
diff changeset
   239
			  (SELECT bookmark FROM bookmarks_keywords
26
17b0cd274530 [svn r1560] Add import functionality and correct a bug in the merge_kw.
fabien
parents: 23
diff changeset
   240
			  WHERE userid = %d AND keyword = %d )
15
574631f841c3 [svn r1549] Add update/merge/delete keywords.
fabien
parents: 13
diff changeset
   241
			;
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   242
			""" % (into_id, merge_id, self.userid,
26
17b0cd274530 [svn r1560] Add import functionality and correct a bug in the merge_kw.
fabien
parents: 23
diff changeset
   243
			self.userid, into_id))
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   244
		self.remove_keyword(merge_id)
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   245
	def get_all_keywords(self):
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   246
		"""Return a list of doublets [id, keyword, count]."""
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   247
		self.crs.execute("""SELECT k.id, k.name
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   248
			FROM keywords k
23
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   249
			WHERE k.userid = %d
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   250
			ORDER BY k.id;""" % (self.userid,))
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   251
		res = self.crs.fetchall()
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   252
		return res
41
7b7cd0e74ee3 [svn r1585] Restrict keywords count to selection.
fabien
parents: 38
diff changeset
   253
	def get_keywords_count(self, bks = []):
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   254
		"""Return a list of doublets [id, count].
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   255
Does with a count of zero are ignored."""
41
7b7cd0e74ee3 [svn r1585] Restrict keywords count to selection.
fabien
parents: 38
diff changeset
   256
		qry = """SELECT bk.keyword, COUNT(bk.keyword)
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   257
			FROM bookmarks_keywords bk
41
7b7cd0e74ee3 [svn r1585] Restrict keywords count to selection.
fabien
parents: 38
diff changeset
   258
			WHERE bk.userid = %d""" % (self.userid,)
7b7cd0e74ee3 [svn r1585] Restrict keywords count to selection.
fabien
parents: 38
diff changeset
   259
		if len(bks) > 0:
7b7cd0e74ee3 [svn r1585] Restrict keywords count to selection.
fabien
parents: 38
diff changeset
   260
			qry += " AND ( bk.bookmark = %d" % bks[0]
7b7cd0e74ee3 [svn r1585] Restrict keywords count to selection.
fabien
parents: 38
diff changeset
   261
			for bk in bks[1:]:
7b7cd0e74ee3 [svn r1585] Restrict keywords count to selection.
fabien
parents: 38
diff changeset
   262
				qry += " OR bk.bookmark = %d" % bk
7b7cd0e74ee3 [svn r1585] Restrict keywords count to selection.
fabien
parents: 38
diff changeset
   263
			qry += " )"
7b7cd0e74ee3 [svn r1585] Restrict keywords count to selection.
fabien
parents: 38
diff changeset
   264
		qry += " GROUP BY bk.keyword ORDER BY bk.keyword;"
7b7cd0e74ee3 [svn r1585] Restrict keywords count to selection.
fabien
parents: 38
diff changeset
   265
		self.crs.execute(qry)
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   266
		res = self.crs.fetchall()
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   267
		if not res:
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   268
			res = [[0,0]]
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   269
		return res
53
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   270
	def _bookmarks_selection(self, has_kw = [0], except_kw = []):
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   271
	        """
53
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   272
Return a bookmarks selection query used in at least two function.
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   273
"""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   274
		basic_qry = """
23
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   275
		  SELECT bk.bookmark FROM bookmarks_keywords bk
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   276
		  WHERE bk.keyword = %d
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   277
		  AND bk.userid = %d
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   278
		  """
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   279
		
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   280
		qry = basic_qry % (has_kw[0], self.userid)
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   281
		for kw in has_kw[1:]:
53
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   282
			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
   283
		for kw in except_kw:
53
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   284
			qry += ("EXCEPT " + basic_qry % (kw, self.userid))
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   285
		return qry
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   286
	def select_bookmarks(self, has_kw = [0], except_kw = []):
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   287
	        """
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   288
Return a list of id bookmarks who has /has_kw/ set but not /except_kw/.
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   289
"""
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   290
		qry = self._bookmarks_selection(has_kw, except_kw) + ';'
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   291
		self.crs.execute(qry)
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   292
		return self.crs.fetchall()
54
f74bad856bce [svn r1611] Optimization of db.get_bookmarks_count which was call too often.
fabien
parents: 53
diff changeset
   293
	def get_bookmarks_count(self, has_kw = [0], except_kw = [], opt_kw = []):
53
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   294
	        """
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   295
Return a count of bookmarks which would have been return on
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   296
select_bookmarks qry.
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   297
"""
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   298
		qry = """
54
f74bad856bce [svn r1611] Optimization of db.get_bookmarks_count which was call too often.
fabien
parents: 53
diff changeset
   299
			SELECT keyword, COUNT(keyword)
f74bad856bce [svn r1611] Optimization of db.get_bookmarks_count which was call too often.
fabien
parents: 53
diff changeset
   300
			FROM bookmarks_keywords
f74bad856bce [svn r1611] Optimization of db.get_bookmarks_count which was call too often.
fabien
parents: 53
diff changeset
   301
			WHERE userid = %d
f74bad856bce [svn r1611] Optimization of db.get_bookmarks_count which was call too often.
fabien
parents: 53
diff changeset
   302
			""" % self.userid
f74bad856bce [svn r1611] Optimization of db.get_bookmarks_count which was call too often.
fabien
parents: 53
diff changeset
   303
		if len(opt_kw) > 0:
f74bad856bce [svn r1611] Optimization of db.get_bookmarks_count which was call too often.
fabien
parents: 53
diff changeset
   304
			qry += "AND ( "
f74bad856bce [svn r1611] Optimization of db.get_bookmarks_count which was call too often.
fabien
parents: 53
diff changeset
   305
			qry += " OR ".join(map(lambda e: "keyword = %d" % e, opt_kw))
f74bad856bce [svn r1611] Optimization of db.get_bookmarks_count which was call too often.
fabien
parents: 53
diff changeset
   306
			qry += ") "
f74bad856bce [svn r1611] Optimization of db.get_bookmarks_count which was call too often.
fabien
parents: 53
diff changeset
   307
		qry += "AND bookmark IN (" + self._bookmarks_selection(has_kw, except_kw) + ") "
f74bad856bce [svn r1611] Optimization of db.get_bookmarks_count which was call too often.
fabien
parents: 53
diff changeset
   308
		qry += "GROUP BY keyword ORDER BY keyword;"
53
e80160a19653 [svn r1610] Lots of "small" bugs corrected.
fabien
parents: 52
diff changeset
   309
		self.crs.execute(qry)
54
f74bad856bce [svn r1611] Optimization of db.get_bookmarks_count which was call too often.
fabien
parents: 53
diff changeset
   310
		return self.crs.fetchall()
45
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   311
	def get_folder_keyword(self, id):
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   312
		self.crs.execute("""
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   313
			SELECT k.id, k.name
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   314
			FROM keywords k, folders f
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   315
			WHERE
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   316
			f.userid = %d AND f.id = %d
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   317
			AND k.userid = f.userid
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   318
			AND k.id = f.keyword;
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   319
			""" %(self.userid, id))
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   320
		return self.crs.fetchone()
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   321
	def get_subfolders(self, id):
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   322
		self.crs.execute("""
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   323
			SELECT f.id, k.id, k.name
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   324
			FROM folders f, keywords k
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   325
			WHERE f.userid = %d
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   326
			AND f.parent = %d
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   327
			AND k.userid = f.userid
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   328
			AND k.id = f.keyword
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   329
			ORDER BY k.name;
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   330
			""" %(self.userid, id))
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   331
		res = self.crs.fetchall()
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   332
		return map(lambda e: {
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   333
			'id' : e[0],
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   334
			'name' : e[2],
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   335
			'keyword' : e[1] },
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   336
			res)
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   337
	def get_folder_parents_and_self(self, id):
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   338
		"""Return self and parents in descending order."""
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   339
		if id < 0:
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   340
			return []
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   341
		self.crs.execute("""
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   342
			SELECT f.id, k.id, k.name, f.parent
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   343
			FROM folders f, keywords k
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   344
			WHERE
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   345
			f.id = %d AND f.userid = %d
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   346
			AND k.userid = f.userid
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   347
			AND k.id = f.keyword;
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   348
			""" %(id, self.userid))
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   349
		cur = self.crs.fetchone()
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   350
		res = [{ 'id': cur[0],
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   351
		        'name' : cur[2],
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   352
			'keyword': cur[1] }]
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   353
		return res + self.get_folder_parents_and_self(cur[3])
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   354
	def add_folder(self, keyword, parent):
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   355
		id = self.get_next_id('folders')
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   356
		self.crs.execute("""
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   357
			INSERT INTO folders(userid, id, keyword, parent)
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   358
			VALUES (%d, %d, %d, %d);
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   359
			""" % (self.userid, id, keyword, parent))
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   360
		self.cnx.commit()
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   361
	def remove_folders(self, id, commit = 1):
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   362
		if id == 0:
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   363
			raise "Can't erase base folder!"
47
2781ac85b807 [svn r1604] Implement default_view preferences, which move things around a lot.
fabien
parents: 45
diff changeset
   364
		subs = self.get_subfolders(id)
45
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   365
		for sub in subs:
52
fe0d02f344cb [svn r1609] Oops! Old code in remove_folders()
fabien
parents: 50
diff changeset
   366
			self.remove_folders(sub['id'], 0)
45
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   367
		self.crs.execute("""
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   368
			DELETE FROM folders
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   369
			WHERE id = %d AND userid = %d;
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   370
			""" % (id, self.userid))	
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   371
		if commit:
c81d480c3224 [svn r1601] Add first try to get a folder's like view.
fabien
parents: 44
diff changeset
   372
			self.cnx.commit()
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   373
	def get_next_id(self, seq_name):
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   374
		if seq_name == 'users':
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   375
			userid = -1
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   376
		else:
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   377
			userid = self.userid
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   378
		self.crs.execute("""
23
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   379
			SELECT nextid FROM db_sequence
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   380
			WHERE seq_name = '%s'
69c1f93892dd [svn r1557] Correct some errors for multi-user support.
fabien
parents: 21
diff changeset
   381
			AND userid = %d
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   382
			FOR UPDATE;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   383
			""" % (seq_name,userid))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   384
		id = self.crs.fetchone()[0]
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   385
		self.crs.execute("""
2
4cb6d9f3d3eb [svn r1529] Mise � jour des fonctions d'acc�s � la DB.
fabien
parents: 0
diff changeset
   386
			UPDATE db_sequence SET nextid = %d
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   387
			WHERE seq_name = '%s'
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   388
			AND userid = %d;
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   389
			""" % (id+1, seq_name, userid))
3
9e7e8b678819 [svn r1530] Add and browse working.
fabien
parents: 2
diff changeset
   390
		return id
0
a4c49a0c313b [svn r1527] Premi�re version.
fabien
parents:
diff changeset
   391
21
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   392
def connect(username):
345ee7421989 [svn r1555] Add multiuser support and more templating.
fabien
parents: 15
diff changeset
   393
	return MyDbConnexion(username)