Files
pypistats.dev/pypistats/templates/package.html
Zac Hatfield-Dodds 2db8a717cb Show required vs optional deps (#32)
* Show required vs optional deps

`pip install x` does not install extras dependencies by default, so we'll show them in a separate list.

This is particularly useful for packages which have many optional integrations, or which track development dependencies using package extras.

* some cleanup

Co-authored-by: flynn <crf204@gmail.com>
2020-08-16 13:09:25 -04:00

106 lines
3.7 KiB
HTML

{% extends "layout.html" %}
{% block title %}PyPI Download Stats{% endblock %}
{% block plot %}
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
{% endblock %}
{% block body %}
<h1>{{ package }}</h1>
<hr>
{% if user %}
{% if user.favorites and package in user.favorites %}
<p>
<img src="{{ user.avatar_url }}" height="20" width="20">
<a href="{{ url_for('user.user_package', package=package) }}">REMOVE from my packages</a><br></p>
{% else %}
<p>
<img src="{{ user.avatar_url }}" height="20" width="20">
<a href="{{ url_for('user.user_package', package=package) }}">ADD to my packages</a><br></p>
{% endif %}
{% endif %}
{% if package == "__all__" %}
<p>Download stats for __all__ indicate downloads across all packages on PyPI.</p>
{% else %}
<p>
{% if metadata %}
<a href="{{ metadata['info']['package_url'] }}">PyPI page</a>
<br>
<a href="{{ metadata['info']['home_page'] }}">Home page</a>
<br>
Author:
{{ metadata['info']['author'] }}
{% if metadata['info']['license'] is not none %}
<br>
License:
{% if metadata['info']['license'] | length > 200 %}
{{ metadata['info']['license'][:200] }}...
{% else %}
{{ metadata['info']['license'] }}
{% endif %}
{% endif %}
<br>
Summary:
{{ metadata['info']['summary'] }}
<br>
Latest version:
{{ metadata['info']['version'] }}
<br>
{% if metadata['requires'] %}
Required dependencies:
{% for required in metadata['requires'] %}
<a href="{{ url_for('general.package_page', package=required.lower()) }}">{{ required.lower() }}</a>
{% if not loop.last %}|{% endif %}
{% endfor %}
{% endif %}
{% if metadata['optional'] %}
<br>
Optional dependencies:
{% for optional in metadata['optional'] %}
<a href="{{ url_for('general.package_page', package=optional.lower()) }}">{{ optional.lower() }}</a>
{% if not loop.last %}|{% endif %}
{% endfor %}
{% endif %}
{% else %}
No metadata found.
{% endif %}
{% endif %}
<br>
<br>
Downloads last day:
{{ "{:,.0f}".format(recent['day']) }}
<br>
Downloads last week:
{{ "{:,.0f}".format(recent['week']) }}
<br>
Downloads last month:
{{ "{:,.0f}".format(recent['month']) }}
</p>
<script>
(function () {
var WIDTH_IN_PERCENT_OF_PARENT = 100
// var HEIGHT = '300px'
var divelems = []
var data =
{{ plots|tojson }}
for (plt in data) {
var gd3 = Plotly.d3.select('section').append('div').style({
width: WIDTH_IN_PERCENT_OF_PARENT + '%',
'margin-left': (100 - WIDTH_IN_PERCENT_OF_PARENT) / 2 + '%',
// height: HEIGHT,
})
var gd = gd3.node()
divelems.push(gd)
Plotly.newPlot(divelems[divelems.length - 1], data[plt].data, data[plt].layout, data[plt].config);
}
window.onresize = function () {
for (chart in divelems) {
Plotly.Plots.resize(divelems[chart]);
}
};
})();
</script>
{% endblock %}