B @`m@sdZyddlmZWn ek r4ddlmZYnXddlmZddlZddlZddlZddlZyddl m Z Wnek rddl Z YnXddl Z ddl mZdadadadaeejdddZGd d d eZd d Zd dZedkredS)zz Calculates the total number of downloads that a particular PyPI package has received across all versions tracked by PyPI ) OrderedDict)datetimeN) OptionParsercCs"|j|j|jddddS)Nii@Bg.A) microsecondssecondsdays)tdr ?/tmp/pip-unpacked-wheel-bvjqrktv/pyutilib/dev/pypi_downloads.py total_seconds!sr c@s0eZdZd ddZddZd ddZd d Zd S)PyPIDownloadAggregatorTFcCsL||_||_td|_i|_i|_i|_||_d|_ d|_ d|_ d|_ dS)Nzhttp://pypi.python.org/pypi) package_nameinclude_hiddenxmlrpcServerproxy _downloads _first_upload _last_upload_exactZ first_uploadZfirst_upload_relZ last_uploadZlast_upload_rel)selfrrexactr r r __init__(s zPyPIDownloadAggregator.__init__cCs||j|j|j}|j|j|jdd}g}xH|D]@}|jrZ|d}||krt||q4|d|jr4||q4W|S)N)name descriptionorr)rZpackage_releasesrrsearchrappend startswith)rresultresultsmatchesmatchrr r r packages6s   zPyPIDownloadAggregator.packagescCsl|j|d|d}|d|jkr4t|j|d<|d|jkrRt|j|d<|d|jkrpt|j|d<d|j|d|d<x|D]}t|djd}|j|d |dddks||j|d|dkr||j|d|d<|j|d |dddks,||j|d|dkrB||j|d|d<|j|d|d|d7<qWdS)z7Calculate the total number of downloads for the packagerversionrZ upload_timez%Y%m%dT%H:%M:%SN downloads) rZ release_urlsrrrrrstrptimevalueget)rreleaseforceurlsurlZuptimer r r r'Js.  z PyPIDownloadAggregator.downloadsc Cstdx2|D]&}td|d|df||qWxt|jD]}tdd}d}|j|}dd}|j|dxLtt|D]:}||}||j |krt d k r|d t|kr|j |||d t krq|d t|krz|j ||t krz|j |||d t } |j |||d |j |||} t t |j||t| t| } n|j||} n|j||} || 7}|d 7}td ||| |j |||j||fqWtd |t|t|ftd 7at|7at|7aqNWd S) z>Prints a nicely formatted list of statistics about the packagerzProcessing ... %s %srr&rcSs6g}x,|dD]}td|}||qW|S)N.z ([0-9]+)(.*))splitrer$rgroups)xZansvmr r r keygens  z,PyPIDownloadAggregator.stats..keygen)keyNzMPackage %s Release %10s Downloads %10d First Upload %25s Last Upload %25sz6Totals: Package %35s Downloads: %15s Releases: %15s)printr%r'sortedrkeyssortrangelenr starttimeintmathfloorr rstrtotal_packagestotal_downloadstotal_releases) rr+pkgZ ndownloadsZ npackagesr;r6ir7Z ntimediffZ dtimediffr'r r r statsksT     zPyPIDownloadAggregator.statsN)TF)F)__name__ __module__ __qualname__rr%r'rIr r r r r&s  !rcCstt|dkrtdtdx$|ddD]}t||dq,Wtdtdttdttd tdS) NzCUsage: pypi_downloads.py [--start=yyyy-mm-dd] [--exact] package ...z(Please specify at least one package namer8)rrzTotal Packages %dzTotal Downloads %dzTotal Releases %d) r>r9sysexitrrIrDrErF)argvrrGr r r _mains    rQcCsht}|jddddd|jddddd|tj\}}|jdk rTt|jd andat ||j dS) Nz--startstoredate)actiondestdefaultz--exact store_falserFz%Y-%m-%d) r add_option parse_argsrNrPrSrr(r?rQr)parseroptionsargsr r r mains r]__main__)__doc__ collectionsr ImportErrorZ ordereddictrlocaler1rN xmlrpc.clientclientrrAoptparserrDrErFr? setlocaleLC_ALLr objectrrQr]rJr r r r s6