o
    Ee#                     @   s  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jr#d dl	m
Z
 e eZdZede d ejejB Zdedefd	d
ZdZede dejZdedefddZz#zd dlmZ W n eyo   d dlmZ Y nw dedefddZW n ey   ed dedefddZY nw dedefddZ dedefddZ!defddZ"G dd dZ#zd dl$m%Z& dedefd d!Z'W n ey   e# Z'Y nw dedefd"d#Z(dedef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/dedefd)d*Z0dedefd+d,Z1dedefd-d.Z2dedefd/d0Z3dedefd1d2Z4dedefd3d4Z5dS )5    N)chain)Literala  
    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      t | d uS N)VERSION_REGEXmatch)r    r
   n/var/www/bmteknikk.ddns.net/venv/lib/python3.10/site-packages/setuptools/config/_validate_pyproject/formats.pypep4402      r   z'([A-Z0-9]|[A-Z0-9][A-Z0-9._-]*[A-Z0-9])^$namec                 C   r   r   )PEP508_IDENTIFIER_REGEXr	   )r   r
   r
   r   pep508_identifier=   r   r   )requirementsvaluec                 C   s(   zt |  W dS  t jy   Y dS w )NTF)_reqRequirementInvalidRequirementr   r
   r
   r   pep508H   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   V   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    | ]}| v V  qd S r   r
   ).0cr   r
   r   	<genexpr>\       z%pep508_versionspec.<locals>.<genexpr>);]@Frequirement)anyr   r   r
   r   r   pep508_versionspecZ   s   r$   c                 C   sB   |  d\}}}dd t|d|dD }tdd |D S )N:c                 s       | ]}|  V  qd S r   stripr   ir
   r
   r   r   l   r   z+pep517_backend_reference.<locals>.<genexpr>.c                 s   s    | ]	}|rt |V  qd S r   python_identifierr)   r
   r
   r   r   m       )	partition_chainsplitall)r   module_objidentifiersr
   r
   r   pep517_backend_referencej   s    r7   c                  C   s   dd l } ddlm} ddlm} d}|  }|||d}| }|dd|d< | |	d	d
W  d    S 1 s=w   Y  d S )Nr   )Message)urlopenz.https://pypi.org/pypi?:action=list_classifiers)contextzcontent-typez
text/plaincontent_typecharsetzutf-8)
sslemail.messager8   urllib.requestr9   create_default_context	getheaderreaddecode	get_param)r=   r8   r9   urlr:   responseheadersr
   r
   r   _download_classifierst   s   $rH   c                   @   sN   e Zd ZU dZejddeje f ed< dd Z	dd Z
d	ed
ef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).
    NzLiteral[False]
downloadedc                 C   s   d | _ d| _d| _d S )NFtrove_classifier)rJ   _skip_download__name__selfr
   r
   r   __init__   s   
z_TroveClassifier.__init__c                 C   s
   d| _ d S r   )rL   rN   r
   r
   r   _disable_download   s   
z"_TroveClassifier._disable_downloadr   r   c                 C   s   | j du s
| jdu rdS tdstdr"d| _ d}t| dS | j d u rKd}t| z
tt  | _ W n t	yJ   d| _ td Y dS w || j v pV|
 dS )	NFT
NO_NETWORK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 ::)rJ   rL   osgetenv_loggerdebugsetrH   
splitlines	Exceptionlower
startswith)rO   r   msgr
   r
   r   __call__   s(   



z_TroveClassifier.__call__)rM   
__module____qualname____doc__typingUnionSetstr__annotations__rP   rQ   boolr_   r
   r
   r
   r   rI      s   
 rI   )classifiersc                 C   s   | t v p
|  dS )NrT   )_trove_classifiersr\   r]   r   r
   r
   r   rK      s   rK   c                 C   s>   |  d^}}|dsdS td|d td  g|S )Nr+   z-stubsF)r1   endswithpython_module_namejoinlen)r   topchildrenr
   r
   r   pep561_stub_name   s   
"rq   c                 C   s|   ddl m} z-|| }|js+td|   | ds+| ds+d| v s+|d|  }t|jo1|jW S  ty=   Y dS w )	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.parserr   schemerW   warningr]   rh   netlocr[   )r   rr   partsr
   r
   r   rE      s   rE   z[^\[\s=]([^=]*[^\s=])?z[\w.-]+z\w+(\.\w+)*c                 C   s   |   S r   )isidentifierr   r
   r
   r   r-         r-   c                 C   s0   |  ds
| drdS tdd | dD S )Nr+   Fc                 s       | ]}t |V  qd S r   r,   )r   mr
   r
   r   r      r   z.python_qualified_identifier.<locals>.<genexpr>)r]   rk   r2   r1   r   r
   r
   r   python_qualified_identifier   s   r~   c                 C   s   t | S r   )r~   r   r
   r
   r   rl      r{   rl   c                 C   r   r   )ENTRYPOINT_GROUP_REGEXr	   r   r
   r
   r   python_entrypoint_group   r   r   c                 C   s:   t | sdS t| sd|  d}|t7 }t| dS )NFzEntry point `z'` does not follow recommended pattern: T)ENTRYPOINT_REGEXr	   RECOMMEDED_ENTRYPOINT_REGEXRECOMMEDED_ENTRYPOINT_PATTERNrW   rw   )r   r^   r
   r
   r   python_entrypoint_name   s   


r   c           	      C   s   |  d\}}}d|v rC| d\}}}| d dkrdS dd |tjd d	D }td
d |D s9dS td|  d n|}|d}|rTt||dn|}tdd |D S )Nr%   [r    Fc                 s   r&   r   r'   )r   xr
   r
   r   r   
  r   z.python_entrypoint_reference.<locals>.<genexpr>z[],c                 s   r|   r   )r   )r   er
   r
   r   r     r   `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     r.   )	r/   r(   string
whitespacer1   r2   rW   rw   r0   )	r   r3   r4   restr5   extras_extrasmodule_partsr6   r
   r
   r   python_entrypoint_reference  s    
r   )6loggingrU   rer   rc   	itertoolsr   r0   TYPE_CHECKINGtyping_extensionsr   	getLoggerrM   rW   VERSION_PATTERNcompileXIr   rf   rh   r   PEP508_IDENTIFIER_PATTERNr   r   	packagingr   r   ImportErrorsetuptools._vendor.packagingr   rw   r$   r7   rH   rI   trove_classifiersri   rj   rK   rq   rE   ENTRYPOINT_PATTERNr   r   r   ENTRYPOINT_GROUP_PATTERNr   r-   r~   rl   r   r   r   r
   r
   r
   r   <module>   sh    

2

