#!/usr/bin/python2 import os import ctypes import ctypes.util import json import collections import subprocess import fileinput import re class Utils(object): def __init__(self): self.filesystems = [] with open('/proc/filesystems') as fs: for line in fs: self.filesystems.append(line.rstrip('\n').split('\t')[1]) self.libcloader = ctypes.CDLL(ctypes.util.find_library('c'), use_errno=True) def mount(self, source, destination, filesystem, flags): if not os.access(source, os.R_OK): raise Exception("Could not find path " + source) if not os.access(destination, os.F_OK): os.mkdir(destination) if not os.access(destination, os.W_OK): raise Exception("Could not write to path " + destination) if filesystem not in self.filesystems: raise ValueError("Filesystem unknown") ret = self.libcloader.mount(ctypes.c_char_p(source), ctypes.c_char_p(destination), ctypes.c_char_p(filesystem), ctypes.c_char_p(flags), 0) if ret != 0: raise RuntimeError("Cannot mount {} : {}".format(source, os.strerror(ctypes.get_errno()))) def umount(self, destination): ret = self.libcloader.umount(ctypes.c_char_p(destination)) if ret != 0: raise RuntimeError("Cannot umount {} : {}".format(destination, os.strerror(ctypes.get_errno()))) def jsonread(self, filename): json_data = open(filename) data = json.load(json_data, object_pairs_hook=collections.OrderedDict) json_data.close() return data def runshellcommand(self, cmd, ignore_errors=False): command=cmd.split() p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE) output, err = p.communicate() rc = p.returncode if not ignore_errors: if rc != 0: print err raise RuntimeError("Cannot run command {}".format(cmd)) return output def replaceinfile(self, filename, pattern, sub): for line in fileinput.input(filename, inplace=True): line = re.sub(pattern, sub, line) print line, def replaceandsaveasnewfile(self, old_file, new_file, pattern, sub): with open(old_file, "r") as old, open(new_file, "w") as new: for line in old: line = re.sub(pattern, sub, line) new.write(line) def copyallfiles(self, src, target): files = os.listdir(src) for file in files: filename = os.path.join(src, file) if (os.path.isfile(filename)): shutil.copy(filename, target)