133 lines
		
	
	
		
			No EOL
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			No EOL
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import os, shutil
 | 
						|
from linuxmusterLinuxclient7 import logging
 | 
						|
 | 
						|
def removeLinesInFileContainingString(filePath, forbiddenStrings):
 | 
						|
    """
 | 
						|
    Remove all lines containing a given string form a file.
 | 
						|
 | 
						|
    :param filePath: The path to the file
 | 
						|
    :type filePath: str
 | 
						|
    :param forbiddenStrings: The string to search for
 | 
						|
    :type forbiddenStrings: str
 | 
						|
    :return: True on success, False otherwise
 | 
						|
    :rtype: bool
 | 
						|
    """
 | 
						|
    if not isinstance(forbiddenStrings, list):
 | 
						|
        forbiddenStrings = [forbiddenStrings]
 | 
						|
    
 | 
						|
    try:
 | 
						|
        with open(filePath, "r") as originalFile:
 | 
						|
            originalContents = originalFile.read()
 | 
						|
    except Exception as e:
 | 
						|
        logging.exception(e)
 | 
						|
        logging.warning("Could not read contents of original file")
 | 
						|
        return False
 | 
						|
 | 
						|
    newContents = ""
 | 
						|
    for line in originalContents.split("\n"):
 | 
						|
        lineIsClean = True
 | 
						|
        for forbiddenString in forbiddenStrings:
 | 
						|
            lineIsClean = lineIsClean and not forbiddenString in line
 | 
						|
            
 | 
						|
        if lineIsClean :
 | 
						|
            newContents += line + "\n"
 | 
						|
 | 
						|
    try:
 | 
						|
        with open(filePath, "w") as originalFile:
 | 
						|
            originalFile.write(newContents)
 | 
						|
    except Exception as e:    
 | 
						|
        logging.exception(e)
 | 
						|
        logging.warning("Could not write new contents to original file")
 | 
						|
        return False
 | 
						|
 | 
						|
    return True
 | 
						|
 | 
						|
def deleteFile(filePath):
 | 
						|
    """
 | 
						|
    Delete a file
 | 
						|
 | 
						|
    :param filePath: The path of the file
 | 
						|
    :type filePath: str
 | 
						|
    :return: True on success, False otherwise
 | 
						|
    :rtype: bool
 | 
						|
    """
 | 
						|
    try:
 | 
						|
        if os.path.exists(filePath):
 | 
						|
            os.unlink(filePath)
 | 
						|
        return True
 | 
						|
    except Exception as e:
 | 
						|
        logging.error("Failed!")
 | 
						|
        logging.exception(e)
 | 
						|
        return False
 | 
						|
 | 
						|
def deleteFilesWithExtension(directory, extension):
 | 
						|
    """
 | 
						|
    Delete all files with a given extension in a given directory.
 | 
						|
 | 
						|
    :param directory: The path of the directory
 | 
						|
    :type directory: str
 | 
						|
    :param extension: The file extension
 | 
						|
    :type extension: str
 | 
						|
    :return: True on success, False otherwise
 | 
						|
    :rtype: bool
 | 
						|
    """
 | 
						|
    if directory.endswith("/"):
 | 
						|
        directory = directory[:-1]
 | 
						|
        
 | 
						|
    if not os.path.exists(directory):
 | 
						|
        return True
 | 
						|
 | 
						|
    existingFiles=os.listdir(directory)
 | 
						|
 | 
						|
    for file in existingFiles:
 | 
						|
        if file.endswith(extension):
 | 
						|
            logging.info("* Deleting {}".format(file))
 | 
						|
            if not deleteFile("{}/{}".format(directory, file)):
 | 
						|
                logging.error("Failed!")
 | 
						|
                return False
 | 
						|
 | 
						|
    return True
 | 
						|
 | 
						|
def deleteDirectory(directory):
 | 
						|
    """
 | 
						|
    Recoursively delete a directory.
 | 
						|
 | 
						|
    :param directory: The path of the directory
 | 
						|
    :type directory: bool
 | 
						|
    :return: True on success, False otherwise
 | 
						|
    :rtype: bool
 | 
						|
    """
 | 
						|
    try:
 | 
						|
        shutil.rmtree(directory)
 | 
						|
    except:
 | 
						|
        return False
 | 
						|
    return True
 | 
						|
 | 
						|
def deleteAllInDirectory(directory):
 | 
						|
    """
 | 
						|
    Delete all files in a given directory
 | 
						|
 | 
						|
    :param directory: The path of the directory
 | 
						|
    :type directory: str
 | 
						|
    :return: True on success, False otherwise
 | 
						|
    :rtype: bool
 | 
						|
    """    
 | 
						|
 | 
						|
    if directory.endswith("/"):
 | 
						|
        directory = directory[:-1]
 | 
						|
        
 | 
						|
    if not os.path.exists(directory):
 | 
						|
        return True
 | 
						|
 | 
						|
    existingFiles=os.listdir(directory)
 | 
						|
    for file in existingFiles:
 | 
						|
        fullFilePath = "{}/{}".format(directory, file)
 | 
						|
        if os.path.isdir(fullFilePath):
 | 
						|
            rc = deleteDirectory(fullFilePath)
 | 
						|
        else:
 | 
						|
            rc = deleteFile(fullFilePath)
 | 
						|
        if not rc:
 | 
						|
            logging.error("Failed!")
 | 
						|
            return False
 | 
						|
 | 
						|
    return True |