Package: simpypi
Simple python package indexHow simpypi worksThe heart of simpypi issimpypi.wsgi.SimPyPI, a simpleWSGIweb app that
accepts a uploadedpython packagedistribution and places it according to its name and version metadata
appropriate to thesimple index protocol.For security,SimPyPIreturns straightHTTP 400s
for invalid requests.  This could probably be improved.SimPyPIitself does not serve this directory.  The directory
should be served by a fileserver that will generate directory indices
(as apprpropriate tohttp://guide.python-distribute.org/contributing.html#the-simple-index-protocol) such as Apache orFileServer.simpypi.factory.factorydoes provide a factory to make a WSGI app
that wrapsFileServerin middleware and serves the simple index
under/index/and theSimPyPIapp at/.  Additionally, asimpypicommand line program is provided that front-ends this.Currentlysimpypionly works on source distributions (that is,
packages made withpython setup.py sdist).ExampleI installed an instance ofsimpypiathttp://k0s.org:8080for
demonstration purposes with a package index athttp://k0s.org:8080/index/.
For testing purposes, I made a script,upload_mobase.pythat uploads themozbasepackages tosimpypi.  So theindexis now populated with them.You can upload packages withcurl> wget http://pypi.python.org/packages/source/P/PyYAML/PyYAML-3.10.tar.gz
> curl -F 'package=@PyYAML-3.10.tar.gz' http://k0s.org:8080/You caneasy_installmozbase fromhttp://k0s.org:8080/index/.
If a package’s dependencies can be found from thesimpypipackage
index, they will also be installed from the index:> virtualenv.py tmp
New python executable in tmp/bin/python
Installing setuptools............done.
Installing pip...............done.
> cd tmp/
(tmp)│easy_install -i http://k0s.org:8080/index/ mozrunner
Searching for mozrunner
Reading http://k0s.org:8080/index/mozrunner/
Best match: mozrunner 5.1
Downloading http://k0s.org:8080/index/mozrunner/mozrunner-5.1.tar.gz
Processing mozrunner-5.1.tar.gz
Running mozrunner-5.1/setup.py -q bdist_egg --dist-dir
/tmp/easy_install-gqerOV/mozrunner-5.1/egg-dist-tmp-Qyx3Cr
Adding mozrunner 5.1 to easy-install.pth file
Installing mozrunner script to /home/jhammel/tmp/bin
Installed
/home/jhammel/tmp/lib/python2.7/site-packages/mozrunner-5.1-py2.7.egg
Processing dependencies for mozrunner
Searching for mozprofile>=0.1
Reading http://k0s.org:8080/index/mozprofile/
Best match: mozprofile 0.1
Downloading http://k0s.org:8080/index/mozprofile/mozprofile-0.1.tar.gz
Processing mozprofile-0.1.tar.gz
Running mozprofile-0.1/setup.py -q bdist_egg --dist-dir
/tmp/easy_install-4Im6x0/mozprofile-0.1/egg-dist-tmp-9Jp5TR
Adding mozprofile 0.1 to easy-install.pth file
Installing mozprofile script to /home/jhammel/tmp/bin
Installed
/home/jhammel/tmp/lib/python2.7/site-packages/mozprofile-0.1-py2.7.egg
Searching for mozprocess
Reading http://k0s.org:8080/index/mozprocess/
Best match: mozprocess 0.1b2
Downloading
http://k0s.org:8080/index/mozprocess/mozprocess-0.1b2.tar.gz
Processing mozprocess-0.1b2.tar.gz
Running mozprocess-0.1b2/setup.py -q bdist_egg --dist-dir
/tmp/easy_install-KU6AiF/mozprocess-0.1b2/egg-dist-tmp-4j5CMP
Adding mozprocess 0.1b2 to easy-install.pth file
Installed
/home/jhammel/tmp/lib/python2.7/site-packages/mozprocess-0.1b2-py2.7.egg
Searching for mozinfo
Reading http://k0s.org:8080/index/mozinfo/
Best match: mozinfo 0.3.3
Downloading http://k0s.org:8080/index/mozinfo/mozinfo-0.3.3.tar.gz
Processing mozinfo-0.3.3.tar.gz
Running mozinfo-0.3.3/setup.py -q bdist_egg --dist-dir
/tmp/easy_install-JaKeaz/mozinfo-0.3.3/egg-dist-tmp-xWojez
Adding mozinfo 0.3.3 to easy-install.pth file
Installing mozinfo script to /home/jhammel/tmp/bin
Installed
/home/jhammel/tmp/lib/python2.7/site-packages/mozinfo-0.3.3-py2.7.egg
Searching for ManifestDestiny>=0.5.4
Reading http://k0s.org:8080/index/ManifestDestiny/
Best match: ManifestDestiny 0.5.4
Downloading
http://k0s.org:8080/index/ManifestDestiny/ManifestDestiny-0.5.4.tar.gz
Processing ManifestDestiny-0.5.4.tar.gz
Running ManifestDestiny-0.5.4/setup.py -q bdist_egg --dist-dir
/tmp/easy_install-2blF3S/ManifestDestiny-0.5.4/egg-dist-tmp-R3KZde
Adding ManifestDestiny 0.5.4 to easy-install.pth file
Installing manifestparser script to /home/jhammel/tmp/bin
Installed
/home/jhammel/tmp/lib/python2.7/site-packages/ManifestDestiny-0.5.4-py2.7.egg
Finished processing dependencies for mozrunnerNote that all of the packages come from the k0s.org installation and
not fromhttp://pypi.python.org/.Running the TestsThetests directorycontainsdoctestsand
the test-runner,test.py.
These tests illustrate basic functionality and protect from
regressions if they are run before code is committed.tests-require.txtcontains dependencies that should be installed
to run the tests.PasteTestApp,
though this could be transitioned toWebTest.virtualenvis used for isolating python environments.To run the tests, do:python test.pyTODOWhile simpypi is pretty simple, just because it is only 100 lines of
code doesn’t mean that it is theright100 lines of code.  The
following issues could be addressed:the temporary package should be dealt with entirely in memory,
ideally.  Currently we write to a file and move it.simpypiusepkginfo.sdistto read the data from a source
distribution. Instead, the uploaded package should probably be
unpacked andpython setup.py sdistrun and the resulting
package put in the appropriate place.  This will allow archives
withoutPKG-INFO(e.g.http://hg.mozilla.org/build/talos/archive/tip.tar.gz)
to be uploaded as well as at least partially correct for the fact
that currentlysimpypionly works for uploaded source
distributions.–http://k0s.org/mozilla/hg/simpypi