B
    !{[R                 @   s  d Z yddlmZ W n  ek
r4   ddlmZ Y nX 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)Z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outputZ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-skipZstore_falsez*Don't skip missing values in simple outputz--singlesinglezOutput delimited values)r   r   r   r   z--item-delim
item_delimZ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.7/site-packages/pkginfo/commandline.py_parse_options!   sL    






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 )Nr#   )r(   r#   r#   r$   finishi   s    zBase.finish)__name__
__module____qualname__r'   r)   r*   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 )N)superr.   r)   r   _skip)r(   r"   )	__class__r#   r$   r)   m   s    zSimple.__init__c             C   sL   xF| j pt|D ]4}t||}| jr4|d k	r|dkrtd||f  qW d S )Nr#   z%s: %s)r'   listgetattrr0   print)r(   metafieldvaluer#   r#   r$   __call__q   s    
zSimple.__call__)r+   r,   r-   r)   r8   __classcell__r#   r#   )r1   r$   r.   l   s   r.   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 )N)r/   r:   r)   r   _item_delimr   _sequence_delim)r(   r"   )r1   r#   r$   r)   y   s    zSingleLine.__init__c             C   st   | j d krt|| _ g }xF| j D ]<}t||}t|ttfrJ| j|}nt|}|| q W t	| j
| d S )N)r'   r2   r3   
isinstancetupler<   joinstrr
   r4   r;   )r(   r5   valuesr6   r7   r#   r#   r$   r8   ~   s    


zSingleLine.__call__)r+   r,   r-   r'   r)   r8   r9   r#   r#   )r1   r$   r:   w   s   r:   c                   s(   e Zd ZdZ fddZdd Z  ZS )CSVNc                s   t t| | |j| _d S )N)r/   rB   r)   r   r<   )r(   r"   )r1   r#   r$   r)      s    zCSV.__init__c             C   s   | j d krt|| _ | j }| jd kr<ttj| _| j| g }xD|D ]<}t||}t|t	tfrp| j
|}nt|}|| qFW | j| d S )N)r'   r2   _writerr   sysstdoutZwriterowr3   r=   r>   r<   r?   r@   r
   )r(   r5   r	   rA   r6   r7   r#   r#   r$   r8      s    




zCSV.__call__)r+   r,   r-   rC   r)   r8   r9   r#   r#   )r1   r$   rB      s   rB   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 )N)r/   rF   r)   r   _parser)r(   r"   )r1   r#   r$   r)      s    zINI.__init__c             C   s   |j }|j}d||f }| j|r0td| | j| xH| jpJt|D ]6}t||}t	|t
tfrrd|}| j||| qLW d S )Nz%s-%szDuplicate distribution: %sz
	)nameversionrG   Zhas_section
ValueErrorZadd_sectionr'   r2   r3   r=   r>   r?   set)r(   r5   rH   rI   Zsectionr6   r7   r#   r#   r$   r8      s    

zINI.__call__c             C   s   | j tj d S )N)rG   writerD   rE   )r(   r#   r#   r$   r*      s    z
INI.finish)r+   r,   r-   r'   r)   r8   r*   r9   r#   r#   )r1   r$   rF      s   rF   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 )N)r/   rM   r)   r   _mapping)r(   r"   )r1   r#   r$   r)      s    zJSON.__init__c             C   sn   | j d krt|| _ xT| j D ]J}t||}|rDt|ttfsDt|}|| jkr\tdt  || j|< qW d S )NzDuplicate field: %(field)r)	r'   r2   r3   r=   r>   r@   rN   rJ   locals)r(   r5   r6   r7   r#   r#   r$   r8      s    



zJSON.__call__c             C   s   t j| jtjdd d S )N   )indent)r   dumprN   rD   rE   )r(   r#   r#   r$   r*      s    zJSON.finish)r+   r,   r-   r'   r)   r8   r*   r9   r#   r#   )r1   r$   rM      s   rM   )r   r   r   r   r   c             C   s   t | \}}t|dd}t| |}xV|D ]N}t||j}|dkrDq*|jrp|jdkrptj	|}d|j|f |_|| q*W |
  dS )z!Entry point for pkginfo tool
    r   r   Nz%s/%s)r%   r3   _FORMATTERSr   Zmetadata_versionr   Zdownload_urlospathbasenamer*   )r    r"   pathsformatZ	formatterrU   r5   filenamer#   r#   r$   main   s    


rZ   )N)N)r   Zconfigparserr   ImportErrorcollectionsr   r   r   r   r   rT   rD   Zutilsr   r%   objectr&   r.   r:   rB   rF   rM   rS   rZ   r#   r#   r#   r$   <module>   s0   
B	