# All segments which have been accessed this session.
accessed_segments = set()
+def uri_decode(s):
+ """Decode a URI-encoded (%xx escapes) string."""
+ def hex_decode(m): return chr(int(m.group(1), 16))
+ return re.sub(r"%([0-9a-f]{2})", hex_decode, s)
+def uri_encode(s):
+ """Encode a string to URI-encoded (%xx escapes) form."""
+ def hex_encode(c):
+ if c > '+' and c < '\x7f' and c != '@':
+ return c
+ else:
+ return "%%%02x" % (ord(c),)
+ return ''.join(hex_encode(c) for c in s)
+
class Struct:
"""A class which merely acts as a data container.
"""
def __init__(self, path):
- if path.find(":") >= 0:
+ if isinstance(path, cumulus.store.Store):
+ self.store = path
+ elif path.find(":") >= 0:
self.store = cumulus.store.open(path)
else:
self.store = cumulus.store.file.FileStore(path)
@staticmethod
def decode_str(s):
"""Decode a URI-encoded (%xx escapes) string."""
- def hex_decode(m): return chr(int(m.group(1), 16))
- return re.sub(r"%([0-9a-f]{2})", hex_decode, s)
+ return uri_decode(s)
@staticmethod
def raw_str(s):