Source code for pathlib_mate.mate_attr_accessor

# -*- coding: utf-8 -*-

"""
Provides additional attribute accessor.
"""

from typing import TYPE_CHECKING
from datetime import datetime

from .vendor import six

from .str_encode import encode_hexstr
from .helper import repr_data_size

if TYPE_CHECKING:  # pragma: no cover
    from .pathlib2 import Path


[docs]class AttrAccessor(object): """ Provides additional attribute accessor. """ # --- property methods that returns a value --- @property def abspath(self): r""" Return absolute path as a string. :type self: Path :rtype: str Example: ``C:\User\admin\readme.txt`` for ``C:\User\admin\readme.txt`` """ return self.absolute().__str__() @property def abspath_hexstr(self): """ Return absolute path encoded in hex string. :type self: Path :rtype: str """ return encode_hexstr(self.abspath) @property def dirpath(self): r""" Parent dir full absolute path. :type self: Path :rtype: str Example: ``C:\User\admin`` for ``C:\User\admin\readme.txt`` """ return self.parent.abspath @property def dirpath_hexstr(self): """ Return dir full absolute path encoded in hex string. :type self: Path :rtype: str """ return encode_hexstr(self.dirpath) @property def dirname(self): r""" Parent dir name. :type self: Path :rtype: str Example: ``admin`` for ``C:\User\admin\readme.txt`` """ return self.parent.name @property def dirname_hexstr(self): """ Parent dir name in hex string. :type self: Path :rtype: str """ return encode_hexstr(self.dirname) @property def basename(self): r""" File name with extension, path is not included. :type self: Path :rtype: str Example: ``readme.txt`` for ``C:\User\admin\readme.txt`` """ return self.name @property def basename_hexstr(self): """ File name with extension encoded in hex string. :type self: Path :rtype: str """ return encode_hexstr(self.basename) @property def fname(self): r""" File name without extension. :type self: Path :rtype: str Example: ``readme`` for ``C:\User\admin\readme.txt`` """ return self.stem @property def fname_hexstr(self): """ File name encoded in hex string. :type self: Path :rtype: str """ return encode_hexstr(self.fname) @property def ext(self): r""" File extension. If it's a dir, then return empty str. :type self: Path :rtype: str Example: ``.txt`` for ``C:\User\admin\readme.txt`` """ return self.suffix @property def size(self): """ File size in bytes. :type self: Path :rtype: int """ try: return self._stat.st_size except: # pragma: no cover self._stat = self.stat() return self.size @property def size_in_text(self): """ File size as human readable string. :type self: Path :rtype: str """ return repr_data_size(self.size, precision=2) @property def mtime(self): """ Get most recent modify time in timestamp. :type self: Path :rtype: float """ try: return self._stat.st_mtime except: # pragma: no cover self._stat = self.stat() return self.mtime @property def atime(self): """ Get most recent access time in timestamp. :type self: Path :rtype: float """ try: return self._stat.st_atime except: # pragma: no cover self._stat = self.stat() return self.atime @property def ctime(self): """ Get most recent create time in timestamp. :type self: Path :rtype: float """ try: return self._stat.st_ctime except: # pragma: no cover self._stat = self.stat() return self.ctime @property def modify_datetime(self): """ Get most recent modify time in datetime. :type self: Path :rtype: datetime """ return datetime.fromtimestamp(self.mtime) @property def access_datetime(self): """ Get most recent access time in datetime. :type self: Path :rtype: datetime """ return datetime.fromtimestamp(self.atime) @property def create_datetime(self): """ Get most recent create time in datetime. :type self: Path :rtype: datetime """ return datetime.fromtimestamp(self.ctime) def __contains__(self, item): if isinstance(item, six.string_types): return self.abspath in item else: return self.abspath in item.abspath def __iter__(self): current_self = self.__class__(self) while 1: parent = current_self.parent if parent == current_self: yield current_self break else: yield current_self current_self = parent