#!python
class PageBundle(StorageBase):
    
    # Managing the text
    def text(self):
        return self.readText(join(self.path(), '__text__'))
    
    def setText(self, text):
        """ Save a new version, backup the old one """    
        # lock the page for other processes, blocking until the lock aquired
        self.lock()
        old = join(self.path(), '__text__')
        backup = join(self.path(), '__versions__', self.versionNumber() + 1) 
        os.rename(old, backup)
        self.writeText(join(self.path(), '__text__', text))
        self.unlock()
        
    # Managing information about pages
    # Meta data from __info__ could be cached in self._info
    # lets say, in a PageInfo object
    def rename(self, name):
        """ Rename while keeping all attachments and sub pages intact"""
        self.lock()
        old = join(self._root, self._name)
        new = join(self._root, name)
        os.rename(old, new) 
        self._name = name
        self.unlock()
    
    def versionNumber(self):
        """ Get the version from the __info__ file """
        return self._info.versionNumber()
        
    def versions(self):
        """ Return a list of meta data for all versions """
        return self._info.versions()
        
    def textAsOfVersion(self, number):
        """ Return the text form a backup version """
        return self.readText(join(self.path(), '__versions__', number))
