diff options
-rw-r--r-- | README | 58 | ||||
-rw-r--r-- | gpip/package-fixes.scm | 500 | ||||
-rw-r--r-- | gpip/python2-7.scm | 47 | ||||
-rw-r--r-- | gpip/sdists.scm | 3042 | ||||
-rw-r--r-- | gpip/update.scm | 83 | ||||
-rw-r--r-- | guix-env.scm | 343 | ||||
-rwxr-xr-x | pre-inst-env | 12 | ||||
-rwxr-xr-x | pure-pre-inst-env | 3 |
8 files changed, 4088 insertions, 0 deletions
@@ -0,0 +1,58 @@ +The Guix Python Integration Project +==================================== + +The goal of this project is to make it easy and enjoyable to use large amounts +of public free software written in Python, together with GNU Guix. + +At the moment, only ~100 releases have been imported, but the aim is to +automatically sync from [pypi.org][1]. + +If this can be done, it could provide a number of benefits. Firstly, the +generated packages can be used, and this should be easier and safer than using +other tools like [pip][2] because Guix makes it possible to manage the entire +dependency tree, and the use of contained build environments restricts access +to the users machine at build time. + +Other benefits could include quality assurance, for example, surfacing the +presence of similar files found in different packages, and integration testing +between different package by attempting to build all packages with the latest +versions of their dependencies. + +[1]: https://pypi.org/ +[2]: https://pypi.python.org/pypi/pip + +Getting started +--------------- + +The easiest thing to do is to try using some of the software already packaged. +This is only a prototype, but you can see it working with the sentry package. + +For example, running the following commands should show the help output for the +sentry command in the sentry package (real time error tracking software). Note +that they may take a few minutes to run, even if you have all the packages +built (this is probably due to bugs and poor implementation). + + ./pure-pre-inst-env guix environment --pure --ad-hoc -e "(begin (use-modules (gpip python2-7)) sentry-8.5.1)" -- sentry + + ./pure-pre-inst-env guix environment --pure --ad-hoc -e '(begin (use-modules ((gnu packages python) #:select (python-2.7)) (pypi requirement) (pypi package) (pypi sdist-store) (gpip sdists) (gpip package-fixes)) (requirement->package (package-configuration python-2.7 get-fixed-package) (add-sdists (make-sdist-store) sdists) (requirement (name "sentry") (specifiers "==8.5.1"))))' + +The first command uses the (gpip python2-7) module, which is designed to be +included in the GUIX_PACKAGE_PATH. The 2nd command does what the (gpip +python2-7) module does, but just for the specific package (and thus it should +be a bit quicker). + +To see what is going on internally, you can look at the graph for the sentry +package. + + ./pure-pre-inst-env guix graph -e "(begin (use-modules (gpip python2-7)) sentry-8.5.1)" | dot -Tpdf -o sentry.pdf + + ./pure-pre-inst-env guix graph -e '(begin (use-modules ((gnu packages python) #:select (python-2.7)) (pypi requirement) (pypi package) (pypi sdist-store) (gpip sdists) (gpip package-fixes)) (requirement->package (package-configuration python-2.7 get-fixed-package) (add-sdists (make-sdist-store) sdists) (requirement (name "sentry") (specifiers "==8.5.1"))))' | dot -Tpdf -o sentry.pdf + +The available packages come from the contents of the (gpip sdists) module, +which contains sdist records. At the moment, records are added to this though +the update function in the (gpip update) module, and the calls it makes to the +get-store-with function. + +To run this, you can do: + + ./pure-pre-inst-env guile -c '(begin (use-modules (gpip update)) (update))' diff --git a/gpip/package-fixes.scm b/gpip/package-fixes.scm new file mode 100644 index 0000000..e5efccb --- /dev/null +++ b/gpip/package-fixes.scm @@ -0,0 +1,500 @@ +(define-module (gpip package-fixes) + #:use-module (srfi srfi-1) + #:use-module (srfi srfi-9) + #:use-module (guix utils) + #:use-module (guix packages) + #:use-module (guix build utils) + #:use-module (gnu packages tls) + #:use-module (gnu packages xml) + #:use-module (gnu packages image) + #:use-module (gnu packages libffi) + #:use-module (gnu packages databases) + #:use-module (gnu packages fontutils) + #:use-module (gnu packages ghostscript) + #:use-module (gnu packages compression) + #:use-module (pypi sdist) + #:use-module (pypi package) + #:use-module (pypi requirement) + #:export (get-fixed-package)) + +(define-record-type <fix> + (fix requirement operation) + fix? + (requirement fix-requirement) + (operation fix-operation)) + +(define disable-tests + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + '(#:tests? #f)))))) + +(define (add-inputs inputs) + (lambda (pkg) + (package + (inherit pkg) + (inputs + (append + (package-inputs pkg) + inputs))))) + +(define pbr-snippet + '(replace + 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (command "install") + (params `("--root" "/" "--prefix" ,out + "--single-version-externally-managed"))) + (simple-format #t "running \"python setup.py\" with command ~s and parameters ~s~%" + command params) + (apply system* "python" "setup.py" command params))))) + +(define fixes (list + (fix + (requirement + (name "pbr")) + disable-tests) ; Tests try to use virtualenv + + (fix + (requirement + (name "cssutils")) + disable-tests) ; The tests try to download from the network + + (fix + (requirement + (name "nose")) + disable-tests) + + (fix + (requirement + (name "testscenarios")) + disable-tests) + + (fix + (requirement + (name "py")) + disable-tests) + + (fix + (requirement + (name "scripttest")) + disable-tests) + + (fix + (requirement + (name "fixtures") + (specifiers ">=3.0.0")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + `(#:phases + (modify-phases %standard-phases + ,pbr-snippet))))))) + + (fix + (requirement + (name "testtools") + (specifiers ">=2.2.0")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + `(#:tests? #f + #:phases + (modify-phases %standard-phases + ,pbr-snippet))))))) + + (fix + (requirement + (name "linecache2") + (specifiers ">=2.2.0")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + `(#:phases + (modify-phases %standard-phases + ,pbr-snippet))))))) + + (fix + (requirement + (name "traceback2") + (specifiers ">=2.2.0")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + `(#:phases + (modify-phases %standard-phases + ,pbr-snippet))))))) + + (fix + (requirement + (name "pip")) + disable-tests) + + (fix + (requirement + (name "virtualenv")) + disable-tests) + + (fix + (requirement + (name "coverage")) + disable-tests) + + (fix + (requirement + (name "cssselect")) + disable-tests) + + (fix + (requirement + (name "six")) + disable-tests) + + (fix + (requirement + (name "django-celery")) + disable-tests) + + (fix + (requirement + (name "bottle")) + disable-tests) + + (fix + (requirement + (name "raven")) + disable-tests) + + (fix + (requirement + (name "urllib3")) + disable-tests) + + (fix + (requirement + (name "web.py")) + disable-tests) + + (fix + (requirement + (name "backports.ssl_match_hostname")) + disable-tests) + + (fix + (requirement + (name "tornado")) + disable-tests) + + (fix + (requirement + (name "Flask-Login")) + disable-tests) + + (fix + (requirement + (name "requests")) + disable-tests) + + (fix + (requirement + (name "Paste")) + disable-tests) + + (fix + (requirement + (name "python-u2flib-server")) + disable-tests) + + (fix + (requirement + (name "django-sudo")) + disable-tests) + + (fix + (requirement + (name "celery")) + disable-tests) + + (fix + (requirement + (name "oauth2")) + disable-tests) ; The tests try to download from the network + + (fix + (requirement + (name "django-paging")) + disable-tests) ; The tests fail for an unknown reason + + (fix + (requirement + (name "django-nose")) + disable-tests) ; The tests fail for an unknown reason + + (fix + (requirement + (name "django-recaptcha")) + disable-tests) ; The tests fail for an unknown reason + + (fix + (requirement + (name "django-bitfield")) + disable-tests) ; The tests fail for an unknown reason + + (fix + (requirement + (name "djangorestframework")) + disable-tests) ; The tests fail for an unknown reason + + (fix + (requirement + (name "paste")) + disable-tests) + + (fix + (requirement + (name "redis")) + disable-tests) + + (fix + (requirement + (name "hiredis")) + disable-tests) ; Missing tests + + (fix + (requirement + (name "python-openid")) + disable-tests) ; Missing tests + + (fix + (requirement + (name "hashlib")) + disable-tests) ; Missing tests + + (fix + (requirement + (name "hashlib")) + (add-inputs + `(("openssl" ,openssl)))) + + (fix + (requirement + (name "ipaddr")) + disable-tests) ; Missing tests + + (fix + (requirement + (name "statsd")) + disable-tests) + + (fix + (requirement + (name "psycopg2")) + disable-tests) ; Needs running postgres + + (fix + (requirement + (name "cryptography")) + (add-inputs + `(("openssl" ,openssl)))) + + (fix + (requirement + (name "psycopg2")) + (add-inputs + `(("postgresql" ,postgresql)))) + + (fix + (requirement + (name "cffi")) + (add-inputs + `(("libffi" ,libffi)))) + + (fix + (requirement + (name "email-reply-parser")) + disable-tests) ; The tests hang for an unknown reason + + (fix + (requirement + (name "BeautifulSoup")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + '(#:tests? #f)))))) + + (fix + (requirement + (name "lxml")) + (add-inputs + `(("libxml2" ,libxml2) + ("libxslt" ,libxslt)))) + (fix + (requirement + (name "Pillow")) + (add-inputs + `(("freetype" ,freetype) + ("lcms" ,lcms) + ("zlib" ,zlib) + ("libjpeg" ,libjpeg) + ("openjpeg" ,openjpeg) + ("libtiff" ,libtiff) + ("libwebp" ,libwebp)))) + + (fix + (requirement + (name "Django")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + '(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ + (with-directory-excursion "tests" + (system* "python" "./runtests.py" "--settings=test_sqlite"))))))))))) + + (fix + (requirement + (name "uwsgi")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + '(#:phases + (modify-phases %standard-phases + (add-before 'check 'set-path-for-check + (lambda* (#:key outputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out"))) + (mkdir-p (string-append out "/bin")) + (setenv "UWSGI_BIN_NAME" (string-append out "/bin/uwsgi")))))))))))) + + (fix + (requirement + (name "unittest2")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + '(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ (system* "python" "-m" "unittest2")))))))))) + + (fix + (requirement + (name "setuptools")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + `(#:phases + (alist-cons-before + 'check 'set-PYTHON_EGG_CACHE + (lambda* _ (setenv "PYTHON_EGG_CACHE" "/tmp")) + %standard-phases))))))) + + (fix + (requirement + (name "extras")) + (lambda (pkg) + (package + (inherit pkg) + (arguments + (ensure-keyword-arguments + (package-arguments pkg) + '(#:phases + (modify-phases %standard-phases + (replace 'check + (lambda _ (system* "make" "test")))))))))) + + (fix + (requirement + (name "hmac")) + (lambda (pkg) + (package + (inherit pkg) + (source + (origin + (inherit (package-source pkg)) + (modules '((guix build utils))) + (snippet + '(substitute* "setup.py" + (("'hashlib',") "")))))))) + + (fix + (requirement + (name "pytest")) + (lambda (pkg) + (package + (inherit pkg) + (source + (origin + (inherit (package-source pkg)) + (modules '((guix build utils))) + (snippet + ;; One of the tests involves the /usr directory, so it fails. + '(substitute* "testing/test_argcomplete.py" + (("def test_remove_dir_prefix\\(self\\):") + "@pytest.mark.xfail\n def test_remove_dir_prefix(self):")))))))))) + +(define indexed-fixes + (let ((ht (make-hash-table))) + (for-each + (lambda (fx) + (let* ((key (requirement-name (fix-requirement fx))) + (fixes (hash-ref ht key))) + (hash-set! + ht + key + (if fixes + (cons fx fixes) + (list fx))))) + fixes) + ht)) + +(define (get-fixed-package sd pkg) + (let* ((key (pkg-info-name (sdist-info sd))) + (fixes + (filter + (lambda (fix) + (version-meets-requirement + (fix-requirement fix) + (pkg-info-version (sdist-info sd)))) + (or + (hash-ref indexed-fixes key) + '())))) + (fold + (lambda (f pkg) + (f pkg)) + pkg + (map + fix-operation + fixes)))) diff --git a/gpip/python2-7.scm b/gpip/python2-7.scm new file mode 100644 index 0000000..179c28c --- /dev/null +++ b/gpip/python2-7.scm @@ -0,0 +1,47 @@ +(define-module (gpip python2-7) + #:use-module ((gnu packages python) + #:select (python-2.7)) + #:use-module (guix build-system python) + #:use-module (pypi sdist-store) + #:use-module (pypi package) + #:use-module (pypi requirement) + #:use-module (pypi sdist) + #:use-module (gpip sdists) + #:use-module (gpip package-fixes)) + +(let + ((store + (add-sdists (make-sdist-store) sdists))) + (for-each + (lambda (sd) + (catch + #t + (lambda () + (let ((sym (string->symbol + (string-append + (pkg-info-name (sdist-info sd)) + "-" + (pkg-info-version (sdist-info sd))))) + (pkg + (requirement->package + (package-configuration + python-2.7 + get-fixed-package) + store + (requirement + (name (pkg-info-name (sdist-info sd))) + (specifiers + (string-append "==" (pkg-info-version (sdist-info sd)))))))) + (module-define! (resolve-interface '(gpip python2-7)) sym pkg))) + (lambda args + (display "Error creating package " (current-error-port)) + (display + (string-append + (pkg-info-name (sdist-info sd)) + "-" + (pkg-info-version (sdist-info sd))) + (current-error-port)) + (display "\n" (current-error-port)) + (display args (current-error-port)) + (display "\n" (current-error-port))))) + sdists)) diff --git a/gpip/sdists.scm b/gpip/sdists.scm new file mode 100644 index 0000000..01d39bd --- /dev/null +++ b/gpip/sdists.scm @@ -0,0 +1,3042 @@ +(define-module + (gpip sdists) + #:use-module + (srfi srfi-1) + #:use-module + (srfi srfi-13) + #:use-module + (guix packages) + #:use-module + (guix download) + #:use-module + (guix build utils) + #:use-module + (pypi sdist) + #:use-module + (pypi requirement)) +(define-public sdists + (list (sdist (info (pkg-info + (name "amqp") + (version "1.4.9") + (home-page "http://github.com/celery/py-amqp") + (synopsis #f) + (description "") + (license "LGPL"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "mock")) + (requirement + (name "coverage") + (specifiers ">=3.0")) + (requirement (name "nose-cover3")) + (requirement (name "nose")) + (requirement + (name "unittest2") + (specifiers ">=0.4.0")))) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/cc/a4/f265c6f9a7eb1dd45d36d9ab775520e07ff575b11ad21156f9866da047b2/amqp-1.4.9.tar.gz") + (sha256 + (base32 + "06n6q0kxhjnbfz3vn8x9yz09lwmn1xi9d6wxp31h5jbks0b4vsid"))))) + (sdist (info (pkg-info + (name "anyjson") + (version "0.3.3") + (home-page "http://bitbucket.org/runeh/anyjson/") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "nose")))) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/c3/4d/d4089e1a3dd25b46bebdb55a992b0797cff657b4477bc32ce28038fdecbc/anyjson-0.3.3.tar.gz") + (sha256 + (base32 + "1fjph4alvcscsl5d4b6qpv1yh31jy05jxi1l0xff7lws7j32v09p"))))) + (sdist (info (pkg-info + (name "argparse") + (version "1.4.0") + (home-page + "https://github.com/ThomasWaldmann/argparse/") + (synopsis #f) + (description "") + (license "Python Software Foundation License"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/18/dd/e617cfc3f6210ae183374cd9f6a26b20514bbb5a792af97949c5aacddf0f/argparse-1.4.0.tar.gz") + (sha256 + (base32 + "1r6nznp64j68ih1k537wms7h57nvppq0szmwsaf99n71bfjqkc32"))))) + (sdist (info (pkg-info + (name "BeautifulSoup") + (version "3.2.1") + (home-page + "http://www.crummy.com/software/BeautifulSoup/") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/1e/ee/295988deca1a5a7accd783d0dfe14524867e31abb05b6c0eeceee49c759d/BeautifulSoup-3.2.1.tar.gz") + (sha256 + (base32 + "1nqwzqllayjpv6xi8f2lri0h15xbrm8jmif8g6si3q0i250b933a"))))) + (sdist (info (pkg-info + (name "billiard") + (version "3.3.0.23") + (home-page "http://github.com/celery/billiard") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "mock")) + (requirement + (name "nose") + (specifiers ">=1.3.4")) + (requirement + (name "unittest2") + (specifiers ">=0.4.0")))) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/64/a6/d7b6fb7bd0a4680a41f1d4b27061c7b768c673070ba8ac116f865de4e7ca/billiard-3.3.0.23.tar.gz") + (sha256 + (base32 + "02wxsc6bhqvzh8j6w758kvgqbnj14l796mvmrcms8fgfamd2lak9"))))) + (sdist (info (pkg-info + (name "celery") + (version "3.1.18") + (home-page "http://celeryproject.org") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "pytz") (specifiers ">dev")) + (requirement + (name "billiard") + (specifiers "<3.4,>=3.3.0.20")) + (requirement + (name "kombu") + (specifiers "<3.1,>=3.0.25")))) + (extras-require + (list (extra "msgpack" + (list (requirement + (name "msgpack-python") + (specifiers ">=0.3.0")))) + (extra "eventlet" + (list (requirement (name "eventlet")))) + (extra "librabbitmq" + (list (requirement + (name "librabbitmq") + (specifiers ">=1.6.1")))) + (extra "mongodb" + (list (requirement + (name "pymongo") + (specifiers ">=2.6.2")))) + (extra "memcache" + (list (requirement (name "pylibmc")))) + (extra "zookeeper" + (list (requirement + (name "kazoo") + (specifiers ">=1.3.1")))) + (extra "redis" + (list (requirement + (name "redis") + (specifiers ">=2.8.0")))) + (extra "beanstalk" + (list (requirement (name "beanstalkc")))) + (extra "auth" + (list (requirement (name "pyOpenSSL")))) + (extra "pyro" + (list (requirement (name "pyro4")))) + (extra "couchbase" + (list (requirement (name "couchbase")))) + (extra "slmq" + (list (requirement + (name "softlayer_messaging") + (specifiers ">=1.0.3")))) + (extra "gevent" + (list (requirement (name "gevent")))) + (extra "yaml" + (list (requirement + (name "PyYAML") + (specifiers ">=3.10")))) + (extra "threads" + (list (requirement (name "threadpool")))) + (extra "zeromq" + (list (requirement + (name "pyzmq") + (specifiers ">=13.1.0")))) + (extra "sqlalchemy" + (list (requirement (name "sqlalchemy")))) + (extra "couchdb" + (list (requirement (name "couchdb")))) + (extra "sqs" + (list (requirement + (name "boto") + (specifiers ">=2.13.3")))) + (extra "cassandra" + (list (requirement (name "pycassa")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/2f/b9/8a5d74bb351c5082465aaddf8772cfe6d4e954da68f3ac0f79bfd48f22df/celery-3.1.18.tar.gz") + (sha256 + (base32 + "1bry1qzb4gw0ni40w1pyzxl2d0rqbf688sdi13a5gz66f10gj909"))))) + (sdist (info (pkg-info + (name "cffi") + (version "1.7.0") + (home-page "http://cffi.readthedocs.org") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "py")) + (requirement (name "pytest")))) + (install-requires + (list (requirement (name "pycparser")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/83/3c/00b553fd05ae32f27b3637f705c413c4ce71290aa9b4c4764df694e906d9/cffi-1.7.0.tar.gz") + (sha256 + (base32 + "1pv0pf38h375r581zyckb1d2phcgkszsx2n6354g6qc3zmmdvmbf"))))) + (sdist (info (pkg-info + (name "cffi") + (version "1.5.0") + (home-page "http://cffi.readthedocs.org") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "py")) + (requirement (name "pytest")))) + (install-requires + (list (requirement (name "pycparser")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/5a/e5/0656020ab4467f479b1d56d8b82fd1e407a752d8a0850925860458cb1ff6/cffi-1.5.0.tar.gz") + (sha256 + (base32 + "1rx70i35hlkd3rl9pl2pmwqnbmlvlbn94lbq4448cm667xn6zxs4"))))) + (sdist (info (pkg-info + (name "click") + (version "6.6") + (home-page "http://github.com/mitsuhiko/click") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/7a/00/c14926d8232b36b08218067bcd5853caefb4737cda3f0a47437151344792/click-6.6.tar.gz") + (sha256 + (base32 + "1sggipyz52crrybwbr9xvwxd4aqigvplf53k9w3ygxmzivd1jsnc"))))) + (sdist (info (pkg-info + (name "contextlib2") + (version "0.5.4") + (home-page "http://contextlib2.readthedocs.org") + (synopsis #f) + (description "") + (license "PSF License"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/cc/19/0bee3b2ea499f7fb2480b6b3f4ae7951e111d6b73785ba53c6afeba55672/contextlib2-0.5.4.tar.gz") + (sha256 + (base32 + "126f95bcs405b434f4gqx0xd2p0gwrzpbzqnya3imxb9wp6jc1ki"))))) + (sdist (info (pkg-info + (name "coverage") + (version "4.2") + (home-page "https://coverage.readthedocs.io") + (synopsis #f) + (description "") + (license "Apache 2.0"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/53/fe/9e0fbdbca15c2c1253379c3a694f4315a420555e7874445b06edeaeacaea/coverage-4.2.tar.gz") + (sha256 + (base32 + "0mn61b2qrc78vx24ypi4w1rm0qwb0jvx5qicfkn34iph7rnpf4p3"))))) + (sdist (info (pkg-info + (name "coverage") + (version "4.0.3") + (home-page "https://coverage.readthedocs.org") + (synopsis #f) + (description "") + (license "Apache 2.0"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/76/b4/3777a6bae434240b1fcbbda6cb30085bd897b3519acfffea498ee9f41038/coverage-4.0.3.tar.gz") + (sha256 + (base32 + "0qjlja8ny4gcfp8abqfwdrvr8qw9kr69lkja0b4cqqbsdmdjgcc5"))))) + (sdist (info (pkg-info + (name "cryptography") + (version "1.4") + (home-page + "https://github.com/pyca/cryptography") + (synopsis #f) + (description "") + (license "BSD or Apache License, Version 2.0"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement + (name "pytest") + (specifiers "<3.0.0")) + (requirement + (name "cryptography_vectors") + (specifiers "==1.4")) + (requirement + (name "hypothesis") + (specifiers ">=1.11.4")) + (requirement (name "pyasn1_modules")) + (requirement (name "iso8601")) + (requirement (name "pretend")))) + (install-requires + (list (requirement (name "idna") (specifiers ">=2.0")) + (requirement + (name "pyasn1") + (specifiers ">=0.1.8")) + (requirement (name "six") (specifiers ">=1.4.1")) + (requirement + (name "setuptools") + (specifiers ">=11.3")) + (requirement (name "enum34")) + (requirement (name "ipaddress")) + (requirement + (name "cffi") + (specifiers ">=1.4.1")))) + (extras-require + (list (extra "test" + (list (requirement (name "pytest")) + (requirement (name "pretend")) + (requirement (name "iso8601")) + (requirement (name "pyasn1_modules")) + (requirement + (name "hypothesis") + (specifiers ">=1.11.4")))) + (extra "docstest" + (list (requirement (name "doc8")) + (requirement (name "pyenchant")) + (requirement (name "readme_renderer")) + (requirement (name "sphinx")) + (requirement (name "sphinx_rtd_theme")) + (requirement + (name "sphinxcontrib-spelling")))) + (extra "pep8test" + (list (requirement (name "flake8")) + (requirement (name "flake8-import-order")) + (requirement (name "pep8-naming")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/a9/5b/a383b3a778609fe8177bd51307b5ebeee369b353550675353f46cb99c6f0/cryptography-1.4.tar.gz") + (sha256 + (base32 + "0a6i4914ychryj7kqqmf970incynj5lzx57n3cbv5i4hxm09a55v"))))) + (sdist (info (pkg-info + (name "cryptography-vectors") + (version "1.4") + (home-page + "https://github.com/pyca/cryptography") + (synopsis #f) + (description "") + (license "BSD or Apache License, Version 2.0"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement + (name "pytest") + (specifiers "<3.0.0")))) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/ee/ff/306fd09c104a8094dd1b0e8b858b75ad5b9598f03cf16e81dbc9d249d5a4/cryptography_vectors-1.4.tar.gz") + (sha256 + (base32 + "1sk6yhphk2k2vzshi0djxi0jsxd9a02259bs8gynfgf5y1g82a07"))))) + (sdist (info (pkg-info + (name "cssselect") + (version "0.9.2") + (home-page "https://pythonhosted.org/cssselect/") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/11/21/47b5d2696a945da177d2344b6e330b7b0d1c52404063cb387d2261517ccb/cssselect-0.9.2.tar.gz") + (sha256 + (base32 + "1xg6gbva1yswghiycmgincv6ab4bn7hpm720ndbj40h8xycmnfvi"))))) + (sdist (info (pkg-info + (name "cssutils") + (version "0.9.10") + (home-page "http://cthedot.de/cssutils/\r") + (synopsis #f) + (description "") + (license + "LGPL 2.1 or later, see also http://cthedot.de/cssutils/\r"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/92/4f/02b84160055ac51c4c7bb654aca3a0724c4e90b2e124088d7e24b39ea0b1/cssutils-0.9.10.zip") + (sha256 + (base32 + "19i3dixvkxgff4rlhysslcn8y042na213g75zlqr5v4avzyl589f"))))) + (sdist (info (pkg-info + (name "Django") + (version "1.10") + (home-page "http://www.djangoproject.com/") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require + (list (extra "argon2" + (list (requirement + (name "argon2-cffi") + (specifiers ">=16.1.0")))) + (extra "bcrypt" + (list (requirement (name "bcrypt")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/18/5c/3cd8989b2226c55a1faf66f1a110e76cba6e6ca5d9dd15fb469fb636f378/Django-1.10.tar.gz") + (sha256 + (base32 + "01bh5yra6zyxcpqacahbwfbn0y4ivw07j2jsw3crvmjzivb6if26"))))) + (sdist (info (pkg-info + (name "Django") + (version "1.9.9") + (home-page "http://www.djangoproject.com/") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require + (list (extra "bcrypt" + (list (requirement (name "bcrypt")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/21/c0/3c13bd233cb65932ec8f7d25ebc2942c40fa5c424f33314ac35839d50631/Django-1.9.9.tar.gz") + (sha256 + (base32 + "136ypwacj4av6xqmbfp6lhlr0171ws2knv74h0r59ssaaffznh73"))))) + (sdist (info (pkg-info + (name "Django") + (version "1.8.14") + (home-page "http://www.djangoproject.com/") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require + (list (extra "bcrypt" + (list (requirement (name "bcrypt")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/4f/a5/0fb863c3b83f8a15b50731d02d835cb15fef93193c7cbbaacbb2b6adf1e0/Django-1.8.14.tar.gz") + (sha256 + (base32 + "0ka6slangri68qaf91gl10l9m14f6waj4ncz543rbcpvj25w90jj"))))) + (sdist (info (pkg-info + (name "Django") + (version "1.6.11") + (home-page "http://www.djangoproject.com/") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/69/1a/a47b2efd22bf642d19d3dde71f82b29c5608bb96e140a38208bf813f9c3b/Django-1.6.11.tar.gz") + (sha256 + (base32 + "0misvia78c14y07zs5xsb9lv54q0v217jpaindrmhhw4wiryal3y"))))) + (sdist (info (pkg-info + (name "Django") + (version "1.5.12") + (home-page "http://www.djangoproject.com/") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/7b/a8/e4ffd9cc175c0b6b41cc33463449e6515eff28a27f7102818e24d9fd2517/Django-1.5.12.tar.gz") + (sha256 + (base32 + "1vbcvn6ncg7hq5i1w95h746vkq9lmp120vx63h3p56z5nsz7gpmk"))))) + (sdist (info (pkg-info + (name "django-bitfield") + (version "1.7.1") + (home-page + "https://github.com/disqus/django-bitfield") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")) + (requirement (name "nose") (specifiers ">=1.0")))) + (tests-require (list)) + (install-requires + (list (requirement + (name "Django") + (specifiers ">=1.2")) + (requirement (name "six")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/06/63/66a907a990fbf2d0c30ec8635c1ca8a8dcef265ffaa0fc9e8633337d2a79/django-bitfield-1.7.1.tar.gz") + (sha256 + (base32 + "12vc1adawm7anrdb2k5qj774b1hgvsr0scbwx6vpi8z8vgp2fcac"))))) + (sdist (info (pkg-info + (name "django-crispy-forms") + (version "1.4.0") + (home-page + "http://github.com/maraujop/django-crispy-forms") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require + (list (extra "tests" + (list (requirement + (name "Django") + (specifiers "<1.6,>=1.3")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/cc/aa/8b8d7f440acb2b2094a3240b691bf065c02df26d88525a8be06cc43fafab/django-crispy-forms-1.4.0.tar.gz") + (sha256 + (base32 + "040m50ypf7c97rx8zkglwci6acmb5zn7gri5yraw53gzplg57jfh"))))) + (sdist (info (pkg-info + (name "django-debug-toolbar") + (version "1.3.2") + (home-page + "https://github.com/django-debug-toolbar/django-debug-toolbar") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement + (name "django") + (specifiers ">=1.4.2")) + (requirement (name "sqlparse")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/c3/d7/2a2afd4b17e1fe316febd9804d6ccc916e9519f0ea6f3bd579c6c48f3b8f/django-debug-toolbar-1.3.2.tar.gz") + (sha256 + (base32 + "00yifna0gjb271km7qw9vaxqfpkmh65jgxv093hl51hmiav564vc"))))) + (sdist (info (pkg-info + (name "django-jsonfield") + (version "0.9.13") + (home-page + "http://bitbucket.org/schinckel/django-jsonfield/") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "django") (specifiers "<1.6")))) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/a4/93/0d881e8f32043c65454a0980e8472fc831e2e75ae05607ef4d406cbe123f/django-jsonfield-0.9.13.tar.gz") + (sha256 + (base32 + "0hwfg8ccqg2p86j57mql8iid3x38s5ppzpabbz6cb39zaka3vbhj"))))) + (sdist (info (pkg-info + (name "django-paging") + (version "0.2.5") + (home-page + "http://github.com/dcramer/django-paging") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement + (name "django-templatetag-sugar") + (specifiers ">=0.1")))) + (extras-require + (list (extra "test" + (list (requirement (name "unittest2")) + (requirement (name "django")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/73/b6/0165172d65329600c135999733e205fb42678f27062808ea3e9ec015629e/django-paging-0.2.5.tar.gz") + (sha256 + (base32 + "1fzjzr1yb2w1mqndcfd6qlsxyf196lw9w4278wgvsri7cfwk2pdk"))))) + (sdist (info (pkg-info + (name "django-picklefield") + (version "0.3.2") + (home-page + "http://github.com/gintas/django-picklefield") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/9c/22/602e6d010248786d72b70c7ca16b0d19ec513897a39861a957a092a77b08/django-picklefield-0.3.2.tar.gz") + (sha256 + (base32 + "1qlsbp3798ii68ny9zlz2ppkna00jf7i4hmjal3p8433gi18md7s"))))) + (sdist (info (pkg-info + (name "django-recaptcha") + (version "1.0.5") + (home-page + "http://github.com/praekelt/django-recaptcha") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "django")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/81/26/e4e3a922f07a66ec78ab179691aa8f470a17c72f958678840546c0d3800a/django-recaptcha-1.0.5.tar.gz") + (sha256 + (base32 + "0cpcy50ddxs6b3q5mcvqhhmvdw3bj243xw75if7kfxxxyyh0ydyw"))))) + (sdist (info (pkg-info + (name "django-social-auth") + (version "0.7.28") + (home-page + "https://github.com/omab/django-social-auth") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement + (name "Django") + (specifiers ">=1.2.5")) + (requirement + (name "oauth2") + (specifiers ">=1.5.167")) + (requirement + (name "python-openid") + (specifiers ">=2.2")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/27/b5/699cff8eb7748a3bd0d5926ac5823e2d816c94157880af0752c2295e72df/django-social-auth-0.7.28.tar.gz") + (sha256 + (base32 + "0wpnlpcawqv22a9lk697dvljvlr1ap9drr9irql42l4hvq91n550"))))) + (sdist (info (pkg-info + (name "django-sudo") + (version "2.0.1") + (home-page + "https://github.com/mattrobenolt/django-sudo") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require + (list (extra "tests" + (list (requirement (name "pytest")) + (requirement (name "pytest-cov")) + (requirement (name "pytest-django")) + (requirement (name "flake8")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/14/d4/7b30cd7f465fe6987f69a059adb3d9fb7047f8fb02f16dbed67c8f6c57e4/django-sudo-2.0.1.tar.gz") + (sha256 + (base32 + "19q36pcgyc1bhinhq74klkq0mimrwdh4h5jwld7033l1lllr5vqb"))))) + (sdist (info (pkg-info + (name "django-templatetag-sugar") + (version "1.0") + (home-page + "http://github.com/alex/django-templatetag-sugar/") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/95/45/0f2b31e4e86a9df1151c4c3a5f8ff1fb9bd882785d7c90ef1629fce37636/django-templatetag-sugar-1.0.tar.gz") + (sha256 + (base32 + "0plss9p32g8nb0sa3v679pvhiqxz3071k1dk53rlq5vckxa31xp9"))))) + (sdist (info (pkg-info + (name "djangorestframework") + (version "2.3.14") + (home-page + "http://www.django-rest-framework.org") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/c5/02/621fc6fb5c00a7408be2af3a9aa966b327905a16bc5891c66fc1da74f6d1/djangorestframework-2.3.14.tar.gz") + (sha256 + (base32 + "08xvjryjkkj7vrzvfbhhq3bk13klsci5klfgxiv0fisjyl85qrim"))))) + (sdist (info (pkg-info + (name "email-reply-parser") + (version "0.2.0") + (home-page + "https://github.com/zapier/email-reply-parser") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/96/1b/a6c9acd8e78e758a7a2f4a30dbcfbf38063a58363b1086d3e5fcdd54fc51/email_reply_parser-0.2.0.tar.gz") + (sha256 + (base32 + "0rlhsvs1ii93fq2774dn45gwfqgwx1f4fv4k27v1zr0h1zj9il1z"))))) + (sdist (info (pkg-info + (name "enum34") + (version "1.1.6") + (home-page + "https://bitbucket.org/stoneleaf/enum34") + (synopsis #f) + (description "") + (license "BSD License"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/bf/3e/31d502c25302814a7c2f1d3959d2a3b3f78e509002ba91aea64993936876/enum34-1.1.6.tar.gz") + (sha256 + (base32 + "1cgm5ng2gcfrkrm3hc22brl6chdmv67b9zvva9sfs7gn7dwc9n4a"))))) + (sdist (info (pkg-info + (name "exam") + (version "0.10.6") + (home-page "https://github.com/fluxx/exam") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "nose")))) + (install-requires + (list (requirement (name "mock")))) + (extras-require + (list (extra "test" (list (requirement (name "nose")))) + (extra "docs" + (list (requirement (name "sphinx")) + (requirement (name "nose")))) + (extra "lint" + (list (requirement (name "pep8")) + (requirement (name "pyflakes")))) + (extra "all" + (list (requirement (name "mock")) + (requirement (name "nose")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/c7/bd/c15ce029540bb1b551af83c0df502ba47e019ce7132a65db046ad16b8eda/exam-0.10.6.tar.gz") + (sha256 + (base32 + "128pw5rny5ilk5g80cvx52rpnb187ga5nn5h44kjjyqwpiza0b8c"))))) + (sdist (info (pkg-info + (name "extras") + (version "1.0.0") + (home-page + "https://github.com/testing-cabal/extras") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/be/18/0b7283f0ebf6ad4bb6b9937538495eadf05ef097b102946b9445c4242636/extras-1.0.0.tar.gz") + (sha256 + (base32 + "0khvm08rcwm62wc47j8niyl6h13f8w51c8669ifivjdr23g3cbhk"))))) + (sdist (info (pkg-info + (name "fixtures") + (version "3.0.0") + (home-page + "https://launchpad.net/python-fixtures") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "mock")))) + (install-requires + (list (requirement (name "pbr") (specifiers ">=0.11")) + (requirement (name "six")) + (requirement + (name "testtools") + (specifiers ">=0.9.22")))) + (extras-require + (list (extra "test" (list (requirement (name "mock")))) + (extra "docs" + (list (requirement (name "docutils")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/84/be/94ecbc3f2487bd14aa8b44852f498086219b7cc0c8250ee65a03e2c63119/fixtures-3.0.0.tar.gz") + (sha256 + (base32 + "1vxj29bzz3rd4pcy51d05wng9q9dh4jq6wx92yklsm7i6h1ddw7w"))))) + (sdist (info (pkg-info + (name "funcsigs") + (version "1.0.2") + (home-page "http://funcsigs.readthedocs.org") + (synopsis #f) + (description "") + (license "ASL"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "unittest2")))) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/94/4a/db842e7a0545de1cdb0439bb80e6e42dfe82aaeaadd4072f2263a4fbed23/funcsigs-1.0.2.tar.gz") + (sha256 + (base32 + "0l4g5818ffyfmfs1a924811azhjj8ax9xd1cffr1mzd3ycn0zfx7"))))) + (sdist (info (pkg-info + (name "hiredis") + (version "0.1.6") + (home-page "https://github.com/redis/hiredis-py") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/27/d2/5e4d2ac0b3161f00ce7251f51c7cb86dfc51a6fe309e550cabddd6926f65/hiredis-0.1.6.tar.gz") + (sha256 + (base32 + "0dba7fm5s8wf1mnsx6r0ffr786g50jgmh7llw4pign1i08m2dpxn"))))) + (sdist (info (pkg-info + (name "honcho") + (version "0.7.1") + (home-page + "https://github.com/nickstenning/honcho") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require + (list (extra "export" + (list (requirement + (name "jinja2") + (specifiers "<2.8,>=2.7")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/7b/8b/20a8a99276c196af029d2d7f4982a684e0ed688da6b1c463e68bc4684945/honcho-0.7.1.tar.gz") + (sha256 + (base32 + "01wlkqq33180s3hiii73slsg9i0j69d97g49pnl9vvb0z2r5wd7r"))))) + (sdist (info (pkg-info + (name "httplib2") + (version "0.9.2") + (home-page + "https://github.com/jcgregorio/httplib2") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/ff/a9/5751cdf17a70ea89f6dde23ceb1705bfb638fd8cee00f845308bf8d26397/httplib2-0.9.2.tar.gz") + (sha256 + (base32 + "126rsryvw9vhbf3qmsfw9lf4l4xm2srmgs439lgma4cpag4s3ay3"))))) + (sdist (info (pkg-info + (name "hypothesis") + (version "3.4.2") + (home-page + "https://github.com/HypothesisWorks/hypothesis-python") + (synopsis #f) + (description "") + (license "MPL v2"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "enum34")) + (requirement (name "enum34")))) + (extras-require + (list (extra "fakefactory" + (list (requirement + (name "fake-factory") + (specifiers "<=0.5.3,>=0.5.2")))) + (extra "all" + (list (requirement + (name "django") + (specifiers ">=1.7")) + (requirement + (name "fake-factory") + (specifiers "<=0.5.3,>=0.5.2")) + (requirement + (name "numpy") + (specifiers ">=1.9.0")) + (requirement + (name "pytest") + (specifiers ">=2.7.0")) + (requirement (name "pytz")) + (requirement (name "pytz")))) + (extra "django" + (list (requirement (name "pytz")) + (requirement + (name "django") + (specifiers ">=1.7")) + (requirement + (name "fake-factory") + (specifiers "<=0.5.3,>=0.5.2")))) + (extra "pytest" + (list (requirement + (name "pytest") + (specifiers ">=2.7.0")))) + (extra "datetime" + (list (requirement (name "pytz")))) + (extra "numpy" + (list (requirement + (name "numpy") + (specifiers ">=1.9.0")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/74/72/7e800301f17db045e36c73577b4c3bd968eb3ecee77cefd04111f7ce9239/hypothesis-3.4.2.tar.gz") + (sha256 + (base32 + "124n802hr1mxk3cqhmbpfba2r0kqq7g2ld7izwq9qbfmf1kbk9l7"))))) + (sdist (info (pkg-info + (name "idna") + (version "2.1") + (home-page "https://github.com/kjd/idna") + (synopsis #f) + (description "") + (license "BSD-like"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/fb/84/8c27516fbaa8147acd2e431086b473c453c428e24e8fb99a1d89ce381851/idna-2.1.tar.gz") + (sha256 + (base32 + "0xn60hnmwrxijnq2hnfixmy50cacv1jv2fqngxwx0g5zms0z4dpd"))))) + (sdist (info (pkg-info + (name "ipaddr") + (version "2.1.11") + (home-page "http://code.google.com/p/ipaddr-py/") + (synopsis #f) + (description "") + (license "Apache License, Version 2.0"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/08/80/7539938aca4901864b7767a23eb6861fac18ef5219b60257fc938dae3568/ipaddr-2.1.11.tar.gz") + (sha256 + (base32 + "1dwq3ngsapjc93fw61rp17fvzggmab5x1drjzvd4y4q0i255nm8v"))))) + (sdist (info (pkg-info + (name "ipaddress") + (version "1.0.16") + (home-page "https://github.com/phihag/ipaddress") + (synopsis #f) + (description "") + (license "Python Software Foundation License"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/cd/c5/bd44885274379121507870d4abfe7ba908326cf7bfd50a48d9d6ae091c0d/ipaddress-1.0.16.tar.gz") + (sha256 + (base32 + "1c3imabdrw8nfksgjjflzg7h4ynjckqacb188rf541m74arq4cas"))))) + (sdist (info (pkg-info + (name "iso8601") + (version "0.1.11") + (home-page + "https://bitbucket.org/micktwomey/pyiso8601") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "pytest")))) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/c0/75/c9209ee4d1b5975eb8c2cba4428bde6b61bd55664a98290dd015cdb18e98/iso8601-0.1.11.tar.gz") + (sha256 + (base32 + "0c7gh3lsdjds262h0v1sqc66l7hqgfwbakn96qrhdbl0i3vm5yz8"))))) + (sdist (info (pkg-info + (name "Jinja2") + (version "2.8") + (home-page "http://jinja.pocoo.org/") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "MarkupSafe")))) + (extras-require + (list (extra "i18n" + (list (requirement + (name "Babel") + (specifiers ">=0.8")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/f2/2f/0b98b06a345a761bec91a079ccae392d282690c2d8272e708f4d10829e22/Jinja2-2.8.tar.gz") + (sha256 + (base32 + "1x0v41lp5m1pjix3l46zx02b7lqp2hflgpnxwkywxynvi3zz47xw"))))) + (sdist (info (pkg-info + (name "kombu") + (version "3.0.35") + (home-page "http://kombu.readthedocs.org") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "unittest2")) + (requirement (name "mock")) + (requirement (name "redis")))) + (install-requires + (list (requirement + (name "anyjson") + (specifiers ">=0.3.3")) + (requirement + (name "amqp") + (specifiers "<2.0,>=1.4.9")))) + (extras-require + (list (extra "qpid" + (list (requirement + (name "qpid-python") + (specifiers ">=0.26")) + (requirement + (name "qpid-tools") + (specifiers ">=0.26")))) + (extra "msgpack" + (list (requirement + (name "msgpack-python") + (specifiers ">=0.4.7")))) + (extra "yaml" + (list (requirement + (name "PyYAML") + (specifiers ">=3.10")))) + (extra "librabbitmq" + (list (requirement + (name "librabbitmq") + (specifiers ">=1.6.1")))) + (extra "mongodb" + (list (requirement + (name "pymongo") + (specifiers ">=2.6.2")))) + (extra "couchdb" + (list (requirement (name "couchdb")))) + (extra "redis" + (list (requirement + (name "redis") + (specifiers ">=2.10.3")))) + (extra "beanstalk" + (list (requirement (name "beanstalkc")))) + (extra "pyro" + (list (requirement (name "pyro4")))) + (extra "sqs" + (list (requirement + (name "boto") + (specifiers ">=2.13.3")))) + (extra "slmq" + (list (requirement + (name "softlayer_messaging") + (specifiers ">=1.0.3")))) + (extra "zookeeper" + (list (requirement + (name "kazoo") + (specifiers ">=1.3.1")))) + (extra "sqlalchemy" + (list (requirement (name "sqlalchemy")))) + (extra "zeromq" + (list (requirement + (name "pyzmq") + (specifiers ">=13.1.0")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/5f/4f/3859b52f6d465d0d4a767516c924ee4f0e1387498ac8d0c30d9942da3762/kombu-3.0.35.tar.gz") + (sha256 + (base32 + "09xpxpjz9nk8d14dj361dqdwyjwda3jlf1a7v6jif9wn2xm37ar2"))))) + (sdist (info (pkg-info + (name "kombu") + (version "3.0.30") + (home-page "http://kombu.readthedocs.org") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "mock")) + (requirement + (name "unittest2") + (specifiers ">=0.5.0")) + (requirement (name "nose")))) + (install-requires + (list (requirement + (name "anyjson") + (specifiers ">=0.3.3")) + (requirement + (name "amqp") + (specifiers "<2.0,>=1.4.7")))) + (extras-require + (list (extra "qpid" + (list (requirement + (name "qpid-python") + (specifiers ">=0.26")) + (requirement + (name "qpid-tools") + (specifiers ">=0.26")))) + (extra "sqlalchemy" + (list (requirement (name "sqlalchemy")))) + (extra "yaml" + (list (requirement + (name "PyYAML") + (specifiers ">=3.10")))) + (extra "librabbitmq" + (list (requirement + (name "librabbitmq") + (specifiers ">=1.6.1")))) + (extra "mongodb" + (list (requirement + (name "pymongo") + (specifiers ">=2.6.2")))) + (extra "zookeeper" + (list (requirement + (name "kazoo") + (specifiers ">=1.3.1")))) + (extra "redis" + (list (requirement + (name "redis") + (specifiers ">=2.10.3")))) + (extra "beanstalk" + (list (requirement (name "beanstalkc")))) + (extra "pyro" + (list (requirement (name "pyro4")))) + (extra "sqs" + (list (requirement + (name "boto") + (specifiers ">=2.13.3")))) + (extra "slmq" + (list (requirement + (name "softlayer_messaging") + (specifiers ">=1.0.3")))) + (extra "msgpack" + (list (requirement + (name "msgpack-python") + (specifiers ">=0.3.0")))) + (extra "zeromq" + (list (requirement + (name "pyzmq") + (specifiers ">=13.1.0")))) + (extra "couchdb" + (list (requirement (name "couchdb")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/e4/31/7d77a4b5fa7299208dfca6ccd8aea2d8361486f520408b0f533d4433ce6b/kombu-3.0.30.tar.gz") + (sha256 + (base32 + "0npq81ajiqmp8gjm7mq05n18y98xqpv7n4bbqb3p74d4irvgw0mr"))))) + (sdist (info (pkg-info + (name "linecache2") + (version "1.0.0") + (home-page + "https://github.com/testing-cabal/linecache2") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")) + (requirement (name "pbr")))) + (tests-require + (list (requirement (name "unittest2")) + (requirement (name "fixtures")))) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/44/b0/963c352372c242f9e40db02bbc6a39ae51bde15dddee8523fe4aca94a97e/linecache2-1.0.0.tar.gz") + (sha256 + (base32 + "0z79g3ds5wk2lvnqw0y2jpakjf32h95bd9zmnvp7dnqhf57gy9jb"))))) + (sdist (info (pkg-info + (name "lxml") + (version "3.6.4") + (home-page "http://lxml.de/") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require + (list (extra "source" + (list (requirement + (name "Cython") + (specifiers ">=0.20")))) + (extra "cssselect" + (list (requirement + (name "cssselect") + (specifiers ">=0.7")))) + (extra "html5" + (list (requirement (name "html5lib")))) + (extra "htmlsoup" + (list (requirement (name "BeautifulSoup4")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/4f/3f/cf6daac551fc36cddafa1a71ed48ea5fd642e5feabd3a0d83b8c3dfd0cb4/lxml-3.6.4.tar.gz") + (sha256 + (base32 + "0wk1vp79013ng8xgpq4mqpvpnlm4zv6b9cwrl36yc8aq1ghd7mb1"))))) + (sdist (info (pkg-info + (name "lxml") + (version "3.5.0") + (home-page "http://lxml.de/") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require + (list (extra "source" + (list (requirement + (name "Cython") + (specifiers ">=0.20")))) + (extra "cssselect" + (list (requirement + (name "cssselect") + (specifiers ">=0.7")))) + (extra "html5" + (list (requirement (name "html5lib")))) + (extra "htmlsoup" + (list (requirement (name "BeautifulSoup4")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/8b/be/ed850baac891aca25c832fb8d7b9c0e7a5077a30e336d95ffc7d649aaa06/lxml-3.5.0.tar.gz") + (sha256 + (base32 + "0y7m2s8ci6q642zl85y5axkj8z827l0vhjl532acb75hlkir77rl"))))) + (sdist (info (pkg-info + (name "MarkupSafe") + (version "0.23") + (home-page + "http://github.com/mitsuhiko/markupsafe") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/c0/41/bae1254e0396c0cc8cf1751cb7d9afc90a602353695af5952530482c963f/MarkupSafe-0.23.tar.gz") + (sha256 + (base32 + "1hvip33wva3fnmvfp9x5klqri7hpl1hkgqmjbss18nmrb7zimv54"))))) + (sdist (info (pkg-info + (name "mock") + (version "1.3.0") + (home-page + "https://github.com/testing-cabal/mock") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement + (name "unittest2") + (specifiers ">=1.1.0")))) + (install-requires + (list (requirement (name "pbr") (specifiers ">=0.11")) + (requirement (name "six") (specifiers ">=1.7")) + (requirement (name "funcsigs")))) + (extras-require + (list (extra "test" + (list (requirement + (name "unittest2") + (specifiers ">=1.1.0")))) + (extra "docs" + (list (requirement (name "sphinx")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/98/05/dd44a19f1dd9f274baae2018b843d31fbeff99399114b16ac965b4f99269/mock-1.3.0.tar.gz") + (sha256 + (base32 + "1xm0xkaz8d8d26kdk09f2n9vn543ssd03vmpkqlmgq3crjz7s90y"))))) + (sdist (info (pkg-info + (name "mock") + (version "1.0.1") + (home-page + "http://www.voidspace.org.uk/python/mock/") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "unittest2")))) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/a2/52/7edcd94f0afb721a2d559a5b9aae8af4f8f2c79bc63fdbe8a8a6c9b23bbe/mock-1.0.1.tar.gz") + (sha256 + (base32 + "0kzlsbki6q0awf89rc287f3aj8x431lrajf160a70z0ikhnxsfdq"))))) + (sdist (info (pkg-info + (name "msgpack-python") + (version "0.4.8") + (home-page "http://msgpack.org/") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/21/27/8a1d82041c7a2a51fcc73675875a5f9ea06c2663e02fcfeb708be1d081a0/msgpack-python-0.4.8.tar.gz") + (sha256 + (base32 + "11pqk5braa6wndpnr1dhg64js82vjgxnm0lzy73rwl831zgijaqs"))))) + (sdist (info (pkg-info + (name "ndg-httpsclient") + (version "0.4.2") + (home-page + "https://github.com/cedadev/ndg_httpsclient/") + (synopsis #f) + (description "") + (license + "BSD - See ndg/httpsclient/LICENCE file for details"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "PyOpenSSL")))) + (extras-require + (list (extra "subjectaltname_support" + (list (requirement (name "pyasn1")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/a2/a7/ad1c1c48e35dc7545dab1a9c5513f49d5fa3b5015627200d2be27576c2a0/ndg_httpsclient-0.4.2.tar.gz") + (sha256 + (base32 + "1b5qirv46v4dpnmfqviwq42mdwfcby4dxmz0i41wad2337pqf2aq"))))) + (sdist (info (pkg-info + (name "nose") + (version "1.3.7") + (home-page "http://readthedocs.org/docs/nose/") + (synopsis #f) + (description "") + (license "GNU LGPL"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/58/a5/0dc93c3ec33f4e281849523a5a913fa1eea9a3068acfa754d44d88107a44/nose-1.3.7.tar.gz") + (sha256 + (base32 + "164a43k7k2wsqqk1s6vavcdamvss4mz0vd6pwzv2h9n8rgwzxgzi"))))) + (sdist (info (pkg-info + (name "nose-cover3") + (version "0.1.0") + (home-page "http://github.com/ask/nosecover3") + (synopsis #f) + (description "") + (license "GNU LGPL"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/f0/17/8c55242e86830a006bbaa0463f4a1da44f332ef7cd5a402f459c8dbaaf84/nose-cover3-0.1.0.tar.gz") + (sha256 + (base32 + "1la4hhc1yszjpcchvkqk5xmzlb2g1b3fgxj9wwc58qc549whlcc1"))))) + (sdist (info (pkg-info + (name "oauth2") + (version "1.9.0.post1") + (home-page + "http://github.com/joestump/python-oauth2") + (synopsis #f) + (description "") + (license "MIT License"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "httplib2")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/64/19/8b9066e94088e8d06d649e10319349bfca961e87768a525aba4a2627c986/oauth2-1.9.0.post1.tar.gz") + (sha256 + (base32 + "1gsrkdkdymbfz9nik61043bnv7vibi5ih6ysqry7q430gigah1n0"))))) + (sdist (info (pkg-info + (name "pbr") + (version "1.10.0") + (home-page "https://launchpad.net/pbr") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/c3/2c/63275fab26a0fd8cadafca71a3623e4d0f0ee8ed7124a5bb128853d178a7/pbr-1.10.0.tar.gz") + (sha256 + (base32 + "177kd9kbv1hvf2ban7l3x9ymzbi1md4hkaymwbgnz7ihf312hr0q"))))) + (sdist (info (pkg-info + (name "pbr") + (version "0.11.1") + (home-page "https://launchpad.net/pbr") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "pip")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/8d/35/9c224b1f62566ec810851b0ff32eaf6ee6ce9acf82ff972e61d66abe9a4f/pbr-0.11.1.tar.gz") + (sha256 + (base32 + "02931hsf6bmy6bj536yyd14j4cwgf9lbkam4wc261ji95j9b46kh"))))) + (sdist (info (pkg-info + (name "petname") + (version "1.7") + (home-page "https://launchpad.net/petname") + (synopsis #f) + (description "") + (license "Apache2"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/02/b8/cbc923522011590e41e8f455d23ac909e201a0f11aa97d665a0980bf12f5/petname-1.7.tar.gz") + (sha256 + (base32 + "0lzapn7plyj5r0q5yvmngjzx6sa5wbhjz15qbil1fk5ahchasanq"))))) + (sdist (info (pkg-info + (name "Pillow") + (version "3.2.0") + (home-page "http://python-pillow.org") + (synopsis #f) + (description "") + (license "Standard PIL License"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "nose")))) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/e2/af/0a3981fffc5cd43078eb8b1057702e0dd2d5771e5aaa36cbd140e32f8473/Pillow-3.2.0.tar.gz") + (sha256 + (base32 + "0jkqjnqj3bz3cwrvbw6q1zy6dn0c328r6v20k7m0lj0c45bs1c34"))))) + (sdist (info (pkg-info + (name "pip") + (version "8.1.2") + (home-page "https://pip.pypa.io/") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require + (list (extra "testing" + (list (requirement (name "pytest")) + (requirement + (name "virtualenv") + (specifiers ">=1.10")) + (requirement + (name "scripttest") + (specifiers ">=1.3")) + (requirement (name "mock")) + (requirement (name "pretend")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/e7/a8/7556133689add8d1a54c0b14aeff0acb03c64707ce100ecd53934da1aa13/pip-8.1.2.tar.gz") + (sha256 + (base32 + "0cmpsy9lr9diskkypswm9s8glgr7w3crzh1im4zqlqv7z8zv092d"))))) + (sdist (info (pkg-info + (name "pretend") + (version "1.0.8") + (home-page "https://github.com/alex/pretend") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/49/4c/ce9218b1e7c1e3dcea38b3ff287c240d38e985ba622297f1f5cf6a136bc3/pretend-1.0.8.tar.gz") + (sha256 + (base32 + "0r5r7ygz9m6d2bklflbl84cqhjkc2q12xgis8268ygjh30g2q3wk"))))) + (sdist (info (pkg-info + (name "progressbar") + (version "2.3") + (home-page + "http://code.google.com/p/python-progressbar") + (synopsis #f) + (description "") + (license "LICENSE.txt"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/0f/e1/f30b72ecabba259c7c38dd0eb944a173effced3fd7de2c9c2902bd6f649a/progressbar-2.3.tar.gz") + (sha256 + (base32 + "0m0j93yfvbd8pw8cz2vdb9hyk9d0zkkd509k69jrw545jxr8mlxj"))))) + (sdist (info (pkg-info + (name "psycopg2") + (version "2.6.2") + (home-page "http://initd.org/psycopg/") + (synopsis #f) + (description "") + (license "LGPL with exceptions or ZPL"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/7b/a8/dc2d50a6f37c157459cd18bab381c8e6134b9381b50fbe969997b2ae7dbc/psycopg2-2.6.2.tar.gz") + (sha256 + (base32 + "0p60z2gwfcal30y2w8gprflchp1kcg9qblc5rn782p4wxl90wjbh"))))) + (sdist (info (pkg-info + (name "py") + (version "1.4.31") + (home-page "http://pylib.readthedocs.org/") + (synopsis #f) + (description "") + (license "MIT license"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/f4/9a/8dfda23f36600dd701c6722316ba8a3ab4b990261f83e7d3ffc6dfedf7ef/py-1.4.31.tar.gz") + (sha256 + (base32 + "0561gz2w3i825gyl42mcq14y3dcgkapfiv5zv9a2bz15qxiijl56"))))) + (sdist (info (pkg-info + (name "pyasn1") + (version "0.1.9") + (home-page + "http://sourceforge.net/projects/pyasn1/") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/f7/83/377e3dd2e95f9020dbd0dfd3c47aaa7deebe3c68d3857a4e51917146ae8b/pyasn1-0.1.9.tar.gz") + (sha256 + (base32 + "0zraxni14bqi20kr4bi6nwsh32aibz0fq0xaczfisw0zdpcsqg45"))))) + (sdist (info (pkg-info + (name "pyasn1-modules") + (version "0.0.8") + (home-page + "http://sourceforge.net/projects/pyasn1/") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement + (name "pyasn1") + (specifiers ">=0.1.8")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/60/32/7703bccdba05998e4ff04db5038a6695a93bedc45dcf491724b85b5db76a/pyasn1-modules-0.0.8.tar.gz") + (sha256 + (base32 + "0drqgw81xd3fxdlg89kgd79zzrabvfncvkbybi2wr6w2y4s1jmhh"))))) + (sdist (info (pkg-info + (name "pycparser") + (version "2.14") + (home-page "https://github.com/eliben/pycparser") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/6d/31/666614af3db0acf377876d48688c5d334b6e493b96d21aa7d332169bee50/pycparser-2.14.tar.gz") + (sha256 + (base32 + "0wvzyb6rxsfj3xcnpa4ynbh9qc7rrbk2277d5wqpphmx9akv8nbr"))))) + (sdist (info (pkg-info + (name "pyOpenSSL") + (version "16.0.0") + (home-page "https://pyopenssl.readthedocs.org/") + (synopsis #f) + (description "") + (license "Apache License, Version 2.0"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement + (name "cryptography") + (specifiers ">=1.3")) + (requirement (name "six") (specifiers ">=1.5.2")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/77/f2/bccec75ca4280a9fa762a90a1b8b152a22eac5d9c726d7da1fcbfe0a20e6/pyOpenSSL-16.0.0.tar.gz") + (sha256 + (base32 + "0zfijaxlq4vgi6jz0d4i5xq9ygqnyps6br7lmigjhqnh8gp10g9n"))))) + (sdist (info (pkg-info + (name "pytest") + (version "3.0.0") + (home-page "http://pytest.org") + (synopsis #f) + (description "") + (license "MIT license"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "hypothesis")))) + (install-requires + (list (requirement (name "py") (specifiers ">=1.4.29")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/3a/13/d7adc921371b07999426d9ed8b95eb67c7bab25e88839c6f4f642bf0fb4e/pytest-3.0.0.tar.gz") + (sha256 + (base32 + "14kia3y1baacv4wxbihmwvyiy9hkdb6i69mph6r00m00qjxraxx3"))))) + (sdist (info (pkg-info + (name "pytest") + (version "2.9.2") + (home-page "http://pytest.org") + (synopsis #f) + (description "") + (license "MIT license"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "hypothesis")))) + (install-requires + (list (requirement (name "py") (specifiers ">=1.4.29")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/f0/ee/6e2522c968339dca7d9abfd5e71312abeeb5ee902e09b4daf44f07b2f907/pytest-2.9.2.tar.gz") + (sha256 + (base32 + "1n6igbc1b138wx1q5gca4pqw1j6nsyicfxds5n0b5989kaxqmh8j"))))) + (sdist (info (pkg-info + (name "pytest") + (version "2.6.4") + (home-page "http://pytest.org") + (synopsis #f) + (description "") + (license "MIT license"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "py") (specifiers ">=1.4.25")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/0c/a4/1e57b84d6b327fe43d7308192f3a15ce76c31c5a8eb4b76f409ceb898ef2/pytest-2.6.4.tar.gz") + (sha256 + (base32 + "0czgz2d72582xyc2y2bm23jfl2ika40dkm40p75zdkl4h6wq622m"))))) + (sdist (info (pkg-info + (name "pytest-django") + (version "2.9.1") + (home-page + "http://pytest-django.readthedocs.org/") + (synopsis #f) + (description "") + (license "BSD-3-Clause"))) + (build-requires + (list (requirement (name "setuptools")) + (requirement + (name "setuptools_scm") + (specifiers "==1.8.0")))) + (tests-require (list)) + (install-requires + (list (requirement + (name "pytest") + (specifiers ">=2.5")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/50/6d/77a4644d15746ed2a243ed557af693cec7887e43b357919ba0b4fd029518/pytest-django-2.9.1.tar.gz") + (sha256 + (base32 + "1mmc7zsz3dlhs6sx4sppkj1vgshabi362r1a8b8wpj1qfximpqcb"))))) + (sdist (info (pkg-info + (name "pytest-runner") + (version "2.9") + (home-page + "https://github.com/pytest-dev/pytest-runner") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")) + (requirement + (name "setuptools_scm") + (specifiers ">=1.9")))) + (tests-require + (list (requirement (name "pytest")))) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/11/d4/c335ddf94463e451109e3494e909765c3e5205787b772e3b25ee8601b86a/pytest-runner-2.9.tar.gz") + (sha256 + (base32 + "0cfiw5m3ds68spxnpz48dpqcd78vwzgh8fbdg5j1zx82kgjqsdsh"))))) + (sdist (info (pkg-info + (name "python-dateutil") + (version "2.5.3") + (home-page "https://dateutil.readthedocs.org") + (synopsis #f) + (description "") + (license "Simplified BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "six") (specifiers ">=1.5")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/3e/f5/aad82824b369332a676a90a8c0d1e608b17e740bbb6aeeebca726f17b902/python-dateutil-2.5.3.tar.gz") + (sha256 + (base32 + "1v9j9fmf8g911yg6k01xa2db6dx3wv73zkk7fncsj7vagjqgs20l"))))) + (sdist (info (pkg-info + (name "python-memcached") + (version "1.58") + (home-page + "http://www.tummy.com/Community/software/python-memcached/") + (synopsis #f) + (description "") + (license "Python Software Foundation License"))) + (build-requires + (list (requirement (name "setuptools")) + (requirement (name "six") (specifiers ">=1.4.0")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/f7/62/14b2448cfb04427366f24104c9da97cf8ea380d7258a3233f066a951a8d8/python-memcached-1.58.tar.gz") + (sha256 + (base32 + "1dhfajbzyx7hy139qjqmvfavc2hc1xl2i05x7ddlr7jbnnf84x97"))))) + (sdist (info (pkg-info + (name "python-mimeparse") + (version "1.5.2") + (home-page + "https://github.com/dbtsai/python-mimeparse") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/9c/ea/148511af6f5a6889f4d3b90b00e817b4380658fd0def82a85ee83eddfa45/python-mimeparse-1.5.2.tar.gz") + (sha256 + (base32 + "09qq9fb0i8mrbci8h5a37wgw185758b56igqk2jnmk4qjnjk9wdy"))))) + (sdist (info (pkg-info + (name "python-openid") + (version "2.2.5") + (home-page + "http://github.com/openid/python-openid") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/7b/8a/e94d18c666073280b8c0614b7e38cfaf0b129989e42f4ca713942b862f0a/python-openid-2.2.5.tar.gz") + (sha256 + (base32 + "1vvhxlghjan01snfdc4k7ykd80vkyjgizwgg9bncnin8rqz1ricj"))))) + (sdist (info (pkg-info + (name "python-u2flib-server") + (version "4.0.1") + (home-page + "https://github.com/Yubico/python-u2flib-server") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement + (name "cryptography") + (specifiers ">=1.2")) + (requirement (name "enum34")))) + (extras-require + (list (extra "yubiauth_server" + (list (requirement (name "yubiauth")) + (requirement (name "WebOb")))) + (extra "u2f_server" + (list (requirement (name "WebOb")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/e7/d6/40a633fdd36669bca7753fad22a8b82351c62387fac9da3391b1702eae7d/python-u2flib-server-4.0.1.tar.gz") + (sha256 + (base32 + "02q0zwfkwmvb8cdymkvi7zbrwlkab92kqz8s4v70cys003z2a10n"))))) + (sdist (info (pkg-info + (name "pytz") + (version "2016.6.1") + (home-page "http://pythonhosted.org/pytz") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/f7/c7/08e54702c74baf9d8f92d0bc331ecabf6d66a56f6d36370f0a672fc6a535/pytz-2016.6.1.tar.bz2") + (sha256 + (base32 + "0351yg3zhyyk6ia3pfx28nwj7clr8b4lqlqyb0vqb0ng4r0z9bxm"))))) + (sdist (info (pkg-info + (name "PyYAML") + (version "3.11") + (home-page "http://pyyaml.org/wiki/PyYAML") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/75/5e/b84feba55e20f8da46ead76f14a3943c8cb722d40360702b2365b91dec00/PyYAML-3.11.tar.gz") + (sha256 + (base32 + "1s26125vfnskng58ym37xhwv8v0mm95b2cwbjfag8prfhy596v63"))))) + (sdist (info (pkg-info + (name "qrcode") + (version "5.3") + (home-page + "https://github.com/lincolnloop/python-qrcode") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "six")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/87/16/99038537dc58c87b136779c0e06d46887ff5104eb8c64989aac1ec8cba81/qrcode-5.3.tar.gz") + (sha256 + (base32 + "0kljfrfq0c2rmxf8am57333ia41kd0snbm2rnqbdy816hgpcq5a1"))))) + (sdist (info (pkg-info + (name "raven") + (version "5.24.3") + (home-page + "https://github.com/getsentry/raven-python") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "contextlib2")))) + (extras-require + (list (extra "flask" + (list (requirement + (name "Flask") + (specifiers ">=0.8")) + (requirement + (name "blinker") + (specifiers ">=1.1")))) + (extra "tests" + (list (requirement (name "six")) + (requirement (name "bottle")) + (requirement + (name "celery") + (specifiers ">=2.5")) + (requirement + (name "Django") + (specifiers ">=1.4")) + (requirement + (name "django-celery") + (specifiers ">=2.5")) + (requirement + (name "exam") + (specifiers ">=0.5.2")) + (requirement + (name "flake8") + (specifiers "<2.7,>=2.6")) + (requirement (name "logbook")) + (requirement (name "mock")) + (requirement (name "nose")) + (requirement (name "pycodestyle")) + (requirement (name "pytz")) + (requirement (name "pytest")) + (requirement + (name "pytest-django") + (specifiers "==2.9.1")) + (requirement + (name "pytest-timeout") + (specifiers "==0.4")) + (requirement (name "requests")) + (requirement (name "tornado")) + (requirement (name "webob")) + (requirement (name "webtest")) + (requirement (name "anyjson")) + (requirement + (name "Flask") + (specifiers ">=0.8")) + (requirement + (name "blinker") + (specifiers ">=1.1")) + (requirement + (name "Flask-Login") + (specifiers ">=0.2.0")) + (requirement (name "unittest2")) + (requirement (name "paste")) + (requirement (name "web.py")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/4a/f5/c530f2e170dcff261e588b0f41381e0899d5b9a754f43ece66f20c1ab5a7/raven-5.24.3.tar.gz") + (sha256 + (base32 + "1xcs0pdkladvcxn0rcjm3xijsqkfizbqdfqa9j9myh3jrbhfzshf"))))) + (sdist (info (pkg-info + (name "rb") + (version "1.5") + (home-page "http://github.com/getsentry/rb") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "redis") (specifiers ">=2.6")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/73/49/ba76cb5864122cf737cba396292f86cbf9450cd91acd2c9caabf418af4e1/rb-1.5.tar.gz") + (sha256 + (base32 + "0wpnp311dv3sgl8d0khidjbwdx0gq44wwbibga16a94dpfgrwgdw"))))) + (sdist (info (pkg-info + (name "redis") + (version "2.10.5") + (home-page + "http://github.com/andymccurdy/redis-py") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/68/44/5efe9e98ad83ef5b742ce62a15bea609ed5a0d1caf35b79257ddb324031a/redis-2.10.5.tar.gz") + (sha256 + (base32 + "0csmrkxb29x7xs9b51zplwkkq2hwnbh9jns1g85dykn5rxmaxysx"))))) + (sdist (info (pkg-info + (name "requests") + (version "2.9.2") + (home-page "http://python-requests.org") + (synopsis #f) + (description "") + (license "Apache 2.0"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require + (list (extra "security" + (list (requirement + (name "pyOpenSSL") + (specifiers ">=0.13")) + (requirement (name "ndg-httpsclient")) + (requirement (name "pyasn1")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/64/20/2133a092a0e87d1c250fe48704974b73a1341b7e4f800edecf40462a825d/requests-2.9.2.tar.gz") + (sha256 + (base32 + "10j6ydml4b34w4139jrzld3fdr8ip4z0fxmc4ksf8dng10d99gnq"))))) + (sdist (info (pkg-info + (name "requests") + (version "2.9.1") + (home-page "http://python-requests.org") + (synopsis #f) + (description "") + (license "Apache 2.0"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require + (list (extra "security" + (list (requirement + (name "pyOpenSSL") + (specifiers ">=0.13")) + (requirement (name "ndg-httpsclient")) + (requirement (name "pyasn1")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/f9/6d/07c44fb1ebe04d069459a189e7dab9e4abfe9432adcd4477367c25332748/requests-2.9.1.tar.gz") + (sha256 + (base32 + "0zsqrzlybf25xscgi7ja4s48y2abf9wvjkn47wh984qgs1fq2xy5"))))) + (sdist (info (pkg-info + (name "sentry") + (version "8.5.1") + (home-page "https://getsentry.com") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")) + (requirement (name "ndg-httpsclient")))) + (tests-require (list)) + (install-requires + (list (requirement + (name "BeautifulSoup") + (specifiers "<3.3.0,>=3.2.1")) + (requirement + (name "celery") + (specifiers "<3.1.19,>=3.1.8")) + (requirement + (name "click") + (specifiers "<7.0,>=5.0")) + (requirement + (name "cssutils") + (specifiers "<0.10.0,>=0.9.9")) + (requirement + (name "Django") + (specifiers "<1.7,>=1.6.0")) + (requirement + (name "django-bitfield") + (specifiers "<1.8.0,>=1.7.0")) + (requirement + (name "django-crispy-forms") + (specifiers "<1.5.0,>=1.4.0")) + (requirement + (name "django-debug-toolbar") + (specifiers "<1.4.0,>=1.3.2")) + (requirement + (name "django-paging") + (specifiers "<0.3.0,>=0.2.5")) + (requirement + (name "django-jsonfield") + (specifiers "<0.9.14,>=0.9.13")) + (requirement + (name "django-picklefield") + (specifiers "<0.4.0,>=0.3.0")) + (requirement + (name "django-recaptcha") + (specifiers "<1.1.0,>=1.0.4")) + (requirement + (name "django-social-auth") + (specifiers "<0.8.0,>=0.7.28")) + (requirement + (name "django-sudo") + (specifiers "<2.1.0,>=2.0.1")) + (requirement + (name "django-templatetag-sugar") + (specifiers ">=0.1.0")) + (requirement + (name "djangorestframework") + (specifiers "<2.4.0,>=2.3.8")) + (requirement + (name "email-reply-parser") + (specifiers "<0.3.0,>=0.2.0")) + (requirement + (name "enum34") + (specifiers "<1.2.0,>=0.9.18")) + (requirement + (name "exam") + (specifiers ">=0.5.1")) + (requirement + (name "hiredis") + (specifiers "<0.2.0,>=0.1.0")) + (requirement + (name "honcho") + (specifiers "<0.8.0,>=0.7.0")) + (requirement + (name "ipaddr") + (specifiers "<2.2.0,>=2.1.11")) + (requirement + (name "kombu") + (specifiers "==3.0.30")) + (requirement + (name "lxml") + (specifiers ">=3.4.1")) + (requirement + (name "msgpack-python") + (specifiers "<0.5,>=0.4")) + (requirement + (name "mock") + (specifiers "<1.1,>=0.8.0")) + (requirement + (name "petname") + (specifiers "<1.8,>=1.7")) + (requirement + (name "Pillow") + (specifiers "<3.3.0,>=3.2.0")) + (requirement + (name "progressbar") + (specifiers "<2.4,>=2.2")) + (requirement + (name "psycopg2") + (specifiers "<2.7.0,>=2.6.0")) + (requirement + (name "pytest") + (specifiers "<2.7.0,>=2.6.4")) + (requirement + (name "pytest-django") + (specifiers "<2.10.0,>=2.9.1")) + (requirement + (name "python-dateutil") + (specifiers "<3.0.0,>=2.0.0")) + (requirement + (name "python-memcached") + (specifiers "<2.0.0,>=1.53")) + (requirement + (name "PyYAML") + (specifiers "<4.0,>=3.11")) + (requirement + (name "raven") + (specifiers ">=5.3.0")) + (requirement + (name "redis") + (specifiers "<2.11.0,>=2.10.3")) + (requirement + (name "requests") + (specifiers "<2.10.0,>=2.9.1") + (extras '("security"))) + (requirement + (name "simplejson") + (specifiers "<3.9.0,>=3.2.0")) + (requirement + (name "six") + (specifiers "<2.0.0,>=1.6.0")) + (requirement + (name "setproctitle") + (specifiers "<1.2.0,>=1.1.7")) + (requirement + (name "statsd") + (specifiers "<3.2.0,>=3.1")) + (requirement + (name "South") + (specifiers "==1.0.1")) + (requirement + (name "toronado") + (specifiers "<0.1.0,>=0.0.4")) + (requirement + (name "ua-parser") + (specifiers "<0.8.0,>=0.6.1")) + (requirement + (name "urllib3") + (specifiers "<1.15,>=1.14")) + (requirement + (name "uwsgi") + (specifiers "<2.1.0,>2.0.0")) + (requirement + (name "rb") + (specifiers "<2.0.0,>=1.4.0")) + (requirement + (name "qrcode") + (specifiers "<6.0.0,>=5.2.2")) + (requirement + (name "python-u2flib-server") + (specifiers "<4.1.0,>=4.0.1")))) + (extras-require + (list (extra "tests" + (list (requirement (name "blist")) + (requirement (name "casscache")) + (requirement (name "cqlsh")) + (requirement (name "datadog")) + (requirement + (name "pytest-cov") + (specifiers "<1.9.0,>=1.8.0")) + (requirement + (name "pytest-timeout") + (specifiers "<0.6.0,>=0.5.0")) + (requirement + (name "pytest-xdist") + (specifiers "<1.12.0,>=1.11.0")) + (requirement (name "python-coveralls")) + (requirement (name "responses")))) + (extra "dsym" + (list (requirement + (name "symsynd") + (specifiers "<1.0.0,>=0.7.0")))) + (extra "dev" + (list (requirement (name "Babel")) + (requirement + (name "flake8") + (specifiers "<2.1,>=2.0")) + (requirement + (name "isort") + (specifiers "<4.3.0,>=4.2.2")))) + (extra "postgres" + (list (requirement + (name "BeautifulSoup") + (specifiers "<3.3.0,>=3.2.1")) + (requirement + (name "celery") + (specifiers "<3.1.19,>=3.1.8")) + (requirement + (name "click") + (specifiers "<7.0,>=5.0")) + (requirement + (name "cssutils") + (specifiers "<0.10.0,>=0.9.9")) + (requirement + (name "Django") + (specifiers "<1.7,>=1.6.0")) + (requirement + (name "django-bitfield") + (specifiers "<1.8.0,>=1.7.0")) + (requirement + (name "django-crispy-forms") + (specifiers "<1.5.0,>=1.4.0")) + (requirement + (name "django-debug-toolbar") + (specifiers "<1.4.0,>=1.3.2")) + (requirement + (name "django-paging") + (specifiers "<0.3.0,>=0.2.5")) + (requirement + (name "django-jsonfield") + (specifiers "<0.9.14,>=0.9.13")) + (requirement + (name "django-picklefield") + (specifiers "<0.4.0,>=0.3.0")) + (requirement + (name "django-recaptcha") + (specifiers "<1.1.0,>=1.0.4")) + (requirement + (name "django-social-auth") + (specifiers "<0.8.0,>=0.7.28")) + (requirement + (name "django-sudo") + (specifiers "<2.1.0,>=2.0.1")) + (requirement + (name "django-templatetag-sugar") + (specifiers ">=0.1.0")) + (requirement + (name "djangorestframework") + (specifiers "<2.4.0,>=2.3.8")) + (requirement + (name "email-reply-parser") + (specifiers "<0.3.0,>=0.2.0")) + (requirement + (name "enum34") + (specifiers "<1.2.0,>=0.9.18")) + (requirement + (name "exam") + (specifiers ">=0.5.1")) + (requirement + (name "hiredis") + (specifiers "<0.2.0,>=0.1.0")) + (requirement + (name "honcho") + (specifiers "<0.8.0,>=0.7.0")) + (requirement + (name "ipaddr") + (specifiers "<2.2.0,>=2.1.11")) + (requirement + (name "kombu") + (specifiers "==3.0.30")) + (requirement + (name "lxml") + (specifiers ">=3.4.1")) + (requirement + (name "msgpack-python") + (specifiers "<0.5,>=0.4")) + (requirement + (name "mock") + (specifiers "<1.1,>=0.8.0")) + (requirement + (name "petname") + (specifiers "<1.8,>=1.7")) + (requirement + (name "Pillow") + (specifiers "<3.3.0,>=3.2.0")) + (requirement + (name "progressbar") + (specifiers "<2.4,>=2.2")) + (requirement + (name "psycopg2") + (specifiers "<2.7.0,>=2.6.0")) + (requirement + (name "pytest") + (specifiers "<2.7.0,>=2.6.4")) + (requirement + (name "pytest-django") + (specifiers "<2.10.0,>=2.9.1")) + (requirement + (name "python-dateutil") + (specifiers "<3.0.0,>=2.0.0")) + (requirement + (name "python-memcached") + (specifiers "<2.0.0,>=1.53")) + (requirement + (name "PyYAML") + (specifiers "<4.0,>=3.11")) + (requirement + (name "raven") + (specifiers ">=5.3.0")) + (requirement + (name "redis") + (specifiers "<2.11.0,>=2.10.3")) + (requirement + (name "requests") + (specifiers "<2.10.0,>=2.9.1") + (extras '("security"))) + (requirement + (name "simplejson") + (specifiers "<3.9.0,>=3.2.0")) + (requirement + (name "six") + (specifiers "<2.0.0,>=1.6.0")) + (requirement + (name "setproctitle") + (specifiers "<1.2.0,>=1.1.7")) + (requirement + (name "statsd") + (specifiers "<3.2.0,>=3.1.0")) + (requirement + (name "South") + (specifiers "==1.0.1")) + (requirement + (name "toronado") + (specifiers "<0.1.0,>=0.0.4")) + (requirement + (name "ua-parser") + (specifiers "<0.8.0,>=0.6.1")) + (requirement + (name "urllib3") + (specifiers "<1.15,>=1.14")) + (requirement + (name "uwsgi") + (specifiers "<2.1.0,>2.0.0")) + (requirement + (name "rb") + (specifiers "<2.0.0,>=1.4.0")) + (requirement + (name "qrcode") + (specifiers "<6.0.0,>=5.2.2")) + (requirement + (name "python-u2flib-server") + (specifiers "<4.1.0,>=4.0.1")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/32/15/1b713578ddaf5aa42432d31fdbb45dacea0fb51830670f657318cbdea1ea/sentry-8.5.1.tar.gz") + (sha256 + (base32 + "1mfairg3yp8bwksygczr8gmn1p5gbc9i1nm7jp5lzsdz7vffr32a"))))) + (sdist (info (pkg-info + (name "setproctitle") + (version "1.1.10") + (home-page + "https://github.com/dvarrazzo/py-setproctitle") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/5a/0d/dc0d2234aacba6cf1a729964383e3452c52096dc695581248b548786f2b3/setproctitle-1.1.10.tar.gz") + (sha256 + (base32 + "163kplw9dcrw0lffq1bvli5yws3rngpnvrxrzdw89pbphjjvg0v2"))))) + (sdist (info (pkg-info + (name "setuptools") + (version "23.0.0") + (home-page "https://github.com/pypa/setuptools") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires (list)) + (tests-require + (list (requirement (name "mock")) + (requirement (name "pytest-runner")) + (requirement + (name "pytest") + (specifiers "<3.0.0")))) + (install-requires (list)) + (extras-require + (list (extra "ssl" (list)) + (extra "certs" + (list (requirement + (name "certifi") + (specifiers "==2016.2.28")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/45/5e/79ca67a0d6f2f42bfdd9e467ef97398d6ad87ee2fa9c8cdf7caf3ddcab1e/setuptools-23.0.0.tar.gz") + (sha256 + (base32 + "0kkjsa9ma4z5ps6xwvkyprrfndwmfilfa1n75xj2sj7dzbjh76v9"))))) + (sdist (info (pkg-info + (name "setuptools-scm") + (version "1.11.1") + (home-page + "https://github.com/pypa/setuptools_scm/") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/84/aa/c693b5d41da513fed3f0ee27f1bf02a303caa75bbdfa5c8cc233a1d778c4/setuptools_scm-1.11.1.tar.gz") + (sha256 + (base32 + "1gqr73i150yzj3mz32854vj93x07yr52kn8fdckwa41ll8wgficc"))))) + (sdist (info (pkg-info + (name "setuptools-scm") + (version "1.8.0") + (home-page + "https://github.com/pypa/setuptools_scm/") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/76/ac/0d97955afce837b065b8f2699d67f2e93b5f48b76f9e89c20dfeebb42ef7/setuptools_scm-1.8.0.tar.bz2") + (sha256 + (base32 + "00p60v2yfqy1r58pjcx9wy6dvqd7wkpfs5z1dzwf7y75c1g3dgyx"))))) + (sdist (info (pkg-info + (name "simplejson") + (version "3.8.1") + (home-page + "http://github.com/simplejson/simplejson") + (synopsis #f) + (description "") + (license "MIT License"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/70/b0/c8169f6c2b7927614bea25636485992248ae0b1d7bc83858a9185461f57b/simplejson-3.8.1.tar.gz") + (sha256 + (base32 + "14r4l4rcsyf87p2j4ycsbb017n4vzxfmv285rq2gny4w47rwi2j2"))))) + (sdist (info (pkg-info + (name "six") + (version "1.10.0") + (home-page "http://pypi.python.org/pypi/six/") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/b3/b2/238e2590826bfdd113244a40d9d3eb26918bd798fc187e2360a8367068db/six-1.10.0.tar.gz") + (sha256 + (base32 + "0snmb8xffb3vsma0z67i0h0w2g2dy0p3gsgh9gi4i0kgc5l8spqh"))))) + (sdist (info (pkg-info + (name "South") + (version "1.0.1") + (home-page "http://south.aeracode.org/") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/77/37/00969f4e3e830df7cbba93933371b30f22ada2978dd21b458ed17cb6b4c2/South-1.0.1.tar.gz") + (sha256 + (base32 + "1lssqyq4alzqwl00izm8qs6gq13w9n8cslzxn9735pq785iprs8w"))))) + (sdist (info (pkg-info + (name "sqlparse") + (version "0.2.1") + (home-page + "https://github.com/andialbrecht/sqlparse") + (synopsis #f) + (description "") + (license "BSD"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/c3/c4/6159720e7a100cd419bac31a202898e291e5af29e4ada09ee58f7eeaa076/sqlparse-0.2.1.tar.gz") + (sha256 + (base32 + "1lbp8cnc3kpbmnjcwnkwy3h95rcbsfj7namp2yw1nzz6zyys560w"))))) + (sdist (info (pkg-info + (name "statsd") + (version "3.1") + (home-page "https://github.com/jsocol/pystatsd") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/b7/10/a1afbd9523c79a44686fb654ab6547007ae57a2ad669caa76f7c291324c7/statsd-3.1.tar.gz") + (sha256 + (base32 + "1vi8xx8hrgyhgcw3d3yc7bh4vfc48swlm0xwfp1994xf6gmmzbpv"))))) + (sdist (info (pkg-info + (name "testtools") + (version "2.2.0") + (home-page + "https://github.com/testing-cabal/testtools") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "pbr") (specifiers ">=0.11")) + (requirement + (name "extras") + (specifiers ">=1.0.0")) + (requirement + (name "fixtures") + (specifiers ">=1.3.0")) + (requirement (name "python-mimeparse")) + (requirement + (name "unittest2") + (specifiers ">=1.0.0")) + (requirement (name "traceback2")) + (requirement (name "six") (specifiers ">=1.4.0")))) + (extras-require + (list (extra "test" + (list (requirement (name "testscenarios")) + (requirement + (name "unittest2") + (specifiers ">=1.1.0")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/0d/72/3212c1723d49f5b58fca736dabdd2e74f38435076d943f4a642117f04d65/testtools-2.2.0.tar.gz") + (sha256 + (base32 + "042qlqymy9m40w30fg3gj20wahmac9jphnsfwb8f8k3fg9h0dxl0"))))) + (sdist (info (pkg-info + (name "toronado") + (version "0.0.10") + (home-page "UNKNOWN") + (synopsis #f) + (description "") + (license "Apache License 2.0"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require + (list (requirement (name "pytest")) + (requirement (name "exam")))) + (install-requires + (list (requirement (name "cssselect")) + (requirement (name "cssutils")) + (requirement (name "lxml")))) + (extras-require + (list (extra "tests" + (list (requirement (name "exam")) + (requirement (name "pytest")))) + (extra "dev" + (list (requirement (name "flake8")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/47/c1/278ed8c7ed103d191eff0e6d0bd9201ffe900c9c11def8f4d39f8cd4937a/toronado-0.0.10.tar.gz") + (sha256 + (base32 + "1r68hqm0kqbllzs3m1ahd62p5y61zh8pxncxhp8kmlz676dawfir"))))) + (sdist (info (pkg-info + (name "traceback2") + (version "1.4.0") + (home-page + "https://github.com/testing-cabal/traceback2") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")) + (requirement (name "pbr")))) + (tests-require + (list (requirement (name "unittest2")) + (requirement (name "testtools")) + (requirement (name "contextlib2")))) + (install-requires + (list (requirement (name "linecache2")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/eb/7f/e20ba11390bdfc55117c8c6070838ec914e6f0053a602390a598057884eb/traceback2-1.4.0.tar.gz") + (sha256 + (base32 + "0c1h3jas1jp1fdbn9z2mrgn3jj0hw1x3yhnkxp7jw34q15xcdb05"))))) + (sdist (info (pkg-info + (name "ua-parser") + (version "0.7.1") + (home-page + "https://github.com/ua-parser/uap-python") + (synopsis #f) + (description "") + (license "LICENSE.txt"))) + (build-requires + (list (requirement (name "setuptools")) + (requirement (name "pyyaml")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/9c/f4/872c229b0d6335bc56d552bceebc91dae2f5d3abf2e0e749db32b765471b/ua-parser-0.7.1.tar.gz") + (sha256 + (base32 + "16ys1882vjiqvla95r4jyv8qrv0ba1wfcj4kn69nr3dnrhbcpxz1"))))) + (sdist (info (pkg-info + (name "unittest2") + (version "1.1.0") + (home-page + "http://pypi.python.org/pypi/unittest2") + (synopsis #f) + (description "") + (license "UNKNOWN"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires + (list (requirement (name "argparse")) + (requirement (name "six") (specifiers ">=1.4")) + (requirement (name "traceback2")))) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/7f/c4/2b0e2d185d9d60772c10350d9853646832609d2f299a8300ab730f199db4/unittest2-1.1.0.tar.gz") + (sha256 + (base32 + "0y855kmx7a8rnf81d3lh5lyxai1908xjp0laf4glwa4c8472m212"))))) + (sdist (info (pkg-info + (name "urllib3") + (version "1.14") + (home-page "http://urllib3.readthedocs.org/") + (synopsis #f) + (description "") + (license "MIT"))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require + (list (extra "secure" + (list (requirement + (name "pyOpenSSL") + (specifiers ">=0.13")) + (requirement (name "ndg-httpsclient")) + (requirement (name "pyasn1")) + (requirement (name "certifi")))) + (extra "socks" + (list (requirement + (name "PySocks") + (specifiers "<2.0,>=1.5.6")))))) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/6c/11/68602df8fb13daeb2b61e2dc3209c6d8a599af7943691dfa7d48f32ef69b/urllib3-1.14.tar.gz") + (sha256 + (base32 + "0dwdq39nn9vr2cd9y7abbln66f7x45dnckbyihrih2z59hxb2kyx"))))) + (sdist (info (pkg-info + (name "uwsgi") + (version "2.0.13.1") + (home-page "") + (synopsis "") + (description "") + (license ""))) + (build-requires + (list (requirement (name "setuptools")))) + (tests-require (list)) + (install-requires (list)) + (extras-require (list)) + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/83/22/47b6ff871a5f01b9f660121cf61ba1eccbf7886b5cbe24caacccd0d00d07/uwsgi-2.0.13.1.tar.gz") + (sha256 + (base32 + "0zwdljaljzshrdcqsrr2l2ak2zcmsps4glac2lrg0xmb28phrjif"))))))) diff --git a/gpip/update.scm b/gpip/update.scm new file mode 100644 index 0000000..42f701a --- /dev/null +++ b/gpip/update.scm @@ -0,0 +1,83 @@ +(define-module (gpip update) + #:use-module (ice-9 vlist) + #:use-module (guix monads) + #:use-module ((gnu packages python) + #:select (python-2.7 python-wrapper)) + #:use-module (pypi sdist) + #:use-module (pypi sdist-store) + #:use-module (pypi sdist-store import-master) + #:use-module (pypi api) + #:use-module (pypi logging) + #:use-module (pypi package) + #:use-module (gpip sdists) + #:use-module (gpip package-fixes) + #:export (update)) + +(define (write-intermediate-result store) + ((write-store) store)) + +(define %sdist-store-monad %state-monad) + +(define api-root "https://pypi.python.org/pypi/") + +(define* (get-store-with name version #:key (python python-wrapper)) + (lambda (store) + (let + ((new-state + (create-sdist-and-missing-dependencies + api-root + store + get-fixed-package + python + name + version + write-intermediate-result))) + (values + new-state new-state)))) + +(define (write-store) + (lambda (store) + (begin + (create-sdists-module + store + '(gpip sdists) + "../guix-python-intergration-project/gpip/sdists.scm") + store))) + +(define (update) + (setup-logging) + (let* + ((sdists + (catch #t + (lambda () (begin + (use-modules (gpip sdists)) + sdists)) + (lambda (key . parameters) + (begin + (error "error loading sdists") + (display "error loading sdists, using empty store\n") + (display key)(display " ")(display parameters) + '()))))) + (with-monad %state-monad + (run-with-state + (mbegin %state-monad + (get-store-with "setuptools" "23.0.0") + (get-store-with "simplejson" "3.8.1") + (get-store-with "requests" "2.9.1") + (get-store-with "pbr" "0.11.1") + (get-store-with "Jinja2" "2.8") + (get-store-with "lxml" "3.5.0") + (get-store-with "cffi" "1.5.0") + (get-store-with "coverage" "4.0.3") + (get-store-with "mock" "1.3.0") + (get-store-with "statsd" "3.1") + (get-store-with "pillow" "3.2.0") + (get-store-with "cryptography" "1.4") + (get-store-with "setuptools" "23.0.0" #:python python-2.7) + (get-store-with "django-jsonfield" "0.9.13" #:python python-2.7) + (get-store-with "anyjson" "0.3.3" #:python python-2.7) + (get-store-with "kombu" "3.0.30" #:python python-2.7) + (get-store-with "sentry" "8.5.1" #:python python-2.7) + (write-store)) + (add-sdists (make-sdist-store) sdists))) + (shutdown-logging))) diff --git a/guix-env.scm b/guix-env.scm new file mode 100644 index 0000000..df3529c --- /dev/null +++ b/guix-env.scm @@ -0,0 +1,343 @@ +(use-modules ((guix licenses) #:select (bsd-3 gpl3+ psfl)) + (guix packages) + (guix download) + (guix git-download) + (guix gexp) + (guix build-system cmake) + (guix build-system trivial) + (guix build-system python) + (guix build-system gnu) + (gnu packages python) + (gnu packages xml) + (gnu packages tls) + (gnu packages emacs) + (gnu packages package-management) + (gnu packages zip) + (gnu packages swig) + (gnu packages compression) + (gnu packages guile)) + +(define libsolv + (package + (name "libsolv") + (version "0.6.22") + (source (origin + (method url-fetch) + (uri (string-append "https://github.com/openSUSE/libsolv/archive/" + version ".tar.gz")) + (file-name (string-append name "-" version ".tar.gz")) + (modules '((guix build utils))) + (sha256 + (base32 + "0zl7dlqmib05y5f2wkbz66n68bmqk2fxhvph1dfr071v7jnzc6gf")) + (snippet + '(substitute* '("bindings/python/CMakeLists.txt") + (("EXECUTE_PROCESS.*") "") + (("libsolv ") "libsolv python2.7 ") + )))) + (build-system cmake-build-system) + (inputs + `(("expat" ,expat) + ("zlib" ,zlib) + ("python" ,python-2.7) + ("swig" ,swig))) + (arguments + '(#:configure-flags + (list (string-append "-DPYTHON_INSTALL_DIR=" + (assoc-ref %outputs "out") "/lib/python2.7/site-packages") + "-DENABLE_PYTHON=1" + (string-append ; uses lib64 by default + "-DLIB=lib") + (string-append "-DCMAKE_INSTALL_RPATH=" + (assoc-ref %outputs "out") "/lib")))) + ;(assoc-ref %outputs "out") "/lib:" + ;(assoc-ref %outputs "out") "/lib64")))) + (home-page "https://github.com/openSUSE/libsolv") + (synopsis "libsolv") + (description "") + (license bsd-3))) + +(define pyguile + (package + (name "pyguile") + (version "0.3.1") + (source (origin + (method git-fetch) + (uri (git-reference + (url "http://git.cbaines.net/pyguile") + (commit "e37142e8aaa903920d4f13a5ef66a352618e65c6"))) + (sha256 + (base32 + "037w1bf58yn4kfy5jydd1jzfi7dpg0m2w8p1sd2wnr6py03hybwq")))) + ;(source (origin + ; (method url-fetch) + ; (uri (string-append "https://github.com/cbaines/pyguile/archive/v" + ; version ".tar.gz")) + ; (file-name (string-append name "-" version ".tar.gz")) + ; (modules '((guix build utils))) + ; (sha256 + ; (base32 + ; "0ds5pnm4dc0vyfa5wlyw9dvzl6dyiizh4q8s153byyn8jkiimb5c")))) + (build-system cmake-build-system) + (inputs + `(("python" ,python-2.7) + ("guile" ,guile-2.0))) + (arguments + '(;#:tests? #f ; no tests + ;#:make-flags (list "CC=gcc" + ; (string-append "PREFIX=" %output)) + #:phases + (modify-phases %standard-phases + (delete 'configure) + (delete 'check) + (replace 'build + (lambda* (#:key outputs #:allow-other-keys) + ;(chdir "..") + (display "CWD ")(display (getcwd))(display "\n") + (let ((out (assoc-ref outputs "out"))) + (zero? + (system* "make" "CC=gcc"))))) + (replace + 'install + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (guild (string-append (assoc-ref %build-inputs "guile") + "/bin/guild")) + (scm-dir + (string-append out "/share/guile/site/2.0/")) + (scm-path + (string-append scm-dir "pyguile.scm")) + (lib-dir + (string-append out "/lib/")) + (lib-path + (string-append lib-dir "libpyguile.so"))) + (mkdir-p scm-dir) + (mkdir-p lib-dir) + (copy-file "pyguile.scm" scm-path) + (copy-file "libpyguile.so" lib-path) + (substitute* scm-path + (("libpyguile") + (string-append lib-dir "libpyguile"))) + (setenv "GUILE_AUTO_COMPILE" "0") + (unless (zero? + (system* guild "compile" scm-path + "-o" (string-append scm-dir "pyguile.go"))) + (error "failed to compile")) + #t)))))) + (home-page "https://github.com/tddpirate/pyguile") + (synopsis "pyguile") + (description "") + (license bsd-3))) + +(define python-packaging + (package + (name "python-packaging") + (version "16.7") + (source + (origin + (method url-fetch) + (uri (string-append + "https://pypi.python.org/packages/28/ad/4e6601d14b11bb300719a8bb6247f6ef5861467a692523c978a4e9e3981a/packaging-" + version + ".tar.gz")) + (sha256 + (base32 + "07h18mrpqs0lv2x4fl43pqi0xj6hdrmrnm6v9q634yliagg6q91f")))) + (build-system python-build-system) + (inputs + `(("python-setuptools" ,python-setuptools))) + (propagated-inputs + `(("python-pyparsing" ,python-pyparsing) + ("python-six" ,python-six))) + (home-page "https://github.com/pypa/packaging") + (synopsis "Core utilities for Python packages") + (description + "Core utilities for Python packages") + (license #f))) + +(define python2-packaging + (package-with-python2 python-packaging)) + +(define python-setuptools + (package + (name "python-setuptools") + (version "20.10.1") + (source + (origin + (method url-fetch) + (uri "https://pypi.python.org/packages/d3/16/21cf5dc6974280197e42d57bf7d372380562ec69aef9bb796b5e2dbbed6e/setuptools-20.10.1.tar.gz") + (sha256 + (base32 + "1pdm34rjixkdyp5j2yp774ri1da7ncqy8s34h4qxdl4yy22whn9y")))) + (build-system python-build-system) + ;; FIXME: Tests require pytest, which itself relies on setuptools. + ;; One could bootstrap with an internal untested setuptools. + (arguments + `(#:tests? #f)) + (home-page "https://pypi.python.org/pypi/setuptools") + (synopsis + "Library designed to facilitate packaging Python projects") + (description + "Setuptools is a fully-featured, stable library designed to facilitate +packaging Python projects, where packaging includes: +Python package and module definitions, +distribution package metadata, +test hooks, +project installation, +platform-specific details, +Python 3 support.") + (license psfl))) + +(define python2-setuptools + (package-with-python2 python-setuptools)) + +(define guix-pypi-utils + (package + (name "guix-pypi-utils") + (version "0.1") + ;(source (local-file "../guix-pypi-utils" #:recursive? #t)) + (source (origin + (method git-fetch) + (uri (git-reference + (url "http://git.cbaines.net/guix-pypi-utils") + (commit "86de22b526313a68e5c8bb8a361d5904c30d8b51"))) + (file-name (string-append name "-" version "-checkout")) + (sha256 + (base32 + "1n0f3cgxinxgfsf48vgvj6ggn5m8is7hrinx8bzmxiy4rlzaq5db")))) + (build-system trivial-build-system) + (arguments + `(#:modules + ((guix build utils) + (ice-9 match)) + #:builder + (begin + (use-modules (guix build utils) + (ice-9 match)) + (let* ((out (assoc-ref %outputs "out")) + (module-dir (string-append out "/share/guile/site/2.0")) + (source (assoc-ref %build-inputs "source")) + (guild (string-append (assoc-ref %build-inputs "guile") + "/bin/guild"))) + + (mkdir-p (string-append module-dir "/pypi")) + (copy-recursively (string-append source "/pypi") + (string-append module-dir "/pypi")) + + (mkdir-p (string-append module-dir "/solver")) + (install-file + (string-append source "/solver/__init__.py") + (string-append module-dir "/solver")) + + (display "pythonpath\n") + (display (getenv "PYTHONPATH")) + (substitute* (string-append module-dir "/pypi/dependency-solver.scm") + (("\\(define %solver-location \"\"\\)") + (string-append + "(define %solver-location \"" module-dir "\")"))) + + (setenv "GUILE_AUTO_COMPILE" "0") + ;(for-each (lambda (file) + ; (let ((scm-file + ; (string-append module-dir file)) + ; (go-file (match (string-split file #\.) + ; ((base _) + ; (string-append module-dir "/" + ; base ".go"))))) + ; ;; Install compiled module. + ; (unless (zero? (system* guild "compile" + ; "-L" source + ; "-o" go-file + ; scm-file)) + ; (error (format #f "Failed to compile ~s to ~s!" + ; scm-file go-file))))) + ; (map + ; (lambda (file) + ; (substring + ; file + ; (string-length module-dir))) + ; (find-files (string-append + ; module-dir + ; "/pypi") + ; ".*\\.scm$"))) + #t)))) + (inputs + `(("unzip" ,unzip) + ("guile" ,guile-2.0))) + (propagated-inputs + `(("guix" ,guix-0.11.0) + ("guile-lib" ,guile-lib) + ("guile-json" ,guile-json) + ("pyguile" ,pyguile) + ("libsolv" ,libsolv) + ("python" ,python-2.7) + ("python2-setuptools" ,python2-setuptools) + ("python2-packaging" ,python2-packaging))) + (home-page "https://example.com") + (synopsis "guix-pypi-utils") + (description "") + (license gpl3+))) + +(define guix-python-integration-project + (package + (name "guix-python-integration-project") + (version "0.1") + (source (local-file "." #:recursive? #t)) + (build-system trivial-build-system) + (arguments + `(#:modules + ((guix build utils) + (ice-9 match)) + #:builder + (begin + (use-modules (guix build utils) + (ice-9 match)) + (let* ((out (assoc-ref %outputs "out")) + (module-dir (string-append out "/share/guile/site/2.0")) + (source (assoc-ref %build-inputs "source")) + (scm-files + (find-files "." ".*\\.scm$")) + (guild (string-append (assoc-ref %build-inputs "guile") + "/bin/guild"))) + ;; Make installation directories. + (mkdir-p (string-append module-dir "/guix-python-integration-project")) + + (setenv "GUILE_AUTO_COMPILE" "0") + (for-each (lambda (file) + (let* ((dest-file (string-append module-dir "/" + file)) + (go-file (match (string-split file #\.) + ((base _) + (string-append module-dir "/" + base ".go"))))) + ;; Install source module. + (copy-file file dest-file) + ;; Install compiled module. + (unless (zero? (system* guild "compile" + "-L" source + "-o" go-file + file)) + (error (format #f "Failed to compile ~s to ~s!" + file go-file))))) + (map + (lambda (file) + (display file)(display "\n") + (display + (substring + file + (string-length module-dir))) (display "\n") + (substring + file + (string-length module-dir))) + scm-files)) + #t)))) + (propagated-inputs + `(("guix" ,guix-0.11.0) + ("guile" ,guile-2.0) + ("guix-pypi-utils" ,guix-pypi-utils))) + (home-page "https://example.com") + (synopsis "guix-pypi-utils") + (description "") + (license gpl3+))) + +guix-python-integration-project diff --git a/pre-inst-env b/pre-inst-env new file mode 100755 index 0000000..7907f51 --- /dev/null +++ b/pre-inst-env @@ -0,0 +1,12 @@ +#!/bin/sh + +GUILE_LOAD_PATH=".:$GUILE_LOAD_PATH" +export GUILE_LOAD_PATH + +GUIX_PACKAGE_PATH="$GUILE_LOAD_PATH" +export GUIX_PACKAGE_PATH + +GUILE_WARN_DEPRECATED="detailed" +export GUILE_WARN_DEPRECATED + +exec "$@" diff --git a/pure-pre-inst-env b/pure-pre-inst-env new file mode 100755 index 0000000..9ab3e82 --- /dev/null +++ b/pure-pre-inst-env @@ -0,0 +1,3 @@ +#!/bin/sh + +guix environment --pure -l guix-env.scm -- ./pre-inst-env "$@" |