5 from fresh import FreshBase, convertTime
7 _logger = logging.getLogger('arvados.arvados_fuse')
10 """Base for file objects."""
12 def __init__(self, parent_inode, _mtime=0):
13 super(File, self).__init__()
15 self.parent_inode = parent_inode
21 def readfrom(self, off, size, num_retries=0):
24 def writeto(self, off, size, num_retries=0):
25 raise Exception("Not writable")
30 def clear(self, force=False):
39 class FuseArvadosFile(File):
40 """Wraps a ArvadosFile."""
42 def __init__(self, parent_inode, arvfile, _mtime):
43 super(FuseArvadosFile, self).__init__(parent_inode, _mtime)
44 self.arvfile = arvfile
47 return self.arvfile.size()
49 def readfrom(self, off, size, num_retries=0):
50 return self.arvfile.readfrom(off, size, num_retries, exact=True)
52 def writeto(self, off, buf, num_retries=0):
53 return self.arvfile.writeto(off, buf, num_retries)
59 return self.arvfile.writable()
63 self.arvfile.parent.root_collection().save()
66 class StringFile(File):
67 """Wrap a simple string as a file"""
68 def __init__(self, parent_inode, contents, _mtime):
69 super(StringFile, self).__init__(parent_inode, _mtime)
70 self.contents = contents
73 return len(self.contents)
75 def readfrom(self, off, size, num_retries=0):
76 return self.contents[off:(off+size)]
79 class ObjectFile(StringFile):
80 """Wrap a dict as a serialized json object."""
82 def __init__(self, parent_inode, obj):
83 super(ObjectFile, self).__init__(parent_inode, "", 0)
84 self.uuid = obj['uuid']
87 def update(self, obj):
88 self._mtime = convertTime(obj['modified_at']) if 'modified_at' in obj else 0
89 self.contents = json.dumps(obj, indent=4, sort_keys=True) + "\n"