¡@

Home 

OpenStack Study: fileutils.py

OpenStack Index

**** CubicPower OpenStack Study ****

def ensure_tree(path):

    """Create a directory (and any ancestor directories required)

    :param path: Directory to create

    """

    try:

        os.makedirs(path)

    except OSError as exc:

        if exc.errno == errno.EEXIST:

            if not os.path.isdir(path):

                raise

        else:

            raise

**** CubicPower OpenStack Study ****

def read_cached_file(filename, force_reload=False):

    """Read from a file if it has been modified.

    :param force_reload: Whether to reload the file.

    :returns: A tuple with a boolean specifying if the data is fresh

              or not.

    """

    global _FILE_CACHE

    if force_reload and filename in _FILE_CACHE:

        del _FILE_CACHE[filename]

    reloaded = False

    mtime = os.path.getmtime(filename)

    cache_info = _FILE_CACHE.setdefault(filename, {})

    if not cache_info or mtime > cache_info.get('mtime', 0):

        LOG.debug(_("Reloading cached file %s") % filename)

        with open(filename) as fap:

            cache_info['data'] = fap.read()

        cache_info['mtime'] = mtime

        reloaded = True

    return (reloaded, cache_info['data'])

**** CubicPower OpenStack Study ****

def delete_if_exists(path):

    """Delete a file, but ignore file not found error.

    :param path: File to delete

    """

    try:

        os.unlink(path)

    except OSError as e:

        if e.errno == errno.ENOENT:

            return

        else:

            raise

@contextlib.contextmanager

**** CubicPower OpenStack Study ****

def remove_path_on_error(path):

    """Protect code that wants to operate on PATH atomically.

    Any exception will cause PATH to be removed.

    :param path: File to work with

    """

    try:

        yield

    except Exception:

        with excutils.save_and_reraise_exception():

            delete_if_exists(path)

**** CubicPower OpenStack Study ****

def file_open(*args, **kwargs):

    """Open file

    see built-in file() documentation for more details

    Note: The reason this is kept in a separate module is to easily

    be able to provide a stub module that doesn't alter system

    state at all (for unit tests)

    """

    return file(*args, **kwargs)