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