o
    Uh                     @   s   d Z ddlmZ 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   s,  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 d S || f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.)optparseOptionParser__doc__
add_option
parse_argslenerror)argsparseroptions r)   g/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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 d S N)r
   _fieldsselfr(   r)   r)   r*   __init__b   s   zBase.__init__c                 C   s   d S r-   r)   r0   r)   r)   r*   finishf   s   zBase.finish)__name__
__module____qualname__r.   r1   r3   r)   r)   r)   r*   r,   `   s    r,   c                       s$   e Zd Z fddZdd Z  ZS )Simplec                       t t| | |j| _d S r-   )superr7   r1   r   _skipr/   	__class__r)   r*   r1   j      zSimple.__init__c                 C   sH   | j pt|D ]}t||}| jr|d ur!|dkr!td||f  qd S )Nr)   z%s: %s)r.   listgetattrr:   printr0   metafieldvaluer)   r)   r*   __call__n   s   
zSimple.__call__)r4   r5   r6   r1   rE   __classcell__r)   r)   r;   r*   r7   i   s    r7   c                       (   e Zd ZdZ fddZdd Z  ZS )
SingleLineNc                    s$   t t| | |j| _|j| _d S r-   )r9   rH   r1   r   _item_delimr   _sequence_delimr/   r;   r)   r*   r1   v   s   zSingleLine.__init__c                 C   sp   | j d u r
t|| _ g }| j D ]}t||}t|ttfr$| j|}nt|}|| qt	| j
| d S r-   )r.   r>   r?   
isinstancetuplerJ   joinstrr   r@   rI   )r0   rB   valuesrC   rD   r)   r)   r*   rE   {   s   



zSingleLine.__call__)r4   r5   r6   r.   r1   rE   rF   r)   r)   r;   r*   rH   t   s    rH   c                       rG   )CSVNc                    r8   r-   )r9   rP   r1   r   rJ   r/   r;   r)   r*   r1      r=   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r7| j
|}nt|}|| q"| j| d S r-   )r.   r>   _writerr   sysstdoutwriterowr?   rK   rL   rJ   rM   rN   r   )r0   rB   r
   rO   rC   rD   r)   r)   r*   rE      s   



zCSV.__call__)r4   r5   r6   rQ   r1   rE   rF   r)   r)   r;   r*   rP      s    rP   c                       0   e Zd ZdZ fddZdd Zdd Z  ZS )ININc                       t t| | t | _d S r-   )r9   rV   r1   r   _parserr/   r;   r)   r*   r1      r=   zINI.__init__c                 C   s   |j }|j}d||f }| j|rtd| | j| | jp$t|D ]}t||}t	|t
tfr8d|}| j||| q%d S )Nz%s-%szDuplicate distribution: %sz
	)nameversionrX   has_section
ValueErroradd_sectionr.   r>   r?   rK   rL   rM   set)r0   rB   rY   rZ   sectionrC   rD   r)   r)   r*   rE      s   

zINI.__call__c                 C   s   | j tj d S r-   )rX   writerR   rS   r2   r)   r)   r*   r3      s   z
INI.finishr4   r5   r6   r.   r1   rE   r3   rF   r)   r)   r;   r*   rV      s
    rV   c                       rU   )JSONNc                    rW   r-   )r9   rb   r1   r   _mappingr/   r;   r)   r*   r1      r=   zJSON.__init__c                 C   sj   | j d u r
t|| _ | j D ]%}t||}|r!t|ttfs!t|}|| jv r-tdt  || j|< qd S )NzDuplicate field: %(field)r)	r.   r>   r?   rK   rL   rN   rc   r\   localsrA   r)   r)   r*   rE      s   




zJSON.__call__c                 C   s   t j| jtjdd d S )N   )indent)r   dumprc   rR   rS   r2   r)   r)   r*   r3      s   zJSON.finishra   r)   r)   r;   r*   rb      s
    rb   )r   r   r   r   r   c                 C   s   t | \}}t|dd}t| |}|D ]'}t||j}|du r!q|jr7|jdu r7tj	|}d|j|f |_|| q|
  dS )z!Entry point for pkginfo tool
    r   r   Nz%s/%s)r+   r?   _FORMATTERSr   metadata_versionr   download_urlospathbasenamer3   )r&   r(   pathsformat	formatterrl   rB   filenamer)   r)   r*   main   s   

rr   r-   )r!   configparserr   collectionsr   r   r   r   r   rk   rR   utilsr   r+   objectr,   r7   rH   rP   rV   rb   rh   rr   r)   r)   r)   r*   <module>   s.    
B	