Beispiel #1
0
class AliasAnnotations(DictMixin):
    """Layer draft annotations atop target annotations
    """
    
    implements(IAnnotations)
    adapts(IDraftProxy)
   
    def __init__(self, proxy):
        self.proxy = proxy
        
        self.draft = self.proxy._DraftProxy__draft
        self.target = self.proxy._DraftProxy__target
        
        self.draftAnnotations = IAnnotations(self.draft)
        self.targetAnnotations = IAnnotations(self.target)
       
    def __nonzero__(self):
        return self.targetAnnotations.__nonzero__() or self.draftAnnotations.__nonzero__()
   
    def get(self, key, default=None):
        
        deleted = getattr(self.draft, '_proxyAnnotationsDeleted', set())
        if key in deleted:
            return default
        
        value = self.draftAnnotations.get(key, _marker)
        if value is _marker:
            value = self.targetAnnotations.get(key, _marker)
        if value is _marker:
            return default
        
        return value
   
    def __getitem__(self, key):
        value = self.get(key, _marker)
        if value is _marker:
            raise KeyError(key)
        return value
   
    def keys(self):
        deleted = getattr(self.draft, '_proxyAnnotationsDeleted', set())
        keys = set(self.draftAnnotations.keys())
        keys.update(self.targetAnnotations.keys())
        return tuple(keys - deleted)
   
    def __setitem__(self, key, value):
        self.draftAnnotations[key] = value
        
        deleted = getattr(self.draft, '_proxyAnnotationsDeleted', set())
        if key in deleted:
            deleted.remove(key)
            self.draft._proxyAnnotationsDeleted = deleted
   
    def setdefault(self, key, default):
        value = self.get(key, _marker)
        if value is _marker:
            self[key] = value = default
            
            deleted = getattr(self.draft, '_proxyAnnotationsDeleted', set())
            if key in deleted:
                deleted.remove(key)
                self.draft._proxyAnnotationsDeleted = deleted
        
        return value
   
    def __delitem__(self, key):
        self[key] # allow KeyError to be raised if we don't have this key
        
        if key in self.draftAnnotations:
            del self.draftAnnotations[key]
        
        deleted = getattr(self.draft, '_proxyAnnotationsDeleted', set())
        deleted.add(key)
        self.draft._proxyAnnotationsDeleted = deleted
Beispiel #2
0
class AliasAnnotations(DictMixin):
    """Layer draft annotations atop target annotations
    """

    def __init__(self, proxy):
        self.proxy = proxy

        self.draft = self.proxy._DraftProxy__draft
        self.target = self.proxy._DraftProxy__target

        self.draftAnnotations = IAnnotations(self.draft)
        self.targetAnnotations = IAnnotations(self.target)

    def __nonzero__(self):
        return self.targetAnnotations.__nonzero__() or \
            self.draftAnnotations.__nonzero__()

    def get(self, key, default=None):

        deleted = getattr(self.draft, '_proxyAnnotationsDeleted', set())
        if key in deleted:
            return default

        value = self.draftAnnotations.get(key, _marker)
        if value is _marker:
            value = self.targetAnnotations.get(key, _marker)
        if value is _marker:
            return default

        return value

    def __getitem__(self, key):
        value = self.get(key, _marker)
        if value is _marker:
            raise KeyError(key)
        return value

    def keys(self):
        deleted = getattr(self.draft, '_proxyAnnotationsDeleted', set())
        keys = set(self.draftAnnotations.keys())
        keys.update(self.targetAnnotations.keys())
        return tuple(keys - deleted)

    def __setitem__(self, key, value):
        self.draftAnnotations[key] = value

        deleted = getattr(self.draft, '_proxyAnnotationsDeleted', set())
        if key in deleted:
            deleted.remove(key)
            self.draft._proxyAnnotationsDeleted = deleted

    def setdefault(self, key, default=None):
        value = self.get(key, _marker)
        if value is _marker:
            self[key] = value = default

            deleted = getattr(self.draft, '_proxyAnnotationsDeleted', set())
            if key in deleted:
                deleted.remove(key)
                self.draft._proxyAnnotationsDeleted = deleted

        return value

    def __delitem__(self, key):
        self[key]  # allow KeyError to be raised if we don't have this key

        if key in self.draftAnnotations:
            del self.draftAnnotations[key]

        deleted = getattr(self.draft, '_proxyAnnotationsDeleted', set())
        deleted.add(key)
        self.draft._proxyAnnotationsDeleted = deleted