_permission.py 779 B

12345678910111213141516171819202122232425262728293031323334
  1. from __future__ import annotations
  2. import os
  3. from stat import S_IXGRP, S_IXOTH, S_IXUSR
  4. from typing import TYPE_CHECKING
  5. if TYPE_CHECKING:
  6. from pathlib import Path
  7. def make_exe(filename: Path) -> None:
  8. original_mode = filename.stat().st_mode
  9. levels = [S_IXUSR, S_IXGRP, S_IXOTH]
  10. for at in range(len(levels), 0, -1):
  11. try:
  12. mode = original_mode
  13. for level in levels[:at]:
  14. mode |= level
  15. filename.chmod(mode)
  16. break
  17. except OSError:
  18. continue
  19. def set_tree(folder: Path, stat: int) -> None:
  20. for root, _, files in os.walk(str(folder)):
  21. for filename in files:
  22. os.chmod(os.path.join(root, filename), stat)
  23. __all__ = (
  24. "make_exe",
  25. "set_tree",
  26. )