7
"""Print PYPI statistics in MarkDown format.
9
* https://pepy.tech/project/psutil
10
* https://pypistats.org/packages/psutil
11
* https://hugovk.github.io/top-pypi-packages/.
14
from __future__ import print_function
24
from psutil._common import memoize
27
AUTH_FILE = os.path.expanduser("~/.pypinfo.json")
32
"https://github.com/giampaolo/psutil/blob/master/"
33
"scripts/internal/pypistats.py"
44
assert os.path.exists(AUTH_FILE)
45
env = os.environ.copy()
46
env['GOOGLE_APPLICATION_CREDENTIALS'] = AUTH_FILE
49
stdout=subprocess.PIPE,
50
stderr=subprocess.PIPE,
51
universal_newlines=True,
54
stdout, stderr = p.communicate()
56
raise RuntimeError(stderr)
57
assert not stderr, stderr
64
ret = json.loads(sh(cmd))
65
bytes_billed += ret['query']['bytes_billed']
72
"pypinfo --all --json --days %s --limit %s '' project" % (DAYS, LIMIT)
74
LAST_UPDATE = ret['last_update']
75
return [(x['project'], x['download_count']) for x in ret['rows']]
81
for name, downloads in data:
85
raise ValueError("can't find %s" % PKGNAME)
90
for name, downloads in data:
93
raise ValueError("can't find %s" % PKGNAME)
97
return query("pypinfo --json --days %s %s pyversion" % (DAYS, PKGNAME))
100
def downloads_by_country():
101
return query("pypinfo --json --days %s %s country" % (DAYS, PKGNAME))
104
def downloads_by_system():
105
return query("pypinfo --json --days %s %s system" % (DAYS, PKGNAME))
108
def downloads_by_distro():
109
return query("pypinfo --json --days %s %s distro" % (DAYS, PKGNAME))
115
templ = "| %-30s | %15s |"
118
def print_row(left, right):
119
if isinstance(right, int):
120
right = '{:,}'.format(right)
121
print(templ % (left, right))
124
def print_header(left, right="Downloads"):
125
print_row(left, right)
126
s = templ % ("-" * 30, "-" * 15)
127
print("|:" + s[2:-2] + ":|")
130
def print_markdown_table(title, left, rows):
131
pleft = left.replace('_', ' ').capitalize()
132
print("### " + title)
137
print_row(lval, row['download_count'])
144
print("# Download stats")
146
s = "psutil download statistics of the last %s days (last update " % DAYS
147
s += "*%s*).\n" % LAST_UPDATE
148
s += "Generated via [pypistats.py](%s) script.\n" % GITHUB_SCRIPT_URL
152
{'what': 'Per month', 'download_count': downs},
153
{'what': 'Per day', 'download_count': int(downs / 30)},
154
{'what': 'PYPI ranking', 'download_count': ranking()},
156
print_markdown_table('Overview', 'what', data)
157
print_markdown_table(
158
'Operating systems', 'system_name', downloads_by_system()['rows']
160
print_markdown_table(
161
'Distros', 'distro_name', downloads_by_distro()['rows']
163
print_markdown_table(
164
'Python versions', 'python_version', downloads_pyver()['rows']
166
print_markdown_table(
167
'Countries', 'country', downloads_by_country()['rows']
171
if __name__ == '__main__':
175
print("bytes billed: %s" % bytes_billed, file=sys.stderr)