# -*- coding: utf-8 -*-

"""
OS-related utils for python2/python3 compatibility
"""

from __future__ import unicode_literals, division, print_function

import sys
import os


if sys.version_info.major >= 3:
    # Python 3
    def path_exists(path):
        """Returns True if the given file or directory exists.  May raise
        exceptions, for instance if you don't have permission to stat()
        the given path.
        """
        try:
            os.stat(path)
            return True
        except FileNotFoundError:
            return False

    def makedirs(name, mode=0o777, exist_ok=False):
        """No-op wrapper around os.makedirs()"""
        return os.makedirs(name, mode=mode, exist_ok=exist_ok)

else:
    # Python 2
    def path_exists(path):
        """Returns True if the given file or directory exists.  May raise
        exceptions, for instance if you don't have permission to stat()
        the given path.
        """
        try:
            os.stat(path)
            return True
        except OSError as e:
            if e.errno == os.errno.ENOENT:
                return False
            else:
                raise

    def makedirs(name, mode=0o777, exist_ok=False):
        """Wrapper around os.makedirs() to support the python3-style "exist_ok"
        argument.
        """
        if not exist_ok:
            return os.makedirs(name, mode=mode)
        # Emulate exist_ok behaviour
        try:
            res = os.makedirs(name, mode=mode)
        except OSError as e:
            if e.errno == os.errno.EEXIST:
                return res
            else:
                raise
