def add_filter(info: tarfile.TarInfo) -> Optional[tarfile.TarInfo]: """Filter files targeted to be added to tarfile. Args: info: Information on the file targeted to be added Returns: None: if file is not to be added TarInfo: when file is to be added. Modified as needed. Notes: exclude is captured from parent """ if not (info.isfile() or info.isdir() or info.issym()): return None if _exclude_matcher(info.name, exclude): return None # Workaround https://bugs.python.org/issue32713. Fixed in Python 3.7 if info.mtime < 0 or info.mtime > 8 ** 11 - 1: info.mtime = int(info.mtime) # do not leak client information to service info.uid = 0 info.uname = info.gname = "root" if sys.platform == "win32": info.mode = info.mode & 0o755 | 0o111 return info
def _filter(self, tarinfo: tarfile.TarInfo): size = tarinfo.size if tarinfo.isdir(): size = dir_size( os.path.join(self.temp_path, os.path.basename(tarinfo.name))) size = size_converter(size, self.is_for_human) self.logger.info('pack {0} → {1}'.format(tarinfo.name, size)) return tarinfo
def _member_is_safe(member: tarfile.TarInfo) -> bool: if member.isfile(): return getattr(member, 'sparse', None) is None return member.isdir() or member.issym() or member.islnk()
def my_filter(tarinfo: tarfile.TarInfo): if tarinfo.isfile() or tarinfo.isdir(): # only handle basic file types for now return tarinfo else: return None
def _member_is_safe(member: tarfile.TarInfo) -> bool: return ( member.isfile() or member.isdir() or member.issym() or member.islnk() )