gnu: Fix common unquote typos.
[jackhill/guix/guix.git] / gnu / packages / python-web.scm
1 ;;; GNU Guix --- Functional package management for GNU
2 ;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
3 ;;; Copyright © 2015, 2016, 2017 Efraim Flashner <efraim@flashner.co.il>
4 ;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
5 ;;; Copyright © 2016, 2017 Danny Milosavljevic <dannym+a@scratchpost.org>
6 ;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
7 ;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
8 ;;; Copyright © 2015, 2016, 2017 Ricardo Wurmus <rekado@elephly.net>
9 ;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
10 ;;; Copyright © 2016, 2017 Julien Lepiller <julien@lepiller.eu>
11 ;;; Copyright © 2016, 2017 ng0 <ng0@infotropique.org>
12 ;;; Copyright © 2014, 2017 Eric Bavier <bavier@member.fsf.org>
13 ;;; Copyright © 2014, 2015 Mark H Weaver <mhw@netris.org>
14 ;;; Copyright © 2015 Cyril Roelandt <tipecaml@gmail.com>
15 ;;; Copyright © 2015, 2016, 2017 Leo Famulari <leo@famulari.name>
16 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
17 ;;; Copyright © 2016, 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
18 ;;; Copyright © 2015, 2017 Ben Woodcroft <donttrustben@gmail.com>
19 ;;; Copyright © 2015, 2016 Christopher Allan Webber <cwebber@dustycloud.org>
20 ;;; Copyright © 2017 Adriano Peluso <catonano@gmail.com>
21 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
22 ;;; Copyright © 2016 David Craven <david@craven.ch>
23 ;;; Copyright © 2017 Oleg Pykhalov <go.wigust@gmail.com>
24 ;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
25 ;;; Copyright © 2017 Mark Meyer <mark@ofosos.org>
26 ;;;
27 ;;; This file is part of GNU Guix.
28 ;;;
29 ;;; GNU Guix is free software; you can redistribute it and/or modify it
30 ;;; under the terms of the GNU General Public License as published by
31 ;;; the Free Software Foundation; either version 3 of the License, or (at
32 ;;; your option) any later version.
33 ;;;
34 ;;; GNU Guix is distributed in the hope that it will be useful, but
35 ;;; WITHOUT ANY WARRANTY; without even the implied warranty of
36 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
37 ;;; GNU General Public License for more details.
38 ;;;
39 ;;; You should have received a copy of the GNU General Public License
40 ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
41
42 (define-module (gnu packages python-web)
43 #:use-module (guix packages)
44 #:use-module (guix download)
45 #:use-module (guix build-system python)
46 #:use-module (gnu packages)
47 #:use-module (gnu packages check)
48 #:use-module (gnu packages compression)
49 #:use-module (gnu packages curl)
50 #:use-module (gnu packages databases)
51 #:use-module (gnu packages django)
52 #:use-module (gnu packages pkg-config)
53 #:use-module (gnu packages python)
54 #:use-module (gnu packages python-crypto)
55 #:use-module (gnu packages tls)
56 #:use-module (gnu packages time)
57 #:use-module (gnu packages xml)
58 #:use-module ((guix licenses) #:prefix license:)
59 #:use-module (srfi srfi-1))
60
61 (define-public python-furl
62 (package
63 (name "python-furl")
64 (version "0.5.6")
65 (source
66 (origin
67 (method url-fetch)
68 (uri (pypi-uri "furl" version))
69 (sha256
70 (base32
71 "0lzpfpm686hvz3sr1mcrnd1b3lgmnw8v59gb43wfi98r3b671pqc"))))
72 (build-system python-build-system)
73 (propagated-inputs
74 `(("python-six" ,python-six)
75 ("python-orderedmultidict" ,python-orderedmultidict)))
76 (native-inputs
77 `(("python-pycodestyle" ,python-pycodestyle)))
78 (home-page "https://github.com/gruns/furl")
79 (synopsis "URL manipulation in Python")
80 (description "Furl provides an easy-to-use alternative to the
81 @code{urllib} and @code{urlparse} modules for manipulating URLs.")
82 (license license:unlicense)))
83
84 (define-public python2-furl
85 (package-with-python2 python-furl))
86
87 (define-public python-httplib2
88 (package
89 (name "python-httplib2")
90 (version "0.9.2")
91 (source
92 (origin
93 (method url-fetch)
94 (uri (pypi-uri "httplib2" version))
95 (sha256
96 (base32
97 "126rsryvw9vhbf3qmsfw9lf4l4xm2srmgs439lgma4cpag4s3ay3"))))
98 (build-system python-build-system)
99 (home-page "https://github.com/jcgregorio/httplib2")
100 (synopsis "Comprehensive HTTP client library")
101 (description
102 "A comprehensive HTTP client library supporting many features left out of
103 other HTTP libraries.")
104 (license license:expat)))
105
106 (define-public python2-httplib2
107 (package-with-python2 python-httplib2))
108
109 (define-public python-sockjs-tornado
110 (package
111 (name "python-sockjs-tornado")
112 (version "1.0.3")
113 (source
114 (origin
115 (method url-fetch)
116 (uri (pypi-uri "sockjs-tornado" version))
117 (sha256
118 (base32
119 "16cff40nniqsyvda1pb2j3b4zwmrw7y2g1vqq78lp20xpmhnwwkd"))))
120 (build-system python-build-system)
121 (arguments
122 `(;; There are no tests, and running the test phase requires missing
123 ;; dependencies
124 #:tests? #f))
125 (propagated-inputs
126 `(("python-tornado" ,python-tornado)))
127 (home-page "https://github.com/mrjoes/sockjs-tornado/")
128 (synopsis
129 "SockJS python server implementation on top of Tornado framework")
130 (description
131 "SockJS-tornado provides the server side counterpart to a SockJS client
132 library, through the Tornado framework.
133
134 SockJS provides a low latency, full duplex, cross-domain communication channel
135 between a web browser and web server.")
136 (license license:expat)))
137
138 (define-public python2-sockjs-tornado
139 (package-with-python2 python-sockjs-tornado))
140
141 (define-public python-flask-babel
142 (package
143 (name "python-flask-babel")
144 (version "0.11.2")
145 (source
146 (origin
147 (method url-fetch)
148 (uri (pypi-uri "Flask-Babel" version))
149 (sha256
150 (base32
151 "0ff9n165vhf1nhv6807ckhpp224jw7k7sd7jz5kfh3sbpl85gmy0"))))
152 (build-system python-build-system)
153 (propagated-inputs
154 `(("python-flask" ,python-flask)
155 ("python-babel" ,python-babel)
156 ("python-jinja2" ,python-jinja2)
157 ("python-pytz" ,python-pytz)))
158 (home-page "https://github.com/python-babel/flask-babel")
159 (synopsis "Add i18n/l10n support to Flask applications")
160 (description "This package implements internationalization and localization
161 support for Flask. This is based on the Python babel module as well as pytz -
162 both of which are installed automatically if you install this library.")
163 (license license:bsd-3)))
164
165 (define-public python2-flask-babel
166 (package-with-python2 python-flask-babel))
167
168 (define-public python-html5lib
169 (package
170 (name "python-html5lib")
171 (version "1.0.1")
172 (source
173 (origin
174 (method url-fetch)
175 (uri (pypi-uri "html5lib" version))
176 (sha256
177 (base32
178 "0dipzfrycv6j1jw82v9b7d8lzggx3x8xngx6l4xrqkxwvg7hvjv6"))))
179 (build-system python-build-system)
180 (propagated-inputs
181 `(("python-six" ,python-six)
182 ("python-webencodings" ,python-webencodings)))
183 (arguments
184 `(#:test-target "check"))
185 (home-page
186 "https://github.com/html5lib/html5lib-python")
187 (synopsis
188 "Python HTML parser based on the WHATWG HTML specifcation")
189 (description
190 "Html5lib is an HTML parser based on the WHATWG HTML specifcation
191 and written in Python.")
192 (license license:expat)))
193
194 (define-public python2-html5lib
195 (package-with-python2 python-html5lib))
196
197 ;; Needed for python-bleach, a dependency of python-notebook
198 (define-public python-html5lib-0.9
199 (package
200 (inherit python-html5lib)
201 (version "0.999")
202 (source
203 (origin
204 (method url-fetch)
205 (uri (pypi-uri "html5lib" version))
206 (sha256
207 (base32
208 "17n4zfsj6ynmbwdwviywmj8r6nzr3xvfx2zs0xhndmvm51z7z263"))))))
209
210 (define-public python2-html5lib-0.9
211 (package-with-python2 python-html5lib-0.9))
212
213 (define-public python-html5-parser
214 (package
215 (name "python-html5-parser")
216 (version "0.4.4")
217 (source (origin
218 (method url-fetch)
219 (uri (pypi-uri "html5-parser" version))
220 (sha256
221 (base32
222 "1d8sxhl41ffh7qlk7wlsy17xw6slzx5v1yna9s72wx5qrpaa3wxr"))))
223 (build-system python-build-system)
224 (native-inputs
225 `(("pkg-config" ,pkg-config)))
226 (inputs
227 `(("libxml2" ,libxml2)))
228 (propagated-inputs
229 `(("python-lxml" ,python-lxml)
230 ("python-beautifulsoup4" ,python-beautifulsoup4)))
231 (home-page "https://html5-parser.readthedocs.io")
232 (synopsis "Fast C-based HTML5 parsing for Python")
233 (description "This package provides a fast implementation of the HTML5
234 parsing spec for Python. Parsing is done in C using a variant of the gumbo
235 parser. The gumbo parse tree is then transformed into an lxml tree, also in
236 C, yielding parse times that can be a thirtieth of the html5lib parse times.")
237 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
238 ;; indicate ASL2.0, including the LICENSE file for the whole project.
239 (license (list license:asl2.0 license:gpl3))))
240
241 (define-public python2-html5-parser
242 (package-with-python2 python-html5-parser))
243
244 (define-public python-pycurl
245 (package
246 (name "python-pycurl")
247 (version "7.43.0.1")
248 (source
249 (origin
250 (method url-fetch)
251 (uri (string-append "https://dl.bintray.com/pycurl/pycurl/pycurl-"
252 version ".tar.gz"))
253 (sha256
254 (base32 "1ali1gjs9iliwjra7w0y5hwg79a2fd0f4ydvv6k27sgxpbr1n8s3"))))
255 (build-system python-build-system)
256 (arguments
257 ;; The tests attempt to access external web servers, so we cannot run
258 ;; them. Furthermore, they are skipped altogether when using Python 2.
259 '(#:tests? #f))
260 (native-inputs
261 `(("python-nose" ,python-nose)
262 ("python-bottle" ,python-bottle)))
263 (inputs
264 `(("curl" ,curl)
265 ("gnutls" ,gnutls)))
266 (home-page "http://pycurl.io/")
267 (synopsis "Lightweight Python wrapper around libcurl")
268 (description "Pycurl is a lightweight wrapper around libcurl. It provides
269 high-speed transfers via libcurl and frequently outperforms alternatives.")
270
271 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
272 ;; under the terms of LGPLv2.1+ or Expat.
273 (license (list license:lgpl2.1+ license:expat))))
274
275 (define-public python2-pycurl
276 (package-with-python2 python-pycurl))
277
278 (define-public python-webencodings
279 (package
280 (name "python-webencodings")
281 (version "0.5.1")
282 (source (origin
283 (method url-fetch)
284 (uri (pypi-uri "webencodings" version))
285 (sha256
286 (base32
287 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
288 (build-system python-build-system)
289 (arguments
290 '(#:phases
291 (modify-phases %standard-phases
292 (replace 'check
293 (lambda _
294 (invoke "py.test" "-v" "webencodings/tests.py")
295 #t)))))
296 (native-inputs
297 `(("python-pytest" ,python-pytest)))
298 (home-page "https://github.com/SimonSapin/python-webencodings")
299 (synopsis "Character encoding aliases for legacy web content")
300 (description
301 "In order to be compatible with legacy web content when interpreting
302 something like @code{Content-Type: text/html; charset=latin1}, tools need
303 to use a particular set of aliases for encoding labels as well as some
304 overriding rules. For example, @code{US-ASCII} and @code{iso-8859-1} on
305 the web are actually aliases for @code{windows-1252}, and a @code{UTF-8}
306 or @code{UTF-16} BOM takes precedence over any other encoding declaration.
307 The WHATWG @url{https://encoding.spec.whatwg.org/,Encoding} standard
308 defines all such details so that implementations do not have to
309 reverse-engineer each other.
310
311 This module implements the Encoding standard and has encoding labels and
312 BOM detection, but the actual implementation for encoders and decoders
313 is Python’s.")
314 (license license:bsd-3)))
315
316 (define-public python2-webencodings
317 (package-with-python2 python-webencodings))
318
319 (define-public python-openid
320 (package
321 (name "python-openid")
322 (version "3.0.10")
323 (source
324 (origin
325 (method url-fetch)
326 (uri (pypi-uri "python3-openid" version))
327 (sha256
328 (base32
329 "1x3nh3fycqfn43jp5j5pb4q4y2jxp4mdka4absaa3bc0078qd758"))))
330 (build-system python-build-system)
331 (arguments
332 `(#:phases
333 (modify-phases %standard-phases
334 (replace 'check
335 (lambda _
336 (invoke "./admin/runtests")
337 #t)))))
338 (properties `((python2-variant . ,(delay python2-openid))))
339 (propagated-inputs
340 `(("python-defusedxml" ,python-defusedxml)))
341 (native-inputs
342 `(("python-psycopg2" ,python-psycopg2)
343 ("python-django" ,python-django)))
344 (home-page "https://github.com/necaris/python3-openid")
345 (synopsis "OpenID support for servers and consumers")
346 (description "This library provides OpenID authentication for Python, both
347 for clients and servers.")
348 (license license:asl2.0)))
349
350 (define-public python2-openid
351 (package
352 (name "python2-openid")
353 (version "2.2.5")
354 (source
355 (origin
356 (method url-fetch)
357 (uri (pypi-uri "python-openid" version))
358 (sha256
359 (base32
360 "1vvhxlghjan01snfdc4k7ykd80vkyjgizwgg9bncnin8rqz1ricj"))))
361 (build-system python-build-system)
362 (arguments
363 ;; Python 3 support is in `python3-openid`, a separate package.
364 `(#:python ,python-2))
365 (home-page "https://github.com/openid/python-openid")
366 (synopsis "OpenID support for servers and consumers")
367 (description "This library provides OpenID authentication for Python, both
368 for clients and servers.")
369 (license license:asl2.0)))
370
371 (define-public python-cssutils
372 (package
373 (name "python-cssutils")
374 (version "1.0.2")
375 (source
376 (origin
377 (method url-fetch)
378 (uri (pypi-uri "cssutils" version))
379 (sha256
380 (base32
381 "1bxchrbqzapwijap0yhlxdil1w9bmwvgx77aizlkhc2mcxjg1z52"))))
382 (build-system python-build-system)
383 (native-inputs
384 `(("unzip" ,unzip))) ; for unpacking the source
385 (arguments
386 `(#:tests? #f)) ; tests require python-pbr < 1.7.0
387 (home-page "http://cthedot.de/cssutils/")
388 (synopsis
389 "CSS Cascading Style Sheets library for Python")
390 (description
391 "Cssutils is a Python package for parsing and building CSS
392 Cascading Style Sheets. Currently it provides a DOM only and no rendering
393 options.")
394 (license license:lgpl3+)))
395
396 (define-public python2-cssutils
397 (package-with-python2 python-cssutils))
398
399 (define-public python-cssselect
400 (package
401 (name "python-cssselect")
402 (version "0.9.2")
403 (source
404 (origin
405 (method url-fetch)
406 (uri (pypi-uri "cssselect" version))
407 (sha256
408 (base32
409 "1xg6gbva1yswghiycmgincv6ab4bn7hpm720ndbj40h8xycmnfvi"))))
410 (build-system python-build-system)
411 (arguments
412 ;; tests fail with message
413 ;; AttributeError: 'module' object has no attribute 'tests'
414 `(#:tests? #f))
415 (home-page
416 "https://pythonhosted.org/cssselect/")
417 (synopsis
418 "CSS3 selector parser and translator to XPath 1.0")
419 (description
420 "Cssselect ia a Python module that parses CSS3 Selectors and translates
421 them to XPath 1.0 expressions. Such expressions can be used in lxml or
422 another XPath engine to find the matching elements in an XML or HTML document.")
423 (license license:bsd-3)))
424
425 (define-public python2-cssselect
426 (package-with-python2 python-cssselect))
427
428 (define-public python-openid-cla
429 (package
430 (name "python-openid-cla")
431 (version "1.2")
432 (source
433 (origin
434 (method url-fetch)
435 (uri (pypi-uri "python-openid-cla" version))
436 (sha256
437 (base32
438 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
439 (build-system python-build-system)
440 (arguments '(#:tests? #f)) ; No tests.
441 (home-page "https://github.com/puiterwijk/python-openid-cla/")
442 (synopsis "Implementation of the OpenID CLA extension for python-openid")
443 (description "@code{openid-cla} is an implementation of the OpenID
444 contributor license agreement extension for python-openid.")
445 (license license:bsd-3)))
446
447 (define-public python2-openid-cla
448 (package-with-python2 python-openid-cla))
449
450 (define-public python-openid-teams
451 (package
452 (name "python-openid-teams")
453 (version "1.1")
454 (source
455 (origin
456 (method url-fetch)
457 (uri (pypi-uri "python-openid-teams" version))
458 (sha256
459 (base32
460 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
461 (build-system python-build-system)
462 (arguments '(#:tests? #f)) ; No tests.
463 (home-page "https://github.com/puiterwijk/python-openid-teams/")
464 (synopsis "Implementation of the OpenID teams extension for python-openid")
465 (description
466 "@code{openid-teams} is an implementation of the OpenID
467 teams extension for python-openid.")
468 (license license:bsd-3)))
469
470 (define-public python2-openid-teams
471 (package-with-python2 python-openid-teams))
472
473 (define-public python-tornado
474 (package
475 (name "python-tornado")
476 (version "4.5.1")
477 (source
478 (origin
479 (method url-fetch)
480 (uri (pypi-uri "tornado" version))
481 (sha256
482 (base32 "1zbkgcdfq81k298awrm8p0xwbwwn2p3nbizdglzfbkskhai082fv"))))
483 (build-system python-build-system)
484 (arguments
485 '(;; FIXME: Two tests error out with:
486 ;; AssertionError: b'Error in atexit._run_exitfuncs:\nFileNotF[44 chars]ry\n' != b''
487 ;; #:phases
488 ;; (modify-phases %standard-phases
489 ;; (replace 'check
490 ;; (lambda _
491 ;; ;; 'setup.py test' hits an AssertionError on BSD-specific
492 ;; ;; "tornado/platform/kqueue.py". This is the supported method:
493 ;; (invoke- "python" "-m" "tornado.test")
494 ;; #t)))
495 #:tests? #f))
496 (native-inputs
497 `(("python-certifi" ,python-certifi)))
498 (propagated-inputs
499 `(("python-backports-abc" ,python-backports-abc)))
500 (home-page "http://www.tornadoweb.org/")
501 (synopsis "Python web framework and asynchronous networking library")
502 (description
503 "Tornado is a Python web framework and asynchronous networking library,
504 originally developed at FriendFeed. By using non-blocking network I/O,
505 Tornado can scale to tens of thousands of open connections, making it ideal
506 for long polling, WebSockets, and other applications that require a long-lived
507 connection to each user.")
508 (license license:asl2.0)
509 (properties `((python2-variant . ,(delay python2-tornado))))))
510
511 (define-public python2-tornado
512 (let ((tornado (package-with-python2 (strip-python2-variant python-tornado))))
513 (package (inherit tornado)
514 (propagated-inputs
515 `(("python2-backport-ssl-match-hostname"
516 ,python2-backport-ssl-match-hostname)
517 ("python2-singledispatch" ,python2-singledispatch)
518 ,@(package-propagated-inputs tornado))))))
519
520 (define-public python-tornado-http-auth
521 (package
522 (name "python-tornado-http-auth")
523 (version "1.1.0")
524 (source
525 (origin
526 (method url-fetch)
527 (uri (pypi-uri "tornado-http-auth" version))
528 (sha256
529 (base32
530 "0znrgqd7k2s4ia474xizi6h3061zj4sn5n6cq76bkwl3wwshifn5"))))
531 (build-system python-build-system)
532 (propagated-inputs
533 `(("python-tornado" ,python-tornado)))
534 (home-page
535 "https://github.com/gvalkov/tornado-http-auth")
536 (synopsis
537 "Digest and basic authentication module for Tornado")
538 (description
539 "Provides support for adding authentication to services using the Tornado
540 web framework, either via the basic or digest authentication schemes.")
541 (license license:asl2.0)))
542
543 (define-public python-terminado
544 (package
545 (name "python-terminado")
546 (version "0.6")
547 (source
548 (origin
549 (method url-fetch)
550 (uri (pypi-uri "terminado" version))
551 (sha256
552 (base32
553 "09h1kwi86g5mrk14s4pgbhshd602zry29lnpxamcqz864kva22rc"))))
554 (build-system python-build-system)
555 (propagated-inputs
556 `(("python-tornado" ,python-tornado)
557 ("python-ptyprocess" ,python-ptyprocess)))
558 (native-inputs
559 `(("python-nose" ,python-nose)))
560 (arguments
561 `(#:phases
562 (modify-phases %standard-phases
563 (replace 'check
564 (lambda _
565 (invoke "nosetests")
566 #t)))))
567 (home-page "https://github.com/takluyver/terminado")
568 (synopsis "Terminals served to term.js using Tornado websockets")
569 (description "This package provides a Tornado websocket backend for the
570 term.js Javascript terminal emulator library.")
571 (license license:bsd-2)
572 (properties `((python2-variant . ,(delay python2-terminado))))))
573
574 (define-public python2-terminado
575 (let ((terminado (package-with-python2 (strip-python2-variant python-terminado))))
576 (package (inherit terminado)
577 (propagated-inputs
578 `(("python2-backport-ssl-match-hostname"
579 ,python2-backport-ssl-match-hostname)
580 ,@(package-propagated-inputs terminado))))))
581
582 (define-public python-wsgi-intercept
583 (package
584 (name "python-wsgi-intercept")
585 (version "1.2.2")
586 (source (origin
587 (method url-fetch)
588 (uri (string-append
589 "https://pypi.python.org/packages/"
590 "38/76/ebcbc24d0cb77db34520a3ca6ed1bd43ace17d182bbd8dd7d976f1c176fb/"
591 "wsgi_intercept-" version ".tar.gz"))
592 (sha256
593 (base32
594 "0kjj2v2dvmnpdd5h5gk9rzz0f54rhjb0yiz3zg65bmp65slfw65d"))))
595 (build-system python-build-system)
596 (propagated-inputs
597 `(("python-six" ,python-six)))
598 (native-inputs
599 `(("python-pytest" ,python-pytest)
600 ("python-httplib2" ,python-httplib2)
601 ("python-requests" ,python-requests)
602 ("python-urllib3" ,python-urllib3)))
603 (synopsis "Puts a WSGI application in place of a real URI for testing")
604 (description "Wsgi_intercept installs a WSGI application in place of a real
605 URI for testing. Testing a WSGI application normally involves starting a
606 server at a local host and port, then pointing your test code to that address.
607 Instead, this library lets you intercept calls to any specific host/port
608 combination and redirect them into a WSGI application importable by your test
609 program. Thus, you can avoid spawning multiple processes or threads to test
610 your Web app.")
611 (home-page "https://github.com/cdent/wsgi-intercept")
612 (license license:expat)))
613
614 (define-public python-webob
615 (package
616 (name "python-webob")
617 (version "1.5.1")
618 (source
619 (origin
620 (method url-fetch)
621 (uri (pypi-uri "WebOb" version))
622 (sha256
623 (base32
624 "02bhhzijfhv8hmi1i54d4b0v43liwhnywhflvxsv4x3zax9s3afq"))))
625 (build-system python-build-system)
626 (native-inputs
627 `(("python-nose" ,python-nose)))
628 (home-page "https://webob.org/")
629 (synopsis "WSGI request and response object")
630 (description
631 "WebOb provides wrappers around the WSGI request environment, and an
632 object to help create WSGI responses.")
633 (license license:expat)))
634
635 (define-public python2-webob
636 (package-with-python2 python-webob))
637
638 (define-public python-zope-event
639 (package
640 (name "python-zope-event")
641 (version "4.1.0")
642 (source
643 (origin
644 (method url-fetch)
645 (uri (string-append "https://pypi.python.org/packages/source/z"
646 "/zope.event/zope.event-" version ".tar.gz"))
647 (sha256
648 (base32
649 "11p75zpfz3ffhz21nzx9wb23xs993ck5s6hkjcvhswwizni5jynw"))))
650 (build-system python-build-system)
651 (home-page "https://pypi.python.org/pypi/zope.event")
652 (synopsis "Event publishing system for Python")
653 (description "Zope.event provides an event publishing API, intended for
654 use by applications which are unaware of any subscribers to their events. It
655 is a simple event-dispatching system on which more sophisticated event
656 dispatching systems can be built.")
657 (license license:zpl2.1)))
658
659 (define-public python2-zope-event
660 (package-with-python2 python-zope-event))
661
662 (define-public python-zope-interface
663 (package
664 (name "python-zope-interface")
665 (version "4.1.3")
666 (source
667 (origin
668 (method url-fetch)
669 (uri (string-append "https://pypi.python.org/packages/source/z"
670 "/zope.interface/zope.interface-" version ".tar.gz"))
671 (sha256
672 (base32
673 "0ks8h73b2g4bkad821qbv0wzjppdrwys33i7ka45ik3wxjg1l8if"))))
674 (build-system python-build-system)
675 (native-inputs
676 `(("python-zope-event" ,python-zope-event)))
677 (home-page "https://github.com/zopefoundation/zope.interface")
678 (synopsis "Python implementation of the \"design by contract\"
679 methodology")
680 (description "Zope.interface provides an implementation of \"object
681 interfaces\" for Python. Interfaces are a mechanism for labeling objects as
682 conforming to a given API or contract.")
683 (license license:zpl2.1)))
684
685 (define-public python2-zope-interface
686 (package-with-python2 python-zope-interface))
687
688 (define-public python-zope-exceptions
689 (package
690 (name "python-zope-exceptions")
691 (version "4.0.8")
692 (source
693 (origin
694 (method url-fetch)
695 (uri (string-append "https://pypi.python.org/packages/source/z"
696 "/zope.exceptions/zope.exceptions-"
697 version ".tar.gz"))
698 (sha256
699 (base32
700 "0zwxaaa66sqxg5k7zcrvs0fbg9ym1njnxnr28dfmchzhwjvwnfzl"))))
701 (build-system python-build-system)
702 (arguments
703 '(#:tests? #f)) ; circular dependency with zope.testrunner
704 (propagated-inputs
705 `(("python-zope-interface" ,python-zope-interface)))
706 (home-page "http://cheeseshop.python.org/pypi/zope.exceptions")
707 (synopsis "Zope exceptions")
708 (description "Zope.exceptions provides general-purpose exception types
709 that have uses outside of the Zope framework.")
710 (license license:zpl2.1)))
711
712 (define-public python2-zope-exceptions
713 (package-with-python2 python-zope-exceptions))
714
715 (define-public python-zope-testing
716 (package
717 (name "python-zope-testing")
718 (version "4.6.1")
719 (source
720 (origin
721 (method url-fetch)
722 (uri (pypi-uri "zope.testing" version))
723 (sha256
724 (base32
725 "1vvxhjmzl7vw2i1akfj1xbggwn36270ym7f2ic9xwbaswfw1ap56"))
726 (modules '((guix build utils)))
727 (snippet
728 '(begin
729 ;; Remove pre-compiled .pyc files backup files from source.
730 (for-each delete-file (find-files "." "(\\.pyc|~)$"))
731 #t))))
732 (build-system python-build-system)
733 (native-inputs
734 `(("python-zope-exceptions" ,python-zope-exceptions)))
735 (propagated-inputs
736 `(("python-zope-interface" ,python-zope-interface)))
737 (home-page "https://pypi.python.org/pypi/zope.testing")
738 (synopsis "Zope testing helpers")
739 (description "Zope.testing provides a number of testing utilities for HTML
740 forms, HTTP servers, regular expressions, and more.")
741 (license license:zpl2.1)))
742
743 (define-public python2-zope-testing
744 (package-with-python2 python-zope-testing))
745
746 (define-public python-zope-testrunner
747 (package
748 (name "python-zope-testrunner")
749 (version "4.4.9")
750 (source
751 (origin
752 (method url-fetch)
753 (uri (string-append "https://pypi.python.org/packages/source/z"
754 "/zope.testrunner/zope.testrunner-"
755 version ".zip"))
756 (sha256
757 (base32
758 "1r7iqknhh55y45f64mz5hghgvzx34h1i11k350s0avx6q8gznja1"))))
759 (build-system python-build-system)
760 (arguments
761 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
762 (native-inputs
763 `(("python-six" ,python-six)
764 ;("python-zope-interface" ,python-zope-interface)
765 ("python-zope-exceptions" ,python-zope-exceptions)
766 ("python-zope-testing" ,python-zope-testing)
767 ("unzip" ,unzip)))
768 (propagated-inputs
769 `(("python-zope-interface" ,python-zope-interface)))
770 (home-page "https://pypi.python.org/pypi/zope.testrunner")
771 (synopsis "Zope testrunner script")
772 (description "Zope.testrunner provides a script for running Python
773 tests.")
774 (license license:zpl2.1)))
775
776 (define-public python2-zope-testrunner
777 (let ((base (package-with-python2 python-zope-testrunner)))
778 (package
779 (inherit base)
780 (native-inputs
781 (append (package-native-inputs base)
782 `(("python2-subunit" ,python2-subunit)
783 ("python2-mimeparse" ,python2-mimeparse)))))))
784
785 (define-public python-zope-i18nmessageid
786 (package
787 (name "python-zope-i18nmessageid")
788 (version "4.0.3")
789 (source
790 (origin
791 (method url-fetch)
792 (uri (string-append
793 "https://pypi.python.org/packages/source/z"
794 "/zope.i18nmessageid/zope.i18nmessageid-"
795 version ".tar.gz"))
796 (sha256
797 (base32
798 "1rslyph0klk58dmjjy4j0jxy21k03azksixc3x2xhqbkv97cmzml"))))
799 (build-system python-build-system)
800 (home-page "https://pypi.python.org/pypi/zope.i18nmessageid")
801 (synopsis "Message identifiers for internationalization")
802 (description "Zope.i18nmessageid provides facilities for declaring
803 internationalized messages within program source text.")
804 (license license:zpl2.1)))
805
806 (define-public python2-zope-i18nmessageid
807 (package-with-python2 python-zope-i18nmessageid))
808
809 (define-public python-zope-schema
810 (package
811 (name "python-zope-schema")
812 (version "4.4.2")
813 (source
814 (origin
815 (method url-fetch)
816 (uri (string-append "https://pypi.python.org/packages/source/z"
817 "/zope.schema/zope.schema-" version ".tar.gz"))
818 (sha256
819 (base32
820 "1p943jdxb587dh7php4vx04qvn7b2877hr4qs5zyckvp5afhhank"))))
821 (build-system python-build-system)
822 (arguments
823 '(#:tests? #f)) ; FIXME: Tests can't find zope.event.
824 (propagated-inputs
825 `(("python-zope-event" ,python-zope-event)
826 ("python-zope-exceptions" ,python-zope-exceptions)
827 ("python-zope-interface" ,python-zope-interface)))
828 (native-inputs
829 `(("python-zope-testing" ,python-zope-testing)
830 ("python-coverage" ,python-coverage)
831 ("python-nose" ,python-nose)))
832 (home-page "https://pypi.python.org/pypi/zope.schema")
833 (synopsis "Zope data schemas")
834 (description "Zope.scheme provides extensions to zope.interface for
835 defining data schemas.")
836 (license license:zpl2.1)))
837
838 (define-public python2-zope-schema
839 (package-with-python2 python-zope-schema))
840
841 (define-public python-zope-configuration
842 (package
843 (name "python-zope-configuration")
844 (version "4.0.3")
845 (source (origin
846 (method url-fetch)
847 (uri (string-append "https://pypi.python.org/packages/source/z"
848 "/zope.configuration/zope.configuration-"
849 version ".tar.gz"))
850 (sha256
851 (base32
852 "1x9dfqypgympnlm25p9m43xh4qv3p7d75vksv9pzqibrb4cggw5n"))))
853 (build-system python-build-system)
854 (arguments
855 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
856 (propagated-inputs
857 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
858 ("python-zope-schema" ,python-zope-schema)))
859 (home-page "https://pypi.python.org/pypi/zope.configuration")
860 (synopsis "Zope Configuration Markup Language")
861 (description "Zope.configuration implements ZCML, the Zope Configuration
862 Markup Language.")
863 (license license:zpl2.1)))
864
865 (define-public python2-zope-configuration
866 (package-with-python2 python-zope-configuration))
867
868 (define-public python-zope-proxy
869 (package
870 (name "python-zope-proxy")
871 (version "4.1.6")
872 (source
873 (origin
874 (method url-fetch)
875 (uri (string-append "https://pypi.python.org/packages/source/z"
876 "/zope.proxy/zope.proxy-" version ".tar.gz"))
877 (sha256
878 (base32
879 "0pqwwmvm1prhwv1ziv9lp8iirz7xkwb6n2kyj36p2h0ppyyhjnm4"))))
880 (build-system python-build-system)
881 (arguments
882 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
883 (propagated-inputs
884 `(("python-zope-interface" ,python-zope-interface)))
885 (home-page "https://pypi.python.org/pypi/zope.proxy")
886 (synopsis "Generic, transparent proxies")
887 (description "Zope.proxy provides generic, transparent proxies for Python.
888 Proxies are special objects which serve as mostly-transparent wrappers around
889 another object, intervening in the apparent behavior of the wrapped object
890 only when necessary to apply the policy (e.g., access checking, location
891 brokering, etc.) for which the proxy is responsible.")
892 (license license:zpl2.1)))
893
894 (define-public python2-zope-proxy
895 (package-with-python2 python-zope-proxy))
896
897 (define-public python-zope-location
898 (package
899 (name "python-zope-location")
900 (version "4.0.3")
901 (source
902 (origin
903 (method url-fetch)
904 (uri (string-append "https://pypi.python.org/packages/source/z"
905 "/zope.location/zope.location-" version ".tar.gz"))
906 (sha256
907 (base32
908 "1nj9da4ksiyv3h8n2vpzwd0pb03mdsh7zy87hfpx72b6p2zcwg74"))))
909 (build-system python-build-system)
910 (arguments
911 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
912 (propagated-inputs
913 `(("python-zope-proxy" ,python-zope-proxy)
914 ("python-zope-schema" ,python-zope-schema)))
915 (home-page "https://pypi.python.org/pypi/zope.location/")
916 (synopsis "Zope location library")
917 (description "Zope.location implements the concept of \"locations\" in
918 Zope3, which are are special objects that have a structural location.")
919 (license license:zpl2.1)))
920
921 (define-public python2-zope-location
922 (package-with-python2 python-zope-location))
923
924 (define-public python-zope-security
925 (package
926 (name "python-zope-security")
927 (version "4.0.3")
928 (source
929 (origin
930 (method url-fetch)
931 (uri (string-append "https://pypi.python.org/packages/source/z"
932 "/zope.security/zope.security-" version ".tar.gz"))
933 (sha256
934 (base32
935 "14zmf684amc0x32kq05yxnhfqd1cmyhafkw05gn81rn90zjv6ssy"))))
936 (build-system python-build-system)
937 (arguments
938 '(#:tests? #f)) ; FIXME: Tests can't find zope.testrunner.
939 (propagated-inputs
940 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
941 ("python-zope-proxy" ,python-zope-proxy)
942 ("python-zope-schema" ,python-zope-schema)))
943 (native-inputs
944 `(("python-six" ,python-six)
945 ("python-zope-component" ,python-zope-component)
946 ("python-zope-configuration" ,python-zope-configuration)
947 ("python-zope-location" ,python-zope-location)
948 ("python-zope-testrunner" ,python-zope-testrunner)
949 ("python-zope-testing" ,python-zope-testing)))
950 (home-page "https://pypi.python.org/pypi/zope.security")
951 (synopsis "Zope security framework")
952 (description "Zope.security provides a generic mechanism to implement
953 security policies on Python objects.")
954 (license license:zpl2.1)))
955
956 (define-public python2-zope-security
957 (let ((zope-security (package-with-python2 python-zope-security)))
958 (package (inherit zope-security)
959 (propagated-inputs
960 `(("python2-zope-testrunner" ,python2-zope-testrunner)
961 ,@(alist-delete
962 "python-zope-testrunner"
963 (package-propagated-inputs zope-security)))))))
964
965 (define-public python-zope-component
966 (package
967 (name "python-zope-component")
968 (version "4.3.0")
969 (source
970 (origin
971 (method url-fetch)
972 (uri (pypi-uri "zope.component" version))
973 (sha256
974 (base32
975 "1hlvzwj1kcfz1qms1dzhwsshpsf38z9clmyksb1gh41n8k3kchdv"))))
976 (build-system python-build-system)
977 (arguments
978 ;; Skip tests due to circular dependency with python-zope-security.
979 '(#:tests? #f))
980 (native-inputs
981 `(("python-zope-testing" ,python-zope-testing)))
982 (propagated-inputs
983 `(("python-zope-event" ,python-zope-event)
984 ("python-zope-interface" ,python-zope-interface)
985 ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
986 ("python-zope-configuration" ,python-zope-configuration)))
987 (home-page "https://github.com/zopefoundation/zope.component")
988 (synopsis "Zope Component Architecture")
989 (description "Zope.component represents the core of the Zope Component
990 Architecture. Together with the zope.interface package, it provides
991 facilities for defining, registering and looking up components.")
992 (license license:zpl2.1)))
993
994 (define-public python2-zope-component
995 (package-with-python2 python-zope-component))
996
997 (define-public python-ndg-httpsclient
998 (package
999 (name "python-ndg-httpsclient")
1000 (version "0.4.4")
1001 (source (origin
1002 (method url-fetch)
1003 (uri (pypi-uri "ndg_httpsclient" version))
1004 (sha256
1005 (base32
1006 "0sl5ak1r1xil9ms0a9fh9fm6ncml65kgnjpjfic9dhnaimwx997v"))))
1007 (build-system python-build-system)
1008 (arguments
1009 '(;; The tests appear to require networking.
1010 #:tests? #f))
1011 (propagated-inputs
1012 `(("python-pyopenssl" ,python-pyopenssl)))
1013 (synopsis "HTTPS support for Python's httplib and urllib2")
1014 (description "This is a HTTPS client implementation for httplib and urllib2
1015 based on PyOpenSSL. PyOpenSSL provides a more fully featured SSL implementation
1016 over the default provided with Python and importantly enables full verification
1017 of the SSL peer.")
1018 (home-page "https://github.com/cedadev/ndg_httpsclient/")
1019 (license license:bsd-3)))
1020
1021 ;; python2-openssl requires special care, so package-with-python2 is
1022 ;; insufficient.
1023 (define-public python2-ndg-httpsclient
1024 (package (inherit python-ndg-httpsclient)
1025 (name "python2-ndg-httpsclient")
1026 (arguments `(#:python ,python-2))
1027 (propagated-inputs
1028 `(("python2-pyopenssl" ,python2-pyopenssl)))))
1029
1030 (define-public python-websocket-client
1031 (package
1032 (name "python-websocket-client")
1033 (version "0.37.0")
1034 (source
1035 (origin
1036 (method url-fetch)
1037 (uri (pypi-uri "websocket_client" version))
1038 (sha256
1039 (base32
1040 "0h9glp1jll3z76ly3kg08aqgxqk0a68p4zi9yn50353bh5nj92v7"))))
1041 (build-system python-build-system)
1042 (propagated-inputs
1043 `(("python-six" ,python-six)))
1044 (home-page "https://github.com/liris/websocket-client")
1045 (synopsis "WebSocket client for Python")
1046 (description "The Websocket-client module provides the low level APIs for
1047 WebSocket usage in Python programs.")
1048 (license license:lgpl2.1+)))
1049
1050 (define-public python2-websocket-client
1051 (package-with-python2 python-websocket-client))
1052
1053 (define-public python-requests
1054 (package
1055 (name "python-requests")
1056 (version "2.13.0")
1057 (source (origin
1058 (method url-fetch)
1059 (uri (pypi-uri "requests" version))
1060 (sha256
1061 (base32
1062 "1s0wg4any4dsv5l3hqjxqk2zgb7pdbqhy9rhc8kh3aigfq4ws8jp"))))
1063 ;; TODO: unbundle urllib3 and chardet.
1064 (build-system python-build-system)
1065 (arguments
1066 ;; FIXME: Some tests require network access.
1067 '(#:tests? #f))
1068 (home-page "http://python-requests.org/")
1069 (synopsis "Python HTTP library")
1070 (description
1071 "Requests is a Python HTTP client library. It aims to be easier to use
1072 than Python’s urllib2 library.")
1073 (license license:asl2.0)))
1074
1075 ;; Some software requires an older version of Requests, notably Docker
1076 ;; Compose.
1077 (define-public python-requests-2.7
1078 (package (inherit python-requests)
1079 (version "2.7.0")
1080 (source (origin
1081 (method url-fetch)
1082 (uri (pypi-uri "requests" version))
1083 (sha256
1084 (base32
1085 "0gdr9dxm24amxpbyqpbh3lbwxc2i42hnqv50sigx568qssv3v2ir"))))))
1086
1087 (define-public python2-requests
1088 (package-with-python2 python-requests))
1089
1090 (define-public python-requests-mock
1091 (package
1092 (name "python-requests-mock")
1093 (version "1.3.0")
1094 (source
1095 (origin
1096 (method url-fetch)
1097 (uri (pypi-uri "requests-mock" version))
1098 (sha256
1099 (base32
1100 "0jr997dvk6zbmhvbpcv3rajrgag69mcsm1ai3w3rgk2jdh6rg1mx"))))
1101 (build-system python-build-system)
1102 (propagated-inputs
1103 `(("python-requests" ,python-requests)
1104 ("python-six" ,python-six)))
1105 (native-inputs
1106 `(("python-pbr" ,python-pbr)
1107 ("python-discover" ,python-discover)
1108 ("python-docutils" ,python-docutils)
1109 ("python-fixtures" ,python-fixtures)
1110 ("python-mock" ,python-mock)
1111 ("python-sphinx" ,python-sphinx)
1112 ("python-testrepository" ,python-testrepository)
1113 ("python-testtools" ,python-testtools)))
1114 (home-page "https://requests-mock.readthedocs.org/")
1115 (synopsis "Mock out responses from the requests package")
1116 (description
1117 "This module provides a building block to stub out the HTTP requests
1118 portions of your testing code.")
1119 (properties `((python2-variant . ,(delay python2-requests-mock))))
1120 (license license:asl2.0)))
1121
1122 (define-public python2-requests-mock
1123 (package (inherit (package-with-python2
1124 (strip-python2-variant python-requests-mock)))
1125 (arguments
1126 `(#:python ,python-2
1127 ;; FIXME: 'subunit.run discover: error: no such option: --list'
1128 #:tests? #f))))
1129
1130 (define-public python-requests-toolbelt
1131 (package
1132 (name "python-requests-toolbelt")
1133 (version "0.8.0")
1134 (source (origin
1135 (method url-fetch)
1136 (uri (pypi-uri "requests-toolbelt" version))
1137 (sha256
1138 (base32
1139 "1dc7l42i4080r8i4m9fj51jx367lqkai170vrv7wd93gdj9k39gn"))))
1140 (build-system python-build-system)
1141 (native-inputs
1142 `(("python-betamax" ,python-betamax)
1143 ("python-mock" ,python-mock)
1144 ("python-pytest" ,python-pytest)))
1145 (propagated-inputs
1146 `(("python-requests" ,python-requests)))
1147 (synopsis "Extensions to python-requests")
1148 (description "This is a toolbelt of useful classes and functions to be used
1149 with python-requests.")
1150 (home-page "https://github.com/sigmavirus24/requests-toolbelt")
1151 (license license:asl2.0)))
1152
1153 (define-public python2-requests-toolbelt
1154 (package-with-python2 python-requests-toolbelt))
1155
1156 (define-public python-oauthlib
1157 (package
1158 (name "python-oauthlib")
1159 (version "1.0.3")
1160 (source (origin
1161 (method url-fetch)
1162 (uri (pypi-uri "oauthlib" version))
1163 (sha256
1164 (base32
1165 "1bfrj70vdjxjw74khbyh6f0dksv7p5rh2346jnlrffyacd3gwjzg"))))
1166 (build-system python-build-system)
1167 (native-inputs
1168 `(("python-nose" ,python-nose)
1169 ("python-mock" ,python-mock)
1170 ("python-cryptography" ,python-cryptography)
1171 ("python-pyjwt" ,python-pyjwt)
1172 ("python-blinker" ,python-blinker)))
1173 (home-page "https://github.com/idan/oauthlib")
1174 (synopsis "OAuth implementation for Python")
1175 (description
1176 "Oauthlib is a generic, spec-compliant, thorough implementation of the
1177 OAuth request-signing logic.")
1178 (license license:bsd-3)
1179 (properties `((python2-variant . ,(delay python2-oauthlib))))))
1180
1181 (define-public python2-oauthlib
1182 (let ((base (package-with-python2 (strip-python2-variant python-oauthlib))))
1183 (package
1184 (inherit base)
1185 (native-inputs `(("python2-unittest2" ,python2-unittest2)
1186 ,@(package-native-inputs base))))))
1187
1188 (define-public python-rauth
1189 (package
1190 (name "python-rauth")
1191 (version "0.7.3")
1192 (source
1193 (origin
1194 (method url-fetch)
1195 (uri (pypi-uri "rauth" version))
1196 (sha256
1197 (base32
1198 "02kv8w8l98ky223avyq7vw7x1f2ya9chrm59r77ylq45qb0xnk2j"))))
1199 (build-system python-build-system)
1200 (arguments
1201 `(#:test-target "check"))
1202 (propagated-inputs
1203 `(("python-requests" ,python-requests)))
1204 (home-page "https://github.com/litl/rauth")
1205 (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
1206 (description
1207 "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly. It also
1208 provides service wrappers for convenient connection initialization and
1209 authenticated session objects providing things like keep-alive.")
1210 (license license:expat)
1211 (properties `((python2-variant . ,(delay python2-rauth))))))
1212
1213 (define-public python2-rauth
1214 (let ((base (package-with-python2 (strip-python2-variant python-rauth))))
1215 (package
1216 (inherit base)
1217 (native-inputs `(("python2-unittest2" ,python2-unittest2)
1218 ,@(package-native-inputs base))))))
1219
1220 (define-public python-urllib3
1221 (package
1222 (name "python-urllib3")
1223 (version "1.18.1")
1224 (source
1225 (origin
1226 (method url-fetch)
1227 (uri (pypi-uri "urllib3" version))
1228 (sha256
1229 (base32
1230 "1wb8aqnq53vzh2amrv8kc66f3h6fx217y0q62y6n30a64p2yqmam"))))
1231 (build-system python-build-system)
1232 (arguments `(#:tests? #f))
1233 (native-inputs
1234 `(;; some packages for tests
1235 ("python-nose" ,python-nose)
1236 ("python-mock" ,python-mock)
1237 ("python-tornado" ,python-tornado)))
1238 (propagated-inputs
1239 `(;; These 5 inputs are used to build urrlib3[secure]
1240 ("python-certifi" ,python-certifi)
1241 ("python-cryptography" ,python-cryptography) ;
1242 ("python-idna" ,python-idna)
1243 ("python-ipaddress" ,python-ipaddress)
1244 ("python-pyopenssl" ,python-pyopenssl)))
1245 (home-page "https://urllib3.readthedocs.org/")
1246 (synopsis "HTTP library with thread-safe connection pooling")
1247 (description
1248 "Urllib3 supports features left out of urllib and urllib2 libraries. It
1249 can reuse the same socket connection for multiple requests, it can POST files,
1250 supports url redirection and retries, and also gzip and deflate decoding.")
1251 (license license:expat)))
1252
1253 (define-public python2-urllib3
1254 (package-with-python2 python-urllib3))
1255
1256 (define-public awscli
1257 (package
1258 (name "awscli")
1259 (version "1.14.41")
1260 (source
1261 (origin
1262 (method url-fetch)
1263 (uri (pypi-uri name version))
1264 (sha256
1265 (base32
1266 "0sispclx263lybbk19zp1n9yhg8xxx4jddypzgi24vpjaqnsbwlc"))))
1267 (build-system python-build-system)
1268 (propagated-inputs
1269 `(("python-colorama" ,python-colorama)
1270 ("python-botocore" ,python-botocore)
1271 ("python-s3transfer" ,python-s3transfer)
1272 ("python-docutils" ,python-docutils)
1273 ("python-pyyaml" ,python-pyyaml)
1274 ("python-rsa" ,python-rsa)))
1275 (arguments
1276 ;; FIXME: The 'pypi' release does not contain tests.
1277 '(#:tests? #f))
1278 (home-page "https://aws.amazon.com/cli/")
1279 (synopsis "Command line client for AWS")
1280 (description "AWS CLI provides a unified command line interface to the
1281 Amazon Web Services (AWS) API.")
1282 (license license:asl2.0)))
1283
1284 (define-public python-wsgiproxy2
1285 (package
1286 (name "python-wsgiproxy2")
1287 (version "0.4.2")
1288 (source
1289 (origin
1290 (method url-fetch)
1291 (uri (pypi-uri "WSGIProxy2" version ".zip"))
1292 (sha256
1293 (base32
1294 "13kf9bdxrc95y9vriaz0viry3ah11nz4rlrykcfvb8nlqpx3dcm4"))))
1295 (build-system python-build-system)
1296 (arguments
1297 '(;; Wsgiproxy2's test suite requires Restkit, which does not yet fully
1298 ;; support Python 3:
1299 ;; https://github.com/benoitc/restkit/issues/140
1300 #:tests? #f))
1301 (native-inputs
1302 `(("unzip" ,unzip)
1303 ("python-nose" ,python-nose)
1304 ("python-coverage" ,python-coverage)))
1305 (propagated-inputs
1306 `(("python-six" ,python-six)
1307 ("python-webob" ,python-webob)))
1308 (home-page
1309 "https://github.com/gawel/WSGIProxy2/")
1310 (synopsis "WSGI Proxy with various http client backends")
1311 (description "WSGI turns HTTP requests into WSGI function calls.
1312 WSGIProxy turns WSGI function calls into HTTP requests.
1313 It also includes code to sign requests and pass private data,
1314 and to spawn subprocesses to handle requests.")
1315 (license license:expat)))
1316
1317 (define-public python2-wsgiproxy2
1318 (package-with-python2 python-wsgiproxy2))
1319
1320 (define-public python-pastedeploy
1321 (package
1322 (name "python-pastedeploy")
1323 (version "1.5.2")
1324 (source
1325 (origin
1326 (method url-fetch)
1327 (uri (pypi-uri "PasteDeploy" version))
1328 (sha256
1329 (base32
1330 "1jz3m4hq8v6hyhfjz9425nd3nvn52cvbfipdcd72krjmla4qz1fm"))))
1331 (build-system python-build-system)
1332 (native-inputs
1333 `(("python-nose" ,python-nose)))
1334 (home-page "http://pythonpaste.org/deploy/")
1335 (synopsis
1336 "Load, configure, and compose WSGI applications and servers")
1337 (description
1338 "This tool provides code to load WSGI applications and servers from URIs;
1339 these URIs can refer to Python Eggs for INI-style configuration files. Paste
1340 Script provides commands to serve applications based on this configuration
1341 file.")
1342 (license license:expat)))
1343
1344 (define-public python2-pastedeploy
1345 (package-with-python2 python-pastedeploy))
1346
1347 (define-public python-webtest
1348 (package
1349 (name "python-webtest")
1350 (version "2.0.29")
1351 (source
1352 (origin
1353 (method url-fetch)
1354 (uri (pypi-uri "WebTest" version))
1355 (sha256
1356 (base32
1357 "0bcj1ica5lnmj5zbvk46x28kgphcsgh7sfnwjmn0cr94mhawrg6v"))))
1358 (build-system python-build-system)
1359 (arguments
1360 `(;; Unfortunately we have to disable tests!
1361 ;; This release of WebTest is pinned to python-nose < 1.3,
1362 ;; but older versions of python-nose are plagued with the following
1363 ;; bug(s), which rears its ugly head during test execution:
1364 ;; https://github.com/nose-devs/nose/issues/759
1365 ;; https://github.com/nose-devs/nose/pull/811
1366 #:tests? #f))
1367 ;; Commented out code is no good, but in this case, once tests
1368 ;; are ready to be enabled again, we should put the following
1369 ;; in place:
1370 ;; (native-inputs
1371 ;; `(("python-nose" ,python-nose) ; technially < 1.3,
1372 ;; ; but see above comment
1373 ;; ("python-coverage" ,python-coverage)
1374 ;; ("python-mock" ,python-mock)
1375 ;; ("python-pastedeploy" ,python-pastedeploy)
1376 ;; ("python-wsgiproxy2" ,python-wsgiproxy2)
1377 ;; ("python-pyquery" ,python-pyquery)))
1378 (propagated-inputs
1379 `(("python-waitress" ,python-waitress)
1380 ("python-webob" ,python-webob)
1381 ("python-six" ,python-six)
1382 ("python-beautifulsoup4" ,python-beautifulsoup4)))
1383 (home-page "http://webtest.pythonpaste.org/")
1384 (synopsis "Helper to test WSGI applications")
1385 (description "Webtest allows you to test your Python web applications
1386 without starting an HTTP server. It supports anything that supports the
1387 minimum of WSGI.")
1388 (license license:expat)))
1389
1390 (define-public python2-webtest
1391 (package-with-python2 python-webtest))
1392
1393 (define-public python-flask
1394 (package
1395 (name "python-flask")
1396 (version "0.11.1")
1397 (source (origin
1398 (method url-fetch)
1399 (uri (pypi-uri "Flask" version))
1400 (sha256
1401 (base32
1402 "03kbfll4sj3v5z7r31c7bhfpi11r1np076d4p1k2kg4yzcmkywdl"))))
1403 (build-system python-build-system)
1404 (propagated-inputs
1405 `(("python-itsdangerous" ,python-itsdangerous)
1406 ("python-jinja2" ,python-jinja2)
1407 ("python-click" ,python-click)
1408 ("python-werkzeug" ,python-werkzeug)))
1409 (home-page "https://github.com/mitsuhiko/flask/")
1410 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
1411 (description "Flask is a micro web framework based on the Werkzeug toolkit
1412 and Jinja2 template engine. It is called a micro framework because it does not
1413 presume or force a developer to use a particular tool or library.")
1414 (license license:bsd-3)))
1415
1416 (define-public python2-flask
1417 (package-with-python2 python-flask))
1418
1419 (define-public python-flask-wtf
1420 (package
1421 (name "python-flask-wtf")
1422 (version "0.13.1")
1423 (source
1424 (origin
1425 (method url-fetch)
1426 (uri (pypi-uri "Flask-WTF" version))
1427 (sha256
1428 (base32
1429 "04l5743j2dici46038sqlzvf0xzpg8rf7s9ld2x24xv7f4idg990"))))
1430 (build-system python-build-system)
1431 (arguments
1432 '(#:phases
1433 (modify-phases %standard-phases
1434 (add-before 'check 'drop-failing-test
1435 (lambda _
1436 ;; FIXME: This file tries resolving an external server, which
1437 ;; fails. Try to patch out the offending section instead of
1438 ;; deleting the whole thing.
1439 (delete-file "tests/test_recaptcha.py")
1440 #t)))))
1441 (propagated-inputs
1442 `(("python-flask-babel" ,python-flask-babel)
1443 ("python-babel" ,python-babel)
1444 ("python-wtforms" ,python-wtforms)))
1445 (native-inputs
1446 `(("python-nose" ,python-nose)))
1447 (home-page "https://github.com/lepture/flask-wtf")
1448 (synopsis "Simple integration of Flask and WTForms")
1449 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
1450 upload, and reCAPTCHA.")
1451 (license license:bsd-3)))
1452
1453 (define-public python2-flask-wtf
1454 (package-with-python2 python-flask-wtf))
1455
1456 (define-public python-flask-multistatic
1457 (package
1458 (name "python-flask-multistatic")
1459 (version "1.0")
1460 (source
1461 (origin
1462 (method url-fetch)
1463 (uri (pypi-uri "flask-multistatic" version))
1464 (sha256
1465 (base32
1466 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
1467 (build-system python-build-system)
1468 (propagated-inputs
1469 `(("python-flask" ,python-flask)))
1470 (home-page "https://pagure.io/flask-multistatic")
1471 (synopsis "Flask plugin to allow overriding static files")
1472 (description "@code{flask-multistatic} is a flask plugin that adds support
1473 for overriding static files.")
1474 (license license:gpl3+)))
1475
1476 (define-public python2-flask-multistatic
1477 (package-with-python2 python-flask-multistatic))
1478
1479 (define-public python-cookies
1480 (package
1481 (name "python-cookies")
1482 (version "2.2.1")
1483 (source (origin
1484 (method url-fetch)
1485 (uri (pypi-uri "cookies" version))
1486 (sha256
1487 (base32
1488 "13pfndz8vbk4p2a44cfbjsypjarkrall71pgc97glk5fiiw9idnn"))))
1489 (build-system python-build-system)
1490 (arguments
1491 `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
1492 #:tests? #f))
1493 (native-inputs
1494 `(("python-pytest" ,python2-pytest)))
1495 (synopsis "HTTP cookie parser and renderer")
1496 (description "A RFC 6265-compliant HTTP cookie parser and renderer in
1497 Python.")
1498 (home-page "https://gitlab.com/sashahart/cookies")
1499 (license license:expat)))
1500
1501 (define-public python2-cookies
1502 (package-with-python2 python-cookies))
1503
1504 (define-public python-responses
1505 (package
1506 (name "python-responses")
1507 (version "0.5.1")
1508 (source (origin
1509 (method url-fetch)
1510 (uri (pypi-uri "responses" version))
1511 (sha256
1512 (base32
1513 "1spcfxixyk9k7pk82jm6zqkwk031s95lh8q0mz7539jrb7269bcc"))))
1514 (build-system python-build-system)
1515 (arguments
1516 `(;; Test suite is not distributed:
1517 ;; https://github.com/getsentry/responses/issues/38
1518 #:tests? #f))
1519 (native-inputs
1520 `(("python-mock" ,python-mock)))
1521 (propagated-inputs
1522 `(("python-requests" ,python-requests)
1523 ("python-cookies" ,python-cookies)
1524 ("python-six" ,python-six)))
1525 (home-page "https://github.com/getsentry/responses")
1526 (synopsis "Utility for mocking out the `requests` Python library")
1527 (description "A utility library for mocking out the `requests` Python
1528 library.")
1529 (license license:asl2.0)))
1530
1531 (define-public python2-responses
1532 (package-with-python2 python-responses))
1533
1534 (define-public python-geventhttpclient
1535 (package
1536 (name "python-geventhttpclient")
1537 (version "1.3.1")
1538 (source (origin
1539 (method url-fetch)
1540 (uri (pypi-uri "geventhttpclient" version))
1541 (sha256
1542 (base32
1543 "07d0q3wzmml75227r6y6mrl5a0zpf4v9gj0ni5rhbyzmaj4az1xx"))
1544 (modules '((guix build utils)))
1545 (snippet
1546 '(begin
1547 ;; Delete pre-compiled files.
1548 (for-each delete-file (find-files "src/geventhttpclient"
1549 ".*\\.pyc"))
1550 #t))))
1551 (build-system python-build-system)
1552 (arguments
1553 '(#:phases
1554 (modify-phases %standard-phases
1555 (add-after 'unpack 'delete-network-tests
1556 (lambda _
1557 (delete-file "src/geventhttpclient/tests/test_client.py")
1558 #t))
1559 (delete 'check)
1560 (add-after 'install 'check
1561 (lambda* (#:key inputs outputs #:allow-other-keys)
1562 (add-installed-pythonpath inputs outputs)
1563 (invoke "py.test" "src/geventhttpclient/tests" "-v")
1564 #t)))))
1565 (native-inputs
1566 `(("python-pytest" ,python-pytest)))
1567 (propagated-inputs
1568 `(("python-certifi" ,python-certifi)
1569 ("python-gevent" ,python-gevent)
1570 ("python-six" ,python-six)))
1571 (home-page "https://github.com/gwik/geventhttpclient")
1572 (synopsis "HTTP client library for gevent")
1573 (description "@code{python-geventhttpclient} is a high performance,
1574 concurrent HTTP client library for python using @code{gevent}.")
1575 (license license:expat)))
1576
1577 (define-public python2-geventhttpclient
1578 (package-with-python2 python-geventhttpclient))
1579
1580 (define-public python-requests-oauthlib
1581 (package
1582 (name "python-requests-oauthlib")
1583 (version "0.6.2")
1584 (source
1585 (origin
1586 (method url-fetch)
1587 (uri (pypi-uri "requests-oauthlib" version))
1588 (sha256
1589 (base32
1590 "0ykff67sjcl227c23g0rxzfx34rr5bf21kwv0z3zmgk0lfmch7hn"))))
1591 (build-system python-build-system)
1592 (arguments
1593 `(#:phases
1594 (modify-phases %standard-phases
1595 ;; removes tests that require network access
1596 (add-before 'check 'pre-check
1597 (lambda _
1598 (delete-file "tests/test_core.py")
1599 #t)))))
1600 (native-inputs
1601 `(("python-requests-mock" ,python-requests-mock)
1602 ("python-mock" ,python-mock)))
1603 (propagated-inputs
1604 `(("python-oauthlib" ,python-oauthlib)
1605 ("python-requests" ,python-requests)))
1606 (home-page
1607 "https://github.com/requests/requests-oauthlib")
1608 (synopsis
1609 "OAuthlib authentication support for Requests")
1610 (description
1611 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
1612 provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
1613 (license license:isc)))
1614
1615 (define-public python2-requests-oauthlib
1616 (package-with-python2 python-requests-oauthlib))
1617
1618 (define-public python-url
1619 (package
1620 (name "python-url")
1621 (version "0.2.0")
1622 (source (origin
1623 (method url-fetch)
1624 (uri (pypi-uri "url" version))
1625 (sha256
1626 (base32
1627 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
1628 (build-system python-build-system)
1629 (propagated-inputs
1630 `(("python-publicsuffix" ,python-publicsuffix)))
1631 (native-inputs
1632 `(("python-coverage" ,python-coverage)
1633 ("python-nose" ,python-nose)))
1634 (arguments
1635 `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
1636 (home-page "https://github.com/seomoz/url-py")
1637 (synopsis "URL Parsing")
1638 (description "Library for parsing urls.")
1639 (license license:expat)
1640 (properties `((python2-variant . ,(delay python2-url))))))
1641
1642 (define-public python2-url
1643 (let ((base (package-with-python2 (strip-python2-variant python-url))))
1644 (package (inherit base)
1645 (propagated-inputs
1646 `(("python2-publicsuffix" ,python2-publicsuffix))))))
1647
1648 (define-public python-cachecontrol
1649 (package
1650 (name "python-cachecontrol")
1651 (version "0.11.6")
1652 (source
1653 (origin
1654 (method url-fetch)
1655 ;; Pypi does not have tests.
1656 (uri (string-append
1657 "https://github.com/ionrock/cachecontrol/archive/v"
1658 version ".tar.gz"))
1659 (file-name (string-append name "-" version ".tar.gz"))
1660 (sha256
1661 (base32
1662 "0yj60d0f69a2l8p7y86k4zhzzm6rnxpq74sfl240pry9l0lfw2vw"))))
1663 (build-system python-build-system)
1664 (arguments
1665 `(#:phases
1666 (modify-phases %standard-phases
1667 (replace 'check
1668 (lambda _
1669 ;; Drop test that requires internet access.
1670 (delete-file "tests/test_regressions.py")
1671 (setenv "PYTHONPATH"
1672 (string-append (getcwd) "/build/lib:"
1673 (getenv "PYTHONPATH")))
1674 (invoke "py.test" "-vv")
1675 #t)))))
1676 (native-inputs
1677 `(("python-pytest" ,python-pytest)
1678 ("python-redis" ,python-redis)
1679 ("python-webtest" ,python-webtest)
1680 ("python-mock" ,python-mock)))
1681 (propagated-inputs
1682 `(("python-requests" ,python-requests)
1683 ("python-lockfile" ,python-lockfile)))
1684 (home-page "https://github.com/ionrock/cachecontrol")
1685 (synopsis "The httplib2 caching algorithms for use with requests")
1686 (description "CacheControl is a port of the caching algorithms in
1687 @code{httplib2} for use with @code{requests} session objects.")
1688 (license license:asl2.0)))
1689
1690 (define-public python2-cachecontrol
1691 (package-with-python2 python-cachecontrol))
1692
1693 (define-public python-betamax
1694 (package
1695 (name "python-betamax")
1696 (version "0.8.1")
1697 (source
1698 (origin
1699 (method url-fetch)
1700 (uri (pypi-uri "betamax" version))
1701 (sha256
1702 (base32
1703 "1hki1c2vs7adq7zr56wi6i5bhrkia4s2ywpv2c98ibnczz709w2v"))))
1704 (build-system python-build-system)
1705 (arguments
1706 '(;; Many tests fail because they require networking.
1707 #:tests? #f))
1708 (propagated-inputs
1709 `(("python-requests" ,python-requests)))
1710 (home-page "https://github.com/sigmavirus24/betamax")
1711 (synopsis "Record HTTP interactions with python-requests")
1712 (description "Betamax will record your test suite's HTTP interactions and
1713 replay them during future tests. It is designed to work with python-requests.")
1714 (license license:expat)))
1715
1716 (define-public python2-betamax
1717 (package-with-python2 python-betamax))
1718
1719 (define-public python-betamax-matchers
1720 (package
1721 (name "python-betamax-matchers")
1722 (version "0.4.0")
1723 (source
1724 (origin
1725 (method url-fetch)
1726 (uri (pypi-uri "betamax-matchers" version))
1727 (sha256
1728 (base32
1729 "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
1730 (build-system python-build-system)
1731 (propagated-inputs
1732 `(("python-betamax" ,python-betamax)
1733 ("python-requests-toolbelt" ,python-requests-toolbelt)))
1734 (home-page "https://github.com/sigmavirus24/betamax_matchers")
1735 (synopsis "VCR imitation for python-requests")
1736 (description "@code{betamax-matchers} provides a set of Matchers for
1737 Betamax.")
1738 (license license:asl2.0)))
1739
1740 (define-public python2-betamax-matchers
1741 (package-with-python2 python-betamax-matchers))
1742
1743 (define-public python-s3transfer
1744 (package
1745 (name "python-s3transfer")
1746 (version "0.1.13")
1747 (source (origin
1748 (method url-fetch)
1749 (uri (pypi-uri "s3transfer" version))
1750 (sha256
1751 (base32
1752 "1harvyn1s8v54n1w5h7c0lg4bgjh68aylhg28s8n174q53h1ip4h"))))
1753 (build-system python-build-system)
1754 (arguments
1755 `(#:phases
1756 (modify-phases %standard-phases
1757 (replace 'check
1758 (lambda _
1759 ;; 7 of the 'integration' tests require network access or login
1760 ;; credentials.
1761 (invoke "nosetests" "--exclude=integration")
1762 #t)))))
1763 (native-inputs
1764 `(("python-docutils" ,python-docutils)
1765 ("python-mock" ,python-mock)
1766 ("python-nose" ,python-nose)))
1767 (propagated-inputs
1768 `(("python-botocore" ,python-botocore)))
1769 (synopsis "Amazon S3 Transfer Manager")
1770 (description "S3transfer is a Python library for managing Amazon S3
1771 transfers.")
1772 (home-page "https://github.com/boto/s3transfer")
1773 (license license:asl2.0)
1774 (properties `((python2-variant . ,(delay python2-s3transfer))))))
1775
1776 (define-public python2-s3transfer
1777 (let ((base (package-with-python2 (strip-python2-variant python-s3transfer))))
1778 (package
1779 (inherit base)
1780 (native-inputs
1781 `(("python2-futures" ,python2-futures)
1782 ,@(package-native-inputs base))))))
1783
1784 (define-public python-flask-restful
1785 (package
1786 (name "python-flask-restful")
1787 (version "0.3.5")
1788 (source
1789 (origin
1790 (method url-fetch)
1791 (uri (pypi-uri "Flask-RESTful" version))
1792 (sha256
1793 (base32
1794 "0hjcmdb56b7z4bkw848lxfkyrpnkwzmqn2dgnlv12mwvjpzsxr6c"))))
1795 (build-system python-build-system)
1796 (propagated-inputs
1797 `(("python-aniso8601" ,python-aniso8601)
1798 ("python-flask" ,python-flask)
1799 ("python-pycrypto" ,python-pycrypto)
1800 ("python-pytz" ,python-pytz)))
1801 (native-inputs
1802 `(;; Optional dependency of Flask. Tests need it.
1803 ("python-blinker" ,python-blinker)
1804 ("python-mock" ,python-mock) ; For tests
1805 ("python-nose" ,python-nose) ; For tests
1806 ("python-sphinx" ,python-sphinx)))
1807 (home-page
1808 "https://www.github.com/flask-restful/flask-restful/")
1809 (synopsis
1810 "Flask module for creating REST APIs")
1811 (description
1812 "This package contains a Flask module for creating REST APIs.")
1813 (license license:bsd-3)))
1814
1815 (define-public python-flask-basicauth
1816 (package
1817 (name "python-flask-basicauth")
1818 (version "0.2.0")
1819 (source
1820 (origin
1821 (method url-fetch)
1822 (uri (pypi-uri "Flask-BasicAuth" version))
1823 (sha256
1824 (base32
1825 "1zq1spkjr4sjdnalpp8wl242kdqyk6fhbnhr8hi4r4f0km4bspnz"))))
1826 (build-system python-build-system)
1827 (propagated-inputs
1828 `(("python-flask" ,python-flask)))
1829 (home-page
1830 "https://github.com/jpvanhal/flask-basicauth")
1831 (synopsis
1832 "HTTP basic access authentication for Flask")
1833 (description
1834 "This package provides HTTP basic access authentication for Flask.")
1835 (license license:bsd-3)))
1836
1837 (define-public python-flask-sqlalchemy
1838 (package
1839 (name "python-flask-sqlalchemy")
1840 (version "2.1")
1841 (source
1842 (origin
1843 (method url-fetch)
1844 (uri (pypi-uri "Flask-SQLAlchemy" version))
1845 (sha256
1846 (base32
1847 "1i9ps5d5snih9xlqhrvmi3qfiygkmqzxh92n25kj4pf89kj4s965"))))
1848 (build-system python-build-system)
1849 (propagated-inputs
1850 `(("python-flask" ,python-flask)
1851 ("python-sqlalchemy" ,python-sqlalchemy)))
1852 (home-page
1853 "https://github.com/mitsuhiko/flask-sqlalchemy")
1854 (synopsis
1855 "Module adding SQLAlchemy support to your Flask application")
1856 (description
1857 "This package adds SQLAlchemy support to your Flask application.")
1858 (license license:bsd-3)))
1859
1860 (define-public python-flask-restplus
1861 (package
1862 (name "python-flask-restplus")
1863 (version "0.9.2")
1864 (source
1865 (origin
1866 (method url-fetch)
1867 (uri (pypi-uri "flask-restplus" version))
1868 (sha256
1869 (base32
1870 "11his6ii5brpkhld0d5bwzjjw4q3vmplpd6fmgzjrvvklsbk0cf4"))))
1871 (build-system python-build-system)
1872 (arguments
1873 '(#:tests? #f)) ; FIXME: 35/882 tests failing.
1874 ;; #:phases
1875 ;; (modify-phases %standard-phases
1876 ;; (replace 'check
1877 ;; (lambda _
1878 ;; (invoke "nosetests")
1879 ;; #t)))))
1880 (propagated-inputs
1881 `(("python-aniso8601" ,python-aniso8601)
1882 ("python-flask" ,python-flask)
1883 ("python-jsonschema" ,python-jsonschema)
1884 ("python-pytz" ,python-pytz)
1885 ("python-six" ,python-six)))
1886 (native-inputs
1887 `(("python-tzlocal" ,python-tzlocal)
1888 ("python-blinker" ,python-blinker)
1889 ("python-nose" ,python-nose)
1890 ("python-rednose" ,python-rednose)))
1891 (home-page "https://github.com/noirbizarre/flask-restplus")
1892 (synopsis "Framework for documented API development with Flask")
1893 (description "This package provides a framework for API development with
1894 the Flask web framework in Python. It is similar to package
1895 @code{python-flask-restful} but supports the @code{python-swagger}
1896 documentation builder.")
1897 (license license:expat)))
1898
1899 (define-public python-flask-restful-swagger
1900 (package
1901 (name "python-flask-restful-swagger")
1902 (version "0.19")
1903 (source
1904 (origin
1905 (method url-fetch)
1906 (uri (pypi-uri "flask-restful-swagger" version))
1907 (sha256
1908 (base32
1909 "16msl8hd5xjmj833bpy264v98cpl5hkw5bgl5gf5vgndxbv3rm6v"))))
1910 (build-system python-build-system)
1911 (propagated-inputs
1912 `(("python-flask-restful" ,python-flask-restful)))
1913 (home-page "https://github.com/rantav/flask-restful-swagger")
1914 (synopsis "Extract Swagger specs from Flask-Restful projects")
1915 (description "This package lets you extract Swagger API documentation
1916 specs from your Flask-Restful projects.")
1917 (license license:expat)))
1918
1919 (define-public python2-flask-restful-swagger
1920 (package-with-python2 python-flask-restful-swagger))
1921
1922 (define-public python-htmlmin
1923 (package
1924 (name "python-htmlmin")
1925 (version "0.1.12")
1926 (source
1927 (origin
1928 (method url-fetch)
1929 (uri (pypi-uri "htmlmin" version))
1930 (sha256
1931 (base32
1932 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
1933 (arguments
1934 `(#:tests? #f)) ; no tests
1935 (build-system python-build-system)
1936 (home-page "https://htmlmin.readthedocs.org/en/latest/")
1937 (synopsis "HTML minifier")
1938 (description "@code{htmlmin} is an HTML minifier that just works.
1939 It comes with safe defaults and easily configurable options.")
1940 (license license:bsd-3)))
1941
1942 (define-public python2-htmlmin
1943 (package-with-python2 python-htmlmin))
1944
1945 (define-public python-flask-htmlmin
1946 (package
1947 (name "python-flask-htmlmin")
1948 (version "1.2")
1949 (source
1950 (origin
1951 (method url-fetch)
1952 (uri (pypi-uri "Flask-HTMLmin" version))
1953 (sha256
1954 (base32
1955 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
1956 (propagated-inputs
1957 `(("python-flask" ,python-flask)
1958 ("python-htmlmin" ,python-htmlmin)))
1959 (build-system python-build-system)
1960 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
1961 (synopsis "HTML response minifier for Flask")
1962 (description
1963 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
1964 (license license:bsd-3)))
1965
1966 (define-public python2-flask-htmlmin
1967 (package-with-python2 python-flask-htmlmin))
1968
1969 (define-public python-flask-login
1970 (package
1971 (name "python-flask-login")
1972 (version "0.4.0")
1973 (source
1974 (origin
1975 (method url-fetch)
1976 (uri (string-append "https://github.com/maxcountryman/flask-login/archive/"
1977 version ".tar.gz"))
1978 (file-name (string-append name "-" version ".tar.gz"))
1979 (sha256
1980 (base32
1981 "1pdqp7a2gyb7k06xda004x0fi2w66s6kn2i0ndkqndmg12d83f9w"))))
1982 (arguments
1983 ;; Tests fail PEP8 compliance. See:
1984 ;; https://github.com/maxcountryman/flask-login/issues/340
1985 `(#:tests? #f))
1986 (build-system python-build-system)
1987 (home-page "https://github.com/maxcountryman/flask-login")
1988 (synopsis "User session management for Flask")
1989 (description
1990 "@code{Flask-Login} provides user session management for Flask. It
1991 handles the common tasks of logging in, logging out, and remembering your
1992 users' sessions over extended periods of time.")
1993 (license license:expat)))
1994
1995 (define-public python2-flask-login
1996 (package-with-python2 python-flask-login))
1997
1998 (define-public python-oauth2client
1999 (package
2000 (name "python-oauth2client")
2001 (version "4.0.0")
2002 (source
2003 (origin
2004 (method url-fetch)
2005 (uri (pypi-uri "oauth2client" version))
2006 (sha256
2007 (base32
2008 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
2009 (build-system python-build-system)
2010 (arguments
2011 `(#:tests? #f))
2012 (propagated-inputs
2013 `(("python-httplib2" ,python-httplib2)
2014 ("python-pyasn1" ,python-pyasn1)
2015 ("python-pyasn1-modules" ,python-pyasn1-modules)
2016 ("python-rsa" ,python-rsa)
2017 ("python-six" ,python-six)))
2018 (home-page "https://github.com/google/oauth2client/")
2019 (synopsis "OAuth 2.0 client library")
2020 (description "@code{python-oauth2client} provides an OAuth 2.0 client
2021 library for Python")
2022 (license license:asl2.0)))
2023
2024 (define-public python-flask-oidc
2025 (package
2026 (name "python-flask-oidc")
2027 (version "1.1.1")
2028 (source
2029 (origin
2030 (method url-fetch)
2031 (uri (pypi-uri "flask-oidc" version))
2032 (sha256
2033 (base32
2034 "1ay5j0mf174bix7i67hclr95gv16z81fpx0dijvi0gydvdj3ddy2"))))
2035 (build-system python-build-system)
2036 (propagated-inputs
2037 `(("python-flask" ,python-flask)
2038 ("python-itsdangerous" ,python-itsdangerous)
2039 ("python-oauth2client" ,python-oauth2client)
2040 ("python-six" ,python-six)))
2041 (native-inputs
2042 `(("python-nose" ,python-nose)
2043 ("python-mock" ,python-mock)))
2044 (home-page "https://github.com/puiterwijk/flask-oidc")
2045 (synopsis "OpenID Connect extension for Flask")
2046 (description "@code{python-flask-oidc} provides an OpenID Connect extension
2047 for Flask.")
2048 (license license:bsd-2)))
2049
2050 (define-public python-webassets
2051 (package
2052 (name "python-webassets")
2053 (version "0.12.1")
2054 (source
2055 (origin
2056 (method url-fetch)
2057 (uri (pypi-uri "webassets" version))
2058 (sha256
2059 (base32
2060 "1nrqkpb7z46h2b77xafxihqv3322cwqv6293ngaky4j3ff4cing7"))))
2061 (build-system python-build-system)
2062 (native-inputs
2063 `(("python-jinja2" ,python-jinja2)
2064 ("python-mock" ,python-mock)
2065 ("python-nose" ,python-nose)
2066 ("python-pytest" ,python-pytest)))
2067 (home-page "https://github.com/miracle2k/webassets")
2068 (synopsis "Media asset management")
2069 (description "Merges, minifies and compresses Javascript and CSS files,
2070 supporting a variety of different filters, including YUI, jsmin, jspacker or
2071 CSS tidy. Also supports URL rewriting in CSS files.")
2072 (license license:bsd-2)))
2073
2074 (define-public python-cssmin
2075 (package
2076 (name "python-cssmin")
2077 (version "0.2.0")
2078 (source
2079 (origin
2080 (method url-fetch)
2081 (uri (pypi-uri "cssmin" version))
2082 (sha256
2083 (base32
2084 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
2085 (build-system python-build-system)
2086 (home-page "https://github.com/zacharyvoase/cssmin")
2087 (synopsis "Python port of the YUI CSS Compressor")
2088 (description "Python port of the YUI CSS Compressor.")
2089 (license (list license:expat license:bsd-3))))
2090
2091 (define-public python2-cssmin
2092 (package-with-python2 python-cssmin))
2093
2094 (define-public python-elasticsearch
2095 (package
2096 (name "python-elasticsearch")
2097 (version "6.1.1")
2098 (source
2099 (origin
2100 (method url-fetch)
2101 (uri (pypi-uri "elasticsearch" version))
2102 (sha256
2103 (base32
2104 "1kjxl45yvvgfb5fmamx0kfsfg9pzphiqrwbkns3s28r1w7ya74cd"))))
2105 (build-system python-build-system)
2106 (native-inputs
2107 `(("python-mock" ,python-mock)
2108 ("python-nosexcover" ,python-nosexcover)
2109 ("python-pyaml" ,python-pyaml)
2110 ("python-requests" ,python-requests)))
2111 (propagated-inputs
2112 `(("urllib3" ,python-urllib3)))
2113 (arguments
2114 ;; tests require the test_elasticsearch module but it is not distributed.
2115 `(#:tests? #f))
2116 (home-page "https://github.com/elastic/elasticsearch-py")
2117 (synopsis "Low-level client for Elasticsearch")
2118 (description "Official low-level client for Elasticsearch. Its goal is to
2119 provide common ground for all Elasticsearch-related code in Python; because of
2120 this it tries to be opinion-free and very extendable.")
2121 (license license:expat)))
2122
2123 (define-public python2-elasticsearch
2124 (package-with-python2 python-elasticsearch))
2125
2126 (define-public python-flask-script
2127 (package
2128 (name "python-flask-script")
2129 (version "2.0.6")
2130 (source
2131 (origin
2132 (method url-fetch)
2133 (uri (pypi-uri "Flask-Script" version))
2134 (sha256
2135 (base32
2136 "0r8w2v89nj6b9p91p495cga5m72a673l2wc0hp0zqk05j4yrc9b4"))))
2137 (build-system python-build-system)
2138 (propagated-inputs
2139 `(("python-flask" ,python-flask)
2140 ("python-argcomplete" ,python-argcomplete)
2141 ("python-werkzeug" ,python-werkzeug)))
2142 (native-inputs
2143 `(("python-pytest" ,python-pytest)))
2144 (home-page
2145 "https://github.com/smurfix/flask-script")
2146 (synopsis "Scripting support for Flask")
2147 (description "The Flask-Script extension provides support for writing
2148 external scripts in Flask. This includes running a development server,
2149 a customised Python shell, scripts to set up your database, cronjobs,
2150 and other command-line tasks that belong outside the web application
2151 itself.")
2152 (license license:bsd-3)))
2153
2154 (define-public python2-flask-script
2155 (package-with-python2 python-flask-script))
2156
2157 (define-public python-flask-migrate
2158 (package
2159 (name "python-flask-migrate")
2160 (version "2.0.3")
2161 (source
2162 (origin
2163 (method url-fetch)
2164 (uri (pypi-uri "Flask-Migrate" version))
2165 (sha256
2166 (base32
2167 "107x78lkqsnbg92dld3dkagg07jvchp3ib3y0sivc4ipz6n1y7rk"))))
2168 (build-system python-build-system)
2169 (propagated-inputs
2170 `(("python-flask" ,python-flask)
2171 ("python-alembic" ,python-alembic)
2172 ("python-sqlalchemy" ,python-sqlalchemy)
2173 ("python-flask-script" ,python-flask-script)
2174 ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)))
2175 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
2176 (synopsis "SQLAlchemy database migrations for Flask programs using
2177 Alembic")
2178 (description "This package contains SQLAlchemy database migration tools
2179 for Flask programs that are using @code{python-alembic}.")
2180 (license license:expat)))
2181
2182 (define-public python2-flask-migrate
2183 (package-with-python2 python-flask-migrate))
2184
2185 (define-public python-genshi
2186 (package
2187 (name "python-genshi")
2188 (version "0.7")
2189 (source
2190 (origin
2191 (method url-fetch)
2192 (uri (string-append
2193 "https://ftp.edgewall.org/pub/genshi/Genshi-"
2194 version ".tar.gz"))
2195 (patches
2196 (search-patches
2197 ;; The first 4 patches are in the master branch upstream.
2198 ;; See this as a reference https://genshi.edgewall.org/ticket/582
2199 ;; The last 2 are NOT in any branch.
2200 ;; They were sent as attachments to a ticket opened at
2201 ;; https://genshi.edgewall.org/ticket/602#no1
2202 "python-genshi-stripping-of-unsafe-script-tags.patch"
2203 "python-genshi-disable-speedups-on-python-3.3.patch"
2204 "python-genshi-isstring-helper.patch"
2205 "python-genshi-add-support-for-python-3.4-AST.patch"
2206 "python-genshi-fix-tests-on-python-3.5.patch"
2207 "python-genshi-buildable-on-python-2.7.patch"))
2208 (sha256
2209 (base32
2210 "0lkkbp6fbwzv0zda5iqc21rr7rdldkwh3hfabfjl9i4bwq14858x"))))
2211 (build-system python-build-system)
2212 (home-page "https://genshi.edgewall.org/")
2213 (synopsis "Toolkit for generation of output for the web")
2214 (description "Genshi is a Python library that provides an integrated set
2215 of components for parsing, generating, and processing HTML, XML or other
2216 textual content for output generation on the web.")
2217 (license license:bsd-3)))
2218
2219 ;; The linter here claims that patch file names should start with the package
2220 ;; name. But, in this case the patches are inherited from python-genshi with
2221 ;; the "python-genshi-" prefix instead of "python2-genshi-".
2222 (define-public python2-genshi
2223 (package-with-python2 python-genshi))
2224
2225 (define-public python-flask-principal
2226 (package
2227 (name "python-flask-principal")
2228 (version "0.4.0")
2229 (source
2230 (origin
2231 (method url-fetch)
2232 (uri (pypi-uri "Flask-Principal" version))
2233 (sha256
2234 (base32
2235 "0lwlr5smz8vfm5h9a9i7da3q1c24xqc6vm9jdywdpgxfbi5i7mpm"))))
2236 (build-system python-build-system)
2237 (propagated-inputs
2238 `(("python-blinker" ,python-blinker)))
2239 (native-inputs
2240 `(("python-flask" ,python-flask)
2241 ("python-nose" ,python-nose)))
2242 (home-page "http://packages.python.org/Flask-Principal/")
2243 (synopsis "Identity management for Flask")
2244 (description "@code{flask_principal} is a identity management library for
2245 Flask. It supports managing both authentication and authorization data in a
2246 thread-local variable.")
2247 (license license:expat)))
2248
2249 (define-public python2-flask-principal
2250 (package-with-python2 python-flask-principal))
2251
2252 (define-public python-flask-httpauth
2253 (package
2254 (name "python-flask-httpauth")
2255 (version "3.2.3")
2256 (source
2257 (origin
2258 (method url-fetch)
2259 (uri (pypi-uri "Flask-HTTPAuth" version))
2260 (sha256
2261 (base32
2262 "13gff5w1mqpzm5nccyg02v3ifb9ifqh5k866cssjhghhg6msfjsz"))))
2263 (build-system python-build-system)
2264 (native-inputs
2265 `(("python-flask" ,python-flask)))
2266 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
2267 (synopsis "Basic and Digest HTTP authentication for Flask routes")
2268 (description "@code{flask_httpauth} provides Basic and Digest HTTP
2269 authentication for Flask routes.")
2270 (license license:expat)))
2271
2272 (define-public python2-flask-httpauth
2273 (package-with-python2 python-flask-httpauth))
2274
2275 (define-public python-uritemplate
2276 (package
2277 (name "python-uritemplate")
2278 (version "3.0.0")
2279 (source
2280 (origin
2281 (method url-fetch)
2282 (uri (pypi-uri "uritemplate" version))
2283 (sha256
2284 (base32
2285 "0781gm9g34wa0asc19dx81ng0nqq07igzv3bbvdqmz13pv7469n0"))))
2286 (build-system python-build-system)
2287 (home-page "https://uritemplate.readthedocs.org")
2288 (synopsis "Library to deal with URI Templates")
2289 (description "@code{uritemplate} provides Python library to deal with URI
2290 Templates.")
2291 (license license:bsd-2)))
2292
2293 (define-public python2-uritemplate
2294 (package-with-python2 python-uritemplate))
2295
2296 (define-public python-publicsuffix
2297 (package
2298 (name "python-publicsuffix")
2299 (version "1.1.0")
2300 (source (origin
2301 (method url-fetch)
2302 (uri (pypi-uri "publicsuffix" version))
2303 (sha256
2304 (base32
2305 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
2306 (build-system python-build-system)
2307 (arguments
2308 `(#:tests? #f)) ; tests use the internet
2309 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
2310 (synopsis "Get suffix for a domain name")
2311 (description "Get a public suffix for a domain name using the Public Suffix
2312 List.")
2313 (license license:expat)))
2314
2315 (define-public python2-publicsuffix
2316 (package-with-python2 python-publicsuffix))
2317
2318 (define-public python-publicsuffix2
2319 (package
2320 (name "python-publicsuffix2")
2321 (version "2.20160818")
2322 (source
2323 (origin
2324 (method url-fetch)
2325 (uri (pypi-uri "publicsuffix2" version ".tar.bz2"))
2326 (sha256
2327 (base32
2328 "1bb55yka9vkn7i6y1kjzxa516kh6v4gsrxa90w5wdz5p5n968r68"))))
2329 (build-system python-build-system)
2330 (arguments
2331 '(#:tests? #f)) ; The test suite requires network access.
2332 (home-page "https://github.com/pombredanne/python-publicsuffix2")
2333 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
2334 (description "Get a public suffix for a domain name using the Public Suffix
2335 List. Forked from and using the same API as the publicsuffix package.")
2336 (license (list license:expat license:mpl2.0))))
2337
2338 (define-public python2-publicsuffix2
2339 (package-with-python2 python-publicsuffix2))
2340
2341 (define-public python-werkzeug
2342 (package
2343 (name "python-werkzeug")
2344 (version "0.11.15")
2345 (source
2346 (origin
2347 (method url-fetch)
2348 (uri (pypi-uri "Werkzeug" version))
2349 (sha256
2350 (base32
2351 "1h5wycw8yj7q0grqsjnsqflmrlsdagvl2j4dsgdncci6mjc7fpa5"))))
2352 (build-system python-build-system)
2353 (native-inputs
2354 `(("python-pytest" ,python-pytest)))
2355 (home-page "http://werkzeug.pocoo.org/")
2356 (synopsis "Utilities for WSGI applications")
2357 (description "One of the most advanced WSGI utility modules. It includes a
2358 powerful debugger, full-featured request and response objects, HTTP utilities to
2359 handle entity tags, cache control headers, HTTP dates, cookie handling, file
2360 uploads, a powerful URL routing system and a bunch of community-contributed
2361 addon modules.")
2362 (license license:x11)))
2363
2364 (define-public python2-werkzeug
2365 (package-with-python2 python-werkzeug))
2366
2367 (define-public python-bottle
2368 (package
2369 (name "python-bottle")
2370 (version "0.12.13")
2371 (source
2372 (origin
2373 (method url-fetch)
2374 (uri (pypi-uri "bottle" version))
2375 (sha256
2376 (base32
2377 "0m9k2a7yxvggc4kw8fsvj381vgsvfcdshg5nzy6vwrxiw2p53drr"))))
2378 (build-system python-build-system)
2379 (home-page "http://bottlepy.org/")
2380 (synopsis "WSGI framework for small web-applications.")
2381 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
2382 (license license:expat)))
2383
2384 (define-public python2-bottle
2385 (package-with-python2 python-bottle))
2386
2387 (define-public python-wtforms
2388 (package
2389 (name "python-wtforms")
2390 (version "2.1")
2391 (source
2392 (origin
2393 (method url-fetch)
2394 (uri (pypi-uri "WTForms" version ".zip"))
2395 (sha256
2396 (base32
2397 "0vyl26y9cg409cfyj8rhqxazsdnd0jipgjw06civhrd53yyi1pzz"))))
2398 (build-system python-build-system)
2399 (arguments
2400 '(#:phases
2401 (modify-phases %standard-phases
2402 (add-after 'unpack 'remove-django-test
2403 ;; Don't fail the tests when the inputs for the optional tests cannot be found.
2404 (lambda _
2405 (substitute*
2406 "tests/runtests.py"
2407 (("'ext_django.tests', 'ext_sqlalchemy', 'ext_dateutil', 'locale_babel'") "")
2408 (("sys.stderr.write(\"### Disabled test '%s', dependency not found\n\" % name)") ""))
2409 #t)))))
2410 (native-inputs
2411 `(("unzip" ,unzip)))
2412 (home-page "http://wtforms.simplecodes.com/")
2413 (synopsis
2414 "Form validation and rendering library for Python web development")
2415 (description
2416 "WTForms is a flexible forms validation and rendering library
2417 for Python web development. It is very similar to the web form API
2418 available in Django, but is a standalone package.")
2419 (license license:bsd-3)))
2420
2421 (define-public python2-wtforms
2422 (package-with-python2 python-wtforms))
2423
2424 (define-public python-paste
2425 (package
2426 (name "python-paste")
2427 (version "2.0.3")
2428 (source
2429 (origin
2430 (method url-fetch)
2431 (uri (pypi-uri "Paste" version))
2432 (sha256
2433 (base32
2434 "062jk0nlxf6lb2wwj6zc20rlvrwsnikpkh90y0dn8cjch93s6ii3"))
2435 (patches (search-patches "python-paste-remove-website-test.patch"
2436 "python-paste-remove-timing-test.patch"))))
2437 (build-system python-build-system)
2438 (native-inputs
2439 `(("python-nose" ,python-nose)))
2440 (propagated-inputs
2441 `(("python-six" ,python-six)))
2442 (home-page "http://pythonpaste.org")
2443 (synopsis
2444 "Python web development tools, focusing on WSGI")
2445 (description
2446 "Paste provides a variety of web development tools and middleware which
2447 can be nested together to build web applications. Paste's design closely
2448 follows ideas flowing from WSGI (Web Standard Gateway Interface).")
2449 (license license:expat)))
2450
2451 (define-public python2-paste
2452 (package-with-python2 python-paste))
2453
2454 (define-public python-pastescript
2455 (package
2456 (name "python-pastescript")
2457 (version "2.0.2")
2458 (source
2459 (origin
2460 (method url-fetch)
2461 (uri (pypi-uri "PasteScript" version))
2462 (sha256
2463 (base32
2464 "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"))))
2465 (build-system python-build-system)
2466 (native-inputs
2467 `(("python-nose" ,python-nose)))
2468 (propagated-inputs
2469 `(("python-paste" ,python-paste)
2470 ("python-pastedeploy" ,python-pastedeploy)))
2471 (home-page "http://pythonpaste.org/script/")
2472 (arguments
2473 '(;; Unfortunately, this requires the latest unittest2,
2474 ;; but that requires traceback2 which requires linecache2 which requires
2475 ;; unittest2. So we're skipping tests for now.
2476 ;; (Note: Apparently linetest2 only needs unittest2 for its tests,
2477 ;; so in theory we could get around this situation somehow.)
2478 #:tests? #f))
2479 (synopsis
2480 "Pluggable command line tool for serving web applications and more")
2481 (description
2482 "PasteScript is a plugin-friendly command line tool which provides a
2483 variety of features, from launching web applications to bootstrapping project
2484 layouts.")
2485 (license license:expat)))
2486
2487 (define-public python2-pastescript
2488 (package-with-python2 python-pastescript))