3198: Fixed imports. Tests pass again.
[arvados.git] / services / fuse / arvados_fuse / fusefile.py
1 import logging
2 import re
3 import json
4
5 from fresh import FreshBase, convertTime
6
7 _logger = logging.getLogger('arvados.arvados_fuse')
8
9 class File(FreshBase):
10     """Base for file objects."""
11
12     def __init__(self, parent_inode, _mtime=0):
13         super(File, self).__init__()
14         self.inode = None
15         self.parent_inode = parent_inode
16         self._mtime = _mtime
17
18     def size(self):
19         return 0
20
21     def readfrom(self, off, size):
22         return ''
23
24     def mtime(self):
25         return self._mtime
26
27
28 class StreamReaderFile(File):
29     """Wraps a StreamFileReader as a file."""
30
31     def __init__(self, parent_inode, reader, _mtime):
32         super(StreamReaderFile, self).__init__(parent_inode, _mtime)
33         self.reader = reader
34
35     def size(self):
36         return self.reader.size()
37
38     def readfrom(self, off, size):
39         return self.reader.readfrom(off, size)
40
41     def stale(self):
42         return False
43
44
45 class StringFile(File):
46     """Wrap a simple string as a file"""
47     def __init__(self, parent_inode, contents, _mtime):
48         super(StringFile, self).__init__(parent_inode, _mtime)
49         self.contents = contents
50
51     def size(self):
52         return len(self.contents)
53
54     def readfrom(self, off, size):
55         return self.contents[off:(off+size)]
56
57
58 class ObjectFile(StringFile):
59     """Wrap a dict as a serialized json object."""
60
61     def __init__(self, parent_inode, obj):
62         super(ObjectFile, self).__init__(parent_inode, "", 0)
63         self.uuid = obj['uuid']
64         self.update(obj)
65
66     def update(self, obj):
67         self._mtime = convertTime(obj['modified_at']) if 'modified_at' in obj else 0
68         self.contents = json.dumps(obj, indent=4, sort_keys=True) + "\n"