Source code for sphinx_automagicdoc.mock_filesystem

# pylint: disable=no-member
import io
import os
import shutil
from pathlib import Path
from typing import Dict, Optional

import docutils.io  # pylint: disable=import-error

from .mock import mock

base_path = os.getcwd()
virtual_files: Dict[str, str] = {}


[docs]def startstrip(search: str, pattern: str) -> Optional[str]: search, pattern = str(search), str(pattern) if search.startswith(pattern): return search[len(pattern) :] return None
[docs]def find_virtual(path: str) -> Optional[str]: match = startstrip(path, base_path) if match is not None and match[1:] in virtual_files: return virtual_files[match[1:]] return None
[docs]@mock(os.walk, module=os) def os_walk(*args, **kwargs): for path, dirs, files in os.walk.original(*args, **kwargs): if path == base_path: files += [ virtual_file_name.split('/')[-1] for virtual_file_name in virtual_files ] yield path, dirs, files
[docs]@mock(os.access, module=os) def os_access(*args, **kwargs): if find_virtual(args[0]): return True return os.access.original(*args, **kwargs)
[docs]@mock(os.stat, module=os) def os_stat(*args, **kwargs): if find_virtual(args[0]): return os.stat_result([0] * 10) return os.stat.original(*args, **kwargs)
[docs]@mock(open, module=docutils.io) def docutils_io_opem(*args, **kwargs): file_match = find_virtual(args[0]) if file_match: return io.TextIOWrapper(io.BytesIO(file_match.encode('utf-8'))) return docutils.io.open.original(*args, **kwargs)
[docs]@mock(shutil.copyfile, module=shutil) def shutil_copyfile(*args, **kwargs): file_match = find_virtual(args[0]) if file_match: Path(args[1]).write_text(file_match, encoding="utf-8") return True return shutil.copyfile.original(*args, **kwargs)