read_only.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. from __future__ import annotations
  2. import os.path
  3. from typing import TYPE_CHECKING
  4. from virtualenv.util.lock import NoOpFileLock
  5. from .via_disk_folder import AppDataDiskFolder, PyInfoStoreDisk
  6. if TYPE_CHECKING:
  7. from pathlib import Path
  8. from typing import NoReturn
  9. class ReadOnlyAppData(AppDataDiskFolder):
  10. can_update = False
  11. def __init__(self, folder: str) -> None:
  12. if not os.path.isdir(folder):
  13. msg = f"read-only app data directory {folder} does not exist"
  14. raise RuntimeError(msg)
  15. super().__init__(folder)
  16. self.lock = NoOpFileLock(folder)
  17. def reset(self) -> None:
  18. msg = "read-only app data does not support reset"
  19. raise RuntimeError(msg)
  20. def py_info_clear(self) -> None:
  21. raise NotImplementedError
  22. def py_info(self, path: Path) -> _PyInfoStoreDiskReadOnly:
  23. return _PyInfoStoreDiskReadOnly(self.py_info_at, path)
  24. def embed_update_log(self, distribution: str, for_py_version: str) -> NoReturn:
  25. raise NotImplementedError
  26. class _PyInfoStoreDiskReadOnly(PyInfoStoreDisk):
  27. def write(self, content: str) -> NoReturn: # noqa: ARG002
  28. msg = "read-only app data python info cannot be updated"
  29. raise RuntimeError(msg)
  30. __all__ = [
  31. "ReadOnlyAppData",
  32. ]