witten
/
luminotes
Archived
1
0
Fork 0
This repository has been archived on 2023-12-16. You can view files and clone it, but cannot push or open issues or pull requests.
luminotes/model/Tag.py

136 lines
4.6 KiB
Python

from Persistent import Persistent, quote
class Tag( Persistent ):
"""
A tag for a note or a notebook.
"""
def __init__( self, object_id, revision = None, notebook_id = None, user_id = None, name = None, description = None, value = None ):
"""
Create a Tag with the given id.
@type object_id: unicode
@param object_id: id of the Tag
@type revision: datetime or NoneType
@param revision: revision timestamp of the object (optional, defaults to now)
@type notebook_id: unicode or NoneType
@param notebook_id: id of the notebook whose namespace this tag is in, if any
@type user_id: unicode or NoneType
@param user_id: id of the user who most recently updated this tag, if any
@type name: unicode or NoneType
@param name: name of the tag (optional)
@type description: unicode or NoneType
@param description: brief description of the tag (optional)
@type value: unicode or NoneType
@param value: per-note or per-notebook value of the tag (optional)
@rtype: Tag
@return: newly constructed Tag
"""
Persistent.__init__( self, object_id, revision )
self.__notebook_id = notebook_id
self.__user_id = user_id
self.__name = name
self.__description = description
self.__value = value
@staticmethod
def create( object_id, notebook_id = None, user_id = None, name = None, description = None, value = None ):
"""
Convenience constructor for creating a new Tag.
@type object_id: unicode
@param object_id: id of the Tag
@type notebook_id: unicode or NoneType
@param notebook_id: id of the notebook whose namespace this tag is in, if any
@type user_id: unicode or NoneType
@param user_id: id of the user who most recently updated this tag, if any
@type name: unicode or NoneType
@param name: name of the tag (optional)
@type description: unicode or NoneType
@param description: brief description of the tag (optional)
@type value: unicode or NoneType
@param value: per-note or per-notebook value of the tag (optional)
@rtype: Tag
@return: newly constructed Tag
"""
return Tag( object_id, notebook_id = notebook_id, user_id = user_id, name = name, description = description, value = value )
@staticmethod
def sql_load( object_id, revision = None ):
# Tags don't store old revisions
if revision:
raise NotImplementedError()
return \
"""
select
tag.id, tag.revision, tag.notebook_id, tag.user_id, tag.name, tag.description
from
tag
where
tag.id = %s;
""" % quote( object_id )
@staticmethod
def sql_load_by_name( name, notebook_id = None, user_id = None ):
if notebook_id:
notebook_id_clause = " and tag.notebook_id = %s" % quote( notebook_id )
else:
notebook_id_clause = ""
if user_id:
user_id_clause = " and tag.user_id = %s" % quote( user_id )
else:
user_id_clause = ""
return \
"""
select
tag.id, tag.revision, tag.notebook_id, tag.user_id, tag.name, tag.description
from
tag
where
tag.name = %s%s%s;
""" % ( quote( name ), notebook_id_clause, user_id_clause )
@staticmethod
def sql_id_exists( object_id, revision = None ):
if revision:
raise NotImplementedError()
return "select id from tag where id = %s;" % quote( object_id )
def sql_exists( self ):
return Tag.sql_id_exists( self.object_id )
def sql_create( self ):
return "insert into tag ( id, revision, notebook_id, user_id, name, description ) values ( %s, %s, %s, %s, %s, %s );" % \
( quote( self.object_id ), quote( self.revision ), quote( self.__notebook_id ),
quote( self.__user_id ), quote( self.__name ), quote( self.__description ) )
def sql_update( self ):
return "update tag set revision = %s, notebook_id = %s, user_id = %s, name = %s, description = %s where id = %s;" % \
( quote( self.revision ), quote( self.__notebook_id ), quote( self.__user_id ),
quote( self.__name ), quote( self.__description ), quote( self.object_id ) )
def sql_delete( self ):
return "delete from tag where id = %s;" % quote( self.object_id )
def to_dict( self ):
d = Persistent.to_dict( self )
d.update( dict(
notebook_id = self.__notebook_id,
user_id = self.__user_id,
name = self.__name,
description = self.__description,
value = self.__value,
) )
return d
notebook_id = property( lambda self: self.__notebook_id )
user_id = property( lambda self: self.__user_id )
name = property( lambda self: self.__name )
description = property( lambda self: self.__description )
value = property( lambda self: self.__value )