summary refs log tree commit diff
path: root/gnu/packages/python.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/python.scm')
-rw-r--r--gnu/packages/python.scm274
1 files changed, 195 insertions, 79 deletions
diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 3f1328ddf0..c555d8072a 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -22,8 +22,8 @@
 ;;; Copyright © 2016 Hartmut Goebel <h.goebel@crazy-compilers.com>
 ;;; Copyright © 2016 Daniel Pimentel <d4n1@d4n1.org>
 ;;; Copyright © 2016 Sou Bunnbu <iyzsong@gmail.com>
-;;; Copyright © 2016 Troy Sankey <sankeytms@gmail.com>
-;;; Copyright © 2016, 2017 ng0 <contact.ng0@cryptolab.net>
+;;; Copyright © 2016, 2017 Troy Sankey <sankeytms@gmail.com>
+;;; Copyright © 2016, 2017 ng0 <ng0@infotropique.org>
 ;;; Copyright © 2016 Dylan Jeffers <sapientech@sapientech@openmailbox.org>
 ;;; Copyright © 2016 David Craven <david@craven.ch>
 ;;; Copyright © 2016, 2017 Marius Bakke <mbakke@fastmail.com>
@@ -4512,7 +4512,8 @@ operators such as union, intersection, and difference.")
                                             (scandir (string-append cwd "/build")))
                                       ":"
                                       (getenv "PYTHONPATH"))))
-             (zero? (system* "python" "-m" "rpy2.tests" "-v")))))))
+             ;; FIXME: Even when all tests pass, the check phase will fail.
+             (system* "python" "-m" "rpy2.tests" "-v"))))))
     (propagated-inputs
      `(("python-six" ,python-six)
        ("python-jinja2" ,python-jinja2)
@@ -5133,72 +5134,6 @@ a front-end for C compilers or analysis tools.")
 (define-public python2-pycparser
   (package-with-python2 python-pycparser))
 
-(define-public python-cffi
-  (package
-    (name "python-cffi")
-    (version "1.10.0")
-    (source
-     (origin
-      (method url-fetch)
-      (uri (pypi-uri "cffi" version))
-      (sha256
-       (base32 "1mffyilq4qycm8gs4wkgb18rnqil8a9blqq77chdlshzxc8jkc5k"))))
-    (build-system python-build-system)
-    (outputs '("out" "doc"))
-    (inputs
-     `(("libffi" ,libffi)))
-    (propagated-inputs ; required at run-time
-     `(("python-pycparser" ,python-pycparser)))
-    (native-inputs
-     `(("pkg-config" ,pkg-config)
-       ("python-sphinx" ,python-sphinx)
-       ("python-pytest" ,python-pytest)))
-    (arguments
-     `(#:modules ((ice-9 ftw)
-                  (srfi srfi-26)
-                  (guix build utils)
-                  (guix build python-build-system))
-       #:phases
-       (modify-phases %standard-phases
-         (replace 'check
-           (lambda _
-             (setenv "PYTHONPATH"
-                     (string-append
-                      (getenv "PYTHONPATH")
-                      ":" (getcwd) "/build/"
-                      (car (scandir "build" (cut string-prefix? "lib." <>)))))
-
-             ;; XXX The "normal" approach of setting CC and friends does
-             ;; not work here.  Is this the correct way of doing things?
-             (substitute* "testing/embedding/test_basic.py"
-               (("c = distutils\\.ccompiler\\.new_compiler\\(\\)")
-                (string-append "c = distutils.ccompiler.new_compiler();"
-                               "c.set_executables(compiler='gcc',"
-                               "compiler_so='gcc',linker_exe='gcc',"
-                               "linker_so='gcc -shared')")))
-             (substitute* "testing/cffi0/test_ownlib.py"
-               (("'cc testownlib") "'gcc testownlib"))
-             (zero? (system* "py.test" "-v" "c/" "testing/"))))
-         (add-after 'install 'install-doc
-           (lambda* (#:key outputs #:allow-other-keys)
-             (let* ((data (string-append (assoc-ref outputs "doc") "/share"))
-                    (doc (string-append data "/doc/" ,name "-" ,version))
-                    (html (string-append doc "/html")))
-               (with-directory-excursion "doc"
-                 (system* "make" "html")
-                 (mkdir-p html)
-                 (copy-recursively "build/html" html))
-               (copy-file "LICENSE" (string-append doc "/LICENSE"))
-               #t))))))
-    (home-page "http://cffi.readthedocs.org")
-    (synopsis "Foreign function interface for Python")
-    (description
-     "Foreign Function Interface for Python calling C code.")
-    (license license:expat)))
-
-(define-public python2-cffi
-  (package-with-python2 python-cffi))
-
 (define-public python-xcffib
   (package
     (name "python-xcffib")
@@ -5854,6 +5789,12 @@ tools for mocking system commands and recording calls to those.")
        ("python-numpy" ,python-numpy)
        ("python-numpydoc" ,python-numpydoc)
        ("python-jinja2" ,python-jinja2)
+       ("python-jupyter-console"
+        ;; The python-ipython and python-jupyter-console require each
+        ;; other. To get the functionality in both packages working, strip
+        ;; down the python-jupyter-console package when using it as an input
+        ;; to python-ipython.
+        ,python-jupyter-console-minimal)
        ("python-mistune" ,python-mistune)
        ("python-pexpect" ,python-pexpect)
        ("python-pickleshare" ,python-pickleshare)
@@ -6607,6 +6548,26 @@ providing a clean and modern domain specific specification language (DSL) in
 Python style, together with a fast and comfortable execution environment.")
     (license license:expat)))
 
+(define-public python-pyqrcode
+  (package
+    (name "python-pyqrcode")
+    (version "1.2.1")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "PyQRCode" version))
+       (sha256
+        (base32
+         "1m9ln8k9v7dfbh1i81225hx5mdsh8mpf9g7r4wpbfmiyfcs7dgzx"))))
+    (build-system python-build-system)
+    (home-page
+     "https://github.com/mnooner256/pyqrcode")
+    (synopsis "QR code generator")
+    (description
+     "Pyqrcode is a QR code generator written purely in Python with
+SVG, EPS, PNG and terminal output.")
+    (license license:bsd-3)))
+
 (define-public python-seaborn
   (package
     (name "python-seaborn")
@@ -7415,15 +7376,13 @@ add functionality and customization to your projects with their own plugins.")
 (define-public python-fonttools
   (package
     (name "python-fonttools")
-    (version "2.5")
+    (version "3.15.1")
     (source (origin
               (method url-fetch)
-              (uri (string-append
-                    "https://pypi.python.org/packages/source/F/FontTools/"
-                    "fonttools-" version ".tar.gz"))
+              (uri (pypi-uri "fonttools" version ".zip"))
               (sha256
                (base32
-                "08ay3x4ijarwhl60gqx2i9jzq6pxs20p4snc2d1q5jagh4rn39lb"))))
+                "1hhj97izwliy0vybmza72d90l5d4mcn50y8akq7kyccfl82vdx4d"))))
     (build-system python-build-system)
     (arguments
      '(#:test-target "check"
@@ -7437,6 +7396,8 @@ add functionality and customization to your projects with their own plugins.")
              (substitute* "setup.py"
                (("^[ \t]*extra_path *= *'FontTools',") ""))
              #t)))))
+    (native-inputs
+     `(("unzip" ,unzip)))
     (home-page "https://github.com/behdad/fonttools")
     (synopsis "Tools to manipulate font files")
     (description
@@ -8560,6 +8521,31 @@ Jupyter kernels such as IJulia and IRKernel.")
 (define-public python2-jupyter-console
   (package-with-python2 python-jupyter-console))
 
+;; The python-ipython and python-jupyter-console require each other. To get
+;; the functionality in both packages working, strip down the
+;; python-jupyter-console package when using it as an input to python-ipython.
+(define python-jupyter-console-minimal
+  (package
+    (inherit python-jupyter-console)
+    (arguments
+     (substitute-keyword-arguments
+         (package-arguments python-jupyter-console)
+       ((#:phases phases)
+        `(modify-phases ,phases
+           (add-after 'install 'delete-bin
+             (lambda* (#:key outputs #:allow-other-keys)
+               ;; Delete the bin files, to avoid conflicts in profiles
+               ;; where python-ipython and python-jupyter-console are
+               ;; both present.
+               (delete-file-recursively
+                (string-append
+                 (assoc-ref outputs "out") "/bin"))))))))
+    ;; Remove the python-ipython propagated input, to avoid the cycle
+    (propagated-inputs
+     (alist-delete
+      "python-ipython"
+      (package-propagated-inputs python-jupyter-console)))))
+
 (define-public jupyter
   (package
     (name "jupyter")
@@ -10784,14 +10770,14 @@ introspection of @code{zope.interface} instances in code.")
 (define-public python-psycopg2
   (package
     (name "python-psycopg2")
-    (version "2.6.2")
+    (version "2.7.3.1")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "psycopg2" version))
        (sha256
         (base32
-         "0p60z2gwfcal30y2w8gprflchp1kcg9qblc5rn782p4wxl90wjbh"))))
+         "0rda1j02ds6s28752fhmpwg761sh6jsxi1gpczqkrd28cki1cywv"))))
     (build-system python-build-system)
     (arguments
      ;; Tests would require a postgresql database "psycopg2_test"
@@ -11746,13 +11732,13 @@ format.")
 (define-public python-twisted
   (package
     (name "python-twisted")
-    (version "16.2.0")
+    (version "17.1.0")
     (source (origin
               (method url-fetch)
               (uri (pypi-uri "Twisted" version ".tar.bz2"))
               (sha256
                (base32
-                "0ydxrp9myw1mvsz3qfzx5579y5llmqa82pxvqchgp5syczffi450"))))
+                "1p245mg15hkxp7hy5cyq2fgvlgjkb4cg0gwkwd148nzy1bbi3wnv"))))
     (build-system python-build-system)
     (arguments
      '(#:tests? #f)) ; FIXME: Some tests are failing.
@@ -11762,7 +11748,10 @@ format.")
        ;;     (lambda _
        ;;       (zero? (system* "./bin/trial" "twisted")))))
     (propagated-inputs
-     `(("python-zope-interface" ,python-zope-interface)))
+     `(("python-zope-interface" ,python-zope-interface)
+       ("python-incremental" ,python-incremental)
+       ("python-constantly" ,python-constantly)
+       ("python-automat" ,python-automat)))
     (home-page "https://twistedmatrix.com/")
     (synopsis "Asynchronous networking framework written in Python")
     (description
@@ -14229,6 +14218,133 @@ Python.  It is based on Parsing Expression Grammars, PEG.  With pyPEG you can
 parse many formal languages.")
     (license license:gpl2)))
 
+(define-public python-incremental
+  (package
+    (name "python-incremental")
+    (version "17.5.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "incremental" version))
+       (sha256
+        (base32
+         "1cylxdz1cnkm5g3pklna3h2n0i0rks95ir1pnpxfnvpkmab1cxbv"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/hawkowl/incremental")
+    (synopsis "Library for versioning Python projects")
+    (description "Incremental is a small library that versions your Python
+projects.")
+    (license license:expat)))
+
+(define-public python2-incremental
+  (package-with-python2 python-incremental))
+
+(define-public python-automat
+  (package
+    (name "python-automat")
+    (version "0.6.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "Automat" version))
+              (sha256
+               (base32
+                "1a7nsrljysfmdqmpn2apfa1gg6rfah4y9sizvns8gb08rx7d07rw"))))
+    (build-system python-build-system)
+    ;; We disable the tests because they require python-twisted, while
+    ;; python-twisted depends on python-automat.  Twisted is optional, but the
+    ;; tests fail if it is not available.  Also see
+    ;; <https://github.com/glyph/automat/issues/71>.
+    (arguments '(#:tests? #f))
+    (native-inputs
+     `(("python-m2r" ,python-m2r)
+       ("python-setuptools-scm" ,python-setuptools-scm)
+       ("python-graphviz" ,python-graphviz)))
+    (propagated-inputs
+     `(("python-six" ,python-six)
+       ("python-attrs" ,python-attrs)))
+    (home-page "https://github.com/glyph/Automat")
+    (synopsis "Self-service finite-state machines")
+    (description "Automat is a library for concise, idiomatic Python
+expression of finite-state automata (particularly deterministic finite-state
+transducers).")
+    (license license:expat)))
+
+(define-public python2-automat
+  (package-with-python2 python-automat))
+
+(define-public python-m2r
+  (package
+    (name "python-m2r")
+    (version "0.1.12")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "m2r" version))
+              (sha256
+               (base32
+                "1axrwnf425sz4qz3c0qc7yhhki4myzb8rki7pczcsgzznzmqdyxd"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-docutils" ,python-docutils)
+       ("python-mistune" ,python-mistune)))
+    (native-inputs
+     `(("python-pygments" ,python-pygments)
+       ("python-mock" ,python-mock)))
+    (home-page "https://github.com/miyakogi/m2r")
+    (synopsis "Markdown to reStructuredText converter")
+    (description "M2R converts a markdown file including reST markups to valid
+reST format.")
+    (license license:expat)))
+
+(define-public python2-m2r
+  (package-with-python2 python-m2r))
+
+(define-public python-constantly
+  (package
+    (name "python-constantly")
+    (version "15.1.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "constantly" version))
+              (sha256
+               (base32
+                "0dgwdla5kfpqz83hfril716inm41hgn9skxskvi77605jbmp4qsq"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/twisted/constantly")
+    (synopsis "Symbolic constants in Python")
+    (description "Constantly is a Python library that provides symbolic
+constant support.  It includes collections and constants with text, numeric,
+and bit flag values.")
+    (license license:expat)))
+
+(define-public python2-constantly
+  (package-with-python2 python-constantly))
+
+(define-public python-attrs
+  (package
+    (name "python-attrs")
+    (version "17.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "attrs" version))
+              (sha256
+               (base32
+                "04gx08ikpk26wnq22f7l42gapcvk8iz1512r927k6sadz6cinkax"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-pytest" ,python-pytest)
+       ("python-hypothesis" ,python-hypothesis)
+       ("python-zope-interface" ,python-zope-interface)
+       ("python-six" ,python-six)))
+    (home-page "https://github.com/python-attrs/attrs/")
+    (synopsis "Attributes without boilerplate")
+    (description "@code{attrs} is a Python package with class decorators that
+ease the chores of implementing the most common attribute-related object
+protocols.")
+    (license license:expat)))
+
+(define-public python2-attrs
+  (package-with-python2 python-attrs))
+
 (define-public python2-cliapp
   (package
     (name "python2-cliapp")