diff --git a/model/Entry.py b/model/Entry.py new file mode 100644 index 0000000..1689937 --- /dev/null +++ b/model/Entry.py @@ -0,0 +1,57 @@ +import re +from Persistent import Persistent +from model.Note import Note +from controller.Html_nuker import Html_nuker + + +class Entry( Persistent ): + def __setstate__(self, state): + self.__dict__.update(state) + self.__class__ = Note + + """ + An single textual wiki entry. + """ + TITLE_PATTERN = re.compile( u"

(.*)

", flags = re.IGNORECASE ) + + def __init__( self, id, contents = None ): + """ + Create a new entry with the given id and contents. + + @type id: unicode + @param id: id of the entry + @type contents: unicode or NoneType + @param contents: initial contents of the entry (optional) + @rtype: Entry + @return: newly constructed entry + """ + Persistent.__init__( self, id ) + self.__title = None + self.__contents = None or "" + + self.__set_contents( contents ) + + def __set_contents( self, contents ): + self.update_revision() + self.__contents = contents + + # parse title out of the beginning of the contents + result = Entry.TITLE_PATTERN.search( contents ) + + if result: + self.__title = result.groups()[ 0 ] + self.__title = Html_nuker( allow_refs = True ).nuke( self.__title ) + else: + self.__title = None + + def to_dict( self ): + d = Persistent.to_dict( self ) + d.update( dict( + contents = self.__contents, + title = self.__title, + ) ) + + return d + + contents = property( lambda self: self.__contents, __set_contents ) + title = property( lambda self: self.__title )