aboutsummaryrefslogtreecommitdiff
path: root/utils/file_utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'utils/file_utils.py')
-rw-r--r--utils/file_utils.py91
1 files changed, 91 insertions, 0 deletions
diff --git a/utils/file_utils.py b/utils/file_utils.py
new file mode 100644
index 00000000..987e88ad
--- /dev/null
+++ b/utils/file_utils.py
@@ -0,0 +1,91 @@
+#!/usr/bin/python
+
+# Copyright 2011 Google Inc. All Rights Reserved.
+
+import errno
+import hashlib
+import os
+import shutil
+
+
+class FileUtils(object):
+ """Utilities for operations on files."""
+ _instance = None
+ DRY_RUN = False
+
+ @classmethod
+ def Configure(cls, dry_run):
+ cls.DRY_RUN = dry_run
+
+ def __new__(cls, *args, **kwargs):
+ if not cls._instance:
+ if cls.DRY_RUN:
+ cls._instance = super(FileUtils, cls).__new__(MockFileUtils, *args,
+ **kwargs)
+ else:
+ cls._instance = super(FileUtils, cls).__new__(cls, *args,
+ **kwargs)
+ return cls._instance
+
+ def Md5File(self, filename, block_size=2 ** 10):
+ md5 = hashlib.md5()
+
+ with open(filename) as f:
+ while True:
+ data = f.read(block_size)
+ if not data:
+ break
+ md5.update(data)
+
+ return md5.hexdigest()
+
+ def CanonicalizeChromeOSRoot(self, chromeos_root):
+ chromeos_root = os.path.expanduser(chromeos_root)
+ if os.path.isfile(os.path.join(chromeos_root,
+ "src/scripts/enter_chroot.sh")):
+ return chromeos_root
+ else:
+ return None
+
+ def ChromeOSRootFromImage(self, chromeos_image):
+ chromeos_root = os.path.join(os.path.dirname(chromeos_image),
+ "../../../../..")
+ return self.CanonicalizeChromeOSRoot(chromeos_root)
+
+ def MkDirP(self, path):
+ try:
+ os.makedirs(path)
+ except OSError as exc:
+ if exc.errno == errno.EEXIST:
+ pass
+ else:
+ raise
+
+ def RmDir(self, path):
+ shutil.rmtree(path, ignore_errors=True)
+
+ def WriteFile(self, path, contents):
+ with open(path, "wb") as f:
+ f.write(contents)
+
+
+class MockFileUtils(FileUtils):
+ """Mock class for file utilities."""
+
+ def Md5File(self, filename, block_size=2 ** 10):
+ return "d41d8cd98f00b204e9800998ecf8427e"
+
+ def CanonicalizeChromeOSRoot(self, chromeos_root):
+ return "/tmp/chromeos_root"
+
+ def ChromeOSRootFromImage(self, chromeos_image):
+ return "/tmp/chromeos_root"
+
+ def RmDir(self, path):
+ pass
+
+ def MkDirP(self, path):
+ pass
+
+ def WriteFile(self, path, contents):
+ pass