Revision 0e5084ee
b/lib/utils/io.py | ||
---|---|---|
38 | 38 |
_RANDOM_UUID_FILE = "/proc/sys/kernel/random/uuid" |
39 | 39 |
|
40 | 40 |
|
41 |
def ReadFile(file_name, size=-1): |
|
41 |
def ReadFile(file_name, size=-1, preread=None):
|
|
42 | 42 |
"""Reads a file. |
43 | 43 |
|
44 | 44 |
@type size: int |
45 | 45 |
@param size: Read at most size bytes (if negative, entire file) |
46 |
@type preread: callable receiving file handle as single parameter |
|
47 |
@param preread: Function called before file is read |
|
46 | 48 |
@rtype: str |
47 | 49 |
@return: the (possibly partial) content of the file |
48 | 50 |
|
49 | 51 |
""" |
50 | 52 |
f = open(file_name, "r") |
51 | 53 |
try: |
54 |
if preread: |
|
55 |
preread(f) |
|
56 |
|
|
52 | 57 |
return f.read(size) |
53 | 58 |
finally: |
54 | 59 |
f.close() |
b/test/ganeti.utils.io_unittest.py | ||
---|---|---|
55 | 55 |
h.update(data) |
56 | 56 |
self.assertEqual(h.hexdigest(), "893772354e4e690b9efd073eed433ce7") |
57 | 57 |
|
58 |
def testCallback(self): |
|
59 |
def _Cb(fh): |
|
60 |
self.assertEqual(fh.tell(), 0) |
|
61 |
data = utils.ReadFile(self._TestDataFilename("cert1.pem"), preread=_Cb) |
|
62 |
self.assertEqual(len(data), 814) |
|
63 |
|
|
58 | 64 |
def testError(self): |
59 | 65 |
self.assertRaises(EnvironmentError, utils.ReadFile, |
60 | 66 |
"/dev/null/does-not-exist") |
Also available in: Unified diff