o
    i'                     @   sd   zd dl ZW n ey   d dlZY nw 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inforeleases)_package	_releases)self	pypi_dict r   G/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/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   
   | j d S )ze
            >>> package = yarg.get('yarg')
            >>> package.name
            u'yarg'
        r   r	   r   r   r   r   r   2      
zPackage.namec                 C   r   )z
            >>> package = yarg.get('yarg')
            >>> package.url
            u'https://pypi.python.org/pypi/yarg'
        package_urlr   r   r   r   r   pypi_url;   r   zPackage.pypi_urlc                 C   r   )z}
            >>> package = yarg.get('yarg')
            >>> package.summary
            u'Some random summary stuff'
        summaryr   r   r   r   r   r   D   r   zPackage.summaryc                 C   r   )z
            >>> package = yarg.get('yarg')
            >>> package.description
            u'A super long description, usually uploaded from the README'
        descriptionr   r   r   r   r   r   M   r   zPackage.descriptionc                 C   &   d| j vs| j d dkrdS | j d S )zz
            >>> package = yarg.get('yarg')
            >>> package.homepage
            u'https://kura.io/yarg/'
        	home_page Nr   r   r   r   r   homepageV      

zPackage.homepagec                 C   r   )z
            >>> package = yarg.get('yarg')
            >>> package.bugtracker
            u'https://github.com/kura/yarg/issues'
        bugtrack_urlr   Nr   r   r   r   r   
bugtrackerb   r   zPackage.bugtrackerc                 C   r   )z
            >>> package = yarg.get('yarg')
            >>> package.docs
            u'https://yarg.readthedocs.org/en/latest'
        docs_urlr   Nr   r   r   r   r   docsn   r   zPackage.docsc                 C   "   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')
        Author
name emailauthorauthor_emailr   emailr   r	   )r   r'   r   r   r   r'   z      

zPackage.authorc                 C   r$   )z
            >>> package = yarg.get('yarg')
            >>> package.maintainer
            Maintainer(name=u'Kura', email=u'kura@kura.io')
        
Maintainerr&   
maintainermaintainer_emailr)   r+   )r   r.   r   r   r   r.      r,   zPackage.maintainerc                 C   r   )zg
            >>> package = yarg.get('yarg')
            >>> package.license
            u'MIT'
        licenser   r   r   r   r   r0      r   zPackage.licensec                 C   s>   t | jdkr| jD ]}|dr|dd   S q
dS dS )z
            >>> package = yarg.get('yarg')
            >>> package.license_from_classifiers
            u'MIT License'
        r   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
        	downloads	Downloadszday week monthlast_day	last_week
last_month)dayweekmonth)r	   r   )r   
_downloadsr:   r   r   r   r:      s   

zPackage.downloadsc                 C   r   )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']
        r5   r   r   r   r   r   r5      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 )r2   r3   )matchr7   .0r8   
version_rer   r   
<listcomp>       z+Package.python_versions.<locals>.<listcomp>)recompiler5   r   r   rF   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 :: Implementationr2   r3   )r6   r7   rD   r   r   r   rH      rI   z2Package.python_implementations.<locals>.<listcomp>)r5   r   r   r   r   python_implementations   s   
zPackage.python_implementationsc                 C   r   )zs
            >>> package = yarg.get('yarg')
            >>> package.latest_release_id
            u'0.1.0'
        versionr   r   r   r   r   latest_release_id   r   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>]
        )rO   releaser   
release_idr   r   r   latest_release   s   

zPackage.latest_releasec                 C       | j D ]
}|jdv 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rS   package_typer   rP   r   r   r   	has_wheel   
   

zPackage.has_wheelc                 C   rT   )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
        )egg	bdist_eggTFrW   rY   r   r   r   has_egg   r[   zPackage.has_eggc                 C   rT   )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sdistTFrW   rY   r   r   r   
has_source  r[   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   upload_time)r4   r
   rE   kr   r   r   rH   '  s
    z'Package.release_ids.<locals>.<listcomp>c                 S   s   g | ]}|d  qS )r   r   rc   r   r   r   rH   *  s    c                 S   s   | d S )Nr   r   )rd   r   r   r   <lambda>*  s    z%Package.release_ids.<locals>.<lambda>)key)r
   keyssorted)r   rr   r   r   release_ids   s   
zPackage.release_idsc                    s&    | j v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   )rE   ri   rR   r   r   rH   :  s    z#Package.release.<locals>.<listcomp>)rj   r
   rQ   r   rk   r   rP   ,  s   
zPackage.releaseN)__name__
__module____qualname____doc__r   r   propertyr   r   r   r   r   r!   r#   r'   r.   r0   r9   r:   r5   rL   rM   rO   rS   rZ   r^   ra   rj   rP   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)json_contentr   r   r   json2package=  s   rt   )
simplejsonrq   ImportErrorcollectionsr   rJ   rP   r   objectr   rt   r   r   r   r   <module>   s     