0x1949 Team - FAZEMRX - MANAGER
Edit File: zipp.cpython-310.pyc
o ��f � @ s� d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl Z e Zdd� Zdd� Z G dd� d�ZG d d � d �ZdS )� )�divisionNc C s t �t| �dd�S )a2 Given a path with elements separated by posixpath.sep, generate all parents of that path. >>> list(_parents('b/d')) ['b'] >>> list(_parents('/b/d/')) ['/b'] >>> list(_parents('b/d/f/')) ['b/d', 'b'] >>> list(_parents('b')) [] >>> list(_parents('')) [] � N)� itertools�islice� _ancestry��path� r �&/usr/lib/python3/dist-packages/zipp.py�_parents s r c c sN � | � tj�} | r!| tjkr%| V t�| �\} }| r#| tjksdS dS dS dS )aR Given a path with elements separated by posixpath.sep, generate all elements of that path >>> list(_ancestry('b/d')) ['b/d', 'b'] >>> list(_ancestry('/b/d/')) ['/b/d', '/b'] >>> list(_ancestry('b/d/f/')) ['b/d/f', 'b/d', 'b'] >>> list(_ancestry('b')) ['b'] >>> list(_ancestry('')) [] N)�rstrip� posixpath�sep�split)r �tailr r r r % s ��r c s, e Zd ZdZ� fdd�Zedd� �Z� ZS )�SanitizedNamesz7 ZipFile mix-in to ensure names are sanitized. c s t t| jt� �� ��S �N)�list�map� _sanitize�super�namelist��self�� __class__r r r ? s zSanitizedNames.namelistc C s` dd� }t jdd| t jd�}|�dd�}|�d�}d�t||��}|s'td��|d| �d� S ) a] Ensure a relative path with posix separators and no dot names. Modeled after https://github.com/python/cpython/blob/bcc1be39cb1d04ad9fc0bd1b9193d3972835a57c/Lib/zipfile/__init__.py#L1799-L1813 but provides consistent cross-platform behavior. >>> san = SanitizedNames._sanitize >>> san('/foo/bar') 'foo/bar' >>> san('//foo.txt') 'foo.txt' >>> san('foo/.././bar.txt') 'foo/bar.txt' >>> san('foo../.bar.txt') 'foo../.bar.txt' >>> san('\\foo\\bar.txt') 'foo/bar.txt' >>> san('D:\\foo.txt') 'D/foo.txt' >>> san('\\\\server\\share\\file.txt') 'server/share/file.txt' >>> san('\\\\?\\GLOBALROOT\\Volume3') '?/GLOBALROOT/Volume3' >>> san('\\\\.\\PhysicalDrive1\\root') 'PhysicalDrive1/root' Retain any trailing slash. >>> san('abc/') 'abc/' Raises a ValueError if the result is empty. >>> san('../..') Traceback (most recent call last): ... ValueError: Empty filename c S s | o| dvS )N> �..�.r )�partr r r �allowedf � z)SanitizedNames._sanitize.<locals>.allowedz ^([A-Z]):z\1)�flags�\�/zEmpty filename) �re�sub� IGNORECASE�replacer �join�filter� ValueError�endswith)�namer �bare�clean�parts�joinedr r r r B s $ zSanitizedNames._sanitize)�__name__� __module__�__qualname__�__doc__r �staticmethodr � __classcell__r r r r r : s r c @ s� e Zd ZdZdZd,dd�Zedd� �Zedd � �Z ed d� �Z dd � Zdd� Zdd� Z dd� Zdd� Zdd� Zdd� Zdd� Zdd� Zdd� Zd d!� ZeZed"d#� �Zed$d%� �Zed&d'� �Zd(d)� Zejd*k rleZd+S d+S )-�Pathu� A pathlib-compatible interface for zip files. Consider a zip file with this structure:: . ├── a.txt └── b ├── c.txt └── d └── e.txt >>> data = io.BytesIO() >>> zf = zipfile.ZipFile(data, 'w') >>> zf.writestr('a.txt', 'content of a') >>> zf.writestr('b/c.txt', 'content of c') >>> zf.writestr('b/d/e.txt', 'content of e') >>> zf.filename = 'abcde.zip' Path accepts the zipfile object itself or a filename >>> root = Path(zf) From there, several path operations are available. Directory iteration (including the zip file itself): >>> a, b = root.iterdir() >>> a Path('abcde.zip', 'a.txt') >>> b Path('abcde.zip', 'b/') name property: >>> b.name 'b' join with divide operator: >>> c = b / 'c.txt' >>> c Path('abcde.zip', 'b/c.txt') >>> c.name 'c.txt' Read text: >>> c.read_text() 'content of c' existence: >>> c.exists() True >>> (b / 'missing.txt').exists() False Coercion to string: >>> str(c) 'abcde.zip/b/c.txt' z>{self.__class__.__name__}({self.root.filename!r}, {self.at!r})� c C s, t |tj�r|nt�| �|��| _|| _d S r )� isinstance�zipfile�ZipFile�_pathlib_compat�root�at)r r= r>