Subject: Re: bug#26524: Add conda and dependencies

From: Ricardo Wurmus <[email-masked]>
Date: Sun, 23 Apr 2017 15:21:25 +0200

Hi Frederick,

> This is bug is to track adding conda and its dependencies. I will be
> sending patches adding the dependencies for conda here, until we get
> conda in mainline.

Thanks a lot for your patches!

I have a couple of comments for the first batch of patches.

I’m not sure that the strict version requirements are actually
reasonable.  Instead of packaging older versions it may make more sense
to patch away the version range from the setup.py files.

> * gnu/packages/python.scm (python-radon): New variable.
> ---
>  gnu/packages/python.scm | 40 +++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 39 insertions(+), 1 deletion(-)
>
> diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
> index 231c629..23b6d86 100644
> --- a/gnu/packages/python.scm
> +++ b/gnu/packages/python.scm
> @@ -13950,7 +13950,7 @@ recognize TestCases.")
>    (package-with-python2 python-mando))
>
>  (define-public python-mando-0.3.1
> -  ;; python-radon (version 1.5.0) has a requirement
> +  ;; python-radon has a requirement
>    ;; for mando<0.4,>=0.3
>    (package
>      (inherit python-mando)
> @@ -13965,3 +13965,41 @@ recognize TestCases.")
>         (sha256
>          (base32
>           "17jlkdpqw22z1nyml5ybslilqkzmnk0dxxjml8bfghav1l5hbwd2"))))))
> +
> +(define-public python-radon
> +  ;; xenon has a hard requirement for radon>=1.4.0,<1.5
> +  (package
> +    (name "python-radon")
> +    (version "1.4.2")

It would be good to add “python-radon” at the latest version and then
create a variant called “python-radon-1.4” with the comment that it is
required by “python-xenon”.

> +(define-public python2-radon
> +  (package-with-python2 python-radon))

You only mentioned “python-radon” in the commit summary.  Unless you
really need the Python 2 variant I’m thinking that maybe we shouldn’t
add it.

What do you think?

If it’s needed for conda then please keep it but mention it in the
commit summary, e.g.:

--8<---------------cut here---------------start------------->8---
gnu: Add python-radon.

* gnu/packages/python.scm (python-radon, python2-radon): New variables.
--8<---------------cut here---------------end--------------->8---

> * gnu/packages/python.scm (python-httpbin): New variable.
> ---
>  gnu/packages/python.scm | 27 +++++++++++++++++++++++++++
>  1 file changed, 27 insertions(+)

The same comment as above applies.  Please mention or drop the python2
variant.  I think this package should go to “(gnu packages web)” where
we keep similar packages; the “(gnu packages python)” module is a little
too crowded.

> +
> +(define-public python-httpbin
> +  (package
> +    (name "python-httpbin")
> +    (version "0.5.0")
> +    (source
> +     (origin
> +       (method url-fetch)
> +       (uri (pypi-uri "httpbin" version))
> +       (sha256
> +        (base32
> +         "1dc92lnk846hpilslrqnr63x55cxll4qx88gif8fm521gv9cbyvr"))))
> +    (build-system python-build-system)
> +    (propagated-inputs
> +     `(("python-decorator" ,python-decorator)
> +       ("python-flask" ,python-flask)
> +       ("python-itsdangerous" ,python-itsdangerous)
> +       ("python-markupsafe" ,python-markupsafe)
> +       ("python-six" ,python-six)))
> +    (home-page "https://github.com/Runscope/httpbin")
> +    (synopsis "HTTP Request and Response Service")

Please change this to “HTTP request and response service”.

> +    (description "HTTP Request and Response Service which covers all kinds of HTTP
> +scenarios")

Please use full sentences and punctuation in the description.

> +    (license license:expat)))

Actually, this is under the ISC license:

    https://github.com/kennethreitz/httpbin/blob/master/LICENSE

> +
> +(define-public python2-httpbin
> +  (package-with-python2 python-httpbin))

See above.

> From e9764356e3601c2927021eb5b687bc432b1eff20 Mon Sep 17 00:00:00 2001
> From: Muriithi Frederick Muriuki <[email-masked]>
> Date: Fri, 14 Apr 2017 10:55:59 +0300
> Subject: [PATCH 03/20] gnu: Add python-pytest-httpbin
>
> * gnu/packages/python.scm (python-pytest-httpbin): New variable.
> ---
>  gnu/packages/python.scm | 28 ++++++++++++++++++++++++++++
>  1 file changed, 28 insertions(+)
>
> diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
> index 618b965..73d217b 100644
> --- a/gnu/packages/python.scm
> +++ b/gnu/packages/python.scm
> @@ -14030,3 +14030,31 @@ scenarios")
>
>  (define-public python2-httpbin
>    (package-with-python2 python-httpbin))
> +
> +(define-public python-pytest-httpbin
> +  ;; httpretty requires pytest-httpbin==0.0.7
> +  (package
> +    (name "python-pytest-httpbin")
> +    (version "0.0.7")

Please do the same as I suggested above: package the latest version and
then create a variant using this version, and add a comment on top.
Before creating the variant, however, it would be good to check if this
exact version requirement is actually reasonable.

> +    (source
> +     (origin
> +       (method url-fetch)
> +       (uri (pypi-uri "pytest-httpbin" version))
> +       (sha256
> +        (base32
> +         "08ghq923dn33rllip3vap2p9fb680g0i96jdn5lcpfy8amq8mbq3"))))
> +    (build-system python-build-system)
> +    (propagated-inputs
> +     `(("python-six" ,python-six)
> +       ("python-httpbin" ,python-httpbin)
> +       ("python-pytest" ,python-pytest)))
> +    (home-page
> +     "https://github.com/kevin1024/pytest-httpbin")
> +    (synopsis
> +     "Easily test your HTTP library against a local copy of httpbin")

I would change this to “Test

> +    (description
> +     "Easily test your HTTP library against a local copy of httpbin")

Here’s a better description:

    “Pytest-httpbin creates a @code{pytest} fixture that is
dependency-injected into your tests.  It automatically starts up a HTTP
server in a separate thread running @code{httpbin} and provides your
test with the URL in the fixture.”

> +    (license license:expat)))
> +
> +(define-public python2-pytest-httpbin
> +  (package-with-python2 python-pytest-httpbin))

See above.

> From 1f4c44b1d47c2cc75cef75704ccd1cc386d5a862 Mon Sep 17 00:00:00 2001
> From: Muriithi Frederick Muriuki <[email-masked]>
> Date: Fri, 14 Apr 2017 11:02:10 +0300
> Subject: [PATCH 04/20] gnu: Add python-sphinx-rtd-theme-0.1.9
>
> * gnu/packages/python.scm (python-sphinx-rtd-theme-0.1.9) New variable
                                                           ^            ^
                                                           :            .

> ---
>  gnu/packages/python.scm | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
>
> diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
> index 73d217b..631b6fd 100644
> --- a/gnu/packages/python.scm
> +++ b/gnu/packages/python.scm
> @@ -14058,3 +14058,24 @@ scenarios")
>
>  (define-public python2-pytest-httpbin
>    (package-with-python2 python-pytest-httpbin))
> +
> +(define-public python-sphinx-rtd-theme-0.1.9
> +  ;; python-httpretty has a hard requirement for
> +  ;; python-sphinx-rtd-theme version 0.1.9

Are these themes so different?  Does it really make sense to use this
older variant instead of the latest version?

> +  (package
> +    (inherit python-sphinx-rtd-theme)
> +    (name "python-sphinx-rtd-theme")
> +    (version "0.1.9")
> +    (source
> +     (origin
> +       (method url-fetch)
> +       (uri (pypi-uri "sphinx_rtd_theme" version))
> +       (sha256
> +        (base32
> +         "18d0r63w7jpdrk4q5qy26n08vdlmnj9sar93akwjphyambw4cf17"))))
> +    (propagated-inputs
> +     `(("python-sphinx" ,python-sphinx-1.5.3)
> +       ("python-snowballstemmer" ,python-snowballstemmer)))))

Does it really make sense to override the Sphinx version here?  Can the
latest version be used?

> +
> +(define-public python2-sphinx-rtd-theme-0.1.9
> +  (package-with-python2 python-sphinx-rtd-theme-0.1.9))

See above.

> From 77e2a627333baa82d4f83882e5bda629e5f2a381 Mon Sep 17 00:00:00 2001
> From: Muriithi Frederick Muriuki <[email-masked]>
> Date: Fri, 14 Apr 2017 11:06:00 +0300
> Subject: [PATCH 05/20] gnu: Add python-sphinx-1.3.3
>
> * gnu/packages/python.scm (python-sphinx-1.3.3): New variable.
> ---
>  gnu/packages/python.scm | 37 +++++++++++++++++++++++++++++++++++++
>  1 file changed, 37 insertions(+)
>
> diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
> index 631b6fd..a849e70 100644
> --- a/gnu/packages/python.scm
> +++ b/gnu/packages/python.scm
> @@ -14079,3 +14079,40 @@ scenarios")
>
>  (define-public python2-sphinx-rtd-theme-0.1.9
>    (package-with-python2 python-sphinx-rtd-theme-0.1.9))
> +
> +(define-public python-sphinx-1.3.3
> +  ;; python-httpretty has a hard requirement for
> +  ;; sphinx == 1.3.3

Hmm, yet another variant of Sphinx?  We already have the latest version
and version 1.5.3.  Can we really not do without this variant?

Also, please put this where the two other Sphinx packages are defined;
it’s best to keep them all together.

> +  (package
> +    (inherit python-sphinx)
> +    (name "python-sphinx")
> +    (version "1.3.3")
> +    (source
> +     (origin
> +       (method url-fetch)
> +       (uri (pypi-uri "Sphinx" version))
> +       (sha256
> +        (base32
> +         "1n3h08qxfx9bywv7nhjz0p5bpp1xgy4nzalxr3mx6syra7rvyxs0"))))
> +    (arguments
> +     `(#:phases
> +       (modify-phases %standard-phases
> +         (replace 'check
> +                  (lambda _
> +                    ;; Requires Internet access.
> +                    (delete-file "tests/test_build.py")
> +                    (delete-file "tests/test_build_applehelp.py")
> +                    (delete-file "tests/test_i18n.py")
> +                    (delete-file "tests/test_build_html.py")
> +                    (delete-file "tests/test_build_texinfo.py")
> +                    (delete-file "tests/test_build_latex.py")
> +                    (zero? (system* "make" "test")))))))
> +    (native-inputs
> +     `(("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)

You defined another theme above.  Are you sure that this latest version
of the theme package should be used here?

> +       ("python-nose" ,python-nose)
> +       ("graphviz" ,graphviz)
> +       ("python-html5lib" ,python-html5lib)
> +       ("python-mock" ,python-mock)))))
> +
> +(define-public python2-sphinx-1.3.3
> +  (package-with-python2 python-sphinx-1.3.3))

Please only provide this variant if it is really needed.  See above for
comment on commit summary.

> From 075fec8683fec552e030c4c5f4de92dd3d4942eb Mon Sep 17 00:00:00 2001
> From: Muriithi Frederick Muriuki <[email-masked]>
> Date: Fri, 14 Apr 2017 11:08:32 +0300
> Subject: [PATCH 06/20] gnu: Add python-coverage-4.0.3
>
> * gnu/packages/python.scm (python-coverage-4.0.3): New variable.
> ---
>  gnu/packages/python.scm | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
>
> diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
> index a849e70..1ec1744 100644
> --- a/gnu/packages/python.scm
> +++ b/gnu/packages/python.scm
> @@ -14116,3 +14116,20 @@ scenarios")
>
>  (define-public python2-sphinx-1.3.3
>    (package-with-python2 python-sphinx-1.3.3))
> +
> +(define-public python-coverage-4.0.3
> +  ;; httpretty has a hard requirement for coverage==4.0.3
> +  (package
> +    (inherit python-coverage)
> +    (name "python-coverage")
> +    (version "4.0.3")
> +    (source
> +     (origin
> +       (method url-fetch)
> +       (uri (pypi-uri "coverage" version))
> +       (sha256
> +        (base32
> +         "0qjlja8ny4gcfp8abqfwdrvr8qw9kr69lkja0b4cqqbsdmdjgcc5"))))))

Please double-check that we httpretty must use this exact version.
Otherwise you could patch the version check in “setup.py”.

> +(define-public python2-coverage-4.0.3
> +  (package-with-python2 python-coverage-4.0.3))

See above :)

> From 851864f62e82a10720cfe24642d22790f662f6bc Mon Sep 17 00:00:00 2001
> From: Muriithi Frederick Muriuki <[email-masked]>
> Date: Fri, 14 Apr 2017 11:12:38 +0300
> Subject: [PATCH 07/20] gnu: Add python-urllib3-1.12
>
> * gnu/packages/python.scm (python-urllib3-1.12): New variable.
> ---
>  gnu/packages/python.scm | 16 ++++++++++++++++
>  1 file changed, 16 insertions(+)
>
> diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
> index 1ec1744..9cb27d8 100644
> --- a/gnu/packages/python.scm
> +++ b/gnu/packages/python.scm
> @@ -14133,3 +14133,19 @@ scenarios")
>
>  (define-public python2-coverage-4.0.3
>    (package-with-python2 python-coverage-4.0.3))
> +
> +(define-public python-urllib3-1.12
> +  (package
> +    (inherit python-urllib3)
> +    (name "python-urllib3")
> +    (version "1.12")
> +    (source
> +     (origin
> +       (method url-fetch)
> +       (uri (pypi-uri "urllib3" version))
> +       (sha256
> +        (base32
> +         "1ikj72kd4cdcq7pmmcd5p6s9dvp7wi0zw01635v4xzkid5vi598f"))))))

Why is this needed?  If it is really necessary, please add a comment above.

> +(define-public python2-urllib3-1.12
> +  (package-with-python2 python-urllib3-1.12))

See above :)

> From 45f52eee27ac62a7f2b5bc2acbd289d0151a7581 Mon Sep 17 00:00:00 2001
> From: Muriithi Frederick Muriuki <[email-masked]>
> Date: Fri, 14 Apr 2017 11:23:33 +0300
> Subject: [PATCH 08/20] gnu: Add python-sure
>
> * gnu/package/python.scm (python-sure): New variable.
> ---
>  gnu/packages/python.scm | 30 ++++++++++++++++++++++++++++++
>  1 file changed, 30 insertions(+)
>
> diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
> index 9cb27d8..951b7c7 100644
> --- a/gnu/packages/python.scm
> +++ b/gnu/packages/python.scm
> @@ -14149,3 +14149,33 @@ scenarios")
>
>  (define-public python2-urllib3-1.12
>    (package-with-python2 python-urllib3-1.12))
> +
> +(define-public python-sure
> +  (package
> +    ;; httpretty has a hard requirement for sure==1.2.24

Please see my comments above for how to handle this.  Create a package
for the latest version, then inherit from it for “python-sure-1.2”.  But
also check that httpretty really won’t work with the latest version.  It
would be much better to patch httpretty than to add dozens of package
variants for one package.

> +    (name "python-sure")
> +    (version "1.2.24")
> +    (source
> +     (origin
> +       (method url-fetch)
> +       (uri (pypi-uri "sure" version))
> +       (sha256
> +        (base32
> +         "1lyjq0rvkbv585dppjdq90lbkm6gyvag3wgrggjzyh7cpyh5c12w"))))
> +    (build-system python-build-system)
> +    (propagated-inputs
> +     `(("python-mock" ,python-mock)
> +       ("python-six" ,python-six)))
> +    (native-inputs
> +     `(("python-nose" ,python-nose)))
> +    (home-page
> +     "http://github.com/gabrielfalcao/sure")
> +    (synopsis
> +     "Sure is an automated testing library in python for python")
> +    (description
> +     "Sure is a python library for python that leverages a DSL for writing assertions.
> +Sure is heavily inspired by @code{RSpec Expectations} and
> @code{should.js}")

Please change this to:

    "Sure is a Python library that leverages a DSL for writing
assertions.  Sure is heavily inspired by @code{RSpec Expectations} and
@code{should.js}."

> +    (license license:gpl3)))

This is actually GPLv3 or later.  Please use “license:gpl3+”.

> +
> +(define-public python2-sure
> +  (package-with-python2 python-sure))

See above.

> From fc1780bf7930de8c6b96966e19e7ba4aecf52589 Mon Sep 17 00:00:00 2001
> From: Muriithi Frederick Muriuki <[email-masked]>
> Date: Fri, 14 Apr 2017 11:35:40 +0300
> Subject: [PATCH 09/20] gnu: Add python-couleur
>
> * gnu/packages/python.scm (python-couleur): New variable.
> ---
>  gnu/packages/python.scm | 29 +++++++++++++++++++++++++++++
>  1 file changed, 29 insertions(+)
>
> diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
> index 951b7c7..148ed74 100644
> --- a/gnu/packages/python.scm
> +++ b/gnu/packages/python.scm
> @@ -14179,3 +14179,32 @@ Sure is heavily inspired by @code{RSpec Expectations} and @code{should.js}")
>
>  (define-public python2-sure
>    (package-with-python2 python-sure))
> +
> +(define-public python-couleur
> +  (package
> +    (name "python-couleur")
> +    (version "0.6.2")
> +    (source
> +     (origin
> +       (method url-fetch)
> +       (uri (pypi-uri "couleur" version))
> +       (sha256
> +        (base32
> +         "1qqaxyqz74wvid0cr119dhcwz0h0if5b5by44zl49pd5z65v58k1"))))
> +    (build-system python-build-system)
> +    (arguments
> +     `(;; The package builds successfully with python3, but the
> +       ;; tests are python-2 dependent, (strings of the form
> +       ;; ur'val-of-str' and imports of python-2 specific
> +       ;; modules)
> +       #:tests? #f))

As far as I can tell, this is not a problem of testing.  The package may
simply not work with Python 3 at all.  I tried to import the package:

--8<---------------cut here---------------start------------->8---
rekado in guix: ./pre-inst-env guix environment --ad-hoc python-wrapper python-couleur
rekado in guix [env]: python
Python 3.5.3 (default, Jan  1 1970, 00:00:01)
[GCC 5.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import couleur
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/gnu/store/yc75aildgdxz7zcm0m2ffdn8hgysb777-profile/lib/python3.5/site-packages/couleur/__init__.py", line 104
    up_count_regex = re.compile(wrap_escaped(ur'up'))
                                                  ^
SyntaxError: invalid syntax
rekado in guix [env]:
--8<---------------cut here---------------end--------------->8---

I don’t think it’s right to disable the tests here.  The Python 3
variant seems to be genuinely broken.

> +    (home-page
> +     "http://github.com/gabrielfalcao/couleur")
> +    (synopsis
> +     "ANSI terminal tool for python, colored shell and other handy
> fancy features")

Please capitalize “python”.  If possible, please shorten it.

> +    (description
> +     "Couleur is a handy tool to play around with ANSI features in a
> unix terminal.")

I would remove “unix”.

> +    (license license:asl2.0)))

The license seems to be GPLv3+.  The license headers in
“couleur/__init.py__” and “setup.py” both state GPLv3+.  Only the
classifiers section in “setup.py” says “License :: OSI Approved ::
Apache Software License”.

> +
> +(define-public python2-couleur
> +  (package-with-python2 python-couleur))

See above.

Could you please review the comments so far and send updated patches?

--
Ricardo

GPG: BCA6 89B6 3655 3801 C3C6  2150 197A 5888 235F ACAC
https://elephly.net