]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/blobdiff - src/allmydata/uri.py
uri.py: fix two interface violations in verifier URI classes. refs #1474
[tahoe-lafs/tahoe-lafs.git] / src / allmydata / uri.py
index cd3e7dc34e521e75c1ababea4acfd77629f56df2..62bf9b9aabd1708bd11dbc2cc3bb708255b15bb0 100644 (file)
@@ -410,7 +410,7 @@ class SSKVerifierURI(_BaseURI):
     def set_extension_params(self, params):
         pass
 
-class WritableMDMFFileURI(_BaseURI):
+class WriteableMDMFFileURI(_BaseURI):
     implements(IURI, IMutableFileURI)
 
     BASE_STRING='URI:MDMF:'
@@ -753,7 +753,7 @@ class MDMFDirectoryURI(_DirectoryBaseURI):
     BASE_STRING='URI:DIR2-MDMF:'
     BASE_STRING_RE=re.compile('^'+BASE_STRING)
     BASE_HUMAN_RE=re.compile('^'+OPTIONALHTTPLEAD+'URI'+SEP+'DIR2-MDMF'+SEP)
-    INNER_URI_CLASS=WritableMDMFFileURI
+    INNER_URI_CLASS=WriteableMDMFFileURI
 
     def __init__(self, filenode_uri=None):
         if filenode_uri:
@@ -801,7 +801,7 @@ def wrap_dirnode_cap(filecap):
         return ImmutableDirectoryURI(filecap)
     if isinstance(filecap, LiteralFileURI):
         return LiteralDirectoryURI(filecap)
-    if isinstance(filecap, WritableMDMFFileURI):
+    if isinstance(filecap, WriteableMDMFFileURI):
         return MDMFDirectoryURI(filecap)
     if isinstance(filecap, ReadonlyMDMFFileURI):
         return ReadonlyMDMFDirectoryURI(filecap)
@@ -826,6 +826,13 @@ class MDMFDirectoryURIVerifier(_DirectoryBaseURI):
     def is_mutable(self):
         return False
 
+    def is_readonly(self):
+        return True
+
+    def get_readonly(self):
+        return self
+
+
 class DirectoryURIVerifier(_DirectoryBaseURI):
     implements(IVerifierURI)
 
@@ -845,6 +852,12 @@ class DirectoryURIVerifier(_DirectoryBaseURI):
     def is_mutable(self):
         return False
 
+    def is_readonly(self):
+        return True
+
+    def get_readonly(self):
+        return self
+
 
 class ImmutableDirectoryURIVerifier(DirectoryURIVerifier):
     implements(IVerifierURI)
@@ -913,9 +926,13 @@ def from_string(u, deep_immutable=False, name=u"<unknown name>"):
         elif s.startswith('URI:SSK-Verifier:'):
             return SSKVerifierURI.init_from_string(s)
         elif s.startswith('URI:MDMF:'):
-            return WritableMDMFFileURI.init_from_string(s)
+            if can_be_writeable:
+                return WriteableMDMFFileURI.init_from_string(s)
+            kind = "URI:MDMF file writecap"
         elif s.startswith('URI:MDMF-RO:'):
-            return ReadonlyMDMFFileURI.init_from_string(s)
+            if can_be_mutable:
+                return ReadonlyMDMFFileURI.init_from_string(s)
+            kind = "URI:MDMF-RO readcap to a mutable file"
         elif s.startswith('URI:MDMF-Verifier:'):
             return MDMFVerifierURI.init_from_string(s)
         elif s.startswith('URI:DIR2:'):
@@ -930,6 +947,8 @@ def from_string(u, deep_immutable=False, name=u"<unknown name>"):
             return DirectoryURIVerifier.init_from_string(s)
         elif s.startswith('URI:DIR2-CHK:'):
             return ImmutableDirectoryURI.init_from_string(s)
+        elif s.startswith('URI:DIR2-CHK-Verifier:'):
+            return ImmutableDirectoryURIVerifier.init_from_string(s)
         elif s.startswith('URI:DIR2-LIT:'):
             return LiteralDirectoryURI.init_from_string(s)
         elif s.startswith('URI:DIR2-MDMF:'):
@@ -940,6 +959,8 @@ def from_string(u, deep_immutable=False, name=u"<unknown name>"):
             if can_be_mutable:
                 return ReadonlyMDMFDirectoryURI.init_from_string(s)
             kind = "URI:DIR2-MDMF-RO readcap to a mutable directory"
+        elif s.startswith('URI:DIR2-MDMF-Verifier:'):
+            return MDMFDirectoryURIVerifier.init_from_string(s)
         elif s.startswith('x-tahoe-future-test-writeable:') and not can_be_writeable:
             # For testing how future writeable caps would behave in read-only contexts.
             kind = "x-tahoe-future-test-writeable: testing cap"