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