Subject: Certbot with Python 3

From: Leo Famulari <[email-masked]>
Date: Sun, 7 May 2017 14:46:10 -0400

The latest release of Certbot and the acme library can use Python 3 [0].

These patches create a new python-mock@2 variable, and then upgrade
certbot and python-acme to use Python 3 by default. I did some light
testing by renewing some certificates.

[0]
https://github.com/certbot/certbot/pull/4568/commits/48b47274e7e6b11b7748b72a8e87add3f218e8b7
From 89835ec0ed5d9e1b89e70ab73af4bc27be8daf94 Mon Sep 17 00:00:00 2001
From: Leo Famulari <[email-masked]>
Date: Sun, 7 May 2017 14:31:44 -0400
Subject: [PATCH 1/2] gnu: Add python-mock-2.

* gnu/packages/python.scm (python-mock-2): New variable.
---
 gnu/packages/python.scm | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/gnu/packages/python.scm b/gnu/packages/python.scm
index 4c7aee20c..3f2a5b842 100644
--- a/gnu/packages/python.scm
+++ b/gnu/packages/python.scm
@@ -920,6 +920,24 @@ have been used.")
 (define-public python2-mock
   (package-with-python2 python-mock))
 
+;;; Some packages (notably, certbot and python-acme) rely on this newer version
+;;; of python-mock. However, a large number of packages fail to build with
+;;; mock@2, so we add a new variable for now. Also, there may be a dependency
+;;; cycle between mock and six, so we avoid creating python2-mock@2 for now.
+(define-public python-mock-2
+  (package
+    (inherit python-mock)
+    (version "2.0.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "mock" version))
+        (sha256
+         (base32
+          "1flbpksir5sqrvq2z0dp8sl4bzbadg21sj4d42w3klpdfvgvcn5i"))))
+    (propagated-inputs
+     `(("python-pbr" ,python-pbr-minimal)
+       ,@(package-propagated-inputs python-mock)))))
 
 (define-public python-setuptools
   (package
-- 
2.12.2

From 8eb108f21146ec9c02c5e276d8b7ad6a990c8cd1 Mon Sep 17 00:00:00 2001
From: Leo Famulari <[email-masked]>
Date: Sat, 6 May 2017 15:58:16 -0400
Subject: [PATCH 2/2] gnu: certbot: Build with Python 3.

* gnu/packages/tls.scm (certbot): Use python-3 to build.
[native-inputs, propagated-inputs]: Use Python 3 variants of dependencies. Use
python-mock-2.
---
 gnu/packages/tls.scm | 42 ++++++++++++++++++++----------------------
 1 file changed, 20 insertions(+), 22 deletions(-)

diff --git a/gnu/packages/tls.scm b/gnu/packages/tls.scm
index 1516fb852..6790e1797 100644
--- a/gnu/packages/tls.scm
+++ b/gnu/packages/tls.scm
@@ -482,7 +482,6 @@ security, and applying best practice development processes.")
        (base32
         "0hrmh28rrc0fsiw6nqfwbkwb1s4nkl54x50c0g0xlnp86752nzff"))))
     (build-system python-build-system)
-
     (arguments
      `(#:phases
        (modify-phases %standard-phases
@@ -507,7 +506,7 @@ security, and applying best practice development processes.")
                #t))))))
     ;; TODO: Add optional inputs for testing.
     (native-inputs
-     `(("python-mock" ,python-mock)
+     `(("python-mock" ,python-mock-2)
        ;; For documentation
        ("python-sphinx" ,python-sphinx)
        ("python-sphinxcontrib-programoutput" ,python-sphinxcontrib-programoutput)
@@ -543,8 +542,7 @@ security, and applying best practice development processes.")
                 "0hbp3njss01a0d3brvcfzja0w0j9plwrv6l70jsfvnhy3rrd7bcq"))))
     (build-system python-build-system)
     (arguments
-     `(#:python ,python-2
-       ,@(substitute-keyword-arguments (package-arguments python-acme)
+     `(,@(substitute-keyword-arguments (package-arguments python-acme)
            ((#:phases phases)
             `(modify-phases ,phases
               (replace 'install-documentation
@@ -559,27 +557,27 @@ security, and applying best practice development processes.")
                     #t))))))))
     ;; TODO: Add optional inputs for testing.
     (native-inputs
-     `(("python2-nose" ,python2-nose)
-       ("python2-mock" ,python2-mock)
+     `(("python-nose" ,python-nose)
+       ("python-mock" ,python-mock-2)
        ;; For documentation
-       ("python2-sphinx" ,python2-sphinx)
-       ("python2-sphinx-rtd-theme" ,python2-sphinx-rtd-theme)
-       ("python2-sphinx-repoze-autointerface" ,python2-sphinx-repoze-autointerface)
-       ("python2-sphinxcontrib-programoutput" ,python2-sphinxcontrib-programoutput)
+       ("python-sphinx" ,python-sphinx)
+       ("python-sphinx-rtd-theme" ,python-sphinx-rtd-theme)
+       ("python-sphinx-repoze-autointerface" ,python-sphinx-repoze-autointerface)
+       ("python-sphinxcontrib-programoutput" ,python-sphinxcontrib-programoutput)
        ("texinfo" ,texinfo)))
     (propagated-inputs
-     `(("python2-acme" ,python2-acme)
-       ("python2-zope-interface" ,python2-zope-interface)
-       ("python2-pyrfc3339" ,python2-pyrfc3339)
-       ("python2-pyopenssl" ,python2-pyopenssl)
-       ("python2-configobj" ,python2-configobj)
-       ("python2-configargparse" ,python2-configargparse)
-       ("python2-zope-component" ,python2-zope-component)
-       ("python2-parsedatetime" ,python2-parsedatetime)
-       ("python2-six" ,python2-six)
-       ("python2-psutil" ,python2-psutil)
-       ("python2-requests" ,python2-requests)
-       ("python2-pytz" ,python2-pytz)))
+     `(("python-acme" ,python-acme)
+       ("python-zope-interface" ,python-zope-interface)
+       ("python-pyrfc3339" ,python-pyrfc3339)
+       ("python-pyopenssl" ,python-pyopenssl)
+       ("python-configobj" ,python-configobj)
+       ("python-configargparse" ,python-configargparse)
+       ("python-zope-component" ,python-zope-component)
+       ("python-parsedatetime" ,python-parsedatetime)
+       ("python-six" ,python-six)
+       ("python-psutil" ,python-psutil)
+       ("python-requests" ,python-requests)
+       ("python-pytz" ,python-pytz)))
     (synopsis "Let's Encrypt client by the Electronic Frontier Foundation")
     (description "Certbot automatically receives and installs X.509 certificates
 to enable Transport Layer Security (TLS) on servers.  It interoperates with the
-- 
2.12.2