- # don't cache UnknownNode
- node = UnknownNode(writecap, readcap, deep_immutable=deep_immutable, name=name)
+ cap = uri.from_string(bigcap, deep_immutable=deep_immutable,
+ name=name)
+ node = self._create_from_single_cap(cap)
+ if node:
+ self._node_cache[memokey] = node # note: WeakValueDictionary
+ else:
+ # don't cache UnknownNode
+ node = UnknownNode(writecap, readcap,
+ deep_immutable=deep_immutable, name=name)
+
+ if self.blacklist:
+ si = node.get_storage_index()
+ # if this node is blacklisted, return the reason, otherwise return None
+ reason = self.blacklist.check_storageindex(si)
+ if reason is not None:
+ # The original node object is cached above, not the ProhibitedNode wrapper.
+ # This ensures that removing the blacklist entry will make the node
+ # accessible if create_from_cap is called again.
+ node = ProhibitedNode(node, reason)