#!/usr/bin/env python2.3
import pg
DBNAME = 'bookmarks'
TRACE = False
import pdb
import Bookmark
class Error(Exception):
pass
class IllegalNumArgumentsError(Error):
def __init__(self, message):
self.message = message
def get_cnx():
if TRACE:
print 'get_cnx'
return pg.DB(dbname=DBNAME)
def get_categories(page_url='/docs'):
if TRACE:
print 'get_categories'
cnx = get_cnx()
result = cnx.query('SELECT DISTINCT b.category FROM bookmark b ' +
"WHERE b.page_url = '" + page_url + "';").getresult()
return [r[0] for r in result]
def get_links(page_url='/docs', category=None):
if TRACE:
print 'get_links'
cnx = get_cnx()
qstr = ''.join(['SELECT b.id, b.category, b.name, b.url, b.page_url ',
'FROM bookmark b ',
"WHERE b.page_url = '", page_url, "' "])
if category:
qstr = ''.join([qstr, "AND b.category = '", category, "';"])
else:
qstr = ''.join([qstr, ';'])
return cnx.query(qstr)
def get_MenuData():
if TRACE:
print 'get_MenuData'
cnx = get_cnx()
return cnx.query('SELECT m.name, m.page_url FROM menu m;').dictresult()
def get_menu_class():
rows = get_MenuData()
return [Bookmark.Bookmark(synced=True, **row) for row in rows]
def delete_Bookmark(bookmark):
qstr = "DELETE FROM bookmark where id = %s;" % bookmark.id
cnx = get_cnx()
cnx.query(qstr)
def update_Bookmark(bookmark):
qstr = """
UPDATE bookmark
SET page_url = '%s',
category = '%s',
name = '%s',
url = '%s'
WHERE id = %s
""" % (bookmark.page_url,
bookmark.category,
bookmark.name,
bookmark.url,
bookmark.id)
cnx = get_cnx()
cnx.query(qstr)
def add_Bookmark(bookmark):
# '''adds a bookmark object to the database and returns the
#automatically inserted id value '''
cnx = get_cnx()
qobj = cnx.query("SELECT nextval('bookmark_id_seq');").dictresult()
id = qobj[0]['nextval']
qstr = """
INSERT INTO bookmark (id, page_url, category, name, url)
values (%s,'%s','%s','%s','%s');""" % (id, bookmark.page_url, bookmark.category, bookmark.name, bookmark.url)
cnx.query(qstr)
bookmark._set_id(id)
def get_Bookmarks(page_url='/docs', category=None):
'''this is deprecated and will change as soon
as i finish updating the woven portion of this program'''
rows = get_links(page_url=page_url, category=category).dictresult()
return [Bookmark.Bookmark(synced=True, **row) for row in rows]
def get_Bookmarks_with_attr(**kwargs):
'''returns a bookmark instance with attribute specified
**kwargs must contain one of [id, url, name, page_url, category]
'''
cnx = get_cnx()
qstr = """SELECT b.id, b.category, b.name, b.url, b.page_url
FROM bookmark b
WHERE
"""
# check for at least 1 kwarg
num_kwargs = len(kwargs.keys())
if num_kwargs < 1:
raise IllegalNumArgumentsError("num kwargs must be > 1")
count = 0
the_and = ""
for kw in ['id', 'url', 'name', 'page_url', 'category']:
if kw in kwargs:
if count > 0:
the_and = "AND"
qstr = ''.join([qstr, the_and, " b.%s = '%s'\n" % (kw, kwargs[kw])])
count += 1
qstr = ''.join([qstr, ';'])
print qstr
rows = cnx.query(qstr).dictresult()
if not rows:
return None
return [Bookmark.Bookmark(synced=True, **row) for row in rows]
syntax highlighted by Code2HTML, v. 0.9.1