code_junkie

setting the gzip timestamp from Python

Nov 12th, 2011
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. write32u(self.fileobj, long(time.time()))
  2.  
  3. class FakeTime:
  4. def time(self):
  5. return 1225856967.109
  6.  
  7. import gzip
  8. gzip.time = FakeTime()
  9.  
  10. # Now call gzip, it will think time doesn't change!
  11.  
  12. class GzipTimeFixingFile:
  13. def __init__(self, realfile):
  14. self.realfile = realfile
  15. self.pos = 0
  16.  
  17. def write(self, bytes):
  18. if self.pos == 4 and len(bytes) == 4:
  19. self.realfile.write("XYZY") # Fake time goes here.
  20. else:
  21. self.realfile.write(bytes)
  22. self.pos += len(bytes)
  23.  
  24. def _write_gzip_header(self):
  25. self.fileobj.write('37213') # magic header
  26. self.fileobj.write('10') # compression method
  27. fname = self.filename[:-3]
  28. flags = 0
  29. if fname:
  30. flags = FNAME
  31. self.fileobj.write(chr(flags))
  32. write32u(self.fileobj, long(time.time())) # The current time!
  33. self.fileobj.write('02')
  34. self.fileobj.write('377')
  35. if fname:
  36. self.fileobj.write(fname + '00')
  37.  
  38. import time
  39.  
  40. def fake_time():
  41. return 100000000.0
  42.  
  43. def do_gzip(content):
  44. orig_time = time.time
  45. time.time = fake_time
  46. # result = do gzip stuff here
  47. time.time = orig_time
  48. return result
Add Comment
Please, Sign In to add comment