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