-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFileObject.py
78 lines (49 loc) · 1.78 KB
/
FileObject.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
from CephFS import CephFS
class FileObject:
def __init__(self, cephFS = None, file = '', mode = ''):
self._cephFS = cephFS.getFileSystem()
self._path = file
self._mode = mode
self._fd = -1
self._seek = 0
if self._cephFS.state != 'mounted':
raise Exception('CephFS is not mounted!')
try:
self._fd = self._cephFS.open(self._path, self._mode)
except Exception as ex:
print(repr(ex))
def close(self):
self._cephFS.close(self._fd)
self._fd = -1
def flush(self):
self._cephFS.sync_fs()
def fileno(self):
return self._fd
# To Do, always return false at this stage
def isatty(self):
return False
def next(self):
raise Exception('next() not implmented!')
def read(self, size = -1):
if size == -1:
result = self._cephFS.read(self._fd, int(self._seek), int(self._cephFS.fstat(self._fd).st_size))
self._seek = self._cephFS.fstat(self._fd).st_size
return result
result = self._cephFS.read(self._fd, int(self._seek), size)
self._setSeek('r',size)
return result
def seek(self, offset, whence = 0):
ret = self._cephFS.lseek(self._fd, offset, whence)
self._seek = ret
return ret
def tell(self):
return self._seek
def _setSeek(self, mode, size):
fileLen = self._cephFS.fstat(self._fd).st_size
if mode == 'r':
if (size + self._seek) / fileLen < 1:
self._seek = size + self._seek
else:
self._seek = fileLen
def write(self):
raise Exception('next() not implmented!')