# # Copyright (C) 2017 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # import logging import os import shutil import tempfile def FindFile(directory, filename): '''Find a file under directory given the filename. Args: directory: string, directory path filename: string, file name to find Returns: String, path to the file found. None if not found. ''' for (dirpath, dirnames, filenames) in os.walk( directory, followlinks=False): for fn in filenames: if fn == filename: return os.path.join(dirpath, filename) return None def Rmdirs(path, ignore_errors=False): '''Remove the given directory and its contents recursively. Args: path: string, directory to delete ignore_errors: bool, whether to ignore errors. Defaults to False Returns: bool, True if directory is deleted. False if errors occur or directory does not exist. ''' return_value = False if os.path.exists(path): try: shutil.rmtree(path, ignore_errors=ignore_errors) return_value = True except OSError as e: logging.exception(e) return return_value def Makedirs(path, skip_if_exists=True): '''Make directories lead to the given path. Args: path: string, directory to make skip_if_exists: bool, True for ignoring exisitng dir. False for throwing error from os.mkdirs. Defaults to True Returns: bool, True if directory is created. False if errors occur or directory already exist. ''' return_value = False if not skip_if_exists or not os.path.exists(path): try: os.makedirs(path) return_value = True except OSError as e: logging.exception(e) return return_value def MakeTempDir(base_dir): """Make a temp directory based on the given path and return its path. Args: base_dir: string, base directory to make temp directory. Returns: string, relative path to created temp directory """ Makedirs(base_dir) return tempfile.mkdtemp(dir=base_dir)