Exemplo n.º 1
0
    def read_item(self, user, now=None):
        """Notice that user has accessed this item.
        
        If we are a comment, we pass this on to our parent item, to
        catch up based on comment's submission date.
        """

        if not hasattr(self, "_BlogItem__user_access"):

            # we don't keep track of user access -- we're a comment,
            # so just pass this on to our parent.
            if self.parent_blogitem:
                return self.parent_blogitem.read_item(user, self.date)
            return
        
        if not user:
            return
            
        now = now or datetime.utcnow()
        user_oid = unpack_oid(user._p_oid)
        
        dt, count = self.__user_access.get(user_oid, (never, 0))
        now = max(now, dt)
        
        # increment hit count
        self.__user_access[user_oid] = (now, count + 1)
Exemplo n.º 2
0
    def up_to_date(self, target, observer):
        """Return true if observer is up to date with respect to key.
        
        Returns true if observe(key, observer) has been called more
        recently than notify_changed(key).
        """
        assert hasattr(target, '_p_oid'), 'target must be Persistent.'
        assert hasattr(observer, '_p_oid'), 'observer must be Persistent.'

        key = unpack_oid(target._p_oid)
        observer_oid = unpack_oid(observer._p_oid)
        
        o_list = self.root.get(key, None)
        if o_list:
            return observer_oid in o_list
        return False
Exemplo n.º 3
0
    def stop_observing(self, target, observer):
        """Unregister observer as watching/dependent on target."""
        
        assert hasattr(target, '_p_oid'), 'target must be Persistent.'
        assert hasattr(observer, '_p_oid'), 'observer must be Persistent.'
        
        # newly-created objects that are uncommitted may not have OIDs yet
        if not target._p_oid or not observer._p_oid:
            return

        key = unpack_oid(target._p_oid)
        observer_oid = unpack_oid(observer._p_oid)
        
        o_list = self.root.get(key, None)
        if o_list:
            while observer_oid in o_list:
                o_list.remove(observer_oid)
Exemplo n.º 4
0
 def observe(self, target, observer):
     """Register observer as watching/dependent on target."""
     
     assert hasattr(target, '_p_oid'), 'target must be Persistent.'
     assert hasattr(observer, '_p_oid'), 'observer must be Persistent.'
     
     # newly-created objects that are uncommitted may not have OIDs yet
     if not target._p_oid or not observer._p_oid:
         return
     
     key = unpack_oid(target._p_oid)
     observer_oid = unpack_oid(observer._p_oid)
     
     o_list = self.root.get(key, None)
     if o_list is not None:
         if not observer_oid in o_list:
             o_list.append(observer_oid)
     else:
         self[key] = PersistentList([observer_oid])
Exemplo n.º 5
0
    def notify_changed(self, target):
        """Called by target to notify that it has changed."""
        assert hasattr(target, '_p_oid'), 'target must be Persistent.'

        # newly-created objects that are uncommitted may not have OIDs yet
        if not target._p_oid:
            return

        key = unpack_oid(target._p_oid)
        
        if self.root.has_key(key):
            del self[key]
Exemplo n.º 6
0
 def upgradeToVersion3(self):
 
     # move all data from ReaderList into BlogItems
     from qon.base import get_user_database
     user_db = get_user_database()
     
     for user_id, reader in self.__reader_list.readers.iteritems():
         user = user_db.get_user(user_id)
         if not user:
             continue
         user_oid = unpack_oid(user._p_oid)
         
         for item_id, data in reader.read_items.iteritems():
             dt, count = data
             item = self.get_item(item_id)
             
             item._BlogItem__user_access[user_oid] = (dt, count)
 
     del self.__reader_list
     self.version_upgrade_done()
Exemplo n.º 7
0
 def _get_user_access(self, user):
     if not hasattr(self, "_BlogItem__user_access"):
         return (never, 0)
         
     user_oid = unpack_oid(user._p_oid)
     return self.__user_access.get(user_oid, (never, 0))