123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- from __future__ import annotations
- import os
- import sys
- import warnings
- from typing import TYPE_CHECKING
- from typing import Any
- if TYPE_CHECKING:
- if sys.version_info >= (3, 11):
- from typing import Self
- else:
- from typing_extensions import Self
- import smbprotocol.exceptions
- from upath import UPath
- _unset: Any = object()
- class SMBPath(UPath):
- __slots__ = ()
- def mkdir(self, mode=0o777, parents=False, exist_ok=False):
- # smbclient does not support setting mode externally
- if parents and not exist_ok and self.exists():
- raise FileExistsError(str(self))
- try:
- self.fs.mkdir(
- self.path,
- create_parents=parents,
- )
- except smbprotocol.exceptions.SMBOSError:
- if not exist_ok:
- raise FileExistsError(str(self))
- if not self.is_dir():
- raise FileExistsError(str(self))
- def iterdir(self):
- if not self.is_dir():
- raise NotADirectoryError(str(self))
- else:
- return super().iterdir()
- def rename(
- self,
- target: str | os.PathLike[str] | UPath,
- *,
- recursive: bool = _unset,
- maxdepth: int | None = _unset,
- **kwargs: Any,
- ) -> Self:
- if recursive is not _unset:
- warnings.warn(
- "SMBPath.rename(): recursive is currently ignored.",
- UserWarning,
- stacklevel=2,
- )
- if maxdepth is not _unset:
- warnings.warn(
- "SMBPath.rename(): maxdepth is currently ignored.",
- UserWarning,
- stacklevel=2,
- )
- return super().rename(target, **kwargs)
|