gnu: python2-radon: Fix build.
[jackhill/guix/guix.git] / gnu / packages / python-web.scm
CommitLineData
1b2f753d
LC
1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Eric Dvorsak <eric@dvorsak.fr>
354d27e5 3;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
1b2f753d 4;;; Copyright © 2017 Christopher Baines <mail@cbaines.net>
98c6a025 5;;; Copyright © 2016, 2017 Danny Milosavljevic <dannym+a@scratchpost.org>
1b2f753d
LC
6;;; Copyright © 2013, 2014, 2015, 2016 Andreas Enge <andreas@enge.fr>
7;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
fecd3250 8;;; Copyright © 2015, 2016, 2017, 2018, 2019, 2020 Ricardo Wurmus <rekado@elephly.net>
1b2f753d 9;;; Copyright © 2017 Roel Janssen <roel@gnu.org>
18d18ee1 10;;; Copyright © 2016, 2017, 2020 Julien Lepiller <julien@lepiller.eu>
47956fa0 11;;; Copyright © 2016, 2017 ng0 <ng0@n0.is>
1b2f753d
LC
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>
68460fbb 15;;; Copyright © 2015, 2016, 2017, 2019 Leo Famulari <leo@famulari.name>
df122333 16;;; Copyright © 2016, 2019 Hartmut Goebel <h.goebel@crazy-compilers.com>
df01360f 17;;; Copyright © 2016, 2017, 2018, 2019, 2020 Tobias Geerinckx-Rice <me@tobias.gr>
1b2f753d
LC
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>
589e3f4e 24;;; Copyright © 2015, 2016 David Thompson <davet@gnu.org>
eaa8292e 25;;; Copyright © 2017 Mark Meyer <mark@ofosos.org>
c5964611 26;;; Copyright © 2018 Tomáš Čech <sleep_walker@gnu.org>
2bdb5716 27;;; Copyright © 2018, 2019 Nicolas Goaziou <mail@nicolasgoaziou.fr>
1ceca46b 28;;; Copyright © 2018 Mathieu Othacehe <m.othacehe@gmail.com>
bb840999 29;;; Copyright © 2018 Maxim Cournoyer <maxim.cournoyer@gmail.com>
93d3360a 30;;; Copyright © 2019 Vagrant Cascadian <vagrant@debian.org>
dcfa0acd 31;;; Copyright © 2019 Brendan Tildesley <mail@brendan.scot>
6543bc80 32;;; Copyright © 2019 Pierre Langlois <pierre.langlois@gmx.com>
dabcfc6d 33;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
0021363d 34;;; Copyright © 2020 Jakub Kądziołka <kuba@kadziolka.net>
e524b577 35;;; Copyright © 2020 Evan Straw <evan.straw99@gmail.com>
1b2f753d
LC
36;;;
37;;; This file is part of GNU Guix.
38;;;
39;;; GNU Guix is free software; you can redistribute it and/or modify it
40;;; under the terms of the GNU General Public License as published by
41;;; the Free Software Foundation; either version 3 of the License, or (at
42;;; your option) any later version.
43;;;
44;;; GNU Guix is distributed in the hope that it will be useful, but
45;;; WITHOUT ANY WARRANTY; without even the implied warranty of
46;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
47;;; GNU General Public License for more details.
48;;;
49;;; You should have received a copy of the GNU General Public License
50;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
51
52(define-module (gnu packages python-web)
53 #:use-module (guix packages)
54 #:use-module (guix download)
7c8b1bf6 55 #:use-module (guix git-download)
1b2f753d 56 #:use-module (guix build-system python)
e3e74e40 57 #:use-module (guix utils)
1b2f753d 58 #:use-module (gnu packages)
a7469d16 59 #:use-module (gnu packages base)
ac257f12 60 #:use-module (gnu packages check)
1b2f753d 61 #:use-module (gnu packages compression)
eaa8292e 62 #:use-module (gnu packages curl)
a8714bf6 63 #:use-module (gnu packages databases)
1b2f753d 64 #:use-module (gnu packages django)
4b92dac2 65 #:use-module (gnu packages groff)
951c7093 66 #:use-module (gnu packages libffi)
1b2f753d
LC
67 #:use-module (gnu packages pkg-config)
68 #:use-module (gnu packages python)
df122333 69 #:use-module (gnu packages python-check)
cc6f4912 70 #:use-module (gnu packages python-crypto)
44d10b1f 71 #:use-module (gnu packages python-xyz)
18d18ee1 72 #:use-module (gnu packages serialization)
9d0c291e 73 #:use-module (gnu packages sphinx)
a7469d16 74 #:use-module (gnu packages texinfo)
eaa8292e 75 #:use-module (gnu packages tls)
33dc54b0 76 #:use-module (gnu packages time)
56a5ef4c 77 #:use-module (gnu packages web)
1b2f753d
LC
78 #:use-module (gnu packages xml)
79 #:use-module ((guix licenses) #:prefix license:)
80 #:use-module (srfi srfi-1))
81
321ba568
NG
82(define-public python-aiohttp
83 (package
84 (name "python-aiohttp")
fecd3250 85 (version "3.6.2")
321ba568
NG
86 (source
87 (origin
88 (method url-fetch)
89 (uri (pypi-uri "aiohttp" version))
90 (sha256
91 (base32
fecd3250 92 "09pkw6f1790prnrq0k8cqgnf1qy57ll8lpmc6kld09q7zw4vi6i5"))))
321ba568
NG
93 (build-system python-build-system)
94 (arguments
62c2cef0 95 `(#:tests? #f)) ;missing pytest-timeout
321ba568
NG
96 (propagated-inputs
97 `(("python-aiodns" ,python-aiodns)
98 ("python-async-timeout" ,python-async-timeout)
99 ("python-attrs" ,python-attrs)
100 ("python-chardet" ,python-chardet)
101 ("python-idna-ssl" ,python-idna-ssl)
102 ("python-multidict" ,python-multidict)
103 ("python-yarl" ,python-yarl)))
104 (home-page "https://github.com/aio-libs/aiohttp/")
105 (synopsis "Async HTTP client/server framework (asyncio)")
106 (description "@code{aiohttp} is an asynchronous HTTP client/server
107framework.
108
109Its main features are:
110@itemize
111@item Supports both client and server side of HTTP protocol.
112@item Supports both client and server Web-Sockets out-of-the-box without the
113Callback Hell.
114@item Web-server has middlewares and pluggable routing.
115@end itemize")
116 (license license:asl2.0)))
117
20310a7e
VC
118(define-public python-aiohttp-socks
119 (package
120 (name "python-aiohttp-socks")
121 (version "0.2.2")
122 (source
123 (origin
124 (method url-fetch)
125 (uri (pypi-uri "aiohttp_socks" version))
126 (sha256
127 (base32
128 "0473702jk66xrgpm28wbdgpnak4v0dh2qmdjw7ky7hf3lwwqkggf"))))
129 (build-system python-build-system)
130 (propagated-inputs
131 `(("python-aiohttp" ,python-aiohttp)))
132 (home-page "https://github.com/romis2012/aiohttp-socks")
133 (synopsis "SOCKS proxy connector for aiohttp")
134 (description "This package provides a SOCKS proxy connector for
135aiohttp. It supports SOCKS4(a) and SOCKS5.")
136 (license license:asl2.0)))
137
f90f4c9c
NG
138(define-public python-aiodns
139 (package
140 (name "python-aiodns")
141 (version "1.1.1")
142 (source
143 (origin
144 (method url-fetch)
145 (uri (pypi-uri "aiodns" version))
146 (sha256
147 (base32
148 "1snr5paql8dgvc676n8xq460wypjsb1xj53cf3px1s4wczf7lryq"))))
149 (build-system python-build-system)
150 (inputs
151 `(("python-pycares" ,python-pycares)))
152 (arguments
153 `(#:tests? #f)) ;tests require internet access
154 (home-page "http://github.com/saghul/aiodns")
155 (synopsis "Simple DNS resolver for asyncio")
156 (description "@code{aiodns} provides a simple way for doing
157asynchronous DNS resolutions with a synchronous looking interface by
158using @url{https://github.com/saghul/pycares,pycares}.")
159 (license license:expat)))
160
93d3360a
VC
161(define-public python-aiorpcx
162 (package
163 (name "python-aiorpcx")
c31302fd 164 (version "0.18.3")
93d3360a
VC
165 (source
166 (origin
167 (method url-fetch)
168 (uri (pypi-uri "aiorpcX" version))
169 (sha256
170 (base32
c31302fd 171 "0k545hc7wl6sh1svydzbv6x7sx5pig2pqkl3yxs9riwmvzawx9xp"))))
93d3360a
VC
172 (build-system python-build-system)
173 (propagated-inputs
174 `(("python-attrs" ,python-attrs)))
175 (home-page "https://github.com/kyuupichan/aiorpcX")
176 (synopsis "Generic asyncio RPC implementation")
177 (description
bd105b78
AB
178 "The aiorpcX library is a generic asyncio implementation of RPC suitable
179for an application that is a client, server or both.
93d3360a
VC
180
181The package includes a module with full coverage of JSON RPC versions 1.0 and
1822.0, JSON RPC protocol auto-detection, and arbitrary message framing. It also
183comes with a SOCKS proxy client.")
184 (license (list license:expat license:bsd-2))))
185
bb840999
MC
186(define-public python-falcon
187 (package
188 (name "python-falcon")
189 (version "1.4.1")
190 (source
191 (origin
192 (method url-fetch)
193 (uri (pypi-uri "falcon" version))
194 (sha256
195 (base32
196 "1i0vmqsk24z4biirqhpvas9h28wy7nmpy3jvnb6rz2imq04zd09r"))))
197 (build-system python-build-system)
198 (arguments
199 `(#:phases
200 (modify-phases %standard-phases
201 (replace 'check
202 (lambda _
203 (invoke "pytest"))))))
204 (propagated-inputs
205 `(("python-mimeparse" ,python-mimeparse)
206 ("python-six" ,python-six)))
207 (native-inputs
208 `(("python-cython" ,python-cython) ;for faster binaries
209 ("python-pytest" ,python-pytest)
210 ("python-pyyaml" ,python-pyyaml)
211 ("python-requests" ,python-requests)
212 ("python-testtools" ,python-testtools)
213 ("python-jsonschema" ,python-jsonschema)
214 ("python-msgpack" ,python-msgpack)))
215 (home-page "https://falconframework.org")
216 (synopsis
217 "Web framework for building APIs and application backends")
218 (description
219 "Falcon is a web API framework for building microservices, application
220backends and higher-level frameworks. Among its features are:
221@itemize
222@item Optimized and extensible code base
223@item Routing via URI templates and REST-inspired resource
224classes
225@item Access to headers and bodies through request and response
226classes
227@item Request processing via middleware components and hooks
228@item Idiomatic HTTP error responses
229@item Straightforward exception handling
230@item Unit testing support through WSGI helpers and mocks
231@item Compatible with both CPython and PyPy
232@item Cython support for better performance when used with CPython
233@end itemize")
234 (license license:asl2.0)))
235
236(define-public python2-falcon
237 (package-with-python2 python-falcon))
238
66a9f08b
MC
239(define-public python-falcon-cors
240 (package
241 (name "python-falcon-cors")
242 (version "1.1.7")
243 (source
244 (origin
245 (method url-fetch)
246 (uri (pypi-uri "falcon-cors" version))
247 (sha256
248 (base32
249 "12pym7hwsbd8b0c1azn95nas8gm3f1qpr6lpyx0958xm65ffr20p"))))
250 (build-system python-build-system)
251 (native-inputs
252 `(("python-falcon" ,python-falcon)))
253 (home-page
254 "https://github.com/lwcolton/falcon-cors")
255 (synopsis "Falcon @dfn{cross-origin resource sharing} (CORS) library")
256 (description "This middleware provides @dfn{cross-origin resource
257sharing} (CORS) support for Falcon. It allows applying a specially crafted
258CORS object to the incoming requests, enabling the ability to serve resources
259over a different origin than that of the web application.")
260 (license license:asl2.0)))
261
262(define-public python2-falcon-cors
263 (package-with-python2 python-falcon-cors))
264
589e3f4e
LC
265(define-public python-furl
266 (package
267 (name "python-furl")
268 (version "0.5.6")
269 (source
270 (origin
271 (method url-fetch)
272 (uri (pypi-uri "furl" version))
273 (sha256
274 (base32
275 "0lzpfpm686hvz3sr1mcrnd1b3lgmnw8v59gb43wfi98r3b671pqc"))))
276 (build-system python-build-system)
277 (propagated-inputs
278 `(("python-six" ,python-six)
279 ("python-orderedmultidict" ,python-orderedmultidict)))
280 (native-inputs
281 `(("python-pycodestyle" ,python-pycodestyle)))
282 (home-page "https://github.com/gruns/furl")
283 (synopsis "URL manipulation in Python")
284 (description "Furl provides an easy-to-use alternative to the
285@code{urllib} and @code{urlparse} modules for manipulating URLs.")
286 (license license:unlicense)))
287
288(define-public python2-furl
289 (package-with-python2 python-furl))
290
1b2f753d
LC
291(define-public python-httplib2
292 (package
293 (name "python-httplib2")
294 (version "0.9.2")
295 (source
296 (origin
297 (method url-fetch)
298 (uri (pypi-uri "httplib2" version))
299 (sha256
300 (base32
301 "126rsryvw9vhbf3qmsfw9lf4l4xm2srmgs439lgma4cpag4s3ay3"))))
302 (build-system python-build-system)
303 (home-page "https://github.com/jcgregorio/httplib2")
304 (synopsis "Comprehensive HTTP client library")
305 (description
306 "A comprehensive HTTP client library supporting many features left out of
307other HTTP libraries.")
308 (license license:expat)))
309
310(define-public python2-httplib2
311 (package-with-python2 python-httplib2))
312
dabcfc6d
TLC
313(define-public httpie
314 (package
315 (name "httpie")
0ef7e444 316 (version "2.0.0")
dabcfc6d
TLC
317 (source
318 (origin
319 (method url-fetch)
320 (uri (pypi-uri "httpie" version))
321 (sha256
322 (base32
0ef7e444 323 "02bw20cwv3a1lzrn919dk25dq4v81x6q786zlrqsqzhsdxszj14c"))))
dabcfc6d
TLC
324 (build-system python-build-system)
325 (arguments
326 ;; The tests attempt to access external web servers, so we cannot run them.
327 '(#:tests? #f))
328 (propagated-inputs
329 `(("python-colorama" ,python-colorama)
330 ("python-pygments" ,python-pygments)
331 ("python-requests" ,python-requests)))
332 (home-page "https://httpie.org/")
333 (synopsis "cURL-like tool for humans")
334 (description
335 "A command line HTTP client with an intuitive UI, JSON support,
336syntax highlighting, wget-like downloads, plugins, and more. It consists of
337a single http command designed for painless debugging and interaction with
338HTTP servers, RESTful APIs, and web services.")
339 (license license:bsd-3)))
340
7a82ceb7
BT
341(define-public python-html2text
342 (package
343 (name "python-html2text")
4907b615 344 (version "2019.8.11")
7a82ceb7
BT
345 (source
346 (origin
347 (method url-fetch)
348 (uri (pypi-uri "html2text" version))
349 (sha256
350 (base32
4907b615 351 "0ppgjplg06kmv9sj0x8p7acczcq2mcfgk1jdjwm4w5w40b0vj5pm"))))
7a82ceb7 352 (build-system python-build-system)
4907b615
EF
353 (arguments
354 '(#:phases
355 (modify-phases %standard-phases
356 (replace 'check
357 (lambda _
358 (invoke "pytest" "test/"))))))
359 (native-inputs
360 `(("python-pytest" ,python-pytest)))
361 (home-page "https://github.com/Alir3z4/html2text")
7a82ceb7
BT
362 (synopsis "Convert HTML into plain text")
363 (description "html2text takes HTML and converts it into plain ASCII text
364which is also valid markdown. html2text was originally written by Aaron
365Swartz.")
366 (license license:gpl3+)))
367
368(define-public python2-html2text
369 (package-with-python2 python-html2text))
370
56a5ef4c
TGR
371(define-public python-mechanicalsoup
372 (package
373 (name "python-mechanicalsoup")
374 (version "0.11.0")
375 (source
376 (origin
377 (method url-fetch)
378 (uri (pypi-uri "MechanicalSoup" version))
379 (sha256
380 (base32 "0k59wwk75q7nz6i6gynvzhagy02ql0bv7py3qqcwgjw7607yq4i7"))))
381 (build-system python-build-system)
382 (arguments
383 ;; TODO: Enable tests when python-flake8@3.5 hits master.
384 `(#:tests? #f))
385 (propagated-inputs
386 `(("python-beautifulsoup4" ,python-beautifulsoup4)
387 ("python-lxml" ,python-lxml)
388 ("python-requests" ,python-requests)
389 ("python-six" ,python-six)))
390 ;; (native-inputs
391 ;; ;; For tests.
392 ;; `(("python-pytest-flake8" ,python-pytest-flake8)
393 ;; ("python-pytest-httpbin" ,python-pytest-httpbin)
394 ;; ("python-pytest-mock" ,python-pytest-mock)
395 ;; ("python-pytest-runner" ,python-pytest-runner)
396 ;; ("python-requests-mock" ,python-requests-mock)))
397 (home-page "https://mechanicalsoup.readthedocs.io/")
398 (synopsis "Python library for automating website interaction")
399 (description
400 "MechanicalSoup is a Python library for automating interaction with
401websites. It automatically stores and sends cookies, follows redirects, and can
402follow links and submit forms. It doesn’t do JavaScript.")
403 (license license:expat)))
404
405(define-public python2-mechanicalsoup
406 (package-with-python2 python-mechanicalsoup))
407
1b2f753d
LC
408(define-public python-sockjs-tornado
409 (package
410 (name "python-sockjs-tornado")
c381d4bb 411 (version "1.0.6")
1b2f753d
LC
412 (source
413 (origin
414 (method url-fetch)
415 (uri (pypi-uri "sockjs-tornado" version))
416 (sha256
417 (base32
c381d4bb 418 "15dgv6hw6c7h3m310alw1h6p5443lrm9pyqhcv2smc13fz1v04pc"))))
1b2f753d
LC
419 (build-system python-build-system)
420 (arguments
421 `(;; There are no tests, and running the test phase requires missing
422 ;; dependencies
423 #:tests? #f))
424 (propagated-inputs
425 `(("python-tornado" ,python-tornado)))
9be5ecdf 426 (home-page "https://github.com/mrjoes/sockjs-tornado/")
1b2f753d 427 (synopsis
1f7fe26f 428 "SockJS Python server implementation on top of the Tornado framework")
1b2f753d 429 (description
1f7fe26f 430 "SockJS-tornado provides the server-side counterpart to a SockJS client
1b2f753d
LC
431library, through the Tornado framework.
432
1f7fe26f 433SockJS provides a low-latency, full-duplex, cross-domain communication channel
1b2f753d
LC
434between a web browser and web server.")
435 (license license:expat)))
436
437(define-public python2-sockjs-tornado
438 (package-with-python2 python-sockjs-tornado))
439
440(define-public python-flask-babel
441 (package
442 (name "python-flask-babel")
1a6fb8da 443 (version "0.11.2")
1b2f753d
LC
444 (source
445 (origin
446 (method url-fetch)
447 (uri (pypi-uri "Flask-Babel" version))
448 (sha256
449 (base32
1a6fb8da 450 "0ff9n165vhf1nhv6807ckhpp224jw7k7sd7jz5kfh3sbpl85gmy0"))))
1b2f753d
LC
451 (build-system python-build-system)
452 (propagated-inputs
453 `(("python-flask" ,python-flask)
454 ("python-babel" ,python-babel)
455 ("python-jinja2" ,python-jinja2)
456 ("python-pytz" ,python-pytz)))
457 (home-page "https://github.com/python-babel/flask-babel")
458 (synopsis "Add i18n/l10n support to Flask applications")
459 (description "This package implements internationalization and localization
460support for Flask. This is based on the Python babel module as well as pytz -
461both of which are installed automatically if you install this library.")
462 (license license:bsd-3)))
463
464(define-public python2-flask-babel
465 (package-with-python2 python-flask-babel))
466
467(define-public python-html5lib
468 (package
469 (name "python-html5lib")
4ef80b2f 470 (version "1.0.1")
1b2f753d
LC
471 (source
472 (origin
473 (method url-fetch)
474 (uri (pypi-uri "html5lib" version))
475 (sha256
476 (base32
4ef80b2f 477 "0dipzfrycv6j1jw82v9b7d8lzggx3x8xngx6l4xrqkxwvg7hvjv6"))))
1b2f753d
LC
478 (build-system python-build-system)
479 (propagated-inputs
480 `(("python-six" ,python-six)
481 ("python-webencodings" ,python-webencodings)))
482 (arguments
483 `(#:test-target "check"))
484 (home-page
485 "https://github.com/html5lib/html5lib-python")
486 (synopsis
487 "Python HTML parser based on the WHATWG HTML specifcation")
488 (description
489 "Html5lib is an HTML parser based on the WHATWG HTML specifcation
490and written in Python.")
491 (license license:expat)))
492
493(define-public python2-html5lib
494 (package-with-python2 python-html5lib))
495
496;; Needed for python-bleach, a dependency of python-notebook
497(define-public python-html5lib-0.9
498 (package
499 (inherit python-html5lib)
500 (version "0.999")
501 (source
502 (origin
503 (method url-fetch)
504 (uri (pypi-uri "html5lib" version))
505 (sha256
506 (base32
507 "17n4zfsj6ynmbwdwviywmj8r6nzr3xvfx2zs0xhndmvm51z7z263"))))))
508
509(define-public python2-html5lib-0.9
510 (package-with-python2 python-html5lib-0.9))
511
512(define-public python-html5-parser
513 (package
514 (name "python-html5-parser")
5e517e9b 515 (version "0.4.5")
1b2f753d
LC
516 (source (origin
517 (method url-fetch)
518 (uri (pypi-uri "html5-parser" version))
519 (sha256
520 (base32
5e517e9b 521 "01mx33sx4dhl4kj6wc48nj6jz7ry60rkhjv0s6k8h5xmjf5yy0x9"))))
1b2f753d
LC
522 (build-system python-build-system)
523 (native-inputs
524 `(("pkg-config" ,pkg-config)))
525 (inputs
526 `(("libxml2" ,libxml2)))
527 (propagated-inputs
528 `(("python-lxml" ,python-lxml)
529 ("python-beautifulsoup4" ,python-beautifulsoup4)))
530 (home-page "https://html5-parser.readthedocs.io")
531 (synopsis "Fast C-based HTML5 parsing for Python")
532 (description "This package provides a fast implementation of the HTML5
533parsing spec for Python. Parsing is done in C using a variant of the gumbo
534parser. The gumbo parse tree is then transformed into an lxml tree, also in
535C, yielding parse times that can be a thirtieth of the html5lib parse times.")
536 ;; src/as-python-tree.[c|h] are licensed GPL3. The other files
537 ;; indicate ASL2.0, including the LICENSE file for the whole project.
538 (license (list license:asl2.0 license:gpl3))))
539
540(define-public python2-html5-parser
541 (package-with-python2 python-html5-parser))
542
eaa8292e
MM
543(define-public python-pycurl
544 (package
545 (name "python-pycurl")
0d35a954 546 (version "7.43.0.2")
eaa8292e
MM
547 (source
548 (origin
549 (method url-fetch)
550 (uri (string-append "https://dl.bintray.com/pycurl/pycurl/pycurl-"
551 version ".tar.gz"))
552 (sha256
0d35a954 553 (base32 "1915kb04k1j4y6k1dx1sgnbddxrl9r1n4q928if2lkrdm73xy30g"))))
eaa8292e
MM
554 (build-system python-build-system)
555 (arguments
556 ;; The tests attempt to access external web servers, so we cannot run
557 ;; them. Furthermore, they are skipped altogether when using Python 2.
60667159
MB
558 '(#:tests? #f
559 #:phases (modify-phases %standard-phases
560 (add-before 'build 'configure-tls-backend
561 (lambda _
562 ;; XXX: PycURL fails to automatically determine which TLS
563 ;; backend to use when cURL is built with --disable-static.
564 ;; See setup.py and <https://github.com/pycurl/pycurl/pull/147>.
565 (setenv "PYCURL_SSL_LIBRARY" "gnutls")
566 #t)))))
eaa8292e
MM
567 (native-inputs
568 `(("python-nose" ,python-nose)
569 ("python-bottle" ,python-bottle)))
570 (inputs
571 `(("curl" ,curl)
572 ("gnutls" ,gnutls)))
573 (home-page "http://pycurl.io/")
574 (synopsis "Lightweight Python wrapper around libcurl")
575 (description "Pycurl is a lightweight wrapper around libcurl. It provides
576high-speed transfers via libcurl and frequently outperforms alternatives.")
577
578 ;; Per 'README.rst', this is dual-licensed: users can redistribute pycurl
579 ;; under the terms of LGPLv2.1+ or Expat.
580 (license (list license:lgpl2.1+ license:expat))))
581
582(define-public python2-pycurl
583 (package-with-python2 python-pycurl))
584
1b2f753d
LC
585(define-public python-webencodings
586 (package
587 (name "python-webencodings")
b0a2c9cb 588 (version "0.5.1")
1b2f753d
LC
589 (source (origin
590 (method url-fetch)
591 (uri (pypi-uri "webencodings" version))
592 (sha256
593 (base32
b0a2c9cb 594 "08qrgrc4hrximb2gqnl69g01s93rhf2842jfxdjljc1dbwj1qsmk"))))
1b2f753d
LC
595 (build-system python-build-system)
596 (arguments
597 '(#:phases
598 (modify-phases %standard-phases
599 (replace 'check
600 (lambda _
12adfdf0
TGR
601 (invoke "py.test" "-v" "webencodings/tests.py")
602 #t)))))
1b2f753d
LC
603 (native-inputs
604 `(("python-pytest" ,python-pytest)))
605 (home-page "https://github.com/SimonSapin/python-webencodings")
606 (synopsis "Character encoding aliases for legacy web content")
607 (description
608 "In order to be compatible with legacy web content when interpreting
609something like @code{Content-Type: text/html; charset=latin1}, tools need
610to use a particular set of aliases for encoding labels as well as some
611overriding rules. For example, @code{US-ASCII} and @code{iso-8859-1} on
a40f732b 612the web are actually aliases for @code{windows-1252}, and a @code{UTF-8}
1b2f753d
LC
613or @code{UTF-16} BOM takes precedence over any other encoding declaration.
614The WHATWG @url{https://encoding.spec.whatwg.org/,Encoding} standard
615defines all such details so that implementations do not have to
616reverse-engineer each other.
617
618This module implements the Encoding standard and has encoding labels and
619BOM detection, but the actual implementation for encoders and decoders
620is Python’s.")
621 (license license:bsd-3)))
622
623(define-public python2-webencodings
624 (package-with-python2 python-webencodings))
625
626(define-public python-openid
627 (package
628 (name "python-openid")
10275b74 629 (version "3.1.0")
1b2f753d
LC
630 (source
631 (origin
632 (method url-fetch)
633 (uri (pypi-uri "python3-openid" version))
634 (sha256
635 (base32
10275b74 636 "00l5hrjh19740w00b3fnsqldnla41wbr2rics09dl4kyd1fkd3b2"))))
1b2f753d
LC
637 (build-system python-build-system)
638 (arguments
639 `(#:phases
640 (modify-phases %standard-phases
641 (replace 'check
642 (lambda _
10275b74
EF
643 (invoke "coverage" "run" "-m"
644 "unittest" "openid.test.test_suite"))))))
1b2f753d
LC
645 (properties `((python2-variant . ,(delay python2-openid))))
646 (propagated-inputs
647 `(("python-defusedxml" ,python-defusedxml)))
648 (native-inputs
10275b74
EF
649 `(("python-coverage" ,python-coverage)
650 ("python-psycopg2" ,python-psycopg2)
1b2f753d
LC
651 ("python-django" ,python-django)))
652 (home-page "https://github.com/necaris/python3-openid")
653 (synopsis "OpenID support for servers and consumers")
654 (description "This library provides OpenID authentication for Python, both
655for clients and servers.")
656 (license license:asl2.0)))
657
658(define-public python2-openid
659 (package
660 (name "python2-openid")
661 (version "2.2.5")
662 (source
663 (origin
664 (method url-fetch)
665 (uri (pypi-uri "python-openid" version))
666 (sha256
667 (base32
668 "1vvhxlghjan01snfdc4k7ykd80vkyjgizwgg9bncnin8rqz1ricj"))))
669 (build-system python-build-system)
670 (arguments
671 ;; Python 3 support is in `python3-openid`, a separate package.
9597c550
JL
672 `(#:python ,python-2
673 ;; Tests aren't initialized correctly.
674 #:tests? #f))
1b2f753d
LC
675 (home-page "https://github.com/openid/python-openid")
676 (synopsis "OpenID support for servers and consumers")
677 (description "This library provides OpenID authentication for Python, both
678for clients and servers.")
679 (license license:asl2.0)))
680
681(define-public python-cssutils
682 (package
683 (name "python-cssutils")
3c5658c5 684 (version "1.0.2")
1b2f753d
LC
685 (source
686 (origin
687 (method url-fetch)
688 (uri (pypi-uri "cssutils" version))
689 (sha256
690 (base32
3c5658c5 691 "1bxchrbqzapwijap0yhlxdil1w9bmwvgx77aizlkhc2mcxjg1z52"))))
1b2f753d
LC
692 (build-system python-build-system)
693 (native-inputs
3c5658c5 694 `(("unzip" ,unzip))) ; for unpacking the source
1b2f753d 695 (arguments
3c5658c5 696 `(#:tests? #f)) ; tests require python-pbr < 1.7.0
1b2f753d
LC
697 (home-page "http://cthedot.de/cssutils/")
698 (synopsis
699 "CSS Cascading Style Sheets library for Python")
700 (description
701 "Cssutils is a Python package for parsing and building CSS
702Cascading Style Sheets. Currently it provides a DOM only and no rendering
703options.")
704 (license license:lgpl3+)))
705
706(define-public python2-cssutils
707 (package-with-python2 python-cssutils))
708
02eb70bd
BT
709(define-public python-css-parser
710 (package
711 (inherit python-cssutils)
712 (name "python-css-parser")
713 (version "1.0.4")
714 (source
715 (origin
716 (method url-fetch)
717 (uri (pypi-uri "css-parser" version ".tar.gz"))
718 (sha256
719 (base32
720 "0i4xfykiffxzr4f6y0m2ggqvx1rzam6pw6krlr5k6ldf29akbay7"))))
721 (home-page "https://github.com/ebook-utils/css-parser")
722 (synopsis "Fork of cssutils modified for parsing ebooks")
723 (description
724 "Css-parser is a fork of cssutils 1.0.2, updated and modified for parsing
725ebooks, due to cssutils not receiving updates as of 1.0.2.")
726 (license license:lgpl3+)))
727
728(define-public python2-css-parser
729 (package-with-python2 python-css-parser))
730
1b2f753d
LC
731(define-public python-cssselect
732 (package
733 (name "python-cssselect")
734 (version "0.9.2")
735 (source
736 (origin
737 (method url-fetch)
738 (uri (pypi-uri "cssselect" version))
739 (sha256
740 (base32
741 "1xg6gbva1yswghiycmgincv6ab4bn7hpm720ndbj40h8xycmnfvi"))))
742 (build-system python-build-system)
743 (arguments
744 ;; tests fail with message
745 ;; AttributeError: 'module' object has no attribute 'tests'
746 `(#:tests? #f))
747 (home-page
748 "https://pythonhosted.org/cssselect/")
749 (synopsis
750 "CSS3 selector parser and translator to XPath 1.0")
751 (description
752 "Cssselect ia a Python module that parses CSS3 Selectors and translates
753them to XPath 1.0 expressions. Such expressions can be used in lxml or
754another XPath engine to find the matching elements in an XML or HTML document.")
755 (license license:bsd-3)))
756
757(define-public python2-cssselect
758 (package-with-python2 python-cssselect))
759
760(define-public python-openid-cla
761 (package
762 (name "python-openid-cla")
763 (version "1.2")
764 (source
765 (origin
766 (method url-fetch)
767 (uri (pypi-uri "python-openid-cla" version))
768 (sha256
769 (base32
770 "102hy2qisvjxp5s0v9lvwqi4f2dk0dhns40vjgn008yxc7k0h3cr"))))
771 (build-system python-build-system)
772 (arguments '(#:tests? #f)) ; No tests.
773 (home-page "https://github.com/puiterwijk/python-openid-cla/")
774 (synopsis "Implementation of the OpenID CLA extension for python-openid")
775 (description "@code{openid-cla} is an implementation of the OpenID
776contributor license agreement extension for python-openid.")
777 (license license:bsd-3)))
778
779(define-public python2-openid-cla
780 (package-with-python2 python-openid-cla))
781
782(define-public python-openid-teams
783 (package
784 (name "python-openid-teams")
785 (version "1.1")
786 (source
787 (origin
788 (method url-fetch)
789 (uri (pypi-uri "python-openid-teams" version))
790 (sha256
791 (base32
792 "05zrh78alav24rxkbqlpbad6d3x2nljk6z6j7kflxf3vdqa7w969"))))
793 (build-system python-build-system)
794 (arguments '(#:tests? #f)) ; No tests.
795 (home-page "https://github.com/puiterwijk/python-openid-teams/")
796 (synopsis "Implementation of the OpenID teams extension for python-openid")
797 (description
798 "@code{openid-teams} is an implementation of the OpenID
799teams extension for python-openid.")
800 (license license:bsd-3)))
801
802(define-public python2-openid-teams
803 (package-with-python2 python-openid-teams))
804
805(define-public python-tornado
806 (package
807 (name "python-tornado")
3fcaf42a 808 (version "5.1.1")
1b2f753d
LC
809 (source
810 (origin
811 (method url-fetch)
812 (uri (pypi-uri "tornado" version))
813 (sha256
3fcaf42a
EF
814 (base32
815 "02clqk2116jbnq8lnaqmdw3p52nqrd9ib59r4xz2ll43fpcmhlaf"))))
1b2f753d
LC
816 (build-system python-build-system)
817 (arguments
818 '(;; FIXME: Two tests error out with:
819 ;; AssertionError: b'Error in atexit._run_exitfuncs:\nFileNotF[44 chars]ry\n' != b''
820 ;; #:phases
821 ;; (modify-phases %standard-phases
822 ;; (replace 'check
823 ;; (lambda _
824 ;; ;; 'setup.py test' hits an AssertionError on BSD-specific
825 ;; ;; "tornado/platform/kqueue.py". This is the supported method:
3fcaf42a 826 ;; (invoke "python" "-m" "tornado.test.runtests")
12adfdf0 827 ;; #t)))
1b2f753d
LC
828 #:tests? #f))
829 (native-inputs
830 `(("python-certifi" ,python-certifi)))
3fcaf42a 831 (home-page "https://www.tornadoweb.org/")
1b2f753d
LC
832 (synopsis "Python web framework and asynchronous networking library")
833 (description
834 "Tornado is a Python web framework and asynchronous networking library,
835originally developed at FriendFeed. By using non-blocking network I/O,
836Tornado can scale to tens of thousands of open connections, making it ideal
837for long polling, WebSockets, and other applications that require a long-lived
838connection to each user.")
839 (license license:asl2.0)
840 (properties `((python2-variant . ,(delay python2-tornado))))))
841
842(define-public python2-tornado
843 (let ((tornado (package-with-python2 (strip-python2-variant python-tornado))))
844 (package (inherit tornado)
845 (propagated-inputs
846 `(("python2-backport-ssl-match-hostname"
847 ,python2-backport-ssl-match-hostname)
3fcaf42a 848 ("python2-backports-abc" ,python2-backports-abc)
1b2f753d
LC
849 ("python2-singledispatch" ,python2-singledispatch)
850 ,@(package-propagated-inputs tornado))))))
851
852(define-public python-tornado-http-auth
853 (package
854 (name "python-tornado-http-auth")
5051ef95 855 (version "1.1.1")
1b2f753d
LC
856 (source
857 (origin
858 (method url-fetch)
859 (uri (pypi-uri "tornado-http-auth" version))
860 (sha256
5051ef95 861 (base32 "0hyc5f0a09i5yb99pk4bxpg6w9ichbrb5cv7hc9hff7rxd8w0v0x"))))
1b2f753d
LC
862 (build-system python-build-system)
863 (propagated-inputs
864 `(("python-tornado" ,python-tornado)))
5051ef95
TGR
865 (home-page "https://github.com/gvalkov/tornado-http-auth")
866 (synopsis "Digest and basic authentication module for Tornado")
1b2f753d
LC
867 (description
868 "Provides support for adding authentication to services using the Tornado
869web framework, either via the basic or digest authentication schemes.")
870 (license license:asl2.0)))
871
872(define-public python-terminado
873 (package
874 (name "python-terminado")
d47b21c6 875 (version "0.8.1")
1b2f753d
LC
876 (source
877 (origin
878 (method url-fetch)
879 (uri (pypi-uri "terminado" version))
880 (sha256
881 (base32
d47b21c6 882 "0yh69k6579g848rmjyllb5h75pkvgcy27r1l3yzgkf33wnnzkasm"))))
1b2f753d
LC
883 (build-system python-build-system)
884 (propagated-inputs
885 `(("python-tornado" ,python-tornado)
886 ("python-ptyprocess" ,python-ptyprocess)))
887 (native-inputs
888 `(("python-nose" ,python-nose)))
889 (arguments
890 `(#:phases
891 (modify-phases %standard-phases
892 (replace 'check
d47b21c6 893 (lambda _ (invoke "nosetests") #t)))))
1b2f753d
LC
894 (home-page "https://github.com/takluyver/terminado")
895 (synopsis "Terminals served to term.js using Tornado websockets")
896 (description "This package provides a Tornado websocket backend for the
897term.js Javascript terminal emulator library.")
898 (license license:bsd-2)
899 (properties `((python2-variant . ,(delay python2-terminado))))))
900
901(define-public python2-terminado
902 (let ((terminado (package-with-python2 (strip-python2-variant python-terminado))))
903 (package (inherit terminado)
904 (propagated-inputs
905 `(("python2-backport-ssl-match-hostname"
906 ,python2-backport-ssl-match-hostname)
94249db8 907 ("python2-futures" ,python2-futures)
1b2f753d
LC
908 ,@(package-propagated-inputs terminado))))))
909
589e3f4e
LC
910(define-public python-wsgi-intercept
911 (package
912 (name "python-wsgi-intercept")
913 (version "1.2.2")
914 (source (origin
915 (method url-fetch)
2b221866 916 (uri (pypi-uri "wsgi_intercept" version))
589e3f4e
LC
917 (sha256
918 (base32
919 "0kjj2v2dvmnpdd5h5gk9rzz0f54rhjb0yiz3zg65bmp65slfw65d"))))
920 (build-system python-build-system)
921 (propagated-inputs
922 `(("python-six" ,python-six)))
923 (native-inputs
924 `(("python-pytest" ,python-pytest)
925 ("python-httplib2" ,python-httplib2)
926 ("python-requests" ,python-requests)
927 ("python-urllib3" ,python-urllib3)))
928 (synopsis "Puts a WSGI application in place of a real URI for testing")
929 (description "Wsgi_intercept installs a WSGI application in place of a real
930URI for testing. Testing a WSGI application normally involves starting a
931server at a local host and port, then pointing your test code to that address.
932Instead, this library lets you intercept calls to any specific host/port
933combination and redirect them into a WSGI application importable by your test
934program. Thus, you can avoid spawning multiple processes or threads to test
935your Web app.")
936 (home-page "https://github.com/cdent/wsgi-intercept")
937 (license license:expat)))
938
1b2f753d
LC
939(define-public python-webob
940 (package
941 (name "python-webob")
942 (version "1.5.1")
943 (source
944 (origin
945 (method url-fetch)
946 (uri (pypi-uri "WebOb" version))
947 (sha256
948 (base32
949 "02bhhzijfhv8hmi1i54d4b0v43liwhnywhflvxsv4x3zax9s3afq"))))
950 (build-system python-build-system)
951 (native-inputs
952 `(("python-nose" ,python-nose)))
9be5ecdf 953 (home-page "https://webob.org/")
1b2f753d
LC
954 (synopsis "WSGI request and response object")
955 (description
956 "WebOb provides wrappers around the WSGI request environment, and an
957object to help create WSGI responses.")
958 (license license:expat)))
959
960(define-public python2-webob
961 (package-with-python2 python-webob))
962
963(define-public python-zope-event
964 (package
965 (name "python-zope-event")
7b43d3a7 966 (version "4.4")
1b2f753d
LC
967 (source
968 (origin
969 (method url-fetch)
da501c49 970 (uri (pypi-uri "zope.event" version))
1b2f753d
LC
971 (sha256
972 (base32
7b43d3a7 973 "1ksbc726av9xacml6jhcfyn828hlhb9xlddpx6fcvnlvmpmpvhk9"))))
1b2f753d 974 (build-system python-build-system)
e85af137 975 (home-page "https://pypi.org/project/zope.event/")
1b2f753d
LC
976 (synopsis "Event publishing system for Python")
977 (description "Zope.event provides an event publishing API, intended for
978use by applications which are unaware of any subscribers to their events. It
979is a simple event-dispatching system on which more sophisticated event
980dispatching systems can be built.")
981 (license license:zpl2.1)))
982
983(define-public python2-zope-event
984 (package-with-python2 python-zope-event))
985
986(define-public python-zope-interface
987 (package
988 (name "python-zope-interface")
b87fc008 989 (version "4.6.0")
1b2f753d
LC
990 (source
991 (origin
992 (method url-fetch)
ba93e239 993 (uri (pypi-uri "zope.interface" version))
1b2f753d
LC
994 (sha256
995 (base32
b87fc008 996 "1rgh2x3rcl9r0v0499kf78xy86rnmanajf4ywmqb943wpk50sg8v"))))
1b2f753d
LC
997 (build-system python-build-system)
998 (native-inputs
999 `(("python-zope-event" ,python-zope-event)))
1000 (home-page "https://github.com/zopefoundation/zope.interface")
1001 (synopsis "Python implementation of the \"design by contract\"
1002methodology")
1003 (description "Zope.interface provides an implementation of \"object
1004interfaces\" for Python. Interfaces are a mechanism for labeling objects as
1005conforming to a given API or contract.")
1006 (license license:zpl2.1)))
1007
1008(define-public python2-zope-interface
1009 (package-with-python2 python-zope-interface))
1010
1011(define-public python-zope-exceptions
1012 (package
1013 (name "python-zope-exceptions")
1014 (version "4.0.8")
1015 (source
1016 (origin
1017 (method url-fetch)
3d010466 1018 (uri (pypi-uri "zope.exceptions" version))
1b2f753d
LC
1019 (sha256
1020 (base32
1021 "0zwxaaa66sqxg5k7zcrvs0fbg9ym1njnxnr28dfmchzhwjvwnfzl"))))
1022 (build-system python-build-system)
1023 (arguments
b07e73a2 1024 '(#:tests? #f)) ; circular dependency with zope.testrunner
1b2f753d
LC
1025 (propagated-inputs
1026 `(("python-zope-interface" ,python-zope-interface)))
b07e73a2 1027 (home-page "https://pypi.org/project/zope.exceptions/")
1b2f753d
LC
1028 (synopsis "Zope exceptions")
1029 (description "Zope.exceptions provides general-purpose exception types
1030that have uses outside of the Zope framework.")
1031 (license license:zpl2.1)))
1032
1033(define-public python2-zope-exceptions
1034 (package-with-python2 python-zope-exceptions))
1035
1036(define-public python-zope-testing
1037 (package
1038 (name "python-zope-testing")
9d981019 1039 (version "4.6.2")
1b2f753d
LC
1040 (source
1041 (origin
1042 (method url-fetch)
f9a6457d 1043 (uri (pypi-uri "zope.testing" version))
1b2f753d
LC
1044 (sha256
1045 (base32
9d981019 1046 "0iiq54hjhkk2gpvzfjac70vyn4r0kw0ngvicshxbdwrkgf2gjq3g"))
1b2f753d
LC
1047 (modules '((guix build utils)))
1048 (snippet
1049 '(begin
1050 ;; Remove pre-compiled .pyc files backup files from source.
1051 (for-each delete-file (find-files "." "(\\.pyc|~)$"))
1052 #t))))
1053 (build-system python-build-system)
e85af137 1054 (home-page "https://pypi.org/project/zope.testing/")
1b2f753d
LC
1055 (synopsis "Zope testing helpers")
1056 (description "Zope.testing provides a number of testing utilities for HTML
1057forms, HTTP servers, regular expressions, and more.")
1058 (license license:zpl2.1)))
1059
1060(define-public python2-zope-testing
1061 (package-with-python2 python-zope-testing))
1062
1063(define-public python-zope-testrunner
1064 (package
1065 (name "python-zope-testrunner")
1066 (version "4.4.9")
1067 (source
1068 (origin
1069 (method url-fetch)
d409c993 1070 (uri (pypi-uri "zope.testrunner" version ".zip"))
1b2f753d
LC
1071 (sha256
1072 (base32
1073 "1r7iqknhh55y45f64mz5hghgvzx34h1i11k350s0avx6q8gznja1"))))
1074 (build-system python-build-system)
1075 (arguments
1076 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
1077 (native-inputs
1078 `(("python-six" ,python-six)
1079 ;("python-zope-interface" ,python-zope-interface)
1080 ("python-zope-exceptions" ,python-zope-exceptions)
1081 ("python-zope-testing" ,python-zope-testing)
1082 ("unzip" ,unzip)))
1083 (propagated-inputs
1084 `(("python-zope-interface" ,python-zope-interface)))
e85af137 1085 (home-page "https://pypi.org/project/zope.testrunner/")
1b2f753d
LC
1086 (synopsis "Zope testrunner script")
1087 (description "Zope.testrunner provides a script for running Python
1088tests.")
1089 (license license:zpl2.1)))
1090
1091(define-public python2-zope-testrunner
1092 (let ((base (package-with-python2 python-zope-testrunner)))
1093 (package
1094 (inherit base)
1095 (native-inputs
1096 (append (package-native-inputs base)
1097 `(("python2-subunit" ,python2-subunit)
1098 ("python2-mimeparse" ,python2-mimeparse)))))))
1099
1100(define-public python-zope-i18nmessageid
1101 (package
1102 (name "python-zope-i18nmessageid")
1103 (version "4.0.3")
1104 (source
1105 (origin
1106 (method url-fetch)
8a84d796 1107 (uri (pypi-uri "zope.i18nmessageid" version))
1b2f753d
LC
1108 (sha256
1109 (base32
1110 "1rslyph0klk58dmjjy4j0jxy21k03azksixc3x2xhqbkv97cmzml"))))
1111 (build-system python-build-system)
e85af137 1112 (home-page "https://pypi.org/project/zope.i18nmessageid/")
1b2f753d
LC
1113 (synopsis "Message identifiers for internationalization")
1114 (description "Zope.i18nmessageid provides facilities for declaring
1115internationalized messages within program source text.")
1116 (license license:zpl2.1)))
1117
1118(define-public python2-zope-i18nmessageid
1119 (package-with-python2 python-zope-i18nmessageid))
1120
1121(define-public python-zope-schema
1122 (package
1123 (name "python-zope-schema")
1124 (version "4.4.2")
1125 (source
1126 (origin
1127 (method url-fetch)
ab9e1740 1128 (uri (pypi-uri "zope.schema" version))
1b2f753d
LC
1129 (sha256
1130 (base32
1131 "1p943jdxb587dh7php4vx04qvn7b2877hr4qs5zyckvp5afhhank"))))
1132 (build-system python-build-system)
1133 (arguments
1134 '(#:tests? #f)) ; FIXME: Tests can't find zope.event.
1135 (propagated-inputs
1136 `(("python-zope-event" ,python-zope-event)
c695fb76 1137 ("python-zope-exceptions" ,python-zope-exceptions)
1b2f753d
LC
1138 ("python-zope-interface" ,python-zope-interface)))
1139 (native-inputs
1140 `(("python-zope-testing" ,python-zope-testing)
1141 ("python-coverage" ,python-coverage)
1142 ("python-nose" ,python-nose)))
e85af137 1143 (home-page "https://pypi.org/project/zope.schema/")
1b2f753d
LC
1144 (synopsis "Zope data schemas")
1145 (description "Zope.scheme provides extensions to zope.interface for
1146defining data schemas.")
1147 (license license:zpl2.1)))
1148
1149(define-public python2-zope-schema
1150 (package-with-python2 python-zope-schema))
1151
1152(define-public python-zope-configuration
1153 (package
1154 (name "python-zope-configuration")
1155 (version "4.0.3")
1156 (source (origin
1157 (method url-fetch)
cdf14a67 1158 (uri (pypi-uri "zope.configuration" version))
1b2f753d
LC
1159 (sha256
1160 (base32
1161 "1x9dfqypgympnlm25p9m43xh4qv3p7d75vksv9pzqibrb4cggw5n"))))
1162 (build-system python-build-system)
1163 (arguments
1164 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
1165 (propagated-inputs
1166 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
1167 ("python-zope-schema" ,python-zope-schema)))
e85af137 1168 (home-page "https://pypi.org/project/zope.configuration/")
1b2f753d
LC
1169 (synopsis "Zope Configuration Markup Language")
1170 (description "Zope.configuration implements ZCML, the Zope Configuration
1171Markup Language.")
1172 (license license:zpl2.1)))
1173
1174(define-public python2-zope-configuration
1175 (package-with-python2 python-zope-configuration))
1176
1177(define-public python-zope-proxy
1178 (package
1179 (name "python-zope-proxy")
1180 (version "4.1.6")
1181 (source
1182 (origin
1183 (method url-fetch)
510cacc7 1184 (uri (pypi-uri "zope.proxy" version))
1b2f753d
LC
1185 (sha256
1186 (base32
1187 "0pqwwmvm1prhwv1ziv9lp8iirz7xkwb6n2kyj36p2h0ppyyhjnm4"))))
1188 (build-system python-build-system)
1189 (arguments
1190 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
1191 (propagated-inputs
1192 `(("python-zope-interface" ,python-zope-interface)))
e85af137 1193 (home-page "https://pypi.org/project/zope.proxy/")
1b2f753d
LC
1194 (synopsis "Generic, transparent proxies")
1195 (description "Zope.proxy provides generic, transparent proxies for Python.
1196Proxies are special objects which serve as mostly-transparent wrappers around
1197another object, intervening in the apparent behavior of the wrapped object
1198only when necessary to apply the policy (e.g., access checking, location
1199brokering, etc.) for which the proxy is responsible.")
1200 (license license:zpl2.1)))
1201
1202(define-public python2-zope-proxy
1203 (package-with-python2 python-zope-proxy))
1204
1205(define-public python-zope-location
1206 (package
1207 (name "python-zope-location")
1208 (version "4.0.3")
1209 (source
1210 (origin
1211 (method url-fetch)
6e6bbc02 1212 (uri (pypi-uri "zope.location" version))
1b2f753d
LC
1213 (sha256
1214 (base32
1215 "1nj9da4ksiyv3h8n2vpzwd0pb03mdsh7zy87hfpx72b6p2zcwg74"))))
1216 (build-system python-build-system)
1217 (arguments
1218 '(#:tests? #f)) ; FIXME: Tests can't find zope.interface.
1219 (propagated-inputs
1220 `(("python-zope-proxy" ,python-zope-proxy)
1221 ("python-zope-schema" ,python-zope-schema)))
e85af137 1222 (home-page "https://pypi.org/project/zope.location/")
1b2f753d
LC
1223 (synopsis "Zope location library")
1224 (description "Zope.location implements the concept of \"locations\" in
1225Zope3, which are are special objects that have a structural location.")
1226 (license license:zpl2.1)))
1227
1228(define-public python2-zope-location
1229 (package-with-python2 python-zope-location))
1230
1231(define-public python-zope-security
1232 (package
1233 (name "python-zope-security")
1234 (version "4.0.3")
1235 (source
1236 (origin
1237 (method url-fetch)
fc283a5e 1238 (uri (pypi-uri "zope.security" version))
1b2f753d
LC
1239 (sha256
1240 (base32
1241 "14zmf684amc0x32kq05yxnhfqd1cmyhafkw05gn81rn90zjv6ssy"))))
1242 (build-system python-build-system)
1243 (arguments
1244 '(#:tests? #f)) ; FIXME: Tests can't find zope.testrunner.
1245 (propagated-inputs
1246 `(("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
1247 ("python-zope-proxy" ,python-zope-proxy)
1248 ("python-zope-schema" ,python-zope-schema)))
1249 (native-inputs
1250 `(("python-six" ,python-six)
1251 ("python-zope-component" ,python-zope-component)
1252 ("python-zope-configuration" ,python-zope-configuration)
1253 ("python-zope-location" ,python-zope-location)
1254 ("python-zope-testrunner" ,python-zope-testrunner)
1255 ("python-zope-testing" ,python-zope-testing)))
e85af137 1256 (home-page "https://pypi.org/project/zope.security/")
1b2f753d
LC
1257 (synopsis "Zope security framework")
1258 (description "Zope.security provides a generic mechanism to implement
1259security policies on Python objects.")
1260 (license license:zpl2.1)))
1261
1262(define-public python2-zope-security
1263 (let ((zope-security (package-with-python2 python-zope-security)))
1264 (package (inherit zope-security)
1265 (propagated-inputs
1266 `(("python2-zope-testrunner" ,python2-zope-testrunner)
1267 ,@(alist-delete
1268 "python-zope-testrunner"
1269 (package-propagated-inputs zope-security)))))))
1270
1271(define-public python-zope-component
1272 (package
1273 (name "python-zope-component")
1274 (version "4.3.0")
1275 (source
1276 (origin
1277 (method url-fetch)
1278 (uri (pypi-uri "zope.component" version))
1279 (sha256
1280 (base32
1281 "1hlvzwj1kcfz1qms1dzhwsshpsf38z9clmyksb1gh41n8k3kchdv"))))
1282 (build-system python-build-system)
1283 (arguments
1284 ;; Skip tests due to circular dependency with python-zope-security.
1285 '(#:tests? #f))
1286 (native-inputs
1287 `(("python-zope-testing" ,python-zope-testing)))
1288 (propagated-inputs
1289 `(("python-zope-event" ,python-zope-event)
1290 ("python-zope-interface" ,python-zope-interface)
1291 ("python-zope-i18nmessageid" ,python-zope-i18nmessageid)
1292 ("python-zope-configuration" ,python-zope-configuration)))
1293 (home-page "https://github.com/zopefoundation/zope.component")
1294 (synopsis "Zope Component Architecture")
1295 (description "Zope.component represents the core of the Zope Component
1296Architecture. Together with the zope.interface package, it provides
1297facilities for defining, registering and looking up components.")
1298 (license license:zpl2.1)))
1299
1300(define-public python2-zope-component
1301 (package-with-python2 python-zope-component))
1302
1303(define-public python-ndg-httpsclient
1304 (package
1305 (name "python-ndg-httpsclient")
57d5d3da 1306 (version "0.5.1")
1b2f753d
LC
1307 (source (origin
1308 (method url-fetch)
1309 (uri (pypi-uri "ndg_httpsclient" version))
1310 (sha256
1311 (base32
57d5d3da 1312 "0412b7i1s4vj7lz9r72nmb28h9syd4q2x89bdirkkc3a6z8awbyp"))))
1b2f753d
LC
1313 (build-system python-build-system)
1314 (arguments
1315 '(;; The tests appear to require networking.
1316 #:tests? #f))
1317 (propagated-inputs
1318 `(("python-pyopenssl" ,python-pyopenssl)))
1319 (synopsis "HTTPS support for Python's httplib and urllib2")
1320 (description "This is a HTTPS client implementation for httplib and urllib2
eed0f1e8
TGR
1321based on PyOpenSSL. PyOpenSSL provides a more fully-featured SSL implementation
1322over the default provided with Python and, importantly, enables full
1323verification of the SSL peer.")
1b2f753d
LC
1324 (home-page "https://github.com/cedadev/ndg_httpsclient/")
1325 (license license:bsd-3)))
1326
1327;; python2-openssl requires special care, so package-with-python2 is
1328;; insufficient.
1329(define-public python2-ndg-httpsclient
1330 (package (inherit python-ndg-httpsclient)
1331 (name "python2-ndg-httpsclient")
e3e74e40
TGR
1332 (arguments
1333 (substitute-keyword-arguments (package-arguments python-ndg-httpsclient)
1334 ((#:python _) python-2)))
1b2f753d
LC
1335 (propagated-inputs
1336 `(("python2-pyopenssl" ,python2-pyopenssl)))))
1337
1338(define-public python-websocket-client
1339 (package
1340 (name "python-websocket-client")
354d27e5 1341 (version "0.54.0")
1b2f753d
LC
1342 (source
1343 (origin
1344 (method url-fetch)
1345 (uri (pypi-uri "websocket_client" version))
1346 (sha256
1347 (base32
354d27e5 1348 "0j88zmikaypf38lvpkf4aaxrjp9j07dmy5ghj7kli0fv3p4n45g5"))))
1b2f753d
LC
1349 (build-system python-build-system)
1350 (propagated-inputs
1351 `(("python-six" ,python-six)))
1352 (home-page "https://github.com/liris/websocket-client")
1353 (synopsis "WebSocket client for Python")
1354 (description "The Websocket-client module provides the low level APIs for
1355WebSocket usage in Python programs.")
354d27e5 1356 (properties `((python2-variant . ,(delay python2-websocket-client))))
1b2f753d
LC
1357 (license license:lgpl2.1+)))
1358
1359(define-public python2-websocket-client
354d27e5
EF
1360 (let ((base (package-with-python2
1361 (strip-python2-variant python-websocket-client))))
1362 (package
1363 (inherit base)
1364 (native-inputs
1365 `(("python2-backport-ssl-match-hostname"
1366 ,python2-backport-ssl-match-hostname)
1367 ,@(package-native-inputs base))))))
1b2f753d 1368
589e3f4e
LC
1369(define-public python-requests
1370 (package
1371 (name "python-requests")
05a5bd83 1372 (version "2.22.0")
589e3f4e
LC
1373 (source (origin
1374 (method url-fetch)
1375 (uri (pypi-uri "requests" version))
1376 (sha256
1377 (base32
05a5bd83 1378 "1d5ybh11jr5sm7xp6mz8fyc7vrp4syifds91m7sj60xalal0gq0i"))))
589e3f4e 1379 (build-system python-build-system)
85ef07c4
MB
1380 (propagated-inputs
1381 `(("python-certifi" ,python-certifi)
1382 ("python-chardet" ,python-chardet)
1383 ("python-idna" ,python-idna)
1384 ("python-urllib3" ,python-urllib3)))
589e3f4e
LC
1385 (arguments
1386 ;; FIXME: Some tests require network access.
1387 '(#:tests? #f))
1388 (home-page "http://python-requests.org/")
1389 (synopsis "Python HTTP library")
1390 (description
1391 "Requests is a Python HTTP client library. It aims to be easier to use
1392than Python’s urllib2 library.")
1393 (license license:asl2.0)))
1394
97f0bd7d
JM
1395;; Some software requires an older version of Requests, notably Docker/Docker
1396;; Compose.
1397(define-public python-requests-2.20
1398 (package (inherit python-requests)
1399 (version "2.20.1")
1400 (source (origin
1401 (method url-fetch)
1402 (uri (pypi-uri "requests" version))
1403 (sha256
1404 (base32
1405 "0qzj6cgv3k9wyj7wlxgz7xq0cfg4jbbkfm24pp8dnhczwl31527a"))))
1406 (propagated-inputs
1407 `(("python-urllib3" ,python-urllib3-1.24)
1408 ("python-idna" ,python-idna-2.7)
1409 ,@(package-propagated-inputs python-requests)))))
1410
589e3f4e
LC
1411;; Some software requires an older version of Requests, notably Docker
1412;; Compose.
1413(define-public python-requests-2.7
1414 (package (inherit python-requests)
1415 (version "2.7.0")
1416 (source (origin
1417 (method url-fetch)
1418 (uri (pypi-uri "requests" version))
1419 (sha256
1420 (base32
1421 "0gdr9dxm24amxpbyqpbh3lbwxc2i42hnqv50sigx568qssv3v2ir"))))))
1422
1423(define-public python2-requests
1424 (package-with-python2 python-requests))
1425
1b2f753d
LC
1426(define-public python-requests-mock
1427 (package
1428 (name "python-requests-mock")
1429 (version "1.3.0")
1430 (source
1431 (origin
1432 (method url-fetch)
1433 (uri (pypi-uri "requests-mock" version))
1434 (sha256
1435 (base32
1436 "0jr997dvk6zbmhvbpcv3rajrgag69mcsm1ai3w3rgk2jdh6rg1mx"))))
1437 (build-system python-build-system)
1438 (propagated-inputs
1439 `(("python-requests" ,python-requests)
1440 ("python-six" ,python-six)))
1441 (native-inputs
1442 `(("python-pbr" ,python-pbr)
1443 ("python-discover" ,python-discover)
1444 ("python-docutils" ,python-docutils)
1445 ("python-fixtures" ,python-fixtures)
1446 ("python-mock" ,python-mock)
1447 ("python-sphinx" ,python-sphinx)
1448 ("python-testrepository" ,python-testrepository)
1449 ("python-testtools" ,python-testtools)))
1450 (home-page "https://requests-mock.readthedocs.org/")
1451 (synopsis "Mock out responses from the requests package")
1452 (description
1453 "This module provides a building block to stub out the HTTP requests
1454portions of your testing code.")
1455 (properties `((python2-variant . ,(delay python2-requests-mock))))
1456 (license license:asl2.0)))
1457
1458(define-public python2-requests-mock
1459 (package (inherit (package-with-python2
1460 (strip-python2-variant python-requests-mock)))
1461 (arguments
1462 `(#:python ,python-2
1463 ;; FIXME: 'subunit.run discover: error: no such option: --list'
1464 #:tests? #f))))
1465
1466(define-public python-requests-toolbelt
1467 (package
1468 (name "python-requests-toolbelt")
1469 (version "0.8.0")
1470 (source (origin
1471 (method url-fetch)
1472 (uri (pypi-uri "requests-toolbelt" version))
1473 (sha256
1474 (base32
1475 "1dc7l42i4080r8i4m9fj51jx367lqkai170vrv7wd93gdj9k39gn"))))
1476 (build-system python-build-system)
1477 (native-inputs
1478 `(("python-betamax" ,python-betamax)
1479 ("python-mock" ,python-mock)
1480 ("python-pytest" ,python-pytest)))
1481 (propagated-inputs
1482 `(("python-requests" ,python-requests)))
1483 (synopsis "Extensions to python-requests")
1484 (description "This is a toolbelt of useful classes and functions to be used
1485with python-requests.")
1486 (home-page "https://github.com/sigmavirus24/requests-toolbelt")
1487 (license license:asl2.0)))
1488
1489(define-public python2-requests-toolbelt
1490 (package-with-python2 python-requests-toolbelt))
1491
589e3f4e
LC
1492(define-public python-oauthlib
1493 (package
1494 (name "python-oauthlib")
c8a7cc69 1495 (version "3.0.1")
589e3f4e
LC
1496 (source (origin
1497 (method url-fetch)
1498 (uri (pypi-uri "oauthlib" version))
1499 (sha256
1500 (base32
c8a7cc69 1501 "163jg4a8f7c5ki655grrr47kgljy12wri3qly7ijf64sk1fjrqqc"))))
589e3f4e 1502 (build-system python-build-system)
c8a7cc69
MB
1503 (arguments
1504 `(#:phases (modify-phases %standard-phases
1505 (replace 'check
1506 (lambda _
1507 (invoke "pytest" "-vv"))))))
589e3f4e 1508 (native-inputs
c8a7cc69
MB
1509 `(("python-pytest" ,python-pytest)
1510 ("python-pytest-cov" ,python-pytest-cov)
e7c67f1b
MB
1511 ("python-mock" ,python-mock)))
1512 (propagated-inputs
1513 `(("python-cryptography" ,python-cryptography)
589e3f4e
LC
1514 ("python-pyjwt" ,python-pyjwt)
1515 ("python-blinker" ,python-blinker)))
5f7e3ac0 1516 (home-page "https://github.com/oauthlib/oauthlib")
589e3f4e
LC
1517 (synopsis "OAuth implementation for Python")
1518 (description
1519 "Oauthlib is a generic, spec-compliant, thorough implementation of the
1520OAuth request-signing logic.")
c8a7cc69 1521 (license license:bsd-3)))
589e3f4e
LC
1522
1523(define-public python2-oauthlib
c8a7cc69 1524 (package-with-python2 python-oauthlib))
589e3f4e 1525
1b2f753d
LC
1526(define-public python-rauth
1527 (package
1528 (name "python-rauth")
1529 (version "0.7.3")
1530 (source
1531 (origin
1532 (method url-fetch)
1533 (uri (pypi-uri "rauth" version))
1534 (sha256
1535 (base32
1536 "02kv8w8l98ky223avyq7vw7x1f2ya9chrm59r77ylq45qb0xnk2j"))))
1537 (build-system python-build-system)
1538 (arguments
1539 `(#:test-target "check"))
1540 (propagated-inputs
1541 `(("python-requests" ,python-requests)))
1542 (home-page "https://github.com/litl/rauth")
1543 (synopsis "Python library for OAuth 1.0/a, 2.0, and Ofly")
1544 (description
1545 "Rauth is a Python library for OAuth 1.0/a, 2.0, and Ofly. It also
1546provides service wrappers for convenient connection initialization and
1547authenticated session objects providing things like keep-alive.")
1548 (license license:expat)
1549 (properties `((python2-variant . ,(delay python2-rauth))))))
1550
1551(define-public python2-rauth
1552 (let ((base (package-with-python2 (strip-python2-variant python-rauth))))
1553 (package
1554 (inherit base)
1555 (native-inputs `(("python2-unittest2" ,python2-unittest2)
1556 ,@(package-native-inputs base))))))
1557
1558(define-public python-urllib3
1559 (package
1560 (name "python-urllib3")
b97f4a35 1561 (version "1.25.3")
1b2f753d
LC
1562 (source
1563 (origin
1564 (method url-fetch)
1565 (uri (pypi-uri "urllib3" version))
1566 (sha256
1567 (base32
b97f4a35 1568 "0cij8qcvvpj62g1q8n785qjkdymfh4b7vf45si4sw64l41rr3rfv"))))
1b2f753d
LC
1569 (build-system python-build-system)
1570 (arguments `(#:tests? #f))
1b2f753d
LC
1571 (propagated-inputs
1572 `(;; These 5 inputs are used to build urrlib3[secure]
1573 ("python-certifi" ,python-certifi)
20c5e2f4 1574 ("python-cryptography" ,python-cryptography)
1b2f753d
LC
1575 ("python-idna" ,python-idna)
1576 ("python-ipaddress" ,python-ipaddress)
20c5e2f4
EF
1577 ("python-pyopenssl" ,python-pyopenssl)
1578 ("python-pysocks" ,python-pysocks)))
1579 (home-page "https://urllib3.readthedocs.io/")
1b2f753d
LC
1580 (synopsis "HTTP library with thread-safe connection pooling")
1581 (description
1582 "Urllib3 supports features left out of urllib and urllib2 libraries. It
1583can reuse the same socket connection for multiple requests, it can POST files,
1584supports url redirection and retries, and also gzip and deflate decoding.")
1585 (license license:expat)))
1586
7deb0868
JM
1587;; Some software requires an older version of urllib3, notably Docker.
1588(define-public python-urllib3-1.24
1589 (package (inherit python-urllib3)
1590 (version "1.24.3")
1591 (source (origin
1592 (method url-fetch)
1593 (uri (pypi-uri "urllib3" version))
1594 (sha256
1595 (base32
1596 "1x0slqrv6kixkbcdnxbglvjliwhc1payavxjvk8fvbqjrnasd4r3"))))))
1597
1598
1b2f753d
LC
1599(define-public python2-urllib3
1600 (package-with-python2 python-urllib3))
1601
1602(define-public awscli
1603 (package
e524b577
ES
1604 (name "awscli")
1605 (version "1.18.6")
1606 (source
1607 (origin
1608 (method url-fetch)
1609 (uri (pypi-uri name version))
1610 (sha256
1611 (base32
1612 "0p479mfs9r0m82a217pap8156ijwvhv6r3kqa4k267gd05wgvygm"))))
1613 (build-system python-build-system)
1614 (arguments
1615 ;; FIXME: The 'pypi' release does not contain tests.
1616 '(#:tests? #f
1617 #:phases
1618 (modify-phases %standard-phases
1619 (add-after 'unpack 'fix-reference-to-groff
1620 (lambda _
1621 (substitute* "awscli/help.py"
1622 (("if not self._exists_on_path\\('groff'\\):") "")
1623 (("raise ExecutableNotFoundError\\('groff'\\)") "")
1624 (("cmdline = \\['groff'")
1625 (string-append "cmdline = ['" (which "groff") "'")))
1626 #t)))))
1627 (propagated-inputs
1628 `(("python-colorama" ,python-colorama)
1629 ("python-botocore" ,python-botocore)
1630 ("python-s3transfer" ,python-s3transfer)
1631 ("python-docutils" ,python-docutils)
1632 ("python-pyyaml" ,python-pyyaml)
1633 ("python-rsa" ,python-rsa)))
1634 (native-inputs
1635 `(("groff" ,groff)))
1636 (home-page "https://aws.amazon.com/cli/")
1637 (synopsis "Command line client for AWS")
1638 (description "AWS CLI provides a unified command line interface to the
1b2f753d 1639Amazon Web Services (AWS) API.")
e524b577 1640 (license license:asl2.0)))
1b2f753d
LC
1641
1642(define-public python-wsgiproxy2
1643 (package
1644 (name "python-wsgiproxy2")
8fbccd48 1645 (version "0.4.6")
1b2f753d
LC
1646 (source
1647 (origin
1648 (method url-fetch)
e38a8012 1649 (uri (pypi-uri "WSGIProxy2" version ".tar.gz"))
1b2f753d 1650 (sha256
8fbccd48 1651 (base32 "16jch5nic0hia28lps3c678s9s9mjdq8n87igxncjg0rpi5adqnf"))))
1b2f753d 1652 (build-system python-build-system)
1b2f753d 1653 (native-inputs
e38a8012 1654 `(("python-webtest" ,python-webtest)))
1b2f753d 1655 (propagated-inputs
e38a8012
TGR
1656 `(("python-requests" ,python-requests)
1657 ("python-six" ,python-six)
1658 ("python-urllib3" ,python-urllib3)
1b2f753d 1659 ("python-webob" ,python-webob)))
e38a8012 1660 (home-page "https://github.com/gawel/WSGIProxy2/")
1b2f753d
LC
1661 (synopsis "WSGI Proxy with various http client backends")
1662 (description "WSGI turns HTTP requests into WSGI function calls.
1663WSGIProxy turns WSGI function calls into HTTP requests.
1664It also includes code to sign requests and pass private data,
1665and to spawn subprocesses to handle requests.")
1666 (license license:expat)))
1667
1668(define-public python2-wsgiproxy2
1669 (package-with-python2 python-wsgiproxy2))
1670
1671(define-public python-pastedeploy
1672 (package
1673 (name "python-pastedeploy")
1674 (version "1.5.2")
1675 (source
1676 (origin
1677 (method url-fetch)
1678 (uri (pypi-uri "PasteDeploy" version))
1679 (sha256
1680 (base32
1681 "1jz3m4hq8v6hyhfjz9425nd3nvn52cvbfipdcd72krjmla4qz1fm"))))
1682 (build-system python-build-system)
1683 (native-inputs
1684 `(("python-nose" ,python-nose)))
63b06670 1685 (home-page "https://pylonsproject.org/")
1b2f753d
LC
1686 (synopsis
1687 "Load, configure, and compose WSGI applications and servers")
1688 (description
1689 "This tool provides code to load WSGI applications and servers from URIs;
1690these URIs can refer to Python Eggs for INI-style configuration files. Paste
1691Script provides commands to serve applications based on this configuration
1692file.")
1693 (license license:expat)))
1694
1695(define-public python2-pastedeploy
1696 (package-with-python2 python-pastedeploy))
1697
1698(define-public python-webtest
1699 (package
1700 (name "python-webtest")
0596a7af 1701 (version "2.0.33")
1b2f753d
LC
1702 (source
1703 (origin
1704 (method url-fetch)
1705 (uri (pypi-uri "WebTest" version))
1706 (sha256
1707 (base32
0596a7af 1708 "1l3z0cwqslsf4rcrhi2gr8kdfh74wn2dw76376i4g9i38gz8wd21"))))
1b2f753d
LC
1709 (build-system python-build-system)
1710 (arguments
0596a7af
TGR
1711 ;; Tests require python-pyquery, which creates a circular dependency.
1712 `(#:tests? #f))
1b2f753d
LC
1713 (propagated-inputs
1714 `(("python-waitress" ,python-waitress)
1715 ("python-webob" ,python-webob)
1716 ("python-six" ,python-six)
1717 ("python-beautifulsoup4" ,python-beautifulsoup4)))
63b06670 1718 (home-page "https://docs.pylonsproject.org/projects/webtest/")
1b2f753d
LC
1719 (synopsis "Helper to test WSGI applications")
1720 (description "Webtest allows you to test your Python web applications
1721without starting an HTTP server. It supports anything that supports the
1722minimum of WSGI.")
1723 (license license:expat)))
1724
1725(define-public python2-webtest
1726 (package-with-python2 python-webtest))
1727
1728(define-public python-flask
1729 (package
1730 (name "python-flask")
205eb40e 1731 (version "1.0.3")
1b2f753d
LC
1732 (source (origin
1733 (method url-fetch)
205eb40e 1734 (uri (pypi-uri "Flask" version))
1b2f753d
LC
1735 (sha256
1736 (base32
205eb40e 1737 "1wxnhjlxwwjhjxmghykjhllpahv5pkdc5hln4ab6nab43s26sz5d"))))
1b2f753d 1738 (build-system python-build-system)
47403955
EF
1739 (arguments
1740 '(#:phases
1741 (modify-phases %standard-phases
1742 (replace 'check
1743 (lambda _
1744 (invoke "python" "-m" "pytest"))))))
1745 (native-inputs
1746 `(("python-pytest" ,python-pytest)))
1b2f753d
LC
1747 (propagated-inputs
1748 `(("python-itsdangerous" ,python-itsdangerous)
1749 ("python-jinja2" ,python-jinja2)
1750 ("python-click" ,python-click)
1751 ("python-werkzeug" ,python-werkzeug)))
67eda45b 1752 (home-page "https://www.palletsprojects.com/p/flask/")
1b2f753d
LC
1753 (synopsis "Microframework based on Werkzeug, Jinja2 and good intentions")
1754 (description "Flask is a micro web framework based on the Werkzeug toolkit
1755and Jinja2 template engine. It is called a micro framework because it does not
1756presume or force a developer to use a particular tool or library.")
1757 (license license:bsd-3)))
1758
1759(define-public python2-flask
1760 (package-with-python2 python-flask))
1761
1762(define-public python-flask-wtf
1763 (package
1764 (name "python-flask-wtf")
1765 (version "0.13.1")
1766 (source
1767 (origin
1768 (method url-fetch)
1769 (uri (pypi-uri "Flask-WTF" version))
1770 (sha256
1771 (base32
1772 "04l5743j2dici46038sqlzvf0xzpg8rf7s9ld2x24xv7f4idg990"))))
1773 (build-system python-build-system)
1774 (arguments
1775 '(#:phases
1776 (modify-phases %standard-phases
1777 (add-before 'check 'drop-failing-test
1778 (lambda _
1779 ;; FIXME: This file tries resolving an external server, which
1780 ;; fails. Try to patch out the offending section instead of
1781 ;; deleting the whole thing.
1782 (delete-file "tests/test_recaptcha.py")
1783 #t)))))
1784 (propagated-inputs
1785 `(("python-flask-babel" ,python-flask-babel)
1786 ("python-babel" ,python-babel)
1787 ("python-wtforms" ,python-wtforms)))
1788 (native-inputs
1789 `(("python-nose" ,python-nose)))
1790 (home-page "https://github.com/lepture/flask-wtf")
1791 (synopsis "Simple integration of Flask and WTForms")
1792 (description "Flask-WTF integrates Flask and WTForms, including CSRF, file
1793upload, and reCAPTCHA.")
1794 (license license:bsd-3)))
1795
1796(define-public python2-flask-wtf
1797 (package-with-python2 python-flask-wtf))
1798
1799(define-public python-flask-multistatic
1800 (package
1801 (name "python-flask-multistatic")
1802 (version "1.0")
1803 (source
1804 (origin
1805 (method url-fetch)
1806 (uri (pypi-uri "flask-multistatic" version))
1807 (sha256
1808 (base32
1809 "0p4v50rwv64wcd0zlq7rzl4waprwr4hj19s3cgf1isywa7jcisgm"))))
1810 (build-system python-build-system)
1811 (propagated-inputs
1812 `(("python-flask" ,python-flask)))
1813 (home-page "https://pagure.io/flask-multistatic")
1814 (synopsis "Flask plugin to allow overriding static files")
1815 (description "@code{flask-multistatic} is a flask plugin that adds support
1816for overriding static files.")
1817 (license license:gpl3+)))
1818
1819(define-public python2-flask-multistatic
1820 (package-with-python2 python-flask-multistatic))
1821
1822(define-public python-cookies
1823 (package
1824 (name "python-cookies")
1825 (version "2.2.1")
1826 (source (origin
1827 (method url-fetch)
1828 (uri (pypi-uri "cookies" version))
1829 (sha256
1830 (base32
1831 "13pfndz8vbk4p2a44cfbjsypjarkrall71pgc97glk5fiiw9idnn"))))
1832 (build-system python-build-system)
1833 (arguments
1834 `(;; test are broken: https://gitlab.com/sashahart/cookies/issues/3
1835 #:tests? #f))
1836 (native-inputs
1837 `(("python-pytest" ,python2-pytest)))
1838 (synopsis "HTTP cookie parser and renderer")
1839 (description "A RFC 6265-compliant HTTP cookie parser and renderer in
1840Python.")
1841 (home-page "https://gitlab.com/sashahart/cookies")
1842 (license license:expat)))
1843
1844(define-public python2-cookies
1845 (package-with-python2 python-cookies))
1846
1847(define-public python-responses
1848 (package
1849 (name "python-responses")
ef8c83bd 1850 (version "0.10.6")
1b2f753d
LC
1851 (source (origin
1852 (method url-fetch)
1853 (uri (pypi-uri "responses" version))
1854 (sha256
1855 (base32
ef8c83bd 1856 "147pacwkkqy3qf3hr33fnl1xbzgw0zsm3qppvvy9qhq8h069qbah"))))
1b2f753d
LC
1857 (build-system python-build-system)
1858 (arguments
1859 `(;; Test suite is not distributed:
1860 ;; https://github.com/getsentry/responses/issues/38
1861 #:tests? #f))
1862 (native-inputs
1863 `(("python-mock" ,python-mock)))
1864 (propagated-inputs
1865 `(("python-requests" ,python-requests)
1866 ("python-cookies" ,python-cookies)
1867 ("python-six" ,python-six)))
1868 (home-page "https://github.com/getsentry/responses")
1869 (synopsis "Utility for mocking out the `requests` Python library")
1870 (description "A utility library for mocking out the `requests` Python
1871library.")
1872 (license license:asl2.0)))
1873
1874(define-public python2-responses
1875 (package-with-python2 python-responses))
1876
d08b3258
RW
1877(define-public python-grequests
1878 (package
1879 (name "python-grequests")
1880 (version "0.3.0")
1881 (source
1882 (origin
1883 (method url-fetch)
1884 (uri (pypi-uri "grequests" version))
1885 (sha256
1886 (base32
1887 "1j9icncllbkv7x5719b20mx670c6q1jrdx1sakskkarvx3pc8h8g"))))
1888 (build-system python-build-system)
1889 (propagated-inputs
1890 `(("python-gevent" ,python-gevent)
1891 ("python-requests" ,python-requests)))
1892 (native-inputs
1893 `(("python-nose" ,python-nose)))
1894 (home-page "https://github.com/kennethreitz/grequests")
1895 (synopsis "Python library for asynchronous HTTP requests")
1896 (description "GRequests is a Python library that allows you to use
1897@code{Requests} with @code{Gevent} to make asynchronous HTTP Requests easily")
1898 (license license:bsd-2)))
1899
1b2f753d
LC
1900(define-public python-geventhttpclient
1901 (package
1902 (name "python-geventhttpclient")
1903 (version "1.3.1")
1904 (source (origin
1905 (method url-fetch)
1906 (uri (pypi-uri "geventhttpclient" version))
1907 (sha256
1908 (base32
1909 "07d0q3wzmml75227r6y6mrl5a0zpf4v9gj0ni5rhbyzmaj4az1xx"))
1910 (modules '((guix build utils)))
1911 (snippet
1912 '(begin
1913 ;; Delete pre-compiled files.
1914 (for-each delete-file (find-files "src/geventhttpclient"
1915 ".*\\.pyc"))
1916 #t))))
1917 (build-system python-build-system)
1918 (arguments
1919 '(#:phases
1920 (modify-phases %standard-phases
1921 (add-after 'unpack 'delete-network-tests
1922 (lambda _
1923 (delete-file "src/geventhttpclient/tests/test_client.py")
1924 #t))
1925 (delete 'check)
1926 (add-after 'install 'check
1927 (lambda* (#:key inputs outputs #:allow-other-keys)
1928 (add-installed-pythonpath inputs outputs)
0e02e819
MB
1929 (invoke "py.test" "src/geventhttpclient/tests" "-v"
1930 ;; Append the test modules to sys.path to avoid
1931 ;; namespace conflict which breaks SSL tests.
1932 "--import-mode=append")
12adfdf0 1933 #t)))))
1b2f753d
LC
1934 (native-inputs
1935 `(("python-pytest" ,python-pytest)))
1936 (propagated-inputs
1937 `(("python-certifi" ,python-certifi)
1938 ("python-gevent" ,python-gevent)
1939 ("python-six" ,python-six)))
1940 (home-page "https://github.com/gwik/geventhttpclient")
1941 (synopsis "HTTP client library for gevent")
1942 (description "@code{python-geventhttpclient} is a high performance,
1943concurrent HTTP client library for python using @code{gevent}.")
1944 (license license:expat)))
1945
1946(define-public python2-geventhttpclient
1947 (package-with-python2 python-geventhttpclient))
1948
1949(define-public python-requests-oauthlib
1950 (package
1951 (name "python-requests-oauthlib")
395c142e 1952 (version "1.2.0")
1b2f753d
LC
1953 (source
1954 (origin
1955 (method url-fetch)
1956 (uri (pypi-uri "requests-oauthlib" version))
1957 (sha256
1958 (base32
395c142e 1959 "0mrglgcvq7k48pf27s4gifdk0za8xmgpf55jy15yjj471qrk6rdx"))))
1b2f753d
LC
1960 (build-system python-build-system)
1961 (arguments
1962 `(#:phases
1963 (modify-phases %standard-phases
1964 ;; removes tests that require network access
1965 (add-before 'check 'pre-check
1966 (lambda _
1967 (delete-file "tests/test_core.py")
1968 #t)))))
1969 (native-inputs
6b4a6c20
JL
1970 `(("python-pyjwt" ,python-pyjwt)
1971 ("python-requests-mock" ,python-requests-mock)
1b2f753d
LC
1972 ("python-mock" ,python-mock)))
1973 (propagated-inputs
1974 `(("python-oauthlib" ,python-oauthlib)
1975 ("python-requests" ,python-requests)))
1976 (home-page
1977 "https://github.com/requests/requests-oauthlib")
1978 (synopsis
1979 "OAuthlib authentication support for Requests")
1980 (description
1981 "Requests-OAuthlib uses the Python Requests and OAuthlib libraries to
1982provide an easy-to-use Python interface for building OAuth1 and OAuth2 clients.")
1983 (license license:isc)))
1984
1985(define-public python2-requests-oauthlib
1986 (package-with-python2 python-requests-oauthlib))
1987
1988(define-public python-url
1989 (package
1990 (name "python-url")
1991 (version "0.2.0")
1992 (source (origin
1993 (method url-fetch)
1994 (uri (pypi-uri "url" version))
1995 (sha256
1996 (base32
1997 "0v879yadcz9qxfl41ak6wkga1kimp9cflla9ddz03hjjvgkqy5ki"))))
1998 (build-system python-build-system)
1999 (propagated-inputs
2000 `(("python-publicsuffix" ,python-publicsuffix)))
2001 (native-inputs
2002 `(("python-coverage" ,python-coverage)
2003 ("python-nose" ,python-nose)))
2004 (arguments
2005 `(#:tests? #f)) ; FIXME: tests fail with "ImportError: No module named 'tests'"
2006 (home-page "https://github.com/seomoz/url-py")
2007 (synopsis "URL Parsing")
2008 (description "Library for parsing urls.")
2009 (license license:expat)
2010 (properties `((python2-variant . ,(delay python2-url))))))
2011
2012(define-public python2-url
2013 (let ((base (package-with-python2 (strip-python2-variant python-url))))
2014 (package (inherit base)
2015 (propagated-inputs
2016 `(("python2-publicsuffix" ,python2-publicsuffix))))))
2017
2018(define-public python-cachecontrol
2019 (package
2020 (name "python-cachecontrol")
2015767c 2021 (version "0.12.5")
1b2f753d
LC
2022 (source
2023 (origin
6e00b1ea 2024 (method git-fetch)
1b2f753d 2025 ;; Pypi does not have tests.
6e00b1ea
MB
2026 (uri (git-reference
2027 (url "https://github.com/ionrock/cachecontrol")
2028 (commit (string-append "v" version))))
2029 (file-name (git-file-name name version))
1b2f753d
LC
2030 (sha256
2031 (base32
2015767c 2032 "03lgc65sl04n0cgzmmgg99bk83f9i6k8yrmcd4hpl46q1pymn0kz"))))
1b2f753d
LC
2033 (build-system python-build-system)
2034 (arguments
2015767c
TLC
2035 ;; Versions > 0.11.6 depend on CherryPy for testing.
2036 ;; It's too much work to package CherryPy for now.
2037 `(#:tests? #f))
1b2f753d
LC
2038 (propagated-inputs
2039 `(("python-requests" ,python-requests)
2040 ("python-lockfile" ,python-lockfile)))
2041 (home-page "https://github.com/ionrock/cachecontrol")
2042 (synopsis "The httplib2 caching algorithms for use with requests")
2043 (description "CacheControl is a port of the caching algorithms in
2044@code{httplib2} for use with @code{requests} session objects.")
2045 (license license:asl2.0)))
2046
2047(define-public python2-cachecontrol
2048 (package-with-python2 python-cachecontrol))
2049
2050(define-public python-betamax
2051 (package
2052 (name "python-betamax")
98516883 2053 (version "0.8.1")
1b2f753d
LC
2054 (source
2055 (origin
2056 (method url-fetch)
2057 (uri (pypi-uri "betamax" version))
2058 (sha256
2059 (base32
98516883 2060 "1hki1c2vs7adq7zr56wi6i5bhrkia4s2ywpv2c98ibnczz709w2v"))))
1b2f753d
LC
2061 (build-system python-build-system)
2062 (arguments
2063 '(;; Many tests fail because they require networking.
2064 #:tests? #f))
2065 (propagated-inputs
2066 `(("python-requests" ,python-requests)))
2067 (home-page "https://github.com/sigmavirus24/betamax")
2068 (synopsis "Record HTTP interactions with python-requests")
2069 (description "Betamax will record your test suite's HTTP interactions and
2070replay them during future tests. It is designed to work with python-requests.")
2071 (license license:expat)))
2072
2073(define-public python2-betamax
2074 (package-with-python2 python-betamax))
2075
2076(define-public python-betamax-matchers
2077 (package
2078 (name "python-betamax-matchers")
2079 (version "0.4.0")
2080 (source
2081 (origin
2082 (method url-fetch)
2083 (uri (pypi-uri "betamax-matchers" version))
2084 (sha256
2085 (base32
2086 "07qpwjyq2i2aqhz5iwghnj4pqr2ys5n45v1vmpcfx9r5mhwrsq43"))))
2087 (build-system python-build-system)
2088 (propagated-inputs
2089 `(("python-betamax" ,python-betamax)
2090 ("python-requests-toolbelt" ,python-requests-toolbelt)))
2091 (home-page "https://github.com/sigmavirus24/betamax_matchers")
2092 (synopsis "VCR imitation for python-requests")
2093 (description "@code{betamax-matchers} provides a set of Matchers for
2094Betamax.")
2095 (license license:asl2.0)))
2096
2097(define-public python2-betamax-matchers
2098 (package-with-python2 python-betamax-matchers))
2099
2100(define-public python-s3transfer
2101 (package
2102 (name "python-s3transfer")
5d367537 2103 (version "0.2.0")
1b2f753d
LC
2104 (source (origin
2105 (method url-fetch)
2106 (uri (pypi-uri "s3transfer" version))
2107 (sha256
2108 (base32
5d367537 2109 "08fhj73b1ai52hrs2q3nggshq3pswn1gq8ch3m009cb2v2vmqggj"))))
1b2f753d
LC
2110 (build-system python-build-system)
2111 (arguments
2112 `(#:phases
2113 (modify-phases %standard-phases
2114 (replace 'check
2115 (lambda _
5d367537
RW
2116 ;; Some of the 'integration' tests require network access or
2117 ;; login credentials.
12adfdf0
TGR
2118 (invoke "nosetests" "--exclude=integration")
2119 #t)))))
1b2f753d
LC
2120 (native-inputs
2121 `(("python-docutils" ,python-docutils)
2122 ("python-mock" ,python-mock)
2123 ("python-nose" ,python-nose)))
2124 (propagated-inputs
5d367537
RW
2125 `(("python-botocore" ,python-botocore)
2126 ("python-urllib3" ,python-urllib3)))
1b2f753d
LC
2127 (synopsis "Amazon S3 Transfer Manager")
2128 (description "S3transfer is a Python library for managing Amazon S3
2129transfers.")
2130 (home-page "https://github.com/boto/s3transfer")
2131 (license license:asl2.0)
2132 (properties `((python2-variant . ,(delay python2-s3transfer))))))
2133
2134(define-public python2-s3transfer
2135 (let ((base (package-with-python2 (strip-python2-variant python-s3transfer))))
2136 (package
2137 (inherit base)
2138 (native-inputs
2139 `(("python2-futures" ,python2-futures)
2140 ,@(package-native-inputs base))))))
2141
9c98d588
CB
2142(define-public python-slimit
2143 (package
2144 (name "python-slimit")
2145 (version "0.8.1")
2146 (source
2147 (origin
2148 (method url-fetch)
2149 (uri (pypi-uri "slimit" version ".zip"))
2150 (sha256
2151 (base32
2152 "02vj2x728rs1127q2nc27frrqra4fczivnb7gch6n5lzi7pxqczl"))))
2153 (build-system python-build-system)
2154 (native-inputs
2155 `(("unzip" ,unzip)))
2156 (propagated-inputs
2157 `(("python-ply" ,python-ply)))
2158 (home-page "https://slimit.readthedocs.io/")
2159 (synopsis "JavaScript minifier, parser and lexer written in Python")
2160 (description
2161 "SlimIt is a JavaScript minifier written in Python. It compiles
2162JavaScript into more compact code so that it downloads and runs faster.
2163SlimIt also provides a library that includes a JavaScript parser, lexer,
2164pretty printer and a tree visitor.")
2165 (license license:expat)))
2166
1b2f753d
LC
2167(define-public python-flask-restful
2168 (package
2169 (name "python-flask-restful")
4f8be6d9 2170 (version "0.3.7")
1b2f753d
LC
2171 (source
2172 (origin
2173 (method url-fetch)
2174 (uri (pypi-uri "Flask-RESTful" version))
2175 (sha256
4f8be6d9
EF
2176 (base32
2177 "1a9cbwkr6krryyzq4sd3f415nkkc6dyfls5i3pgyibs94g0hw97q"))))
1b2f753d
LC
2178 (build-system python-build-system)
2179 (propagated-inputs
2180 `(("python-aniso8601" ,python-aniso8601)
2181 ("python-flask" ,python-flask)
2182 ("python-pycrypto" ,python-pycrypto)
2183 ("python-pytz" ,python-pytz)))
2184 (native-inputs
2185 `(;; Optional dependency of Flask. Tests need it.
2186 ("python-blinker" ,python-blinker)
2187 ("python-mock" ,python-mock) ; For tests
2188 ("python-nose" ,python-nose) ; For tests
2189 ("python-sphinx" ,python-sphinx)))
2190 (home-page
2191 "https://www.github.com/flask-restful/flask-restful/")
2192 (synopsis
2193 "Flask module for creating REST APIs")
2194 (description
2195 "This package contains a Flask module for creating REST APIs.")
2196 (license license:bsd-3)))
2197
2198(define-public python-flask-basicauth
2199 (package
2200 (name "python-flask-basicauth")
2201 (version "0.2.0")
2202 (source
2203 (origin
2204 (method url-fetch)
2205 (uri (pypi-uri "Flask-BasicAuth" version))
2206 (sha256
2207 (base32
2208 "1zq1spkjr4sjdnalpp8wl242kdqyk6fhbnhr8hi4r4f0km4bspnz"))))
2209 (build-system python-build-system)
2210 (propagated-inputs
2211 `(("python-flask" ,python-flask)))
2212 (home-page
2213 "https://github.com/jpvanhal/flask-basicauth")
2214 (synopsis
2215 "HTTP basic access authentication for Flask")
2216 (description
2217 "This package provides HTTP basic access authentication for Flask.")
2218 (license license:bsd-3)))
2219
d1b103e1
DM
2220(define-public python-flask-htpasswd
2221 (package
2222 (name "python-flask-htpasswd")
2223 (version "0.3.1")
2224 (source
2225 (origin
2226 (method url-fetch)
2227 (uri (pypi-uri "flask-htpasswd" version))
2228 (sha256
2229 (base32
2230 "14q1y1y9i9bhabdnwd25jqzc4ljli23smxfyyh8abxz1vq93pxra"))))
2231 (build-system python-build-system)
2232 (propagated-inputs
2233 `(("python-flask" ,python-flask)
2234 ("python-itsdangerous" ,python-itsdangerous)
2235 ("python-passlib" ,python-passlib)
2236 ("python-tox" ,python-tox)))
2237 (home-page "http://github.com/carsongee/flask-htpasswd")
2238 (synopsis "Basic authentication via htpasswd files in Flask applications")
2239 (description "This package provides Basic authentication via
2240@file{htpasswd} files and access_token authentication in Flask
2241applications.")
2242 (license license:bsd-3)))
2243
1b2f753d
LC
2244(define-public python-flask-sqlalchemy
2245 (package
2246 (name "python-flask-sqlalchemy")
aa6d7de6
MB
2247 (version "2.4.0")
2248 (source (origin
2249 (method url-fetch)
2250 (uri (pypi-uri "Flask-SQLAlchemy" version))
2251 (sha256
2252 (base32
2253 "0nnllf0ddbh9jlhngnyjj98lbxgxr1csaplllx0caw98syq0k5hc"))))
1b2f753d
LC
2254 (build-system python-build-system)
2255 (propagated-inputs
2256 `(("python-flask" ,python-flask)
2257 ("python-sqlalchemy" ,python-sqlalchemy)))
aa6d7de6
MB
2258 (home-page "https://github.com/mitsuhiko/flask-sqlalchemy")
2259 (synopsis "Module adding SQLAlchemy support to your Flask application")
1b2f753d 2260 (description
aa6d7de6 2261 "This package adds SQLAlchemy support to your Flask application.")
1b2f753d
LC
2262 (license license:bsd-3)))
2263
2264(define-public python-flask-restplus
2265 (package
2266 (name "python-flask-restplus")
2267 (version "0.9.2")
2268 (source
2269 (origin
2270 (method url-fetch)
2271 (uri (pypi-uri "flask-restplus" version))
2272 (sha256
2273 (base32
2274 "11his6ii5brpkhld0d5bwzjjw4q3vmplpd6fmgzjrvvklsbk0cf4"))))
2275 (build-system python-build-system)
2276 (arguments
2277 '(#:tests? #f)) ; FIXME: 35/882 tests failing.
2278 ;; #:phases
2279 ;; (modify-phases %standard-phases
2280 ;; (replace 'check
2281 ;; (lambda _
12adfdf0
TGR
2282 ;; (invoke "nosetests")
2283 ;; #t)))))
1b2f753d
LC
2284 (propagated-inputs
2285 `(("python-aniso8601" ,python-aniso8601)
2286 ("python-flask" ,python-flask)
2287 ("python-jsonschema" ,python-jsonschema)
2288 ("python-pytz" ,python-pytz)
2289 ("python-six" ,python-six)))
2290 (native-inputs
2291 `(("python-tzlocal" ,python-tzlocal)
2292 ("python-blinker" ,python-blinker)
2293 ("python-nose" ,python-nose)
2294 ("python-rednose" ,python-rednose)))
2295 (home-page "https://github.com/noirbizarre/flask-restplus")
2296 (synopsis "Framework for documented API development with Flask")
2297 (description "This package provides a framework for API development with
2298the Flask web framework in Python. It is similar to package
2299@code{python-flask-restful} but supports the @code{python-swagger}
2300documentation builder.")
2301 (license license:expat)))
2302
2303(define-public python-flask-restful-swagger
2304 (package
2305 (name "python-flask-restful-swagger")
2306 (version "0.19")
2307 (source
2308 (origin
2309 (method url-fetch)
2310 (uri (pypi-uri "flask-restful-swagger" version))
2311 (sha256
2312 (base32
2313 "16msl8hd5xjmj833bpy264v98cpl5hkw5bgl5gf5vgndxbv3rm6v"))))
2314 (build-system python-build-system)
2315 (propagated-inputs
2316 `(("python-flask-restful" ,python-flask-restful)))
2317 (home-page "https://github.com/rantav/flask-restful-swagger")
2318 (synopsis "Extract Swagger specs from Flask-Restful projects")
2319 (description "This package lets you extract Swagger API documentation
2320specs from your Flask-Restful projects.")
2321 (license license:expat)))
2322
2323(define-public python2-flask-restful-swagger
2324 (package-with-python2 python-flask-restful-swagger))
2325
2326(define-public python-htmlmin
2327 (package
2328 (name "python-htmlmin")
05075433 2329 (version "0.1.12")
1b2f753d
LC
2330 (source
2331 (origin
2332 (method url-fetch)
2333 (uri (pypi-uri "htmlmin" version))
2334 (sha256
2335 (base32
05075433 2336 "0y51xhabw6x8jk8k93xl8vznshpz3jb6l28075r5sjip613fzhah"))))
1b2f753d 2337 (arguments
05075433 2338 `(#:tests? #f)) ; no tests
1b2f753d
LC
2339 (build-system python-build-system)
2340 (home-page "https://htmlmin.readthedocs.org/en/latest/")
2341 (synopsis "HTML minifier")
2342 (description "@code{htmlmin} is an HTML minifier that just works.
2343It comes with safe defaults and easily configurable options.")
2344 (license license:bsd-3)))
2345
2346(define-public python2-htmlmin
2347 (package-with-python2 python-htmlmin))
2348
2349(define-public python-flask-htmlmin
2350 (package
2351 (name "python-flask-htmlmin")
2352 (version "1.2")
2353 (source
2354 (origin
2355 (method url-fetch)
2356 (uri (pypi-uri "Flask-HTMLmin" version))
2357 (sha256
2358 (base32
2359 "1n6zlq72kakkw0z2jpq6nh74lfsmxybm4g053pwhc14fbr809348"))))
2360 (propagated-inputs
2361 `(("python-flask" ,python-flask)
2362 ("python-htmlmin" ,python-htmlmin)))
2363 (build-system python-build-system)
2364 (home-page "https://github.com/hamidfzm/Flask-HTMLmin")
2365 (synopsis "HTML response minifier for Flask")
2366 (description
2367 "Minify @code{text/html} MIME type responses when using @code{Flask}.")
2368 (license license:bsd-3)))
2369
2370(define-public python2-flask-htmlmin
2371 (package-with-python2 python-flask-htmlmin))
2372
90b9c5ad
CB
2373(define-public python-jsmin
2374 (package
2375 (name "python-jsmin")
2376 (version "2.2.2")
2377 (source
2378 (origin
2379 (method url-fetch)
2380 (uri (pypi-uri "jsmin" version))
2381 (sha256
2382 (base32
2383 "0fsmqbjvpxvff0984x7c0y8xmf49ax9mncz48b9xjx8wrnr9kpxn"))))
2384 (build-system python-build-system)
2385 (home-page "https://github.com/tikitu/jsmin/")
2386 (synopsis "Python JavaScript minifier")
2387 (description
2388 "@code{jsmin} is a JavaScript minifier, usable from both Python code and
2389on the command line.")
2390 (license license:expat)))
2391
1b2f753d
LC
2392(define-public python-flask-login
2393 (package
2394 (name "python-flask-login")
d6ab1d0a 2395 (version "0.4.1")
1b2f753d
LC
2396 (source
2397 (origin
79374801
TGR
2398 (method git-fetch)
2399 (uri (git-reference
2400 (url "https://github.com/maxcountryman/flask-login.git")
2401 (commit version)))
2402 (file-name (git-file-name name version))
1b2f753d 2403 (sha256
d6ab1d0a 2404 (base32 "1rj0qwyxapxnp84fi4lhmvh3d91fdiwz7hibw77x3d5i72knqaa9"))))
1b2f753d 2405 (arguments
d6ab1d0a
TGR
2406 `(#:phases
2407 (modify-phases %standard-phases
2408 (add-before 'check 'avoid-yanc
2409 ;; Work around '.nosetests-real: error: no such option: --with-yanc'.
2410 (lambda _
2411 (setenv "NOCOLOR" "set")
2412 #t)))))
1b2f753d 2413 (build-system python-build-system)
d6ab1d0a
TGR
2414 (propagated-inputs
2415 `(("python-flask" ,python-flask)))
2416 (native-inputs
2417 ;; For tests.
2418 `(("python-blinker" ,python-blinker)
2419 ("python-mock" ,python-mock)
2420 ("python-nose" ,python-nose)
2421 ("python-pep8" ,python-pep8)
2422 ("python-pyflakes" ,python-pyflakes)
2423 ("python-semantic-version" ,python-semantic-version)
2424 ("python-werkzeug" ,python-werkzeug)))
1b2f753d
LC
2425 (home-page "https://github.com/maxcountryman/flask-login")
2426 (synopsis "User session management for Flask")
2427 (description
2428 "@code{Flask-Login} provides user session management for Flask. It
2429handles the common tasks of logging in, logging out, and remembering your
2430users' sessions over extended periods of time.")
2431 (license license:expat)))
2432
2433(define-public python2-flask-login
2434 (package-with-python2 python-flask-login))
2435
2436(define-public python-oauth2client
2437 (package
2438 (name "python-oauth2client")
2439 (version "4.0.0")
2440 (source
2441 (origin
2442 (method url-fetch)
2443 (uri (pypi-uri "oauth2client" version))
2444 (sha256
2445 (base32
2446 "1irqqap2zibysf8dba8sklfqikia579srd0phm5n754ni0h59gl0"))))
2447 (build-system python-build-system)
2448 (arguments
2449 `(#:tests? #f))
2450 (propagated-inputs
2451 `(("python-httplib2" ,python-httplib2)
2452 ("python-pyasn1" ,python-pyasn1)
2453 ("python-pyasn1-modules" ,python-pyasn1-modules)
2454 ("python-rsa" ,python-rsa)
2455 ("python-six" ,python-six)))
9be5ecdf 2456 (home-page "https://github.com/google/oauth2client/")
1b2f753d
LC
2457 (synopsis "OAuth 2.0 client library")
2458 (description "@code{python-oauth2client} provides an OAuth 2.0 client
2459library for Python")
2460 (license license:asl2.0)))
2461
1ceca46b
MO
2462(define-public python2-oauth2client
2463 (package-with-python2 python-oauth2client))
2464
1b2f753d
LC
2465(define-public python-flask-oidc
2466 (package
2467 (name "python-flask-oidc")
2468 (version "1.1.1")
2469 (source
2470 (origin
2471 (method url-fetch)
2472 (uri (pypi-uri "flask-oidc" version))
2473 (sha256
2474 (base32
2475 "1ay5j0mf174bix7i67hclr95gv16z81fpx0dijvi0gydvdj3ddy2"))))
2476 (build-system python-build-system)
2477 (propagated-inputs
2478 `(("python-flask" ,python-flask)
2479 ("python-itsdangerous" ,python-itsdangerous)
2480 ("python-oauth2client" ,python-oauth2client)
2481 ("python-six" ,python-six)))
2482 (native-inputs
2483 `(("python-nose" ,python-nose)
2484 ("python-mock" ,python-mock)))
2485 (home-page "https://github.com/puiterwijk/flask-oidc")
2486 (synopsis "OpenID Connect extension for Flask")
2487 (description "@code{python-flask-oidc} provides an OpenID Connect extension
2488for Flask.")
2489 (license license:bsd-2)))
2490
2491(define-public python-webassets
2492 (package
2493 (name "python-webassets")
2494 (version "0.12.1")
2495 (source
2496 (origin
2497 (method url-fetch)
2498 (uri (pypi-uri "webassets" version))
2499 (sha256
2500 (base32
2501 "1nrqkpb7z46h2b77xafxihqv3322cwqv6293ngaky4j3ff4cing7"))))
2502 (build-system python-build-system)
2503 (native-inputs
2504 `(("python-jinja2" ,python-jinja2)
2505 ("python-mock" ,python-mock)
2506 ("python-nose" ,python-nose)
2507 ("python-pytest" ,python-pytest)))
2508 (home-page "https://github.com/miracle2k/webassets")
2509 (synopsis "Media asset management")
2510 (description "Merges, minifies and compresses Javascript and CSS files,
2511supporting a variety of different filters, including YUI, jsmin, jspacker or
2512CSS tidy. Also supports URL rewriting in CSS files.")
2513 (license license:bsd-2)))
2514
2515(define-public python-cssmin
2516 (package
2517 (name "python-cssmin")
2518 (version "0.2.0")
2519 (source
2520 (origin
2521 (method url-fetch)
2522 (uri (pypi-uri "cssmin" version))
2523 (sha256
2524 (base32
2525 "1dk723nfm2yf8cp4pj785giqlwv42l0kj8rk40kczvq1hk6g04p0"))))
2526 (build-system python-build-system)
2527 (home-page "https://github.com/zacharyvoase/cssmin")
2528 (synopsis "Python port of the YUI CSS Compressor")
2529 (description "Python port of the YUI CSS Compressor.")
2530 (license (list license:expat license:bsd-3))))
2531
2532(define-public python2-cssmin
2533 (package-with-python2 python-cssmin))
2534
2535(define-public python-elasticsearch
2536 (package
2537 (name "python-elasticsearch")
3e313792 2538 (version "7.1.0")
1b2f753d
LC
2539 (source
2540 (origin
2541 (method url-fetch)
2542 (uri (pypi-uri "elasticsearch" version))
2543 (sha256
2544 (base32
3e313792 2545 "0rnjvlhw4v3vg14l519qliy1s1zpmx3827q0xfviwvk42rr7hh01"))))
1b2f753d
LC
2546 (build-system python-build-system)
2547 (native-inputs
2548 `(("python-mock" ,python-mock)
2549 ("python-nosexcover" ,python-nosexcover)
2550 ("python-pyaml" ,python-pyaml)
2551 ("python-requests" ,python-requests)))
2552 (propagated-inputs
2553 `(("urllib3" ,python-urllib3)))
2554 (arguments
2555 ;; tests require the test_elasticsearch module but it is not distributed.
2556 `(#:tests? #f))
2557 (home-page "https://github.com/elastic/elasticsearch-py")
2558 (synopsis "Low-level client for Elasticsearch")
2559 (description "Official low-level client for Elasticsearch. Its goal is to
2560provide common ground for all Elasticsearch-related code in Python; because of
2561this it tries to be opinion-free and very extendable.")
2562 (license license:expat)))
2563
2564(define-public python2-elasticsearch
2565 (package-with-python2 python-elasticsearch))
2566
2567(define-public python-flask-script
2568 (package
2569 (name "python-flask-script")
6a192184 2570 (version "2.0.6")
1b2f753d
LC
2571 (source
2572 (origin
2573 (method url-fetch)
2574 (uri (pypi-uri "Flask-Script" version))
2575 (sha256
2576 (base32
6a192184 2577 "0r8w2v89nj6b9p91p495cga5m72a673l2wc0hp0zqk05j4yrc9b4"))))
1b2f753d 2578 (build-system python-build-system)
c8535731
DM
2579 (arguments
2580 `(#:phases
2581 (modify-phases %standard-phases
2582 (add-after 'unpack 'patch-tests
2583 (lambda _
2584 (substitute* "tests.py"
2585 (("flask\\.ext\\.script") "flask_script"))
2586 #t)))))
1b2f753d
LC
2587 (propagated-inputs
2588 `(("python-flask" ,python-flask)
2589 ("python-argcomplete" ,python-argcomplete)
2590 ("python-werkzeug" ,python-werkzeug)))
2591 (native-inputs
2592 `(("python-pytest" ,python-pytest)))
2593 (home-page
9be5ecdf 2594 "https://github.com/smurfix/flask-script")
1b2f753d
LC
2595 (synopsis "Scripting support for Flask")
2596 (description "The Flask-Script extension provides support for writing
2597external scripts in Flask. This includes running a development server,
2598a customised Python shell, scripts to set up your database, cronjobs,
2599and other command-line tasks that belong outside the web application
2600itself.")
2601 (license license:bsd-3)))
2602
2603(define-public python2-flask-script
2604 (package-with-python2 python-flask-script))
2605
2606(define-public python-flask-migrate
2607 (package
2608 (name "python-flask-migrate")
2609 (version "2.0.3")
2610 (source
2611 (origin
2612 (method url-fetch)
2613 (uri (pypi-uri "Flask-Migrate" version))
2614 (sha256
2615 (base32
2616 "107x78lkqsnbg92dld3dkagg07jvchp3ib3y0sivc4ipz6n1y7rk"))))
2617 (build-system python-build-system)
2618 (propagated-inputs
2619 `(("python-flask" ,python-flask)
2620 ("python-alembic" ,python-alembic)
2621 ("python-sqlalchemy" ,python-sqlalchemy)
2622 ("python-flask-script" ,python-flask-script)
2623 ("python-flask-sqlalchemy" ,python-flask-sqlalchemy)))
9be5ecdf 2624 (home-page "https://github.com/miguelgrinberg/flask-migrate/")
1b2f753d
LC
2625 (synopsis "SQLAlchemy database migrations for Flask programs using
2626Alembic")
2627 (description "This package contains SQLAlchemy database migration tools
2628for Flask programs that are using @code{python-alembic}.")
2629 (license license:expat)))
2630
2631(define-public python2-flask-migrate
2632 (package-with-python2 python-flask-migrate))
2633
2634(define-public python-genshi
2635 (package
2636 (name "python-genshi")
837b3c5d 2637 (version "0.7.2")
1b2f753d
LC
2638 (source
2639 (origin
7c8b1bf6
TGR
2640 (method git-fetch)
2641 (uri (git-reference
2642 (url "https://github.com/edgewall/genshi.git")
2643 (commit version)))
2644 (file-name (git-file-name name version))
1b2f753d 2645 (sha256
837b3c5d 2646 (base32 "06rch30x10l105k5b6rahd839lkhmgrzn6691wbci0cb2fzps32w"))))
1b2f753d
LC
2647 (build-system python-build-system)
2648 (home-page "https://genshi.edgewall.org/")
2649 (synopsis "Toolkit for generation of output for the web")
2650 (description "Genshi is a Python library that provides an integrated set
2651of components for parsing, generating, and processing HTML, XML or other
2652textual content for output generation on the web.")
2653 (license license:bsd-3)))
2654
1b2f753d
LC
2655(define-public python2-genshi
2656 (package-with-python2 python-genshi))
2657
2658(define-public python-flask-principal
2659 (package
2660 (name "python-flask-principal")
2661 (version "0.4.0")
2662 (source
2663 (origin
2664 (method url-fetch)
2665 (uri (pypi-uri "Flask-Principal" version))
2666 (sha256
2667 (base32
2668 "0lwlr5smz8vfm5h9a9i7da3q1c24xqc6vm9jdywdpgxfbi5i7mpm"))))
2669 (build-system python-build-system)
2670 (propagated-inputs
2671 `(("python-blinker" ,python-blinker)))
2672 (native-inputs
2673 `(("python-flask" ,python-flask)
2674 ("python-nose" ,python-nose)))
02510c6c 2675 (home-page "https://pythonhosted.org/Flask-Principal/")
1b2f753d
LC
2676 (synopsis "Identity management for Flask")
2677 (description "@code{flask_principal} is a identity management library for
2678Flask. It supports managing both authentication and authorization data in a
2679thread-local variable.")
2680 (license license:expat)))
2681
2682(define-public python2-flask-principal
2683 (package-with-python2 python-flask-principal))
2684
2685(define-public python-flask-httpauth
2686 (package
2687 (name "python-flask-httpauth")
2688 (version "3.2.3")
2689 (source
2690 (origin
2691 (method url-fetch)
2692 (uri (pypi-uri "Flask-HTTPAuth" version))
2693 (sha256
2694 (base32
2695 "13gff5w1mqpzm5nccyg02v3ifb9ifqh5k866cssjhghhg6msfjsz"))))
2696 (build-system python-build-system)
2697 (native-inputs
2698 `(("python-flask" ,python-flask)))
9be5ecdf 2699 (home-page "https://github.com/miguelgrinberg/flask-httpauth/")
1b2f753d
LC
2700 (synopsis "Basic and Digest HTTP authentication for Flask routes")
2701 (description "@code{flask_httpauth} provides Basic and Digest HTTP
2702authentication for Flask routes.")
2703 (license license:expat)))
2704
2705(define-public python2-flask-httpauth
2706 (package-with-python2 python-flask-httpauth))
2707
2708(define-public python-uritemplate
2709 (package
2710 (name "python-uritemplate")
2711 (version "3.0.0")
2712 (source
2713 (origin
2714 (method url-fetch)
2715 (uri (pypi-uri "uritemplate" version))
2716 (sha256
2717 (base32
2718 "0781gm9g34wa0asc19dx81ng0nqq07igzv3bbvdqmz13pv7469n0"))))
2719 (build-system python-build-system)
2720 (home-page "https://uritemplate.readthedocs.org")
2721 (synopsis "Library to deal with URI Templates")
2722 (description "@code{uritemplate} provides Python library to deal with URI
2723Templates.")
2724 (license license:bsd-2)))
2725
2726(define-public python2-uritemplate
2727 (package-with-python2 python-uritemplate))
2728
589e3f4e
LC
2729(define-public python-publicsuffix
2730 (package
2731 (name "python-publicsuffix")
2732 (version "1.1.0")
2733 (source (origin
2734 (method url-fetch)
2735 (uri (pypi-uri "publicsuffix" version))
2736 (sha256
2737 (base32
2738 "1adx520249z2cy7ykwjr1k190mn2888wqn9jf8qm27ly4qymjxxf"))))
2739 (build-system python-build-system)
2740 (arguments
2741 `(#:tests? #f)) ; tests use the internet
2742 (home-page "https://www.tablix.org/~avian/git/publicsuffix.git")
2743 (synopsis "Get suffix for a domain name")
2744 (description "Get a public suffix for a domain name using the Public Suffix
2745List.")
2746 (license license:expat)))
2747
2748(define-public python2-publicsuffix
2749 (package-with-python2 python-publicsuffix))
2750
2751(define-public python-publicsuffix2
2752 (package
2753 (name "python-publicsuffix2")
df01360f 2754 (version "2.20191221")
589e3f4e
LC
2755 (source
2756 (origin
2757 (method url-fetch)
df01360f 2758 (uri (pypi-uri "publicsuffix2" version))
589e3f4e 2759 (sha256
df01360f 2760 (base32 "0yzysvfj1najr1mb4pcqrbmjir3xpb69rlffln95a3cdm8qwry00"))))
589e3f4e
LC
2761 (build-system python-build-system)
2762 (arguments
df01360f
TGR
2763 '(#:phases
2764 (modify-phases %standard-phases
2765 (add-after 'unpack 'ignore-maintainer-inputs
2766 (lambda _
2767 ;; Comment out a demand for python-requests, which is used only by
2768 ;; the unused ‘update_psl’ helper command.
2769 (substitute* "setup.py"
2770 (("'requests " match)
2771 (format "# ~a" match)))
2772 #t)))
2773 #:tests? #f)) ; the test suite requires network access
589e3f4e
LC
2774 (home-page "https://github.com/pombredanne/python-publicsuffix2")
2775 (synopsis "Get a public suffix for a domain name using the Public Suffix List")
2776 (description "Get a public suffix for a domain name using the Public Suffix
2777List. Forked from and using the same API as the publicsuffix package.")
2778 (license (list license:expat license:mpl2.0))))
2779
2780(define-public python2-publicsuffix2
2781 (package-with-python2 python-publicsuffix2))
98c6a025
RW
2782
2783(define-public python-werkzeug
2784 (package
2785 (name "python-werkzeug")
c5e110ce 2786 (version "0.14.1")
98c6a025
RW
2787 (source
2788 (origin
2789 (method url-fetch)
c5e110ce 2790 (uri (pypi-uri "werkzeug" version))
98c6a025
RW
2791 (sha256
2792 (base32
c5e110ce 2793 "0z2m4snn1vc9518r2vzgdj1nc90kcgi60wijvd29yvcp85ypmzf3"))))
98c6a025 2794 (build-system python-build-system)
c5e110ce
EF
2795 (arguments
2796 '(#:phases
2797 (modify-phases %standard-phases
2798 (delete 'check)
2799 (add-after 'install 'check
2800 (lambda* (#:key inputs outputs #:allow-other-keys)
2801 (add-installed-pythonpath inputs outputs)
2802 (invoke "python" "-m" "pytest"))))))
2803 (propagated-inputs
2804 `(("python-requests" ,python-requests)))
98c6a025
RW
2805 (native-inputs
2806 `(("python-pytest" ,python-pytest)))
c5e110ce 2807 (home-page "https://www.palletsprojects.org/p/werkzeug/")
98c6a025
RW
2808 (synopsis "Utilities for WSGI applications")
2809 (description "One of the most advanced WSGI utility modules. It includes a
2810powerful debugger, full-featured request and response objects, HTTP utilities to
2811handle entity tags, cache control headers, HTTP dates, cookie handling, file
2812uploads, a powerful URL routing system and a bunch of community-contributed
2813addon modules.")
2814 (license license:x11)))
2815
2816(define-public python2-werkzeug
2817 (package-with-python2 python-werkzeug))
2818
2819(define-public python-bottle
2820 (package
2821 (name "python-bottle")
2822 (version "0.12.13")
2823 (source
2824 (origin
2825 (method url-fetch)
2826 (uri (pypi-uri "bottle" version))
2827 (sha256
2828 (base32
2829 "0m9k2a7yxvggc4kw8fsvj381vgsvfcdshg5nzy6vwrxiw2p53drr"))))
2830 (build-system python-build-system)
2831 (home-page "http://bottlepy.org/")
2832 (synopsis "WSGI framework for small web-applications.")
2833 (description "@code{python-bottle} is a WSGI framework for small web-applications.")
2834 (license license:expat)))
2835
2836(define-public python2-bottle
2837 (package-with-python2 python-bottle))
2838
2839(define-public python-wtforms
2840 (package
2841 (name "python-wtforms")
2842 (version "2.1")
2843 (source
2844 (origin
2845 (method url-fetch)
2846 (uri (pypi-uri "WTForms" version ".zip"))
2847 (sha256
2848 (base32
2849 "0vyl26y9cg409cfyj8rhqxazsdnd0jipgjw06civhrd53yyi1pzz"))))
2850 (build-system python-build-system)
2851 (arguments
2852 '(#:phases
2853 (modify-phases %standard-phases
2854 (add-after 'unpack 'remove-django-test
2855 ;; Don't fail the tests when the inputs for the optional tests cannot be found.
2856 (lambda _
2857 (substitute*
2858 "tests/runtests.py"
2859 (("'ext_django.tests', 'ext_sqlalchemy', 'ext_dateutil', 'locale_babel'") "")
2860 (("sys.stderr.write(\"### Disabled test '%s', dependency not found\n\" % name)") ""))
2861 #t)))))
2862 (native-inputs
2863 `(("unzip" ,unzip)))
2864 (home-page "http://wtforms.simplecodes.com/")
2865 (synopsis
2866 "Form validation and rendering library for Python web development")
2867 (description
2868 "WTForms is a flexible forms validation and rendering library
2869for Python web development. It is very similar to the web form API
2870available in Django, but is a standalone package.")
2871 (license license:bsd-3)))
2872
2873(define-public python2-wtforms
2874 (package-with-python2 python-wtforms))
2875
2876(define-public python-paste
2877 (package
2878 (name "python-paste")
ce50403f 2879 (version "3.0.6")
98c6a025
RW
2880 (source
2881 (origin
2882 (method url-fetch)
2883 (uri (pypi-uri "Paste" version))
2884 (sha256
2885 (base32
ce50403f 2886 "14lbi9asn5agsdf7r97prkjpz7amgmp529lbvfhf0nv881xczah6"))
95176544
EF
2887 (patches (search-patches "python-paste-remove-timing-test.patch"))
2888 (modules '((guix build utils)))
2889 (snippet
2890 '(begin
2891 ;; This test calls out to the internet.
2892 (delete-file "tests/test_proxy.py") #t))))
98c6a025
RW
2893 (build-system python-build-system)
2894 (native-inputs
95176544
EF
2895 `(("python-pytest" ,python-pytest)
2896 ("python-pytest-runner" ,python-pytest-runner)
2897 ("python-nose" ,python-nose)))
98c6a025
RW
2898 (propagated-inputs
2899 `(("python-six" ,python-six)))
63b06670 2900 (home-page "https://pythonpaste.readthedocs.io/")
98c6a025
RW
2901 (synopsis
2902 "Python web development tools, focusing on WSGI")
2903 (description
2904 "Paste provides a variety of web development tools and middleware which
2905can be nested together to build web applications. Paste's design closely
2906follows ideas flowing from WSGI (Web Standard Gateway Interface).")
2907 (license license:expat)))
2908
2909(define-public python2-paste
2910 (package-with-python2 python-paste))
2911
2912(define-public python-pastescript
2913 (package
2914 (name "python-pastescript")
2915 (version "2.0.2")
2916 (source
2917 (origin
2918 (method url-fetch)
2919 (uri (pypi-uri "PasteScript" version))
2920 (sha256
2921 (base32
2922 "1h3nnhn45kf4pbcv669ik4faw04j58k8vbj1hwrc532k0nc28gy0"))))
2923 (build-system python-build-system)
2924 (native-inputs
2925 `(("python-nose" ,python-nose)))
2926 (propagated-inputs
2927 `(("python-paste" ,python-paste)
2928 ("python-pastedeploy" ,python-pastedeploy)))
63b06670
TGR
2929 (home-page (string-append "https://web.archive.org/web/20161025192515/"
2930 "http://pythonpaste.org/script/"))
98c6a025
RW
2931 (arguments
2932 '(;; Unfortunately, this requires the latest unittest2,
2933 ;; but that requires traceback2 which requires linecache2 which requires
2934 ;; unittest2. So we're skipping tests for now.
2935 ;; (Note: Apparently linetest2 only needs unittest2 for its tests,
2936 ;; so in theory we could get around this situation somehow.)
2937 #:tests? #f))
2938 (synopsis
2939 "Pluggable command line tool for serving web applications and more")
2940 (description
2941 "PasteScript is a plugin-friendly command line tool which provides a
2942variety of features, from launching web applications to bootstrapping project
2943layouts.")
2944 (license license:expat)))
2945
2946(define-public python2-pastescript
2947 (package-with-python2 python-pastescript))
c5964611
2948
2949(define-public python2-urlgrabber
2950 (package
2951 (name "python2-urlgrabber")
2952 (version "3.10.2")
2953 (source
2954 (origin
2955 (method url-fetch)
2956 (uri (pypi-uri "urlgrabber" version))
2957 (sha256
2958 (base32 "0w1h7hlsq406bxfy2pn4i9bd003bwl0q9b7p03z3g6yl0d21ddq5"))))
2959 (build-system python-build-system)
2960 (arguments `(#:python ,python-2)) ; urlgrabber supports python2 only
2961 (home-page "http://urlgrabber.baseurl.org")
2962 (synopsis "High-level cross protocol url-grabber")
2963 (description "@code{urlgrabber} is Python2 library that unifies access to
2964files available on web, FTP or locally. It supports HTTP, FTP and file://
2965protocols, it supports features like HTTP keep-alive, reget, throttling and
2966more.")
2967 (license license:lgpl2.1+)))
2968
85ccc0c2
NG
2969(define-public python-pycares
2970 (package
2971 (name "python-pycares")
2972 (version "2.3.0")
2973 (source
2974 (origin
2975 (method url-fetch)
2976 (uri (pypi-uri "pycares" version))
2977 (sha256
2978 (base32
2979 "0h4fxw5drrhfyslzmfpljk0qnnpbhhb20hnnndzahhbwylyw1x1n"))))
2980 (build-system python-build-system)
2981 (arguments
2982 `(#:tests? #f)) ;tests require internet access
2983 (home-page "http://github.com/saghul/pycares")
2984 (synopsis "Python interface for @code{c-ares}")
2985 (description "@code{pycares} is a Python module which provides an
2986interface to @code{c-ares}, a C library that performs DNS requests and
2987name resolutions asynchronously.")
2988 (license license:expat)))
2eccb414
NG
2989
2990(define-public python-yarl
2991 (package
2992 (name "python-yarl")
2993 (version "1.1.1")
2994 (source
2995 (origin
2996 (method url-fetch)
2997 (uri (pypi-uri "yarl" version))
2998 (sha256
2999 (base32
3000 "1s6z13g8vgxfkkqwhn6imnm7pl7ky9arv4jygnn6bcndcbidg7d6"))))
3001 (build-system python-build-system)
3002 (native-inputs
3003 `(("python-pytest" ,python-pytest)
3004 ("python-pytest-runner" ,python-pytest-runner)))
3005 (propagated-inputs
3006 `(("python-idna" ,python-idna)
3007 ("python-multidict" ,python-multidict)))
3008 (home-page "https://github.com/aio-libs/yarl/")
3009 (synopsis "Yet another URL library")
3010 (description "@code{yarl} module provides handy @code{URL} class
3011for URL parsing and changing.")
3012 (license license:asl2.0)))
961bcdf5
MO
3013
3014(define-public python-google-api-client
3015 (package
3016 (name "python-google-api-client")
3017 (version "1.6.7")
3018 (source
3019 (origin
3020 (method url-fetch)
3021 (uri (pypi-uri "google-api-python-client" version))
3022 (sha256
3023 (base32
3024 "1wpbbbxfpy9mwxdy3kn352cb590ladv574j1aa2l4grjdqw3ln05"))))
3025 (build-system python-build-system)
3026 (arguments
3027 '(#:tests? #f)) ; tests require internet access
3028 (native-inputs
3029 `(("python-httplib2" ,python-httplib2)
3030 ("python-six" ,python-six)
3031 ("python-oauth2client" ,python-oauth2client)
3032 ("python-uritemplate" ,python-uritemplate)))
3033 (home-page "https://github.com/google/google-api-python-client")
3034 (synopsis "Core Python library for accessing Google APIs")
3035 (description "Python client library for Google's discovery based APIs")
3036 (license license:asl2.0)))
3037
3038(define-public python2-google-api-client
3039 (package-with-python2 python-google-api-client))
0750f344
RW
3040
3041(define-public python-hawkauthlib
3042 (package
3043 (name "python-hawkauthlib")
3044 (version "2.0.0")
3045 (source
3046 (origin
3047 (method url-fetch)
3048 (uri (pypi-uri "hawkauthlib" version))
3049 (sha256
3050 (base32
3051 "03ai47s4h8nfnrf25shbfvkm1b9n1ccd4nmmj280sg1fayi69zgg"))))
3052 (build-system python-build-system)
3053 (propagated-inputs
3054 `(("python-requests" ,python-requests)
3055 ("python-webob" ,python-webob)))
3056 (home-page "https://github.com/mozilla-services/hawkauthlib")
3057 (synopsis "Hawk Access Authentication protocol")
3058 (description
3059 "This is a low-level Python library for implementing Hawk Access Authentication,
3060a simple HTTP request-signing scheme.")
3061 (license license:mpl2.0)))
084e14cc
RW
3062
3063(define-public python-pybrowserid
3064 (package
3065 (name "python-pybrowserid")
3066 (version "0.14.0")
3067 (source
3068 (origin
3069 (method url-fetch)
3070 (uri (pypi-uri "PyBrowserID" version))
3071 (sha256
3072 (base32
3073 "1qvi79kfb8x9kxkm5lw2mp42hm82cpps1xknmsb5ghkwx1lpc8kc"))))
3074 (build-system python-build-system)
3075 (propagated-inputs
3076 `(("python-requests" ,python-requests)))
3077 (native-inputs
3078 `(("python-mock" ,python-mock)))
3079 (home-page "https://github.com/mozilla/PyBrowserID")
3080 (synopsis "Python library for the BrowserID protocol")
3081 (description
3082 "This is a Python client library for the BrowserID protocol that
3083underlies Mozilla Persona.")
3084 (license license:mpl2.0)))
f45bb3cc
RW
3085
3086(define-public python-pyfxa
3087 (package
3088 (name "python-pyfxa")
3089 (version "0.6.0")
3090 (source
3091 (origin
3092 (method url-fetch)
3093 (uri (pypi-uri "PyFxA" version))
3094 (sha256
3095 (base32
3096 "0axl16fyrz2r88gnw4b12mk7dpkqscv8c4wsc1y5hicl7bsbc4fm"))))
3097 (build-system python-build-system)
3098 (arguments '(#:tests? #f)) ; 17 tests require network access
3099 (propagated-inputs
3100 `(("python-cryptography" ,python-cryptography)
3101 ("python-hawkauthlib" ,python-hawkauthlib)
3102 ("python-pybrowserid" ,python-pybrowserid)
3103 ("python-requests" ,python-requests)
3104 ("python-six" ,python-six)))
3105 (native-inputs
3106 `(("python-grequests" ,python-grequests)
3107 ("python-mock" ,python-mock)
3108 ("python-responses" ,python-responses)
3109 ("python-unittest2" ,python-unittest2)))
3110 (home-page "https://github.com/mozilla/PyFxA")
3111 (synopsis "Firefox Accounts client library for Python")
3112 (description
3113 "This is a Python library for interacting with the Firefox Accounts
3114ecosystem.")
3115 (license license:mpl2.0)))
68460fbb
LF
3116
3117(define-public python-hyperlink
3118 (package
3119 (name "python-hyperlink")
431a0d26 3120 (version "19.0.0")
68460fbb
LF
3121 (source
3122 (origin
3123 (method url-fetch)
3124 (uri (pypi-uri "hyperlink" version))
3125 (sha256
3126 (base32
431a0d26 3127 "0m2nhi0j8wmgfscf974wd5v1xfq8mah286hil6npy1ys0m3y7222"))))
68460fbb
LF
3128 (build-system python-build-system)
3129 (propagated-inputs
3130 `(("python-idna" ,python-idna)))
3131 (home-page "https://github.com/python-hyper/hyperlink")
3132 (synopsis "Python module to create immutable URLs according to spec")
3133 (description "This package provides a Python module to create immutable, and
3134correct URLs for Python according to RFCs 3986 and 3987.")
3135 (license license:expat)))
00adbac6
LF
3136
3137(define-public python-treq
3138 (package
3139 (name "python-treq")
3140 (version "18.6.0")
3141 (source
3142 (origin
3143 (method url-fetch)
3144 (uri (pypi-uri "treq" version))
3145 (sha256
3146 (base32
3147 "0j4zwq9p1c9piv1vc66nxcv9s6hdinf90jwkbsm91k14npv9zq4i"))))
3148 (build-system python-build-system)
3149 (propagated-inputs
3150 `(("python-attrs" ,python-attrs)
3151 ("python-idna" ,python-idna)
3152 ("python-incremental" ,python-incremental)
3153 ("python-requests" ,python-requests)
3154 ("python-service-identity" ,python-service-identity)
3155 ("python-twisted" ,python-twisted)))
3156 (home-page "https://github.com/twisted/treq")
3157 (synopsis "Requests-like API built on top of twisted.web's Agent")
3158 (description "This package provides an HTTP library inspired by
3159@code{requests}} but written on top of Twisted's @code{Agents}. It offers a
3160high level API for making HTTP requests when using Twisted.")
3161 (license license:expat)))
951c7093
LF
3162
3163(define-public python-autobahn
3164 (package
3165 (name "python-autobahn")
3166 (version "19.2.1")
3167 (source
3168 (origin
3169 (method url-fetch)
3170 (uri (pypi-uri "autobahn" version))
3171 (sha256
3172 (base32
3173 "1mm7j24ls01c7jb1ad5p5cpyxvzgydiyf8b04ihykh2v8g98j0x7"))))
3174 (build-system python-build-system)
3175 (arguments
3176 ;; The tests fail to run:
3177 ;; https://github.com/crossbario/autobahn-python/issues/1117
3178 `(#:tests? #f))
3179 (propagated-inputs
3180 `(("python-cffi" ,python-cffi)
3181 ("python-twisted" ,python-twisted)
3182 ("python-txaio" ,python-txaio)))
3183 (home-page "https://crossbar.io/autobahn/")
3184 (synopsis "Web Application Messaging Protocol implementation")
3185 (description "This package provides an implementation of the @dfn{Web Application
3186Messaging Protocol} (WAMP). WAMP connects components in distributed
3187applications using Publish and Subscribe (PubSub) and routed Remote Procedure
3188Calls (rRPC). It is ideal for distributed, multi-client and server applications
3189such as IoT applications or multi-user database-driven business applications.")
3190 (license license:expat)))
526b1efb
RW
3191
3192(define-public python-ws4py
3193 (package
3194 (name "python-ws4py")
3195 (version "0.5.1")
3196 (source
3197 (origin
3198 (method url-fetch)
3199 (uri (pypi-uri "ws4py" version))
3200 (sha256
3201 (base32
3202 "10slbbf2jm4hpr92jx7kh7mhf48sjl01v2w4d8z3f1p0ybbp7l19"))))
3203 (build-system python-build-system)
3204 (arguments
3205 `(#:phases
3206 (modify-phases %standard-phases
3207 (add-after 'unpack 'python3.7-compatibility
3208 (lambda _
3209 (substitute* '("ws4py/server/tulipserver.py"
3210 "ws4py/async_websocket.py")
3211 (("asyncio.async")
3212 "asyncio.ensure_future"))
3213 #t))
3214 ;; We don't have a package for cherrypy.
3215 (add-after 'unpack 'remove-cherrypy-support
3216 (lambda _
3217 (delete-file "ws4py/server/cherrypyserver.py")
3218 #t)))))
3219 (propagated-inputs
3220 `(("python-gevent" ,python-gevent)
3221 ("python-tornado" ,python-tornado)))
3222 (home-page "https://github.com/Lawouach/WebSocket-for-Python")
3223 (synopsis "WebSocket client and server library")
3224 (description
3225 "This package provides a WebSocket client and server library for
3226Python.")
3227 (license license:bsd-3)))
57e4592f
RW
3228
3229;; kaldi-gstreamer-server does not yet work with python-ws4py > 0.3.2
3230(define-public python2-ws4py-for-kaldi-gstreamer-server
3231 (package (inherit python-ws4py)
3232 (name "python2-ws4py")
3233 (version "0.3.2")
3234 (source
3235 (origin
3236 (method url-fetch)
3237 (uri (pypi-uri "ws4py" version))
3238 (sha256
3239 (base32
3240 "12ys3dv98awhrxd570vla3hqgzq3avjhq4yafhghhq3a942y1928"))))
3241 (build-system python-build-system)
3242 (arguments
3243 `(#:python ,python-2
3244 #:phases
3245 (modify-phases %standard-phases
3246 ;; We don't have a package for cherrypy.
3247 (add-after 'unpack 'remove-cherrypy-support
3248 (lambda _
3249 (delete-file "ws4py/server/cherrypyserver.py")
3250 #t)))))
3251 (propagated-inputs
3252 `(("python-gevent" ,python2-gevent)
3253 ("python-tornado" ,python2-tornado)))))
6543bc80
PL
3254
3255(define-public python-slugify
3256 (package
3257 (name "python-slugify")
aa686627 3258 (version "3.0.4")
6543bc80
PL
3259 (source
3260 (origin
3261 (method url-fetch)
3262 (uri (pypi-uri "python-slugify" version))
3263 (sha256
aa686627 3264 (base32 "0dv97yi5fq074q5qyqbin09pmi8ixg36caf5nkpw2bqkd8jh6pap"))
6543bc80
PL
3265 (patches
3266 (search-patches "python-slugify-depend-on-unidecode.patch"))))
3267 (native-inputs
3268 `(("python-wheel" ,python-wheel)))
3269 (propagated-inputs
3270 `(("python-unidecode" ,python-unidecode)))
3271 (arguments
3272 `(#:phases
3273 (modify-phases %standard-phases
3274 (replace 'check
3275 (lambda _
3276 (invoke "python" "test.py"))))))
3277 (build-system python-build-system)
3278 (home-page "https://github.com/un33k/python-slugify")
3279 (synopsis "Python Slugify application that handles Unicode")
3280 (description "This package provides a @command{slufigy} command and
3281library to create slugs from unicode strings while keeping it DRY.")
3282 (license license:expat)))
2bdb5716
NG
3283
3284(define-public python-branca
3285 (package
3286 (name "python-branca")
3287 (version "0.3.1")
3288 (source
3289 (origin
3290 (method url-fetch)
3291 (uri (pypi-uri "branca" version))
3292 (sha256
3293 (base32
3294 "0pmigd521j2228xf8x34vbx0niwvms7xl7za0lymywj0vydjqxiy"))))
3295 (build-system python-build-system)
3296 (propagated-inputs
3297 `(("python-jinja2" ,python-jinja2)
3298 ("python-six" ,python-six)))
3299 (native-inputs
3300 `(("python-pytest" ,python-pytest)))
3301 (home-page "https://github.com/python-visualization/branca")
3302 (synopsis "Generate complex HTML+JS pages with Python")
3303 (description "Generate complex HTML+JS pages with Python")
3304 (license license:expat)))
3305
df122333
HG
3306(define-public python-tinycss2
3307 (package
3308 (name "python-tinycss2")
3309 (version "1.0.2")
3310 (source
3311 (origin
3312 (method url-fetch)
3313 (uri (pypi-uri "tinycss2" version))
3314 (sha256
3315 (base32 "1kw84y09lggji4krkc58jyhsfj31w8npwhznr7lf19d0zbix09v4"))))
3316 (build-system python-build-system)
3317 (arguments
3318 `(#:phases
3319 (modify-phases %standard-phases
3320 (replace 'check
3321 (lambda _ (invoke "pytest"))))))
3322 (propagated-inputs
3323 `(("python-webencodings" ,python-webencodings)))
3324 (native-inputs
3325 `(("python-pytest-flake8" ,python-pytest-flake8)
3326 ("python-pytest-isort" ,python-pytest-isort)
3327 ("python-pytest-runner" ,python-pytest-runner)))
3328 (home-page "https://tinycss2.readthedocs.io/")
3329 (synopsis "Low-level CSS parser for Python")
3330 (description "@code{tinycss2} can parse strings, return Python objects
3331representing tokens and blocks, and generate CSS strings corresponding to
3332these objects.
3333
3334Based on the CSS Syntax Level 3 specification, @code{tinycss2} knows the
3335grammar of CSS but doesn’t know specific rules, properties or values supported
3336in various CSS modules.")
3337 (license license:bsd-3)))
3338
7d3f481b
HG
3339(define-public python-cssselect2
3340 (package
3341 (name "python-cssselect2")
3342 (version "0.2.2")
3343 (source
3344 (origin
3345 (method url-fetch)
3346 (uri (pypi-uri "cssselect2" version))
3347 (sha256
3348 (base32 "0skymzb4ncrm2zdsy80f53vi0arf776lvbp51hzh4ayp1il5lj3h"))))
3349 (build-system python-build-system)
3350 (arguments
3351 `(#:phases
3352 (modify-phases %standard-phases
3353 (replace 'check
3354 (lambda _ (invoke "pytest"))))))
3355 (propagated-inputs
3356 `(("python-tinycss2" ,python-tinycss2)))
3357 (native-inputs
3358 `(("python-pytest-cov" ,python-pytest-cov)
3359 ("python-pytest-flake8" ,python-pytest-flake8)
3360 ("python-pytest-isort" ,python-pytest-isort)
3361 ("python-pytest-runner" ,python-pytest-runner)))
3362 (home-page "https://cssselect2.readthedocs.io/")
3363 (synopsis "CSS selectors for Python ElementTree")
3364 (description "@code{cssselect2} is a straightforward implementation of
3365CSS3 Selectors for markup documents (HTML, XML, etc.) that can be read by
3366ElementTree-like parsers (including cElementTree, lxml, html5lib, etc.).
3367
3368Unlike the Python package @code{cssselect}, it does not translate selectors to
3369XPath and therefore does not have all the correctness corner cases that are
3370hard or impossible to fix in cssselect.")
3371 (license license:bsd-3)))
a7469d16
HG
3372
3373(define-public gunicorn
3374 (package
3375 (name "gunicorn")
3376 (version "20.0.0")
3377 (source
3378 (origin
3379 (method url-fetch)
3380 (uri (pypi-uri "gunicorn" version))
3381 (sha256
3382 (base32
3383 "0l1zm8a0vz8ws3lkn8q9a0f93ipdzyvlf2zlwdj5xyadh6jdwsgg"))))
3384 (outputs '("out" "doc"))
3385 (build-system python-build-system)
3386 (arguments
3387 `(#:phases
3388 (modify-phases %standard-phases
3389 (add-after 'build 'build-doc
3390 (lambda _
3391 (invoke "make" "-C" "docs" "PAPER=a4" "html" "info")
3392 (delete-file "docs/build/texinfo/Makefile")
3393 (delete-file "docs/build/texinfo/Gunicorn.texi")
3394 #t))
3395 (replace 'check
3396 (lambda _
3397 (setenv "PYTHONPATH"
3398 (string-append ".:" (getenv "PYTHONPATH")))
3399 ;; Remove test modules failing due to libc not found due to
3400 ;; section '.dynamic' not found in libc.so
3401 (delete-file "tests/test_arbiter.py")
3402 (delete-file "tests/test_config.py")
3403 (delete-file "tests/test_sock.py")
3404 (invoke "pytest")))
3405 (add-after 'install 'install-doc
3406 (lambda* (#:key outputs #:allow-other-keys)
3407 (let* ((doc (string-append (assoc-ref outputs "doc")
3408 "/share/doc/" ,name "-" ,version))
3409 (html (string-append doc "/html"))
3410 (info (string-append doc "/info"))
3411 (examples (string-append doc "/examples")))
3412 (mkdir-p html)
3413 (mkdir-p info)
3414 (mkdir-p examples)
3415 (copy-recursively "docs/build/html" html)
3416 (copy-recursively "docs/build/texinfo" info)
3417 (copy-recursively "examples" examples)
3418 (for-each (lambda (file)
3419 (copy-file file (string-append doc "/" file)))
3420 '("README.rst" "NOTICE" "LICENSE" "THANKS")))
3421 #t)))))
3422 (native-inputs
3423 `(("binutils" ,binutils) ;; for ctypes.util.find_library()
3424 ("python-aiohttp", python-aiohttp)
3425 ("python-pytest" ,python-pytest)
3426 ("python-pytest-cov" ,python-pytest-cov)
3427 ("python-sphinx" ,python-sphinx)
3428 ("texinfo" ,texinfo)))
06dfce79 3429 (home-page "https://gunicorn.org/")
a7469d16
HG
3430 (synopsis "Python WSGI HTTP Server for UNIX")
3431 (description "Gunicorn ‘Green Unicorn’ is a Python WSGI HTTP
3432Server for UNIX. It’s a pre-fork worker model ported from Ruby’s
3433Unicorn project. The Gunicorn server is broadly compatible with
3434various web frameworks, simply implemented, light on server resources,
3435and fairly speedy.")
3436 (license license:expat)))
18d18ee1
JL
3437
3438(define-public python-translation-finder
3439 (package
3440 (name "python-translation-finder")
3441 (version "1.7")
3442 (source
3443 (origin
3444 (method url-fetch)
3445 (uri (pypi-uri "translation-finder" version))
3446 (sha256
3447 (base32
3448 "1pcy9z8gmb8x41gjhw9x0lkr0d2mv5mdxcs2hwg6q8mxs857j589"))))
3449 (build-system python-build-system)
3450 (arguments
3451 `(#:phases
3452 (modify-phases %standard-phases
3453 (add-before 'build 'remove-failing-test
3454 (lambda _
3455 (delete-file "translation_finder/test_api.py")
3456 #t)))))
3457 (propagated-inputs
3458 `(("python-chardet" ,python-chardet)
3459 ("python-pathlib2" ,python-pathlib2)
3460 ("python-ruamel.yaml" ,python-ruamel.yaml)
3461 ("python-six" ,python-six)))
3462 (native-inputs
3463 `(("python-codecov" ,python-codecov)
3464 ("python-codacy-coverage" ,python-codacy-coverage)
3465 ("python-pytest-cov" ,python-pytest-cov)
3466 ("python-pytest-runner" ,python-pytest-runner)
3467 ("python-twine" ,python-twine)))
3468 (home-page "https://weblate.org/")
3469 (synopsis "Translation file finder for Weblate")
3470 (description "This package provides a function to find translation file in
3471the source code of a project. It supports many translation file formats and
3472is part of the Weblate translation platform.")
3473 (license license:gpl3+)))
ad429e0d
JL
3474
3475(define-public python-gitlab
3476 (package
3477 (name "python-gitlab")
3478 (version "1.15.0")
3479 (source
3480 (origin
3481 (method url-fetch)
3482 (uri (pypi-uri "python-gitlab" version))
3483 (sha256
3484 (base32
3485 "0zl6kz8v8cg1bcy2r78b2snb0lpw0b573gdx2x1ps0nhsh75l4j5"))))
3486 (build-system python-build-system)
3487 (propagated-inputs
3488 `(("python-requests" ,python-requests)
3489 ("python-six" ,python-six)))
3490 (native-inputs
3491 `(("python-httmock" ,python-httmock)
3492 ("python-mock" ,python-mock)))
3493 (home-page
3494 "https://github.com/python-gitlab/python-gitlab")
3495 (synopsis "Interact with GitLab API")
3496 (description "This package provides an extended library for interacting
3497with GitLab instances through their API.")
3498 (license license:lgpl3+)))
0021363d
JK
3499
3500(define-public python-path-and-address
3501 (package
3502 (name "python-path-and-address")
3503 (version "2.0.1")
3504 (source
3505 (origin
3506 ;; The source distributed on PyPI doesn't include tests.
3507 (method git-fetch)
3508 (uri (git-reference
3509 (url "https://github.com/joeyespo/path-and-address")
3510 (commit (string-append "v" version))))
3511 (file-name (git-file-name name version))
3512 (sha256
3513 (base32
3514 "0b0afpsaim06mv3lhbpm8fmawcraggc11jhzr6h72kdj1cqjk5h6"))))
3515 (build-system python-build-system)
3516 (arguments
3517 `(#:phases
3518 (modify-phases %standard-phases
3519 (replace 'check
3520 (lambda* (#:key inputs outputs #:allow-other-keys)
3521 (add-installed-pythonpath inputs outputs)
3522 (invoke "py.test"))))))
3523 (native-inputs
3524 `(("python-pytest" ,python-pytest)))
3525 (home-page "https://github.com/joeyespo/path-and-address")
3526 (synopsis "Functions for command-line server tools used by humans")
3527 (description "Path-and-address resolves ambiguities of command-line
3528interfaces, inferring which argument is the path, and which is the address.")
3529 (license license:expat)))
52e7bcfd
JK
3530
3531(define-public grip
3532 ;; No release by upstream for quite some time, some bugs fixed since. See:
3533 ;; https://github.com/joeyespo/grip/issues/304
3534 (let ((commit "27a4d6d87ea1d0ea7f7f120de55baabee3de73e3"))
3535 (package
3536 (name "grip")
3537 (version (git-version "4.5.2" "1" commit))
3538 (source
3539 (origin
3540 (method git-fetch)
3541 (uri (git-reference
3542 (url "https://github.com/joeyespo/grip")
3543 (commit commit)))
3544 (file-name (git-file-name name version))
3545 (sha256
3546 (base32
3547 "0kx5hgb3q19i4l18a4vqdq9af390xgpk88lp2ay75qi96k0dc68w"))))
3548 (build-system python-build-system)
3549 (propagated-inputs
3550 `(("python-docopt" ,python-docopt)
3551 ("python-flask" ,python-flask)
3552 ("python-markdown" ,python-markdown)
3553 ("python-path-and-address" ,python-path-and-address)
3554 ("python-pygments" ,python-pygments)
3555 ("python-requests" ,python-requests)))
3556 (native-inputs
3557 `(("python-pytest" ,python-pytest)
3558 ("python-responses" ,python-responses)))
3559 (arguments
3560 `(#:phases
3561 (modify-phases %standard-phases
3562 (replace 'check
3563 (lambda* (#:key inputs outputs #:allow-other-keys)
3564 (add-installed-pythonpath inputs outputs)
3565 (setenv "PATH" (string-append
3566 (getenv "PATH") ":"
3567 (assoc-ref %outputs "out") "/bin"))
3568 (invoke "py.test" "-m" "not assumption"))))))
3569 (home-page "https://github.com/joeyespo/grip")
3570 (synopsis "Preview Markdown files using the GitHub API")
3571 (description "Grip is a command-line server application written in Python
3572that uses the GitHub Markdown API to render a local Markdown file. The styles
3573and rendering come directly from GitHub, so you'll know exactly how it will
3574appear. Changes you make to the file will be instantly reflected in the browser
3575without requiring a page refresh.")
3576 (license license:expat))))