a
    aR                     @   s   d Z zddlmZ W n ey2   ddlmZ Y n0 ddlmZ ddlmZ ddlZddl	Z	ddl
Z
ddlZddlmZ ddd	ZG d
d deZG dd deZG dd deZG dd deZG dd deZG dd deZeeeeedZdddZdS )ap  Print the metadata for one or more Python package distributions.

Usage:  %prog [options] path+

Each 'path' entry can be one of the following:

o a source distribution:  in this case, 'path' should point to an existing
  archive file (.tar.gz, .tar.bz2, or .zip) as generated by 'setup.py sdist'.

o a binary distribution:  in this case, 'path' should point to an existing
  archive file (.egg)

o a "develop" checkout:  in this case,  'path' should point to a directory
  initialized via 'setup.py develop' (under setuptools).

o an installed package:  in this case, 'path' should be the importable name
  of the package.
    )ConfigParser)OrderedDict)writerN   )get_metadatac                 C   s0  t jtd}|jddd dd |jdddd	d
d |jddddd |jddddddd |jddddddd |jdddd d!d |jd"ddd#d$d% |jd&d'd(d)d*d |jd+d,d(d-d.d |jd/ddd0d1d% |jd2ddd3d4d% |jd5ddd6d7d% || \}} t| d8kr$|d9 n|| fS d S ):N)usagez-mz--metadata-versionzOverride metadata version)defaulthelpz-fz--fieldfieldsappendz$Specify an output field (repeatable))destactionr	   z-dz--download-url-prefixdownload_url_prefixzDownload URL prefix)r   r	   z--simpleoutputstore_constsimplez Output as simple key-value pairs)r   r   constr   r	   z-sz--skipskip
store_trueTz$Skip missing values in simple output)r   r   r   r	   z-Sz	--no-skipstore_falsez*Don't skip missing values in simple outputz--singlesinglezOutput delimited values)r   r   r   r	   z--item-delim
item_delimstore;z*Delimiter for fields in single-line outputz--sequence-delimsequence_delim,z!Delimiter for multi-valued fieldsz--csvcsvzOutput as CSVz--iniinizOutput as INIz--jsonjsonzOutput as JSONr   z3Pass one or more files or directories as arguments.)optparseZOptionParser__doc__Z
add_option
parse_argslenerror)argsparseroptions r'   2lib/python3.9/site-packages/pkginfo/commandline.py_parse_options!   sd    






r)   c                   @   s    e Zd ZdZdd Zdd ZdS )BaseNc                 C   s   |j r|j | _d S N)r
   _fieldsselfr&   r'   r'   r(   __init__e   s    zBase.__init__c                 C   s   d S r+   r'   r.   r'   r'   r(   finishi   s    zBase.finish)__name__
__module____qualname__r,   r/   r1   r'   r'   r'   r(   r*   c   s   r*   c                       s$   e Zd Z fddZdd Z  ZS )Simplec                    s   t t| | |j| _d S r+   )superr5   r/   r   _skipr-   	__class__r'   r(   r/   m   s    zSimple.__init__c                 C   sH   | j pt|D ]4}t||}| jr2|d ur|dkrtd||f  qd S )Nr'   z%s: %s)r,   listgetattrr7   printr.   metafieldvaluer'   r'   r(   __call__q   s    
zSimple.__call__)r2   r3   r4   r/   rA   __classcell__r'   r'   r8   r(   r5   l   s   r5   c                       s(   e Zd ZdZ fddZdd Z  ZS )
SingleLineNc                    s$   t t| | |j| _|j| _d S r+   )r6   rC   r/   r   _item_delimr   _sequence_delimr-   r8   r'   r(   r/   y   s    zSingleLine.__init__c                 C   sp   | j d u rt|| _ g }| j D ]<}t||}t|ttfrH| j|}nt|}|| qt	| j
| d S r+   )r,   r:   r;   
isinstancetuplerE   joinstrr   r<   rD   )r.   r>   valuesr?   r@   r'   r'   r(   rA   ~   s    



zSingleLine.__call__)r2   r3   r4   r,   r/   rA   rB   r'   r'   r8   r(   rC   w   s   rC   c                       s(   e Zd ZdZ fddZdd Z  ZS )CSVNc                    s   t t| | |j| _d S r+   )r6   rK   r/   r   rE   r-   r8   r'   r(   r/      s    zCSV.__init__c                 C   s   | j d u rt|| _ | j }| jd u r<ttj| _| j| g }|D ]<}t||}t|t	tfrn| j
|}nt|}|| qD| j| d S r+   )r,   r:   _writerr   sysstdoutZwriterowr;   rF   rG   rE   rH   rI   r   )r.   r>   r
   rJ   r?   r@   r'   r'   r(   rA      s    



zCSV.__call__)r2   r3   r4   rL   r/   rA   rB   r'   r'   r8   r(   rK      s   rK   c                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )ININc                    s   t t| | t | _d S r+   )r6   rO   r/   r   _parserr-   r8   r'   r(   r/      s    zINI.__init__c                 C   s   |j }|j}d||f }| j|r0td| | j| | jpHt|D ]6}t||}t	|t
tfrpd|}| j||| qJd S )Nz%s-%szDuplicate distribution: %sz
	)nameversionrP   Zhas_section
ValueErrorZadd_sectionr,   r:   r;   rF   rG   rH   set)r.   r>   rQ   rR   sectionr?   r@   r'   r'   r(   rA      s    

zINI.__call__c                 C   s   | j tj d S r+   )rP   writerM   rN   r0   r'   r'   r(   r1      s    z
INI.finishr2   r3   r4   r,   r/   rA   r1   rB   r'   r'   r8   r(   rO      s   rO   c                       s0   e Zd ZdZ fddZdd Zdd Z  ZS )JSONNc                    s   t t| | t | _d S r+   )r6   rX   r/   r   _mappingr-   r8   r'   r(   r/      s    zJSON.__init__c                 C   sj   | j d u rt|| _ | j D ]J}t||}|rBt|ttfsBt|}|| jv rZtdt  || j|< qd S )NzDuplicate field: %(field)r)	r,   r:   r;   rF   rG   rI   rY   rS   localsr=   r'   r'   r(   rA      s    




zJSON.__call__c                 C   s   t j| jtjdd d S )N   )indent)r   dumprY   rM   rN   r0   r'   r'   r(   r1      s    zJSON.finishrW   r'   r'   r8   r(   rX      s   rX   )r   r   r   r   r   c                 C   s   t | \}}t|dd}t| |}|D ]N}t||j}|du rBq(|jrn|jdu rntj	|}d|j|f |_|| q(|
  dS )z!Entry point for pkginfo tool
    r   r   Nz%s/%s)r)   r;   _FORMATTERSr   Zmetadata_versionr   Zdownload_urlospathbasenamer1   )r$   r&   pathsformat	formatterr`   r>   filenamer'   r'   r(   main   s    

rf   )N)N)r    Zconfigparserr   ImportErrorcollectionsr   r   r   r   r   r_   rM   Zutilsr   r)   objectr*   r5   rC   rK   rO   rX   r^   rf   r'   r'   r'   r(   <module>   s2   
B	