U
    kuf'                     @   sf   zd dl ZW n ek
r(   d dlZY nX d dlmZ d dlZddlmZ G dd deZ	dd Z
dS )	    N)
namedtuple   Releasec                   @   s$  e Zd ZdZdd Zdd Zedd Zedd	 Zed
d Z	edd Z
edd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zedd Zed d! Zed"d# Zed$d% Zed&d' Zed(d) Zed*d+ Zed,d- Zed.d/ Zd0d1 Zd2S )3Packagez]
    A PyPI package.

    :param pypi_dict: A dictionary retrieved from the PyPI server.
    c                 C   s   |d | _ |d | _d S )NinfoZreleases)_package	_releases)selfZ	pypi_dict r   0/tmp/pip-unpacked-wheel-pz57x_63/yarg/package.py__init__+   s    
zPackage.__init__c                 C   s   d | jS )Nz<Package {0}>)formatnamer
   r   r   r   __repr__/   s    zPackage.__repr__c                 C   s
   | j d S )ze
            >>> package = yarg.get('yarg')
            >>> package.name
            u'yarg'
        r   r   r   r   r   r   r   2   s    zPackage.namec                 C   s
   | j d S )z
            >>> package = yarg.get('yarg')
            >>> package.url
            u'https://pypi.python.org/pypi/yarg'
        Zpackage_urlr   r   r   r   r   pypi_url;   s    zPackage.pypi_urlc                 C   s
   | j d S )z}
            >>> package = yarg.get('yarg')
            >>> package.summary
            u'Some random summary stuff'
        summaryr   r   r   r   r   r   D   s    zPackage.summaryc                 C   s
   | j d S )z
            >>> package = yarg.get('yarg')
            >>> package.description
            u'A super long description, usually uploaded from the README'
        descriptionr   r   r   r   r   r   M   s    zPackage.descriptionc                 C   s&   d| j ks| j d dkrdS | j d S )zz
            >>> package = yarg.get('yarg')
            >>> package.homepage
            u'https://kura.io/yarg/'
        Z	home_page Nr   r   r   r   r   homepageV   s
    
zPackage.homepagec                 C   s&   d| j ks| j d dkrdS | j d S )z
            >>> package = yarg.get('yarg')
            >>> package.bugtracker
            u'https://github.com/kura/yarg/issues'
        Zbugtrack_urlr   Nr   r   r   r   r   
bugtrackerb   s
    
zPackage.bugtrackerc                 C   s&   d| j ks| j d dkrdS | j d S )z
            >>> package = yarg.get('yarg')
            >>> package.docs
            u'https://yarg.readthedocs.org/en/latest'
        Zdocs_urlr   Nr   r   r   r   r   docsn   s
    
zPackage.docsc                 C   s"   t dd}|| jd | jd dS )z
            >>> package = yarg.get('yarg')
            >>> package.author
            Author(name=u'Kura', email=u'kura@kura.io')
        ZAuthor
name emailauthorauthor_emailr   emailr   r   )r
   r   r   r   r   r   z   s    

zPackage.authorc                 C   s"   t dd}|| jd | jd dS )z
            >>> package = yarg.get('yarg')
            >>> package.maintainer
            Maintainer(name=u'Kura', email=u'kura@kura.io')
        Z
Maintainerr   
maintainermaintainer_emailr   r   )r
   r    r   r   r   r       s    

zPackage.maintainerc                 C   s
   | j d S )zg
            >>> package = yarg.get('yarg')
            >>> package.license
            u'MIT'
        licenser   r   r   r   r   r"      s    zPackage.licensec                 C   s:   t | jdkr6| jD ] }|dr|dd   S qdS )z
            >>> package = yarg.get('yarg')
            >>> package.license_from_classifiers
            u'MIT License'
        r   ZLicense :: N)lenclassifiers
startswithsplit)r
   cr   r   r   license_from_classifiers   s    

z Package.license_from_classifiersc                 C   s.   | j d }tdd}||d |d |d dS )z
            >>> package = yarg.get('yarg')
            >>> package.downloads
            Downloads(day=50100, week=367941, month=1601938)  # I wish
        	downloadsZ	Downloadszday week monthZlast_dayZ	last_weekZ
last_month)dayweekmonth)r   r   )r
   Z
_downloadsr+   r   r   r   r+      s    

zPackage.downloadsc                 C   s
   | j d S )z
            >>> package = yarg.get('yarg')
            >>> package.classifiers
            [u'License :: OSI Approved :: MIT License',
             u'Programming Language :: Python :: 2.7',
             u'Programming Language :: Python :: 3.4']
        r&   r   r   r   r   r   r&      s    	zPackage.classifiersc                    s   t d  fdd| jD S )a  
        Returns a list of Python version strings that
        the package has listed in :attr:`yarg.Release.classifiers`.

            >>> package = yarg.get('yarg')
            >>> package.python_versions
            [u'2.6', u'2.7', u'3.3', u'3.4']
        z,Programming Language \:\: Python \:\: \d\.\dc                    s$   g | ]}  |r|d d qS )r#   r$   )matchr(   .0r)   Z
version_rer   r   
<listcomp>   s    
z+Package.python_versions.<locals>.<listcomp>)recompiler&   r   r   r2   r   python_versions   s    

zPackage.python_versionsc                 C   s   dd | j D S )a  
        Returns a list of Python implementation strings that
        the package has listed in :attr:`yarg.Release.classifiers`.

            >>> package = yarg.get('yarg')
            >>> package.python_implementations
            [u'CPython', u'PyPy']
        c                 S   s$   g | ]}| d r|dd qS )z0Programming Language :: Python :: Implementationr#   r$   )r'   r(   r0   r   r   r   r3      s    
z2Package.python_implementations.<locals>.<listcomp>)r&   r   r   r   r   python_implementations   s    
zPackage.python_implementationsc                 C   s
   | j d S )zs
            >>> package = yarg.get('yarg')
            >>> package.latest_release_id
            u'0.1.0'
        versionr   r   r   r   r   latest_release_id   s    zPackage.latest_release_idc                 C   s   | j }| |S )z
        A list of :class:`yarg.release.Release` objects for each file in the
        latest release.

            >>> package = yarg.get('yarg')
            >>> package.latest_release
            [<Release 0.1.0>, <Release 0.1.0>]
        )r9   releaser
   
release_idr   r   r   latest_release   s    
zPackage.latest_releasec                 C   s    | j D ]}|jdkr dS qdS )a  
        Returns `True` if one of the :class:`yarg.release.Release` objects
        in the latest set of release files is `wheel` format. Returns
        `False` if not.

            >>> package = yarg.get('yarg')
            >>> package.has_wheel
            True
        )wheelbdist_wheelTFr=   Zpackage_typer
   r:   r   r   r   	has_wheel   s    

zPackage.has_wheelc                 C   s    | j D ]}|jdkr dS qdS )a  
        Returns `True` if one of the :class:`yarg.release.Release` objects
        in the latest set of release files is `egg` format. Returns
        `False` if not.

            >>> package = yarg.get('yarg')
            >>> package.has_egg
            False
        )ZeggZ	bdist_eggTFr@   rA   r   r   r   has_egg   s    

zPackage.has_eggc                 C   s    | j D ]}|jdkr dS qdS )a  
        Returns `True` if one of the :class:`yarg.release.Release` objects
        in the latest set of release files is `source` format. Returns
        `False` if not.

            >>> package = yarg.get('yarg')
            >>> package.has_source
            True
        )sourcesdistTFr@   rA   r   r   r   
has_source  s    

zPackage.has_sourcec                    s2    fdd j  D }dd t|dd dD S )z
            >>> package = yarg.get('yarg')
            >>> package.release_ids
            [u'0.0.1', u'0.0.5', u'0.1.0']
        c                    s4   g | ],}t  j| d kr| j| d  d fqS )r   Zupload_time)r%   r	   r1   kr   r   r   r3   '  s   z'Package.release_ids.<locals>.<listcomp>c                 S   s   g | ]}|d  qS )r   r   rG   r   r   r   r3   *  s     c                 S   s   | d S )Nr   r   )rH   r   r   r   <lambda>*      z%Package.release_ids.<locals>.<lambda>)key)r	   keyssorted)r
   rr   r   r   release_ids   s    
zPackage.release_idsc                    s&    | j krdS  fdd| j  D S )aN  
        A list of :class:`yarg.release.Release` objects for each file in a
        release.

        :param release_id: A pypi release id.

            >>> package = yarg.get('yarg')
            >>> last_release = yarg.releases[-1]
            >>> package.release(last_release)
            [<Release 0.1.0>, <Release 0.1.0>]
        Nc                    s   g | ]}t  |qS r   r   )r1   rN   r<   r   r   r3   :  s     z#Package.release.<locals>.<listcomp>)rO   r	   r;   r   rP   r   r:   ,  s    
zPackage.releaseN)__name__
__module____qualname____doc__r   r   propertyr   r   r   r   r   r   r   r   r    r"   r*   r+   r&   r6   r7   r9   r=   rB   rC   rF   rO   r:   r   r   r   r   r   $   s\   























r   c                 C   s   t t| S )z
    Returns a :class:`yarg.release.Release` object from JSON content from the
    PyPI server.

    :param json_content: JSON encoded content from the PyPI server.
    )r   jsonloads)Zjson_contentr   r   r   json2package=  s    rX   )Z
simplejsonrV   ImportErrorcollectionsr   r4   r:   r   objectr   rX   r   r   r   r   <module>   s     