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