| import os |
| from typing import Union |
| |
| _Path = Union[str, os.PathLike] |
| |
| |
| def ensure_directory(path): |
| """Ensure that the parent directory of `path` exists""" |
| dirname = os.path.dirname(path) |
| os.makedirs(dirname, exist_ok=True) |
| |
| |
| def same_path(p1: _Path, p2: _Path) -> bool: |
| """Differs from os.path.samefile because it does not require paths to exist. |
| Purely string based (no comparison between i-nodes). |
| >>> same_path("a/b", "./a/b") |
| True |
| >>> same_path("a/b", "a/./b") |
| True |
| >>> same_path("a/b", "././a/b") |
| True |
| >>> same_path("a/b", "./a/b/c/..") |
| True |
| >>> same_path("a/b", "../a/b/c") |
| False |
| >>> same_path("a", "a/b") |
| False |
| """ |
| return os.path.normpath(p1) == os.path.normpath(p2) |