about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEfraim Flashner2019-10-29 14:31:10 -0500
committerEfraim Flashner2019-10-29 14:32:00 -0500
commitd08442a2edca6d5de80bc3baf5c0c89acb1e8651 (patch)
treecb943e366367951bf1e0c9a98792ad9c8b663475
parent53d26a57fdee57e3112f59b828f60143041bf5ba (diff)
downloadguix-bioinformatics-d08442a2edca6d5de80bc3baf5c0c89acb1e8651.tar.gz
gn: Add mailman.
* gn/packages/mailman.scm (mailman): Add mailman and its dependants
-rw-r--r--gn/packages/mailman.scm1037
1 files changed, 1037 insertions, 0 deletions
diff --git a/gn/packages/mailman.scm b/gn/packages/mailman.scm
new file mode 100644
index 0000000..9dc459a
--- /dev/null
+++ b/gn/packages/mailman.scm
@@ -0,0 +1,1037 @@
+(define-module (gn packages mailman)
+  #:use-module ((guix licenses) #:prefix license:)
+  #:use-module (guix packages)
+  #:use-module (guix download)
+  #:use-module (guix build-system python)
+  #:use-module (gnu packages check)
+  #:use-module (gnu packages databases)
+  #:use-module (gnu packages libffi)
+  #:use-module (gnu packages python-crypto)
+  #:use-module (gnu packages python-xyz)
+  #:use-module (gnu packages python-web)
+  #:use-module (gnu packages time)
+  #:use-module (gnu packages tls))
+
+;;;
+;;;^L
+;;;
+
+(define zpl2.1
+  ((@@ (guix licenses) license) "Zope Public License 2.1"
+                                "http://old.zope.org/Resources/ZPL/"
+                                "https://directory.fsf.org/wiki/License:ZPL-2.1"))
+
+;;;
+;;;^L
+;;;
+
+(define-public mailman
+  (package
+    (name "mailman")
+    (version "3.3.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "mailman" version))
+        (sha256
+         (base32
+          "1qph9i93ndahfxi3bb2sd0kjm2c0pkh844ai6zacfmvihl1k3pvy"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-sources
+           (lambda _
+             ;; This module is built into Python 3.7+.
+             (substitute* "setup.py"
+               ((".*importlib_resources.*") ""))
+             #t)))))
+    (propagated-inputs
+     `(("python-aiosmtpd" ,python-aiosmtpd)
+       ("python-alembic" ,python-alembic)
+       ("python-atpublic" ,python-atpublic)
+       ("python-authheaders" ,python-authheaders)
+       ("python-authres" ,python-authres)
+       ("python-click" ,python-click)
+       ("python-dateutil" ,python-dateutil)
+       ("python-dnspython" ,python-dnspython)
+       ("python-falcon" ,python-falcon)
+       ("python-flufl.bounce" ,python-flufl.bounce)
+       ("python-flufl.i18n" ,python-flufl.i18n)
+       ("python-flufl.lock" ,python-flufl.lock)
+       ("python-gunicorn" ,python-gunicorn)
+       ;("python-importlib-resources" ,python-importlib-resources) ; built into python-3.7
+       ("python-lazr.config" ,python-lazr.config)
+       ("python-passlib" ,python-passlib)
+       ("python-requests" ,python-requests)
+       ("python-sqlalchemy" ,python-sqlalchemy)
+       ("python-zope.component" ,python-zope.component)
+       ("python-zope.configuration" ,python-zope.configuration)
+       ("python-zope.event" ,python-zope.event)
+       ("python-zope.interface" ,python-zope.interface)))
+    (home-page "https://www.list.org")
+    (synopsis "Mailing list manager")
+    (description
+     "GNU Mailman is software for managing email discussion and mailing
+lists.  Both users and administrators generally perform their actions in a
+web interface, although email and command-line interfaces are also provided.
+The system features built-in archiving, automatic bounce processing, content
+filtering, digest delivery, and more.")
+    (license license:gpl3+)))
+
+(define-public python-aiosmtpd
+  (package
+    (name "python-aiosmtpd")
+    (version "1.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "aiosmtpd" version))
+        (sha256
+         (base32
+          "1xdfk741pjmz1cm8dsi4n5vq4517i175rm94696m3f7kcgk7xsmp"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'delete-failing-test
+           (lambda _
+             (delete-file "aiosmtpd/tests/test_smtps.py")
+             #t))
+         (replace 'check
+           (lambda _
+             (invoke "python" "-m" "nose2" "-v"))))))
+    (native-inputs
+     `(("python-flufl.testing" ,python-flufl.testing)
+       ("python-nose2" ,python-nose2)))
+    (propagated-inputs
+     `(("python-atpublic" ,python-atpublic)))
+    (home-page "https://aiosmtpd.readthedocs.io/")
+    (synopsis "Asyncio based SMTP server")
+    (description
+     "This project is a reimplementation of the Python stdlib @code{smtpd.py}
+based on asyncio.")
+    (license license:asl2.0)))
+
+(define-public python-flufl.testing
+  (package
+    (name "python-flufl.testing")
+    (version "0.8")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "flufl.testing" version))
+        (sha256
+         (base32
+          "1nkm95mhcfhl4x5jgs6y97ikszaxsfh07nyawsih6cxxm6l62641"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-nose2" ,python-nose2)))
+    (home-page "https://gitlab.com/warsaw/flufl.testing")
+    (synopsis "Collection of test tool plugins")
+    (description
+     "A small collection of test tool plugins for nose2 and flake8.")
+    (license license:asl2.0)))
+
+(define-public python-atpublic
+  (package
+    (name "python-atpublic")
+    (version "1.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "atpublic" version))
+        (sha256
+         (base32
+          "0i3sbxkdlbb4560rrlmwwd5y4ps7k73lp4d8wnmd7ag9k426gjkx"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (invoke "python" "-m" "nose2" "-v"))))))
+    (native-inputs
+     `(("python-nose2" ,python-nose2)))
+    (home-page "https://public.readthedocs.io/")
+    (synopsis "Python library for populating __all__")
+    (description
+     "This is a very simple decorator and function which populates a modules
+@code{__all__} and optionally the module globals.  This provides both a
+pure-Python implementation and an optional C implementation.")
+    (license license:asl2.0)))
+
+(define-public python-authheaders
+  (package
+    (name "python-authheaders")
+    (version "0.12.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "authheaders" version))
+        (sha256
+         (base32
+          "1ljcp8vk2n4xwk8p758b6q5sgdicyj4gxxpkmh33mx21jscn6q4i"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-authres" ,python-authres)
+       ("python-dkimpy" ,python-dkimpy)
+       ("python-dnspython" ,python-dnspython)
+       ("python-publicsuffix" ,python-publicsuffix)))
+    (home-page "https://github.com/ValiMail/authentication-headers")
+    (synopsis "Library wrapping email authentication header verification and generation")
+    (description
+     "A library wrapping email authentication header verification and generation.")
+    (license license:expat)))
+
+(define-public python-authres
+  (package
+    (name "python-authres")
+    (version "1.2.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "authres" version))
+        (sha256
+         (base32
+          "1dr5zpqnb54h4f5ax8334l1dcp8j9083d7v4vdi1xqkwmnavklck"))))
+    (build-system python-build-system)
+    (home-page "https://launchpad.net/authentication-results-python")
+    (synopsis "Authentication Results Header Module")
+    (description
+     "This package provides RFC 5451/7001/7601 Authentication-Results Headers
+generation and parsing for Python.")
+    (license license:asl2.0)))
+
+(define-public python-flufl.bounce
+  (package
+    (name "python-flufl.bounce")
+    (version "3.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "flufl.bounce" version))
+        (sha256
+         (base32
+          "0k5kjqa3x6gvwwxyzb2vwi1g1i6asm1zw5fivylxz3d583y4kid2"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-atpublic" ,python-atpublic)
+       ("python-zope.interface" ,python-zope.interface)))
+    (native-inputs
+     `(("python-nose2" ,python-nose2)))
+    (home-page "https://fluflbounce.readthedocs.io/en/latest/")
+    (synopsis "Email bounce detectors")
+    (description "The @code{flufl.bounce} library provides a set of heuristics
+and an API for detecting the original bouncing email addresses from a bounce
+message.  Many formats found in the wild are supported, as are VERP and
+RFC 3464.")
+    (license license:asl2.0)))
+
+(define-public python-flufl.i18n
+  (package
+    (name "python-flufl.i18n")
+    (version "2.0.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "flufl.i18n" version))
+        (sha256
+         (base32
+          "1csgds59nx0ann9v2alqr69lakp1cnc1ikmbgn96l6n23js7c2ah"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-atpublic" ,python-atpublic)))
+    (home-page "https://flufli18n.readthedocs.io")
+    (synopsis "API for Python internationalization")
+    (description
+     "This package provides a high level, convenient API for managing
+internationalization translation contexts in Python application.  There is a
+simple API for single-context applications, such as command line scripts which
+only need to translate into one language during the entire course of thei
+execution.  There is a more flexible, but still convenient API for multi-context
+applications, such as servers, which may need to switch language contexts for
+different tasks.")
+    (license license:asl2.0)))
+
+(define-public python-flufl.lock
+  (package
+    (name "python-flufl.lock")
+    (version "3.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "flufl.lock" version))
+        (sha256
+         (base32
+          "0nzzd6l30ff6cwsrlrb94xzfja4wkyrqv3ydc6cz0hdbr766mmm8"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-atpublic" ,python-atpublic)))
+    (home-page "https://flufllock.readthedocs.io")
+    (synopsis "NFS-safe file locking with timeouts for POSIX systems")
+    (description
+     "This package provides NFS-safe file locking with timeouts for POSIX systems.")
+    (license license:asl2.0)))
+
+(define-public python-gunicorn
+  (package
+    (name "python-gunicorn")
+    (version "19.9.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "gunicorn" version))
+        (sha256
+         (base32
+          "1wzlf4xmn6qjirh5w81l6i6kqjnab1n1qqkh7zsj1yb6gh4n49ps"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'loosen-verion-restrictions
+           (lambda _
+             (substitute* "requirements_test.txt"
+               (("coverage.*") "coverage\n")
+               (("pytest.*") "pytest\n")
+               (("pytest-cov.*") "pytest-cov\n"))
+             #t)))))
+    (native-inputs
+     `(("python-coverage" ,python-coverage)
+       ("python-pytest" ,python-pytest)
+       ("python-pytest-cov" ,python-pytest-cov)))
+    (home-page "https://gunicorn.org")
+    (synopsis "WSGI HTTP Server for UNIX")
+    (description "Gunicorn 'Green Unicorn' is a Python WSGI HTTP Server for
+UNIX.  It's a pre-fork worker model ported from Ruby's Unicorn project.  The
+Gunicorn server is broadly compatible with various web frameworks, simply
+implemented, light on server resource usage, and fairly speedy.")
+    (license license:expat)))
+
+(define-public python-importlib-resources
+  (package
+    (name "python-importlib-resources")
+    (version "1.0.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "importlib_resources" version))
+        (sha256
+         (base32
+          "0y3hg12iby1qyaspnbisz4s4vxax7syikk3skznwqizqyv89y9yk"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-pathlib2" ,python-pathlib2)
+       ("python-typing" ,python-typing)))
+    (home-page "https://importlib-resources.readthedocs.io/")
+    (synopsis "Read resources from Python packages")
+    (description
+     "Read resources from Python packages")
+    (license license:asl2.0)))
+
+(define-public python-lazr.config
+  (package
+    (name "python-lazr.config")
+    (version "2.2.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "lazr.config" version))
+        (sha256
+         (base32
+          "1s7pyvlq06qjrkaw9r6nc290lb095n25ybzgavvy51ygpxkgqxwn"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-lazr.delegates" ,python-lazr.delegates)
+       ("python-zope.interface" ,python-zope.interface)))
+    (home-page "https://launchpad.net/lazr.config")
+    (synopsis "Create configuration schemas and process and validate configurations")
+    (description
+     "The LAZR config system is typically used to manage process configuration.
+Process configuration is for saying how things change when we run systems on
+different machines, or under different circumstances.  This system uses ini-like
+file format of section, keys, and values.  The config file supports inheritance
+to minimize duplication of information across files.  The format supports schema
+validation.")
+    (license license:lgpl3)))
+
+(define-public python-zope.component
+  (package
+    (name "python-zope.component")
+    (version "4.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.component" version))
+        (sha256
+         (base32
+          "0mafp41aqcffbfl9dsac34clc7zlpxwwzkx8jllbg4xmqckddpvf"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             (add-installed-pythonpath inputs outputs)
+             (invoke "python" "setup.py" "test"))))))
+    (propagated-inputs
+     `(("python-zope.deferredimport" ,python-zope.deferredimport)
+       ("python-zope.deprecation" ,python-zope.deprecation)
+       ("python-zope.event" ,python-zope.event)
+       ("python-zope.hookable" ,python-zope.hookable)
+       ("python-zope.interface" ,python-zope.interface)))
+    (native-inputs
+     `(("python-persistent" ,python-persistent)
+       ("python-zope.configuration" ,python-zope.configuration-bootstrap)
+       ("python-zope.i18nmessageid" ,python-zope.i18nmessageid)
+       ("python-zope.location" ,python-zope.location-bootstrap)
+       ("python-zope.proxy" ,python-zope.proxy-bootstrap)
+       ("python-zope.security" ,python-zope.security-bootstrap)
+       ("python-zope.testing" ,python-zope.testing)
+       ("python-zope.testrunner" ,python-zope.testrunner)))
+    (home-page "https://github.com/zopefoundation/zope.component")
+    (synopsis "Zope Component Architecture")
+    (description "Zope Component Architecture")
+    (license zpl2.1)))
+
+(define-public python-zope.component-bootstrap
+  (package
+    (inherit python-zope.component)
+    (arguments `(#:tests? #f))
+    (native-inputs `())
+    (properties `((hidden? . #t)))))
+
+(define-public python-zope.configuration
+  (package
+    (name "python-zope.configuration")
+    (version "4.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.configuration" version))
+        (sha256
+         (base32
+          "1qb88764fd7nkkmqv7fl9bxd1jirynkg5vbqkpqdiffnkxzp85kf"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-zope.i18nmessageid" ,python-zope.i18nmessageid)
+       ("python-zope.interface" ,python-zope.interface)
+       ("python-zope.schema" ,python-zope.schema)))
+    (native-inputs
+     `(("python-manuel" ,python-manuel)
+       ("python-zope.schema" ,python-zope.schema)
+       ("python-zope.testing" ,python-zope.testing)
+       ("python-zope.testrunner" ,python-zope.testrunner)))
+    (home-page "https://github.com/zopefoundation/zope.configuration")
+    (synopsis
+      "Zope Configuration Markup Language (ZCML)")
+    (description
+      "Zope Configuration Markup Language (ZCML)")
+    (license zpl2.1)))
+
+(define-public python-zope.configuration-bootstrap
+  (package
+    (inherit python-zope.configuration)
+    (arguments `(#:tests? #f))
+    (native-inputs `())
+    (properties `((hidden? . #t)))))
+
+(define-public python-zope.event
+  (package
+    (name "python-zope.event")
+    (version "4.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.event" version))
+        (sha256
+         (base32
+          "1ksbc726av9xacml6jhcfyn828hlhb9xlddpx6fcvnlvmpmpvhk9"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-zope.testrunner" ,python-zope.testrunner-bootstrap)))
+    (home-page "https://github.com/zopefoundation/zope.event")
+    (synopsis "Basic event publishing system")
+    (description
+     "This package provides a simple event system on which application-specific
+event systems can be built.  For example, a type-based event dispatching system
+that builds on @code{zope.interface} can be found in @code{zope.component}.  A
+simpler system is distributed with this package and is described in Class-based
+event handlers.")
+    (license zpl2.1)))
+
+(define-public python-zope.interface
+  (package
+    (name "python-zope.interface")
+    (version "4.6.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.interface" version))
+        (sha256
+         (base32
+          "1rgh2x3rcl9r0v0499kf78xy86rnmanajf4ywmqb943wpk50sg8v"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-coverage" ,python-coverage)
+       ("python-nose" ,python-nose)
+       ("python-zope.event" ,python-zope.event)))
+    (home-page "https://github.com/zopefoundation/zope.interface")
+    (synopsis "Interfaces for Python")
+    (description "Interfaces for Python")
+    (license zpl2.1)))
+
+(define-public python-dkimpy
+  (package
+    (name "python-dkimpy")
+    (version "0.9.5")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "dkimpy" version))
+        (sha256
+         (base32
+          "1wlzahsy4dz3w7dzbr6ayd2vqps1zcbj6101lbbgarn43fkpmx3b"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (add-after 'patch-source-shebangs 'patch-more-source
+           (lambda* (#:key inputs #:allow-other-keys)
+             (let ((openssl (assoc-ref inputs "openssl")))
+               (substitute* "dkim/dknewkey.py"
+                 (("/usr/bin/openssl") (string-append openssl "/bin/openssl"))))
+             #t))
+         (replace 'check
+           (lambda _
+             (invoke "python" "test.py"))))))
+    (propagated-inputs
+     `(("python-dnspython" ,python-dnspython)))
+    (native-inputs
+     `(("python-authres" ,python-authres)
+       ("python-pynacl" ,python-pynacl)))
+    (inputs
+     `(("openssl" ,openssl)))
+    (home-page "https://launchpad.net/dkimpy")
+    (synopsis "DKIM (DomainKeys Identified Mail)")
+    (description "Python module that implements @dfn{DKIM} (DomainKeys
+Identified Mail) email signing and verification (RFC6376).  It also provides
+helper scripts for command line signing and verification.  It supports DKIM
+signing/verifying of ed25519-sha256 signatures (RFC 8463).  It also supports
+the RFC 8617 Authenticated Received Chain (ARC) protocol.")
+    (license license:bsd-3)))
+
+(define-public python-lazr.delegates
+  (package
+    (name "python-lazr.delegates")
+    (version "2.0.4")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "lazr.delegates" version))
+        (sha256
+         (base32
+          "1rdnl85j9ayp8n85l0ciip621j9dcziz5qnmv2m7krgwgcn31vfx"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (invoke "python" "setup.py" "nosetests"))))))
+    (propagated-inputs
+     `(("python-nose" ,python-nose)
+       ("python-zope.interface" ,python-zope.interface)))
+    (home-page "https://launchpad.net/lazr.delegates")
+    (synopsis "Easily write objects that delegate behavior")
+    (description
+     "The @code{lazr.delegates} package makes it easy to write objects that
+delegate behavior to another object.  The new object adds some property or
+behavior on to the other object, while still providing the underlying interface,
+and delegating behavior.")
+    (license license:lgpl3)))
+
+(define-public python-zope.deferredimport
+  (package
+    (name "python-zope.deferredimport")
+    (version "4.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.deferredimport" version))
+        (sha256
+         (base32
+          "1q89v54dwniiqypjbwywwdfjdr4kdkqlyqsgrpplgvsygdg39cjp"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-zope.proxy" ,python-zope.proxy)))
+    (native-inputs
+     `(("python-zope.testrunner" ,python-zope.testrunner)))
+    (home-page "https://github.com/zopefoundation/zope.deferredimport")
+    (synopsis "Defer imports until used by code")
+    (description
+     "Often, especially for package modules, you want to import names for
+convenience, but not actually perform the imports until necessary.  The
+@code{zope.deferredimport} package provided facilities for defining names in
+modules that will be imported from somewhere else when used.  You can also cause
+deprecation warnings to be issued when a variable is used.")
+    (license zpl2.1)))
+
+(define-public python-zope.deprecation
+  (package
+    (name "python-zope.deprecation")
+    (version "4.4.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.deprecation" version))
+        (sha256
+         (base32
+          "1pz2cv7gv9y1r3m0bdv7ks1alagmrn5msm5spwdzkb2by0w36i8d"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-zope.testrunner" ,python-zope.testrunner)))
+    (home-page "https://github.com/zopefoundation/zope.deprecation")
+    (synopsis "Zope Deprecation Infrastructure")
+    (description "Zope Deprecation Infrastructure")
+    (license zpl2.1)))
+
+(define-public python-zope.hookable
+  (package
+    (name "python-zope.hookable")
+    (version "4.2.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.hookable" version))
+        (sha256
+         (base32
+          "05fy9lynyglzyiy1nbzdyv3rgvznwv0s0q0dr2hcavv6lclkkpy1"))))
+    (build-system python-build-system)
+    (native-inputs
+     `(("python-coverage" ,python-coverage)
+       ("python-zope.testing" ,python-zope.testing)))
+    (home-page "https://github.com/zopefoundation/zope.hookable")
+    (synopsis "Zope hookable")
+    (description "This package supports the efficient creation of hookable
+objects, which are callable objects that are meant to be optionally replaced.
+The idea is that you create a function that does some default thing and make i
+hookable.  Later, someone can modify what it does by calling its sethook method
+and changing its implementation.  All users of the function, including those
+that imported it, will see the change.")
+    (license zpl2.1)))
+
+(define-public python-zope.i18nmessageid
+  (package
+    (name "python-zope.i18nmessageid")
+    (version "4.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.i18nmessageid" version))
+        (sha256
+         (base32
+          "1qw1f2p4ycqrm5ja4blwv2lllnn8d3jf2ml29pwadlvmivzys4g5"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-six" ,python-six)))
+    (native-inputs
+     `(("python-coverage" ,python-coverage)
+       ("python-nose" ,python-nose)))
+    (home-page "https://github.com/zopefoundation/zope.i18nmessageid")
+    (synopsis "Message Identifiers for internationalization")
+    (description
+     "This package provides facilities for declaring messages within program
+source text; translation of the messages is the responsiblitiy of the
+@code{zope.i18n} package.")
+    (license zpl2.1)))
+
+(define-public python-zope.schema
+  (package
+    (name "python-zope.schema")
+    (version "4.9.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.schema" version))
+        (sha256
+         (base32
+          "178631dks473rfsfd46pmqipz7fdkn9bjd35j6qlgavwf2l1v5rd"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-zope.event" ,python-zope.event)
+       ("python-zope.interface" ,python-zope.interface)))
+    (native-inputs
+     `(("python-zope.i18nmessageid" ,python-zope.i18nmessageid)
+       ("python-zope.testing" ,python-zope.testing)
+       ("python-zope.testrunner" ,python-zope.testrunner)))
+    (home-page "https://github.com/zopefoundation/zope.schema")
+    (synopsis "zope.interface extension for defining data schemas")
+    (description
+     "Schemas extend the notion of interfaces to detailed descriptions of
+Attributes (but not methods).  Every schema is an interface and specifies the
+public fields of an object.  A field roughly corresponds to an attribute of a
+Python object.  But a Field provides space for at least a title and a
+description.  It can also constrain its value and provide a validation method.
+Besides you can optionally specify characteristics such as its value being
+read-only or not required.")
+    (license zpl2.1)))
+
+(define-public python-py3dns
+  (package
+    (name "python-py3dns")
+    (version "3.2.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "py3dns" version))
+        (sha256
+         (base32
+          "1r25f0ys5p37bhld7m7n4gb0lrysaym3w318w2f8bncq7r3d81qz"))))
+    (build-system python-build-system)
+    ;; This package wants to read /etc/resolv.conf. We can't patch it without
+    ;; removing functionality so we copy from Nix and "just don't build it".
+    (arguments
+     `(#:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-source
+           (lambda _
+             (substitute* "setup.py"
+               (("import DNS") "")
+               (("DNS.__version__") (string-append "\"" ,version "\"")))
+             #t)))
+       #:tests? #f)) ; Also skip the tests.
+    (home-page "https://launchpad.net/py3dns")
+    (synopsis "Python 3 DNS library")
+    (description "Python 3 DNS library")
+    (license license:psfl)))
+
+(define-public python-zope.proxy
+  (package
+    (name "python-zope.proxy")
+    (version "4.3.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.proxy" version))
+        (sha256
+         (base32
+          "05svkbri0jsavjy5jk36n1iba7z2ilb07zr8r3516765v5snjvdb"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-zope.interface" ,python-zope.interface)))
+    (native-inputs
+     `(("python-zope.security" ,python-zope.security-bootstrap)
+       ("python-zope.testrunner" ,python-zope.testrunner)))
+    (home-page "https://github.com/zopefoundation/zope.proxy")
+    (synopsis "Generic Transparent Proxies")
+    (description "zope.proxy is implemented via a C extension module, which
+lets it do things like lie about its own __class__ that are difficult in pure
+Python (and were completely impossible before metaclasses).")
+    (license zpl2.1)))
+
+(define-public python-zope.proxy-bootstrap
+  (package
+    (inherit python-zope.proxy)
+    (arguments `(#:tests? #f))
+    (native-inputs `())
+    (properties `((hidden? . #t)))))
+
+(define-public python-zope.testrunner
+  (package
+    (name "python-zope.testrunner")
+    (version "5.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.testrunner" version))
+        (sha256
+         (base32
+          "0w3q66cy4crpj7c0hw0vvvvwf3g931rnvw7wwa20av7yqvv6ajim"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; Tests can't find zope.exceptions.
+    (propagated-inputs
+     `(("python-six" ,python-six)
+       ("python-zope.exceptions" ,python-zope.exceptions)
+       ("python-zope.interface" ,python-zope.interface)))
+    (native-inputs
+     `(("python-zope.testing" ,python-zope.testing)))
+    (home-page "https://github.com/zopefoundation/zope.testrunner")
+    (synopsis "Zope testrunner script")
+    (description "This package provides a flexible test runner with layer
+support for the Zope framework.")
+    (license zpl2.1)))
+
+(define-public python-zope.testrunner-bootstrap
+  (package
+    (inherit python-zope.testrunner)
+    (arguments `(#:tests? #f))
+    (propagated-inputs
+     `(("python-six" ,python-six)
+       ("python-zope.exceptions" ,python-zope.exceptions-bootstrap)))
+    (properties `((hidden? . #t)))))
+
+(define-public python-zope.exceptions
+  (package
+    (name "python-zope.exceptions")
+    (version "4.3")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.exceptions" version))
+        (sha256
+         (base32
+          "04bjskwas17yscl8bs3l44maxspw1gdji0zcmr499fs420y9r9az"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:phases
+       (modify-phases %standard-phases
+         (replace 'check
+           (lambda _
+             (invoke "zope-testrunner" "--test-path=src" "\\[]"))))))
+    (propagated-inputs
+     `(("python-zope.interface" ,python-zope.interface)))
+    (native-inputs
+     `(("python-zope.testrunner" ,python-zope.testrunner-bootstrap)))
+    (home-page "https://github.com/zopefoundation/zope.exceptions")
+    (synopsis "Zope Exceptions")
+    (description "This package contains exception exceptions and
+ implementations which are so general purpose that they don't belong in Zope
+ application-specific packages.")
+    (license zpl2.1)))
+
+(define-public python-zope.exceptions-bootstrap
+  (package
+    (inherit python-zope.exceptions)
+    (arguments `(#:tests? #f))
+    (propagated-inputs `())
+    (native-inputs `())
+    (properties `((hidden? . #t)))))
+
+(define-public python-zope.testing
+  (package
+    (name "python-zope.testing")
+    (version "4.7")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.testing" version))
+        (sha256
+         (base32
+          "1sh3c3i0m8n8fnhqiry0bk3rr356i56ry7calmn57s1pvv8yhsyn"))))
+    (build-system python-build-system)
+    (home-page "https://github.com/zopefoundation/zope.testing")
+    (synopsis "Zope testing helpers")
+    (description "This package provides a number of Zope testing helpers")
+    (license zpl2.1)))
+
+(define-public python-persistent
+  (package
+    (name "python-persistent")
+    (version "4.5.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "persistent" version))
+        (sha256
+         (base32
+          "0slbvq1m3rilgyhj6i522rsyv592xv9pmvm61mrmgkgf40kfnz69"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-cffi" ,python-cffi)
+       ("python-zope.interface" ,python-zope.interface)))
+    (native-inputs
+     `(("python-manuel" ,python-manuel)
+       ("python-zope.testrunner" ,python-zope.testrunner)))
+    (home-page "https://github.com/zopefoundation/persistent/")
+    (synopsis "Translucent persistent objects")
+    (description "This package contains a generic persistence implementation for
+Python.  It forms the core protocol for making objects interact
+\"transparently\" with a database such as the ZODB.")
+    (license zpl2.1)))
+
+(define-public python-zope.location
+  (package
+    (name "python-zope.location")
+    (version "4.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.location" version))
+        (sha256
+         (base32
+          "1b40pzl8v00d583d3gsxv1qjdw2dhghlgkbgxl3m07d5r3izj857"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-zope.interface" ,python-zope.interface)
+       ("python-zope.proxy" ,python-zope.proxy)
+       ("python-zope.schema" ,python-zope.schema)))
+    (native-inputs
+     `(("python-zope.component" ,python-zope.component-bootstrap)
+       ("python-zope.configuration" ,python-zope.configuration-bootstrap)
+       ("python-zope.copy" ,python-zope.copy-bootstrap)
+       ("python-zope.testrunner" ,python-zope.testrunner)))
+    (home-page "https://github.com/zopefoundation/zope.location/")
+    (synopsis "Zope Location")
+    (description "Zope Location")
+    (license zpl2.1)))
+
+(define-public python-zope.location-bootstrap
+  (package
+    (inherit python-zope.location)
+    (arguments `(#:tests? #f))
+    (native-inputs `())
+    (properties `((hidden? . #t)))))
+
+(define-public python-zope.security
+  (package
+    (name "python-zope.security")
+    (version "4.3.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.security" version))
+        (sha256
+         (base32
+          "1zzaggsq4d9pslzh1h1i9qizsrykrm91iyqzi1dz0vw5rixyaj4l"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-zope.component" ,python-zope.component)
+       ("python-zope.i18nmessageid" ,python-zope.i18nmessageid)
+       ("python-zope.interface" ,python-zope.interface)
+       ("python-zope.location" ,python-zope.location)
+       ("python-zope.proxy" ,python-zope.proxy)
+       ("python-zope.schema" ,python-zope.schema)))
+    (native-inputs
+     `(("python-btrees" ,python-btrees)
+       ("python-zope.component" ,python-zope.component-bootstrap)
+       ("python-zope.configuration" ,python-zope.configuration-bootstrap)
+       ("python-zope.location" ,python-zope.location-bootstrap)
+       ("python-zope.testing" ,python-zope.testing)
+       ("python-zope.testrunner" ,python-zope.testrunner)))
+    (home-page "https://github.com/zopefoundation/zope.security")
+    (synopsis "Zope Security Framework")
+    (description "The security framework provides a generic mechanism to
+implement security policies on Python objects.")
+    (license zpl2.1)))
+
+(define-public python-zope.security-bootstrap
+  (package
+    (inherit python-zope.security)
+    (arguments `(#:tests? #f))
+    (propagated-inputs
+     `(;("python-zope.component" ,python-zope.component-bootstrap)
+       ("python-zope.i18nmessageid" ,python-zope.i18nmessageid)
+       ("python-zope.interface" ,python-zope.interface)
+       ;("python-zope.location" ,python-zope.location)
+       ("python-zope.proxy" ,python-zope.proxy-bootstrap)
+       ("python-zope.schema" ,python-zope.schema)))
+    (native-inputs `())
+    (properties `((hidden? . #t)))))
+
+(define-public python-manuel
+  (package
+    (name "python-manuel")
+    (version "1.10.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "manuel" version))
+        (sha256
+         (base32
+          "1bdzay7j70fly5fy6wbdi8fbrxjrrlxnxnw226rwry1c8a351rpy"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-six" ,python-six)))
+    (native-inputs
+     `(("python-zope.testing" ,python-zope.testing)))
+    (home-page "https://pypi.python.org/pypi/manuel")
+    (synopsis "Build tested documentation")
+    (description
+     "Manuel lets you mix and match traditional doctests with custom test syntax.")
+    (license license:asl2.0)))
+
+(define-public python-zope.copy
+  (package
+    (name "python-zope.copy")
+    (version "4.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "zope.copy" version))
+        (sha256
+         (base32
+          "06m75434krl57n6p73c2qj55k5i3fixg887j8ss01ih6zw4rvfs7"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-zope.interface" ,python-zope.interface)))
+    (native-inputs
+     `(("python-zope.component" ,python-zope.component-bootstrap)
+       ("python-zope.location" ,python-zope.location-bootstrap)
+       ("python-zope.testing" ,python-zope.testing)
+       ("python-zope.testrunner" ,python-zope.testrunner)))
+    (home-page "https://github.com/zopefoundation/zope.copy")
+    (synopsis "Pluggable object copying mechanism")
+    (description
+     "This package provides a pluggable mechanism for copying persistent objects.")
+    (license zpl2.1)))
+
+(define-public python-zope.copy-bootstrap
+  (package
+    (inherit python-zope.copy)
+    (arguments `(#:tests? #f))
+    (native-inputs `())
+    (properties `((hidden? . #t)))))
+
+(define-public python-btrees
+  (package
+    (name "python-btrees")
+    (version "4.6.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "BTrees" version))
+        (sha256
+         (base32
+          "0bmkpg6z5z47p21340nyrfbdv2jkfp80yv085ndgbwaas1zi7ac9"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-persistent" ,python-persistent)
+       ("python-zope.interface" ,python-zope.interface)))
+    (native-inputs
+     `(("python-persistent" ,python-persistent)
+       ("python-transaction" ,python-transaction)
+       ("python-zope.testrunner" ,python-zope.testrunner)))
+    (home-page "https://github.com/zopefoundation/BTrees")
+    (synopsis "Scalable persistent object containers")
+    (description
+     "This package contains a set of persistent object containers built around a
+modified BTree data structure.  The trees are optimized for use inside ZODB's
+\"optimistic concurrency\" paradigm, and include explicit resolution of
+conflicts detected by that mechanism.")
+    (license zpl2.1)))
+
+(define-public python-transaction
+  (package
+    (name "python-transaction")
+    (version "2.4.0")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "transaction" version))
+        (sha256
+         (base32
+          "17wz1y524ca07vr03yddy8dv0gbscs06dbdywmllxv5rc725jq3j"))))
+    (build-system python-build-system)
+    (propagated-inputs
+     `(("python-zope.interface" ,python-zope.interface)))
+    (native-inputs
+     `(("python-coverage" ,python-coverage)
+       ("python-mock" ,python-mock)
+       ("python-nose" ,python-nose)))
+    (home-page "https://github.com/zopefoundation/transaction")
+    (synopsis "Transaction management for Python")
+    (description "This package contains a generic transaction implementation
+for Python.  It is mainly used by the ZODB.")
+    (license zpl2.1)))