1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 import errno
19
20 from twisted.internet import defer
21
22 from flumotion.common import log
23
24 from flumotion.component.misc.httpserver import fileprovider
25 from flumotion.component.misc.httpserver import cachestats
26
27 LOG_CATEGORY = "resource-manager"
28
29
30 errnoLookup = {errno.ENOENT: fileprovider.NotFoundError,
31 errno.EISDIR: fileprovider.CannotOpenError,
32 errno.EACCES: fileprovider.AccessError}
33
34
36 """
37 Base class for all resources data source.
38 """
39
40 url = None
41 identifier = None
42 mimeType = None
43 mtime = None
44 size = None
45
46 - def read(self, offset, size):
47 raise NotImplementedError()
48
50 raise NotImplementedError()
51
52
76
77
79 """
80 Offers a file-like interface of a data source.
81 Handle errors and asynchronous readings and file offset.
82 """
83
89
92
94 return self._source.mtime
95
97 return self._source.size
98
101
102 - def seek(self, offset):
105
106 - def read(self, size):
121
122 - def produce(self, consumer, fromOffset=None):
123 """
124 Returns a producer that produce data from the specified position
125 or from the current position if None is specified.
126 Can return None if a producer cannot be provided or is not convenient.
127 """
128 self._check()
129 return self._source.produce(consumer, fromOffset or self._offset)
130
132 self._check()
133 self._source.close()
134 self._source = None
135
138
139
140
144
145 - def _open(self, source):
148
149
150
155