import os.path
import re
import time
+import threading
import config
- time.timezone)
else:
raise ValueError
+
+
+class ThreadInvoker(threading.Thread):
+ def __init__(self, on_end, *methods):
+ super(ThreadInvoker, self).__init__()
+ self.on_end = on_end
+ self.methods = methods
+ def run(self):
+ try:
+ for m in self.methods:
+ m()
+ finally:
+ self.on_end()
+
+
+class FileWrap:
+ def __init__(self, path):
+ self._file = None
+ self._path = path
+ def __del__(self):
+ self.close()
+ def seek(self, size):
+ self.file().seek(size)
+ def write(self, data):
+ self.file().write(data)
+ def close(self):
+ if self._file:
+ self._file.close()
+ self._file = None
+ def file(self):
+ if not self._file:
+ basedir = os.path.dirname(self._path)
+ if not os.path.isdir(basedir):
+ os.makedirs(basedir)
+ self._file = file(self._path, "a+")
+ return self._file