U
    -c "                     @   sL  d dl Z d dlZd dlZd dlZd dlZd dlmZ e e	Z
dZede d ejejB ZeedddZd	Zed
e dejZeedddZzFzd dlmZ W n  ek
r   d dlmZ Y nX eedddZW n0 ek
r   e
d eedddZY nX eedddZeedddZedddZG dd dZ z d dl!m"Z# eeddd Z$W n ek
r   e  Z$Y nX eedd!d"Z%d#Z&ed
e& dejZ'd$Z(ed
e( dejZ)d%Z*ed
e* dejZ+eedd&d'Z,eedd(d)Z-eedd*d+Z.eedd,d-Z/eedd.d/Z0eedd0d1Z1dS )2    N)chaina  
    v?
    (?:
        (?:(?P<epoch>[0-9]+)!)?                           # epoch
        (?P<release>[0-9]+(?:\.[0-9]+)*)                  # release segment
        (?P<pre>                                          # pre-release
            [-_\.]?
            (?P<pre_l>(a|b|c|rc|alpha|beta|pre|preview))
            [-_\.]?
            (?P<pre_n>[0-9]+)?
        )?
        (?P<post>                                         # post release
            (?:-(?P<post_n1>[0-9]+))
            |
            (?:
                [-_\.]?
                (?P<post_l>post|rev|r)
                [-_\.]?
                (?P<post_n2>[0-9]+)?
            )
        )?
        (?P<dev>                                          # dev release
            [-_\.]?
            (?P<dev_l>dev)
            [-_\.]?
            (?P<dev_n>[0-9]+)?
        )?
    )
    (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?       # local version
z^\s*z\s*$)versionreturnc                 C   s   t | d k	S N)VERSION_REGEXmatch)r    r   Q/tmp/pip-unpacked-wheel-izj_87as/setuptools/config/_validate_pyproject/formats.pypep440/   s    r
   z'([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])^$)namer   c                 C   s   t | d k	S r   )PEP508_IDENTIFIER_REGEXr   )r   r   r   r	   pep508_identifier:   s    r   )requirementsvaluer   c                 C   s.   zt |  W dS  t jk
r(   Y dS X d S )NTF)_reqRequirementInvalidRequirementr   r   r   r	   pep508E   s
    
r   zCould not find an installation of `packaging`. Requirements, dependencies and versions might not be validated. To enforce validation, please install `packaging`.c                 C   s   dS NTr   r   r   r   r	   r   S   s    c                    s(   t  fdddD rdS td  S )zGExpression that can be used to specify/lock versions (including ranges)c                 3   s   | ]}| kV  qd S r   r   ).0cr   r   r	   	<genexpr>Y   s     z%pep508_versionspec.<locals>.<genexpr>);]@Frequirement)anyr   r   r   r   r	   pep508_versionspecW   s    r!   c                 C   sB   |  d\}}}dd t|d|dD }tdd |D S )N:c                 s   s   | ]}|  V  qd S r   stripr   ir   r   r	   r   i   s     z+pep517_backend_reference.<locals>.<genexpr>.c                 s   s   | ]}|rt |V  qd S r   python_identifierr%   r   r   r	   r   j   s      )	partition_chainsplitall)r   module_objidentifiersr   r   r	   pep517_backend_referenceg   s     r2   )r   c               
   C   s|   dd l } ddlm} ddlm} d}|  }|||d:}| }|dd|d< | |	d	d
W  5 Q R  S Q R X d S )Nr   )Message)urlopenz.https://pypi.org/pypi?:action=list_classifiers)contextzcontent-typez
text/plaincontent_typecharsetzutf-8)
sslemail.messager3   urllib.requestr4   create_default_context	getheaderreaddecode	get_param)r8   r3   r4   urlr5   responseheadersr   r   r	   _download_classifiersq   s    rC   c                   @   s0   e Zd ZdZdd Zdd ZeedddZd	S )
_TroveClassifierak  The ``trove_classifiers`` package is the official way of validating classifiers,
    however this package might not be always available.
    As a workaround we can still download a list from PyPI.
    We also don't want to be over strict about it, so simply skipping silently is an
    option (classifiers will be validated anyway during the upload to PyPI).
    c                 C   s   d | _ d| _d| _d S )NFtrove_classifier)
downloaded_skip_download__name__selfr   r   r	   __init__   s    z_TroveClassifier.__init__c                 C   s
   d| _ d S r   )rG   rI   r   r   r	   _disable_download   s    z"_TroveClassifier._disable_downloadr   c                 C   s   | j dks| jdkrdS tds,tdrDd| _ d}t| dS | j d krd}t| ztt  | _ W n& t	k
r   d| _ td Y dS X || j kp|
 dS )	NFTZ
NO_NETWORKZVALIDATE_PYPROJECT_NO_NETWORKzxInstall ``trove-classifiers`` to ensure proper validation. Skipping download of classifiers list from PyPI (NO_NETWORK).zxInstall ``trove-classifiers`` to ensure proper validation. Meanwhile a list of classifiers will be downloaded from PyPI.z*Problem with download, skipping validation
private ::)rF   rG   osgetenv_loggerdebugsetrC   
splitlines	Exceptionlower
startswith)rJ   r   msgr   r   r	   __call__   s&    



z_TroveClassifier.__call__N)	rH   
__module____qualname____doc__rK   rL   strboolrX   r   r   r   r	   rD   ~   s   rD   )classifiersc                 C   s   | t kp|  dS )NrM   )_trove_classifiersrU   rV   r   r   r   r	   rE      s    rE   c                 C   s   ddl m} zZ|| }|jsVtd|   | dsV| dsVd| ksV|d|  }t|job|jW S  tk
r|   Y dS X d S )	Nr   )urlparsezsFor maximum compatibility please make sure to include a `scheme` prefix in your URL (e.g. 'http://'). Given value: /\r   zhttp://F)	urllib.parser`   schemerP   warningrV   r]   netlocrT   )r   r`   partsr   r   r	   r@      s    r@   z[^\[\s=]([^=]*[^\s=])?z[\w.-]+z\w+(\.\w+)*c                 C   s   |   S r   )isidentifierr   r   r   r	   r)      s    r)   c                 C   s0   |  ds| drdS tdd | dD S )Nr'   Fc                 s   s   | ]}t |V  qd S r   r(   )r   mr   r   r	   r      s     z.python_qualified_identifier.<locals>.<genexpr>)rV   endswithr-   r,   r   r   r   r	   python_qualified_identifier   s    rk   c                 C   s   t | S r   )rk   r   r   r   r	   python_module_name   s    rl   c                 C   s   t | d k	S r   )ENTRYPOINT_GROUP_REGEXr   r   r   r   r	   python_entrypoint_group   s    rn   c                 C   s:   t | sdS t| s6d|  d}|t7 }t| dS )NFzEntry point `z'` does not follow recommended pattern: T)ENTRYPOINT_REGEXr   RECOMMEDED_ENTRYPOINT_REGEXRECOMMEDED_ENTRYPOINT_PATTERNrP   re   )r   rW   r   r   r	   python_entrypoint_name   s    


rr   c           	      C   s   |  d\}}}d|kr| d\}}}| d dkr<dS dd |tjd d	D }td
d |D srdS td|  d n|}|d}|rt||dn|}tdd |D S )Nr"   [r   Fc                 s   s   | ]}|  V  qd S r   r#   )r   xr   r   r	   r      s     z.python_entrypoint_reference.<locals>.<genexpr>z[],c                 s   s   | ]}t |V  qd S r   )r   )r   er   r   r	   r      s     `z4` - using extras for entry points is not recommendedr'   c                 s   s   | ]}t | V  qd S r   )r)   r$   r%   r   r   r	   r     s     )	r*   r$   string
whitespacer,   r-   rP   re   r+   )	r   r.   r/   restr0   Zextras_extrasmodule_partsr1   r   r   r	   python_entrypoint_reference   s     
r~   )2loggingrN   rery   typing	itertoolsr   r+   	getLoggerrH   rP   VERSION_PATTERNcompileXIr   r\   r]   r
   ZPEP508_IDENTIFIER_PATTERNr   r   	packagingr   r   ImportErrorZsetuptools._vendor.packagingr   re   r!   r2   rC   rD   Ztrove_classifiersr^   r_   rE   r@   ZENTRYPOINT_PATTERNro   rq   rp   ZENTRYPOINT_GROUP_PATTERNrm   r)   rk   rl   rn   rr   r~   r   r   r   r	   <module>   sZ   

0
