Richard Jones' Log: The dynamic Cheese Shop: JSON package information
I don't get to work on the Cheese Shop very often these days. I've been wanting to add this feature for a while though: being able to dynamically include the latest information about a package on some other website. Now I can!
On the Roundup project website I have a "download" box. People have asked that I include the version information in that box, but I'm lazy and don't want to have to update it manually when I do a release. Now the page includes this HTML:
<span id="release_info" class="note">Download: <a href="http://pypi.python.org/pypi/roundup">latest</a></span> <script type="text/javascript"> $.getJSON('http://pypi.python.org/pypi/roundup/json?callback=?', function(data) { h = 'Download: ' + data.info.version; for (var i=0, url; url=data.urls[i]; ++i) { h += '<br><a href="' + url.url + '">' + url.filename + '</a>'; } $('#release_info').html(h); }); </script>
This was actually generated in Sphinx, and the magic there is:
.. raw:: html <span id="release_info" class="note">Download: <a href="http://pypi.python.org/pypi/roundup">latest</a></span> <script type="text/javascript"> $.getJSON('http://pypi.python.org/pypi/roundup/json?callback=?', function(data) { h = 'Download: ' + data.info.version; for (var i=0, url; url=data.urls[i]; ++i) { h += '<br><a href="' + url.url + '">' + url.filename + '</a>'; } $('#release_info').html(h); }); </script>
That code uses jQuery which is already included in a Sphinx build so there's nothing more to do.
On the Cheese Shop side you have the option to request the JSON for the latest release or a specific release. The following are (currently, until I do a new Roundup release) equivalent:
http://pypi.python.org/pypi/roundup/1.4.15/json
http://pypi.python.org/pypi/roundup/json
Note in the jQuery the callback guff - that's part of some JSONP thing I don't care to understand but took me the longest of all of the implementation to work around. Boo for very average documentation, guys...