* Python package naming: Dots vs hyphens @ 2019-11-06 6:49 pelzflorian (Florian Pelz) 2019-11-06 7:19 ` Efraim Flashner 2019-11-10 10:57 ` Andreas Enge 0 siblings, 2 replies; 15+ messages in thread From: pelzflorian (Florian Pelz) @ 2019-11-06 6:49 UTC (permalink / raw) To: guix-devel Shall I rename python-zope-* to python-zope.*? I am in the process of packaging mailman 3 which according to the pypi importer needs packages like python-flufl.bounce python-flufl.i18n python-flufl.lock python-lazr.config python-lazr.delegates python-zope.component python-zope.configuration python-zope.configuration python-zope.event python-zope.interface However the zope ones have already been added since 2fc5f186801, but with a hyphen instead of a dot. Which one is correct? Shall I rename python-zope-* to python-zope.*? Or shall I correct the pypi importer? Ignore it? Regards, Florian ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Python package naming: Dots vs hyphens 2019-11-06 6:49 Python package naming: Dots vs hyphens pelzflorian (Florian Pelz) @ 2019-11-06 7:19 ` Efraim Flashner 2019-11-06 13:13 ` pelzflorian (Florian Pelz) ` (2 more replies) 2019-11-10 10:57 ` Andreas Enge 1 sibling, 3 replies; 15+ messages in thread From: Efraim Flashner @ 2019-11-06 7:19 UTC (permalink / raw) To: pelzflorian (Florian Pelz); +Cc: guix-devel, pjotr2019 [-- Attachment #1: Type: text/plain, Size: 1666 bytes --] On Wed, Nov 06, 2019 at 07:49:56AM +0100, pelzflorian (Florian Pelz) wrote: > Shall I rename python-zope-* to python-zope.*? > For new packages I would use whatever upstream uses in regard to '-' vs '.'. For existing ones, how many are there? It might be best to just leave them as-is rather than go through the dance of deprecating the old packages. > I am in the process of packaging mailman 3 which according to the pypi > importer needs packages like > > python-flufl.bounce > python-flufl.i18n > python-flufl.lock > python-lazr.config > python-lazr.delegates > python-zope.component > python-zope.configuration > python-zope.configuration > python-zope.event > python-zope.interface > I've actually last week started working on that. I've only done the python part, haven't searched for any javascript or font-awesome which I'm pretty sure I saw. I've also started working on a service for it which I haven't committed yet, but it looks like it's going to be complex. https://gitlab.com/genenetwork/guix-bioinformatics/blob/master/gn/packages/mailman.scm > > However the zope ones have already been added since 2fc5f186801, but > with a hyphen instead of a dot. Which one is correct? Shall I rename > python-zope-* to python-zope.*? Or shall I correct the pypi importer? > Ignore it? > 'guix package -A python-zope' lists them all as having a dash, I'd just go ahead and make them all dashes. -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Python package naming: Dots vs hyphens 2019-11-06 7:19 ` Efraim Flashner @ 2019-11-06 13:13 ` pelzflorian (Florian Pelz) 2019-11-07 7:34 ` Efraim Flashner 2019-11-06 13:18 ` Mailman packaging (was: Re: Python package naming: Dots vs hyphens) pelzflorian (Florian Pelz) 2019-11-06 13:53 ` Python package naming: Dots vs hyphens Tobias Geerinckx-Rice 2 siblings, 1 reply; 15+ messages in thread From: pelzflorian (Florian Pelz) @ 2019-11-06 13:13 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel, pjotr2019 I reply in two e-mails. On Wed, Nov 06, 2019 at 09:19:17AM +0200, Efraim Flashner wrote: > On Wed, Nov 06, 2019 at 07:49:56AM +0100, pelzflorian (Florian Pelz) wrote: > > Shall I rename python-zope-* to python-zope.*? > > > > For new packages I would use whatever upstream uses in regard to '-' vs > '.'. For existing ones, how many are there? It might be best to just > leave them as-is rather than go through the dance of deprecating the old > packages. > > […] > > > > However the zope ones have already been added since 2fc5f186801, but > > with a hyphen instead of a dot. Which one is correct? Shall I rename > > python-zope-* to python-zope.*? Or shall I correct the pypi importer? > > Ignore it? > > > > 'guix package -A python-zope' lists them all as having a dash, I'd just > go ahead and make them all dashes. > I suppose the dance will eventually pay off. I see you have repackaged many zope packages and at least some existing zope packages are out of date. Regards, Florian ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Python package naming: Dots vs hyphens 2019-11-06 13:13 ` pelzflorian (Florian Pelz) @ 2019-11-07 7:34 ` Efraim Flashner 0 siblings, 0 replies; 15+ messages in thread From: Efraim Flashner @ 2019-11-07 7:34 UTC (permalink / raw) To: pelzflorian (Florian Pelz); +Cc: guix-devel, pjotr2019 [-- Attachment #1: Type: text/plain, Size: 1686 bytes --] On Wed, Nov 06, 2019 at 02:13:36PM +0100, pelzflorian (Florian Pelz) wrote: > I reply in two e-mails. > > On Wed, Nov 06, 2019 at 09:19:17AM +0200, Efraim Flashner wrote: > > On Wed, Nov 06, 2019 at 07:49:56AM +0100, pelzflorian (Florian Pelz) wrote: > > > Shall I rename python-zope-* to python-zope.*? > > > > > > > For new packages I would use whatever upstream uses in regard to '-' vs > > '.'. For existing ones, how many are there? It might be best to just > > leave them as-is rather than go through the dance of deprecating the old > > packages. > > > > […] > > > > > > However the zope ones have already been added since 2fc5f186801, but > > > with a hyphen instead of a dot. Which one is correct? Shall I rename > > > python-zope-* to python-zope.*? Or shall I correct the pypi importer? > > > Ignore it? > > > > > > > 'guix package -A python-zope' lists them all as having a dash, I'd just > > go ahead and make them all dashes. > > > > > > I suppose the dance will eventually pay off. I see you have > repackaged many zope packages and at least some existing zope packages > are out of date. > Ooops, I didn't even notice that some of them were just repackaged. python-zope-event is already at 4.4, I packaged 4.4 again as python-zope.event. I'll have to go through and see about merging them. In any event, an independent repackaging is at least a useful way to see if the package could use any changes. -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Mailman packaging (was: Re: Python package naming: Dots vs hyphens) 2019-11-06 7:19 ` Efraim Flashner 2019-11-06 13:13 ` pelzflorian (Florian Pelz) @ 2019-11-06 13:18 ` pelzflorian (Florian Pelz) 2019-11-13 22:16 ` pelzflorian (Florian Pelz) 2019-11-18 10:13 ` Efraim Flashner 2019-11-06 13:53 ` Python package naming: Dots vs hyphens Tobias Geerinckx-Rice 2 siblings, 2 replies; 15+ messages in thread From: pelzflorian (Florian Pelz) @ 2019-11-06 13:18 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel, pjotr2019 Long e-mail / review follows. Feel free to disagree. On Wed, Nov 06, 2019 at 09:19:17AM +0200, Efraim Flashner wrote: > On Wed, Nov 06, 2019 at 07:49:56AM +0100, pelzflorian (Florian Pelz) wrote: > > I am in the process of packaging mailman 3 which according to the pypi > > importer needs packages like > > > > python-flufl.bounce > > python-flufl.i18n > > python-flufl.lock > > python-lazr.config > > python-lazr.delegates > > python-zope.component > > python-zope.configuration > > python-zope.configuration > > python-zope.event > > python-zope.interface > > > > I've actually last week started working on that. I've only done the > python part, haven't searched for any javascript or font-awesome which > I'm pretty sure I saw. I've also started working on a service for it > which I haven't committed yet, but it looks like it's going to be > complex. > > https://gitlab.com/genenetwork/guix-bioinformatics/blob/master/gn/packages/mailman.scm > Wow. That is good. You have the better setup and have packaged more of the Mailman Suite so please continue with yours. I too started last week. I have only looked at the python part of mailman core myself. Let me compare and complain about some of what I have done differently. Some things are clearly better your way. ;) You have come further. I will watch your repo now and try and test other mailman things tomorrow. You have: (define-public mailman (package ... (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.") I have: (description "This is the core engine for the GNU Mailing List manager. It is part of the full GNU Mailman 3 suite. Mailman is the GNU Mailing List Manager, a program that manages electronic mail discussion groups.") Maybe your mailman description is more appropriate later for a service in doc/guix.texi instead of this package? Feel free to disagree. You have: (define-public python-aiosmtpd ... (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")))))) I have: (arguments `(#:phases (modify-phases %standard-phases (add-before 'check 'disable-failing-tests (lambda _ (delete-file "aiosmtpd/tests/test_smtps.py") #t)) (replace 'check (lambda _ (invoke "python" "-m" "unittest" "discover" "-v") #t))))) I had not used nose2 nor flufl.testing for 'check, but I think it may be better to use them like you did because nose is in their documentation. Mine “Ran 181 tests in 3.026s”, except one test sometimes fails nondeterministically: ERROR: test_debug_0 (aiosmtpd.tests.test_main.TestMain) ---------------------------------------------------------------------- Traceback (most recent call last): File "/tmp/guix-build-python-aiosmtpd-1.2.drv-0/aiosmtpd-1.2/aiosmtpd/tests/test_main.py", line 122, in test_debug_0 main(('-n',)) File "/tmp/guix-build-python-aiosmtpd-1.2.drv-0/aiosmtpd-1.2/aiosmtpd/main.py", line 140, in main loop.create_server(factory, host=args.host, port=args.port)) File "/gnu/store/78w7y0lxar70j512iqw8x3nimzj10yga-python-3.7.4/lib/python3.7/asyncio/base_events.py", line 577, in run_until_complete raise RuntimeError('Event loop stopped before Future completed.') RuntimeError: Event loop stopped before Future completed. But sometimes it succeeds. I had not packaged flufl.testing. Your package for flufl.testing looks good, including the license. You have: (define-public python-aiosmtpd ... (license license:asl2.0))) I have: (license (list license:asl2.0 license:lgpl3)))) ;only for setup_helpers.py You have: (define-public python-atpublic ... (arguments '(#:phases (modify-phases %standard-phases (replace 'check (lambda _ (invoke "python" "-m" "nose2" "-v")))))) (native-inputs `(("python-nose2" ,python-nose2))) I have: (arguments `(#:phases (modify-phases %standard-phases ;; Use faster C implementation instead of Python implementation. (add-before 'build 'enable-c-implementation (lambda _ (setenv "ATPUBLIC_BUILD_EXTENSION" "yes") #t))x (replace 'check (lambda _ (invoke "python" "-m" "unittest" "discover" "-v") #t))))) I would prefer using ATPUBLIC_BUILD_EXTENSION. I do not know about nose. You have: (define-public python-atpublic ... (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))) I have: (synopsis "@code{@@public} decorator for populating @code{__all__}") (description "This Python module adds a @code{@@public} decorator and function which populates a module's @code{__all__} and optionally the module globals. With it, the declaration of a name's public export semantics are not separated from the implementation of that name.") (license (list license:asl2.0 license:lgpl3)))) ;only for setup_helpers.py I prefer mine. You have: (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))) I have: (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")) (snippet '(begin ;; Remove bundled public suffix list and its license. (delete-file "authheaders/public_suffix_list.txt") (delete-file "MPL-2.0") #t)))) (build-system python-build-system) (arguments `(#:modules ((guix build python-build-system) (guix build utils) (ice-9 textual-ports)) #:phases (modify-phases %standard-phases (add-before 'build 'configure-public-suffix-list ;; Use public suffix list from Guix package. (lambda* (#:key inputs #:allow-other-keys) (let ((publicsuffix (assoc-ref inputs "python-publicsuffix"))) (invoke "python" "setup.py" "psllocal" (string-append "--path=" publicsuffix "/lib/python3.7" "/site-packages/publicsuffix" "/public_suffix_list.dat")) #t))) (replace 'check (lambda _ ;; Make it find the only test file. (invoke "python" "-m" "unittest" "-v" "test" "authheaders/test/test_authentication.py") #t))))) (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 "This is a Python library for the generation of email authentication headers. The library can perform DKIM, SPF, and DMARC validation, and the results are packaged into the Authentication-Results header. The library can DKIM and ARC sign messages and output the corresponding signature headers.") ;; The package's metadata claims it were MIT licensed, but the source file ;; headers disagree. (license (list license:zpl2.1 license:zlib)))) I mostly prefer my package. I do not know if tests run for yours. I like having a short description like you have, but I would prefer mentioning DKIM, SPF etc. You have: (define-public python-authres ... (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))) I have: (arguments `(#:phases (modify-phases %standard-phases (replace 'check (lambda _ ;; Run doctests as described in README. (invoke "python" "-m" "authres" "-v") #t))))) (home-page "https://launchpad.net/authentication-results-python") (synopsis "Email Authentication Results Headers generation and parsing") (description "This module can be used to generate and parse RFC 5451/7001/7601 Authentication-Results headers. It also supports Authentication Results extensions: @itemize @item RFC 5617 DKIM/ADSP @item RFC 6008 DKIM signature identification (header.b) @item RFC 6212 Vouch By Reference (VBR) @item RFC 6577 Sender Policy Framework (SPF) @item RFC 7281 Authentication-Results Registration for S/MIME @item RFC 7293 The Require-Recipient-Valid-Since Header Field @item RFC 7489 Domain-based Message Authentication, Reporting, and Conformance (DMARC) @item Authenticated Recieved Chain (ARC) (draft-ietf-dmarc-arc-protocol-08) @end itemize Note: RFC 7601 obsoletes RFC 5451, 6577, 7001, and 7410. Authres supports the current standard. No backward compatibility issues have been noted.") (license license:asl2.0))) I do not know if tests run for your package. I prefer your description though. You have: (define-public python-flufl.bounce ... (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))) I have the same package inputs etc., except: (synopsis "Email bounce detectors") (description "The @dfn{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 (DSN).") (license (list license:asl2.0 ;except for an emails used as test data ;which may be non-free license:lgpl3)))) ;only for setup_helpers.py I prefer your description without DSN at the end, but I prefer my license list. Our python-flufl.i18n are identical. You have: (define-public python-flufl.lock ... (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))) I have: (synopsis "NFS-safe file locking with timeouts for POSIX systems.") (description "The @dfn{flufl.lock} package provides NFS-safe file locking with timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the @code{open} system call but uses a lockfile. Lock objects support lock-breaking so that you can’t wedge a process forever. Locks have a lifetime, which is the maximum length of time the process expects to retain the lock.") (license (list license:asl2.0 license:lgpl3)))) ;only for setup_helpers.py I think my description is too long and yours is too short. I prefer my license list. You have: (define-public python-gunicorn ... (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))) I have: (define-public python-gunicorn ... (arguments `(#:phases (modify-phases %standard-phases (add-before 'check 'disable-failing-tests (lambda _ ;; The test for deprecated gaiohttp fails, cf. ;; https://github.com/benoitc/gunicorn/commit/97a45805f85830d1f80bf769f5787704daa635d3 (delete-file "tests/test_gaiohttp.py") #t)) (replace 'check (lambda _ (invoke "python" "-m" "unittest" "discover" "-v" "-s" "tests") #t))))) (native-inputs `(("python-pytest" ,python-pytest))) (home-page "http://gunicorn.org") (synopsis "WSGI HTTP Server") (description "Gunicorn @dfn{Green Unicorn} is a Python WSGI HTTP Server for UNIX. It's a pre-fork worker model. The Gunicorn server is broadly compatible with various web frameworks, simply implemented, light on server resources, and fairly speedy.") (license (list license:expat ;; Some files have different licenses, cf. the NOTICE file in the ;; sources. These licenses are: license:bsd-3 ;; License variants are the PSF and CWI License Agreements for ;; Python: license:psfl)))) The psfl license variants may not matter. I wonder if your tests run correctly. My package prints: > starting phase `check' > test_close (test_selectors.DefaultSelectorTestCase) ... ok > test_context_manager (test_selectors.DefaultSelectorTestCase) ... ok > test_fileno (test_selectors.DefaultSelectorTestCase) ... ok > test_get_key (test_selectors.DefaultSelectorTestCase) ... ok > test_get_map (test_selectors.DefaultSelectorTestCase) ... ok > test_modify (test_selectors.DefaultSelectorTestCase) ... ok > test_register (test_selectors.DefaultSelectorTestCase) ... ok > test_select (test_selectors.DefaultSelectorTestCase) ... ok > test_select_interrupt (test_selectors.DefaultSelectorTestCase) ... ok > test_selector (test_selectors.DefaultSelectorTestCase) ... ok > test_timeout (test_selectors.DefaultSelectorTestCase) ... ok > test_unregister (test_selectors.DefaultSelectorTestCase) ... ok > test_unregister_after_fd_close (test_selectors.DefaultSelectorTestCase) ... ok > test_unregister_after_socket_close (test_selectors.DefaultSelectorTestCase) ... ok > test_above_fd_setsize (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_close (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_context_manager (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_fileno (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_get_key (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_get_map (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_modify (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_register (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_select (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_select_interrupt (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_selector (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_timeout (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_unregister (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_unregister_after_fd_close (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_unregister_after_socket_close (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > test_above_fd_setsize (test_selectors.EpollSelectorTestCase) ... ok > test_close (test_selectors.EpollSelectorTestCase) ... ok > test_context_manager (test_selectors.EpollSelectorTestCase) ... ok > test_fileno (test_selectors.EpollSelectorTestCase) ... ok > test_get_key (test_selectors.EpollSelectorTestCase) ... ok > test_get_map (test_selectors.EpollSelectorTestCase) ... ok > test_modify (test_selectors.EpollSelectorTestCase) ... ok > test_register (test_selectors.EpollSelectorTestCase) ... ok > test_select (test_selectors.EpollSelectorTestCase) ... ok > test_select_interrupt (test_selectors.EpollSelectorTestCase) ... ok > test_selector (test_selectors.EpollSelectorTestCase) ... ok > test_timeout (test_selectors.EpollSelectorTestCase) ... ok > test_unregister (test_selectors.EpollSelectorTestCase) ... ok > test_unregister_after_fd_close (test_selectors.EpollSelectorTestCase) ... ok > test_unregister_after_socket_close (test_selectors.EpollSelectorTestCase) ... ok > test_above_fd_setsize (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_close (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_context_manager (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_fileno (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_get_key (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_get_map (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_modify (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_register (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_select (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_select_interrupt (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_selector (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_timeout (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_unregister (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_unregister_after_fd_close (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_unregister_after_socket_close (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > test_above_fd_setsize (test_selectors.PollSelectorTestCase) ... ok > test_close (test_selectors.PollSelectorTestCase) ... ok > test_context_manager (test_selectors.PollSelectorTestCase) ... ok > test_fileno (test_selectors.PollSelectorTestCase) ... ok > test_get_key (test_selectors.PollSelectorTestCase) ... ok > test_get_map (test_selectors.PollSelectorTestCase) ... ok > test_modify (test_selectors.PollSelectorTestCase) ... ok > test_register (test_selectors.PollSelectorTestCase) ... ok > test_select (test_selectors.PollSelectorTestCase) ... ok > test_select_interrupt (test_selectors.PollSelectorTestCase) ... ok > test_selector (test_selectors.PollSelectorTestCase) ... ok > test_timeout (test_selectors.PollSelectorTestCase) ... ok > test_unregister (test_selectors.PollSelectorTestCase) ... ok > test_unregister_after_fd_close (test_selectors.PollSelectorTestCase) ... ok > test_unregister_after_socket_close (test_selectors.PollSelectorTestCase) ... ok > test_close (test_selectors.SelectSelectorTestCase) ... ok > test_context_manager (test_selectors.SelectSelectorTestCase) ... ok > test_fileno (test_selectors.SelectSelectorTestCase) ... ok > test_get_key (test_selectors.SelectSelectorTestCase) ... ok > test_get_map (test_selectors.SelectSelectorTestCase) ... ok > test_modify (test_selectors.SelectSelectorTestCase) ... ok > test_register (test_selectors.SelectSelectorTestCase) ... ok > test_select (test_selectors.SelectSelectorTestCase) ... ok > test_select_interrupt (test_selectors.SelectSelectorTestCase) ... ok > test_selector (test_selectors.SelectSelectorTestCase) ... ok > test_timeout (test_selectors.SelectSelectorTestCase) ... ok > test_unregister (test_selectors.SelectSelectorTestCase) ... ok > test_unregister_after_fd_close (test_selectors.SelectSelectorTestCase) ... ok > test_unregister_after_socket_close (test_selectors.SelectSelectorTestCase) ... ok > > ---------------------------------------------------------------------- > Ran 88 tests in 12.463s > > OK (skipped=30) You have: (define-public python-importlib-resources ... I have no such package because it is no longer needed, I think. I have not packaged all dependencies yet so I cannot try building mailman. You made a comment in your mailman package that importlib-resources is no longer needed. I have not yet written a lazr.config package that successfully runs its tests. I do not know if tests run for you. If not, I tried (arguments `(#:phases (modify-phases %standard-phases (replace 'check (lambda _ (invoke "python" "-m" "unittest" "discover" "-v" "-s" "src") #t))))) but apparently "-s" is wrong; I find <https://bugs.python.org/issue24247>. You have python-zope.component. I don’t have own python-zope.* packages, but there is an outdated python-zope-component with a hyphen in python-web.scm. I have not looked at your other python-zope-* packages. You have: (define-public python-dkimpy ... (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))) I have: (define-public python-dkimpy ... (arguments `(;; Tests would need /etc/resolv.conf. #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'fix-setup-py (lambda _ ;; We cannot import DNS because it would need /etc/resolv.conf. (substitute* "setup.py" (("import DNS") "")) #t))))) (propagated-inputs `(("python-py3dns" ,python-py3dns))) (native-inputs `(("python-authres" ,python-authres) ("python-pynacl" ,python-pynacl))) (home-page "https://launchpad.net/dkimpy") (synopsis "Implementation of DKIM (DomainKeys Identified Mail)") (description "Python module that implements DKIM (@dfn{DomainKeys Identified Mail}) email signing and verification (RFC 6376). 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:zlib)));except for an email used as test data which may be non-free Yours seems much better, except the license header. Your python-lazr.delegates is clearly better at running tests and mine has no advantages. You have: (define-public python-py3dns ... (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))) I have: (define-public python-py3dns ... (arguments `(;; Tests would need /etc/resolv.conf. #:tests? #f #:phases (modify-phases %standard-phases (add-after 'unpack 'fix-setup-py (lambda _ ;; We cannot import DNS because it would need /etc/resolv.conf. (substitute* "setup.py" (("import DNS") "")) (substitute* "setup.py" (("DNS.__version__") ,(string-append "'" version "'"))) #t)) (add-after 'install 'install-license (lambda* (#:key outputs #:allow-other-keys) (let* ((out (assoc-ref outputs "out")) (doc-dir (string-append out "/share/doc/python-py3dns"))) (mkdir-p doc-dir) (copy-file "LICENSE" (string-append doc-dir "/LICENSE")) #t)))))) (home-page "https://launchpad.net/py3dns") (synopsis "Python 3 DNS library") (description "This Python 3 module provides a DNS API for looking up DNS entries from within Python 3 modules and applications. This module is a simple, lightweight implementation.") ;; license variant is the CNRI License Agreement for Python: (license license:psfl))) Yours is better except the description and possibly license. Lastly, I have put the HTTP and DNS packages in the python-web.scm module and the rest in python-xyz.scm, except mailman itself which I put in mail.scm. I do not know if that is right but I suppose you plan to do that too. Regards, Florian ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Mailman packaging (was: Re: Python package naming: Dots vs hyphens) 2019-11-06 13:18 ` Mailman packaging (was: Re: Python package naming: Dots vs hyphens) pelzflorian (Florian Pelz) @ 2019-11-13 22:16 ` pelzflorian (Florian Pelz) 2019-11-18 10:13 ` Efraim Flashner 1 sibling, 0 replies; 15+ messages in thread From: pelzflorian (Florian Pelz) @ 2019-11-13 22:16 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel, pjotr2019 [-- Attachment #1: Type: text/plain, Size: 191 bytes --] Hello Efraim! I need the attached patch to be able to run `mailman start`, `mailman info` etc. I will continue to set up mailman on a server of mine and then report back. Regards, Florian [-- Attachment #2: 0001-gn-mailman-Patch-configuration-to-refer-to-the-right.patch --] [-- Type: text/x-diff, Size: 2418 bytes --] From 9945d2203362851fb24a829f2a27eead0273ffdc Mon Sep 17 00:00:00 2001 From: Florian Pelz <pelzflorian@pelzflorian.de> Date: Sun, 10 Nov 2019 11:38:16 +0100 Subject: [PATCH] gn: mailman: Patch configuration to refer to the right binaries. * gn/packages/mailman.scm (mailman): Patch schema.cfg. --- gn/packages/mailman.scm | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/gn/packages/mailman.scm b/gn/packages/mailman.scm index 6fd6291..359fdf6 100644 --- a/gn/packages/mailman.scm +++ b/gn/packages/mailman.scm @@ -16,7 +16,8 @@ #:use-module (gnu packages python-xyz) #:use-module (gnu packages python-web) #:use-module (gnu packages time) - #:use-module (gnu packages tls)) + #:use-module (gnu packages tls) + #:use-module (gnu packages web-browsers)) (define-public mailman (package @@ -30,6 +31,32 @@ (base32 "1qph9i93ndahfxi3bb2sd0kjm2c0pkh844ai6zacfmvihl1k3pvy")))) (build-system python-build-system) + (arguments + '(#:phases + (modify-phases %standard-phases + (add-after 'unpack 'patch-config + (lambda* (#:key outputs inputs #:allow-other-keys) + (let ((out (assoc-ref outputs "out")) + (lynx (assoc-ref inputs "lynx"))) + (substitute* "src/mailman/config/schema.cfg" + (("bin_dir:.*") (string-append "bin_dir: " out "/bin\n")) + (("html_to_plain_text_command:.*") + (string-append "html_to_plain_text_command:" lynx "/bin/lynx" + " -dump $filename\n"))) + #t))) + (add-after 'wrap 'restore-helper-progs + (lambda* (#:key outputs #:allow-other-keys) + (let* ((out (assoc-ref outputs "out")) + (bin (string-append out "/bin"))) + ;; Mailman calls os.execle on these, which retains + ;; PYTHONPATH anyway and fails with wrappers. + (rename-file (string-append bin "/.master-real") + (string-append bin "/master")) + (rename-file (string-append bin "/.runner-real") + (string-append bin "/runner")) + #t)))))) + (inputs + `(("lynx" ,lynx))) (propagated-inputs `(("python-aiosmtpd" ,python-aiosmtpd) ("python-alembic" ,python-alembic) -- 2.21.0 ^ permalink raw reply related [flat|nested] 15+ messages in thread
* Re: Mailman packaging (was: Re: Python package naming: Dots vs hyphens) 2019-11-06 13:18 ` Mailman packaging (was: Re: Python package naming: Dots vs hyphens) pelzflorian (Florian Pelz) 2019-11-13 22:16 ` pelzflorian (Florian Pelz) @ 2019-11-18 10:13 ` Efraim Flashner 2019-11-18 13:14 ` pelzflorian (Florian Pelz) ` (2 more replies) 1 sibling, 3 replies; 15+ messages in thread From: Efraim Flashner @ 2019-11-18 10:13 UTC (permalink / raw) To: pelzflorian (Florian Pelz); +Cc: guix-devel, pjotr2019 [-- Attachment #1: Type: text/plain, Size: 31661 bytes --] On Wed, Nov 06, 2019 at 02:18:33PM +0100, pelzflorian (Florian Pelz) wrote: > Long e-mail / review follows. Feel free to disagree. > > On Wed, Nov 06, 2019 at 09:19:17AM +0200, Efraim Flashner wrote: > > On Wed, Nov 06, 2019 at 07:49:56AM +0100, pelzflorian (Florian Pelz) wrote: > > > I am in the process of packaging mailman 3 which according to the pypi > > > importer needs packages like > > > > > > python-flufl.bounce > > > python-flufl.i18n > > > python-flufl.lock > > > python-lazr.config > > > python-lazr.delegates > > > python-zope.component > > > python-zope.configuration > > > python-zope.configuration > > > python-zope.event > > > python-zope.interface > > > > > > > I've actually last week started working on that. I've only done the > > python part, haven't searched for any javascript or font-awesome which > > I'm pretty sure I saw. I've also started working on a service for it > > which I haven't committed yet, but it looks like it's going to be > > complex. > > > > https://gitlab.com/genenetwork/guix-bioinformatics/blob/master/gn/packages/mailman.scm > > > > Wow. That is good. You have the better setup and have packaged more > of the Mailman Suite so please continue with yours. I too started > last week. I have only looked at the python part of mailman core > myself. Let me compare and complain about some of what I have done > differently. Some things are clearly better your way. ;) You have > come further. I will watch your repo now and try and test other > mailman things tomorrow. > > > You have: > > (define-public mailman > (package > ... > (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.") > > I have: > > (description "This is the core engine for the GNU Mailing List manager. It > is part of the full GNU Mailman 3 suite. Mailman is the GNU Mailing List > Manager, a program that manages electronic mail discussion groups.") > > Maybe your mailman description is more appropriate later for a service > in doc/guix.texi instead of this package? Feel free to disagree. > I kept mine for now > > You have: > > (define-public python-aiosmtpd > ... > (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")))))) > > I have: > > (arguments > `(#:phases > (modify-phases %standard-phases > (add-before 'check 'disable-failing-tests > (lambda _ > (delete-file "aiosmtpd/tests/test_smtps.py") > #t)) > (replace 'check > (lambda _ > (invoke "python" "-m" "unittest" "discover" "-v") > #t))))) > > I had not used nose2 nor flufl.testing for 'check, but I think it may > be better to use them like you did because nose is in their > documentation. Mine “Ran 181 tests in 3.026s”, except one test sometimes fails nondeterministically: Yeah, I got nose from them. Plus the tests ran without problems :) > > ERROR: test_debug_0 (aiosmtpd.tests.test_main.TestMain) > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "/tmp/guix-build-python-aiosmtpd-1.2.drv-0/aiosmtpd-1.2/aiosmtpd/tests/test_main.py", line 122, in test_debug_0 > main(('-n',)) > File "/tmp/guix-build-python-aiosmtpd-1.2.drv-0/aiosmtpd-1.2/aiosmtpd/main.py", line 140, in main > loop.create_server(factory, host=args.host, port=args.port)) > File "/gnu/store/78w7y0lxar70j512iqw8x3nimzj10yga-python-3.7.4/lib/python3.7/asyncio/base_events.py", line 577, in run_until_complete > raise RuntimeError('Event loop stopped before Future completed.') > RuntimeError: Event loop stopped before Future completed. > > > But sometimes it succeeds. I had not packaged flufl.testing. Your > package for flufl.testing looks good, including the license. > > > You have: > > (define-public python-aiosmtpd > ... > (license license:asl2.0))) > > I have: > > (license (list license:asl2.0 > license:lgpl3)))) ;only for setup_helpers.py > > > You have: > > (define-public python-atpublic > ... > (arguments > '(#:phases > (modify-phases %standard-phases > (replace 'check > (lambda _ > (invoke "python" "-m" "nose2" "-v")))))) > (native-inputs > `(("python-nose2" ,python-nose2))) > > I have: > > (arguments > `(#:phases > (modify-phases %standard-phases > ;; Use faster C implementation instead of Python implementation. > (add-before 'build 'enable-c-implementation > (lambda _ > (setenv "ATPUBLIC_BUILD_EXTENSION" "yes") > #t))x > (replace 'check > (lambda _ > (invoke "python" "-m" "unittest" "discover" "-v") > #t))))) > > I would prefer using ATPUBLIC_BUILD_EXTENSION. I do not know about > nose. > ATPUBLIC_BUILD_EXTENSION added > > You have: > > (define-public python-atpublic > ... > (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))) > > I have: > > (synopsis > "@code{@@public} decorator for populating @code{__all__}") > (description > "This Python module adds a @code{@@public} decorator and function which > populates a module's @code{__all__} and optionally the module globals. With > it, the declaration of a name's public export semantics are not separated from > the implementation of that name.") > (license (list license:asl2.0 > license:lgpl3)))) ;only for setup_helpers.py > > I prefer mine. same > > > You have: > > (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))) > > I have: > > (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")) > (snippet > '(begin > ;; Remove bundled public suffix list and its license. > (delete-file "authheaders/public_suffix_list.txt") > (delete-file "MPL-2.0") > #t)))) > (build-system python-build-system) > (arguments > `(#:modules ((guix build python-build-system) > (guix build utils) > (ice-9 textual-ports)) These modules don't seem to be needed > #:phases > (modify-phases %standard-phases > (add-before 'build 'configure-public-suffix-list > ;; Use public suffix list from Guix package. > (lambda* (#:key inputs #:allow-other-keys) > (let ((publicsuffix (assoc-ref inputs "python-publicsuffix"))) > (invoke "python" "setup.py" "psllocal" > (string-append "--path=" publicsuffix "/lib/python3.7" I replaced the '3.7' with '(python-version (assoc-ref inputs "python"))' > "/site-packages/publicsuffix" > "/public_suffix_list.dat")) > #t))) > (replace 'check > (lambda _ > ;; Make it find the only test file. > (invoke "python" "-m" "unittest" "-v" "test" > "authheaders/test/test_authentication.py") > #t))))) > (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 > "This is a Python library for the generation of email authentication > headers. The library can perform DKIM, SPF, and DMARC validation, and the > results are packaged into the Authentication-Results header. The library can > DKIM and ARC sign messages and output the corresponding signature headers.") > ;; The package's metadata claims it were MIT licensed, but the source file > ;; headers disagree. > (license (list license:zpl2.1 license:zlib)))) > > I mostly prefer my package. I do not know if tests run for yours. I > like having a short description like you have, but I would prefer > mentioning DKIM, SPF etc. > I do like yours. Mine does "run the tests", but it doesn't actually find any of the tests. I've taken your description and license > > You have: > > (define-public python-authres > ... > (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))) > > I have: > > (arguments > `(#:phases > (modify-phases %standard-phases > (replace 'check > (lambda _ > ;; Run doctests as described in README. > (invoke "python" "-m" "authres" "-v") > #t))))) > (home-page > "https://launchpad.net/authentication-results-python") > (synopsis > "Email Authentication Results Headers generation and parsing") > (description > "This module can be used to generate and parse RFC 5451/7001/7601 Authentication-Results headers. > > It also supports Authentication Results extensions: > > @itemize > @item RFC 5617 DKIM/ADSP > @item RFC 6008 DKIM signature identification (header.b) > @item RFC 6212 Vouch By Reference (VBR) > @item RFC 6577 Sender Policy Framework (SPF) > @item RFC 7281 Authentication-Results Registration for S/MIME > @item RFC 7293 The Require-Recipient-Valid-Since Header Field > @item RFC 7489 Domain-based Message Authentication, Reporting, and Conformance (DMARC) > @item Authenticated Recieved Chain (ARC) (draft-ietf-dmarc-arc-protocol-08) > @end itemize > > Note: RFC 7601 obsoletes RFC 5451, 6577, 7001, and 7410. Authres supports the > current standard. No backward compatibility issues have been noted.") > (license license:asl2.0))) > > I do not know if tests run for your package. I prefer your > description though. I took your test suite and description. > > You have: > > (define-public python-flufl.bounce > ... > (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))) > > > I have the same package inputs etc., except: > > (synopsis "Email bounce detectors") > (description "The @dfn{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 (DSN).") > (license (list license:asl2.0 ;except for an emails used as test data > ;which may be non-free > license:lgpl3)))) ;only for setup_helpers.py > > I prefer your description without DSN at the end, but I prefer my > license list. > According to Debian the test emails are OK https://sources.debian.org/src/flufl.bounce/3.0-1/debian/copyright/ > > Our python-flufl.i18n are identical. > > > You have: > > (define-public python-flufl.lock > ... > (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))) > > I have: > > (synopsis > "NFS-safe file locking with timeouts for POSIX systems.") > (description > "The @dfn{flufl.lock} package provides NFS-safe file locking with > timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the > @code{open} system call but uses a lockfile. Lock objects support > lock-breaking so that you can’t wedge a process forever. Locks have a > lifetime, which is the maximum length of time the process expects to retain > the lock.") > (license (list license:asl2.0 > license:lgpl3)))) ;only for setup_helpers.py > > I think my description is too long and yours is too short. I prefer > my license list. I took the first two sentences of yours and then combined the last two. > > > You have: > > (define-public python-gunicorn > ... > (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))) > > I have: > > (define-public python-gunicorn > ... > (arguments > `(#:phases > (modify-phases %standard-phases > (add-before 'check 'disable-failing-tests > (lambda _ > ;; The test for deprecated gaiohttp fails, cf. > ;; https://github.com/benoitc/gunicorn/commit/97a45805f85830d1f80bf769f5787704daa635d3 > (delete-file "tests/test_gaiohttp.py") > #t)) > (replace 'check > (lambda _ > (invoke "python" "-m" "unittest" "discover" "-v" "-s" "tests") > #t))))) > (native-inputs > `(("python-pytest" ,python-pytest))) > (home-page "http://gunicorn.org") > (synopsis "WSGI HTTP Server") > (description "Gunicorn @dfn{Green Unicorn} is a Python WSGI HTTP Server > for UNIX. It's a pre-fork worker model. The Gunicorn server is broadly > compatible with various web frameworks, simply implemented, light on server > resources, and fairly speedy.") > (license > (list license:expat > ;; Some files have different licenses, cf. the NOTICE file in the > ;; sources. These licenses are: > license:bsd-3 > ;; License variants are the PSF and CWI License Agreements for > ;; Python: > license:psfl)))) > > The psfl license variants may not matter. I wonder if your tests run > correctly. My package prints: > > > starting phase `check' > > test_close (test_selectors.DefaultSelectorTestCase) ... ok > > test_context_manager (test_selectors.DefaultSelectorTestCase) ... ok > > test_fileno (test_selectors.DefaultSelectorTestCase) ... ok > > test_get_key (test_selectors.DefaultSelectorTestCase) ... ok > > test_get_map (test_selectors.DefaultSelectorTestCase) ... ok > > test_modify (test_selectors.DefaultSelectorTestCase) ... ok > > test_register (test_selectors.DefaultSelectorTestCase) ... ok > > test_select (test_selectors.DefaultSelectorTestCase) ... ok > > test_select_interrupt (test_selectors.DefaultSelectorTestCase) ... ok > > test_selector (test_selectors.DefaultSelectorTestCase) ... ok > > test_timeout (test_selectors.DefaultSelectorTestCase) ... ok > > test_unregister (test_selectors.DefaultSelectorTestCase) ... ok > > test_unregister_after_fd_close (test_selectors.DefaultSelectorTestCase) ... ok > > test_unregister_after_socket_close (test_selectors.DefaultSelectorTestCase) ... ok > > test_above_fd_setsize (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_close (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_context_manager (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_fileno (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_get_key (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_get_map (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_modify (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_register (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_select (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_select_interrupt (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_selector (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_timeout (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_unregister (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_unregister_after_fd_close (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_unregister_after_socket_close (test_selectors.DevpollSelectorTestCase) ... skipped 'Test needs selectors.DevpollSelector' > > test_above_fd_setsize (test_selectors.EpollSelectorTestCase) ... ok > > test_close (test_selectors.EpollSelectorTestCase) ... ok > > test_context_manager (test_selectors.EpollSelectorTestCase) ... ok > > test_fileno (test_selectors.EpollSelectorTestCase) ... ok > > test_get_key (test_selectors.EpollSelectorTestCase) ... ok > > test_get_map (test_selectors.EpollSelectorTestCase) ... ok > > test_modify (test_selectors.EpollSelectorTestCase) ... ok > > test_register (test_selectors.EpollSelectorTestCase) ... ok > > test_select (test_selectors.EpollSelectorTestCase) ... ok > > test_select_interrupt (test_selectors.EpollSelectorTestCase) ... ok > > test_selector (test_selectors.EpollSelectorTestCase) ... ok > > test_timeout (test_selectors.EpollSelectorTestCase) ... ok > > test_unregister (test_selectors.EpollSelectorTestCase) ... ok > > test_unregister_after_fd_close (test_selectors.EpollSelectorTestCase) ... ok > > test_unregister_after_socket_close (test_selectors.EpollSelectorTestCase) ... ok > > test_above_fd_setsize (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_close (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_context_manager (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_fileno (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_get_key (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_get_map (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_modify (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_register (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_select (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_select_interrupt (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_selector (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_timeout (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_unregister (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_unregister_after_fd_close (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_unregister_after_socket_close (test_selectors.KqueueSelectorTestCase) ... skipped 'Test needs selectors.KqueueSelector)' > > test_above_fd_setsize (test_selectors.PollSelectorTestCase) ... ok > > test_close (test_selectors.PollSelectorTestCase) ... ok > > test_context_manager (test_selectors.PollSelectorTestCase) ... ok > > test_fileno (test_selectors.PollSelectorTestCase) ... ok > > test_get_key (test_selectors.PollSelectorTestCase) ... ok > > test_get_map (test_selectors.PollSelectorTestCase) ... ok > > test_modify (test_selectors.PollSelectorTestCase) ... ok > > test_register (test_selectors.PollSelectorTestCase) ... ok > > test_select (test_selectors.PollSelectorTestCase) ... ok > > test_select_interrupt (test_selectors.PollSelectorTestCase) ... ok > > test_selector (test_selectors.PollSelectorTestCase) ... ok > > test_timeout (test_selectors.PollSelectorTestCase) ... ok > > test_unregister (test_selectors.PollSelectorTestCase) ... ok > > test_unregister_after_fd_close (test_selectors.PollSelectorTestCase) ... ok > > test_unregister_after_socket_close (test_selectors.PollSelectorTestCase) ... ok > > test_close (test_selectors.SelectSelectorTestCase) ... ok > > test_context_manager (test_selectors.SelectSelectorTestCase) ... ok > > test_fileno (test_selectors.SelectSelectorTestCase) ... ok > > test_get_key (test_selectors.SelectSelectorTestCase) ... ok > > test_get_map (test_selectors.SelectSelectorTestCase) ... ok > > test_modify (test_selectors.SelectSelectorTestCase) ... ok > > test_register (test_selectors.SelectSelectorTestCase) ... ok > > test_select (test_selectors.SelectSelectorTestCase) ... ok > > test_select_interrupt (test_selectors.SelectSelectorTestCase) ... ok > > test_selector (test_selectors.SelectSelectorTestCase) ... ok > > test_timeout (test_selectors.SelectSelectorTestCase) ... ok > > test_unregister (test_selectors.SelectSelectorTestCase) ... ok > > test_unregister_after_fd_close (test_selectors.SelectSelectorTestCase) ... ok > > test_unregister_after_socket_close (test_selectors.SelectSelectorTestCase) ... ok > > > > ---------------------------------------------------------------------- > > Ran 88 tests in 12.463s > > > > OK (skipped=30) Mine seems to run more tests. Then gain there is a patch on the mailing list now for gunicorn so it may be moot anyway. > > > You have: > > (define-public python-importlib-resources > ... > > I have no such package because it is no longer needed, I think. I > have not packaged all dependencies yet so I cannot try building > mailman. You made a comment in your mailman package that > importlib-resources is no longer needed. > I tried to build mailman without it but it complained that it was missing. > > I have not yet written a lazr.config package that successfully runs > its tests. I do not know if tests run for you. If not, I tried > > (arguments > `(#:phases > (modify-phases %standard-phases > (replace 'check > (lambda _ > (invoke "python" "-m" "unittest" "discover" "-v" "-s" "src") > #t))))) > > but apparently "-s" is wrong; I find <https://bugs.python.org/issue24247>. I found the test command here: https://sources.debian.org/src/lazr.config/2.2-2/tox.ini/#L7 > > > You have python-zope.component. I don’t have own python-zope.* > packages, but there is an outdated python-zope-component with a hyphen > in python-web.scm. I have not looked at your other python-zope-* > packages. > > > You have: > > (define-public python-dkimpy > ... > (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))) > > I have: > > (define-public python-dkimpy > ... > (arguments > `(;; Tests would need /etc/resolv.conf. > #:tests? #f > #:phases > (modify-phases %standard-phases > (add-after 'unpack 'fix-setup-py > (lambda _ > ;; We cannot import DNS because it would need /etc/resolv.conf. > (substitute* "setup.py" > (("import DNS") "")) > #t))))) > (propagated-inputs > `(("python-py3dns" ,python-py3dns))) > (native-inputs > `(("python-authres" ,python-authres) > ("python-pynacl" ,python-pynacl))) > (home-page "https://launchpad.net/dkimpy") > (synopsis "Implementation of DKIM (DomainKeys Identified Mail)") > (description "Python module that implements DKIM (@dfn{DomainKeys > Identified Mail}) email signing and verification (RFC 6376). 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:zlib)));except for an email used as test data which may be non-free > > Yours seems much better, except the license header. > > > Your python-lazr.delegates is clearly better at running tests and mine > has no advantages. > > > You have: > > (define-public python-py3dns > ... > (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))) > > I have: > > (define-public python-py3dns > ... > (arguments > `(;; Tests would need /etc/resolv.conf. > #:tests? #f > #:phases > (modify-phases %standard-phases > (add-after 'unpack 'fix-setup-py > (lambda _ > ;; We cannot import DNS because it would need /etc/resolv.conf. > (substitute* "setup.py" > (("import DNS") "")) > (substitute* "setup.py" > (("DNS.__version__") ,(string-append "'" version "'"))) > #t)) > (add-after 'install 'install-license > (lambda* (#:key outputs #:allow-other-keys) > (let* ((out (assoc-ref outputs "out")) > (doc-dir (string-append out "/share/doc/python-py3dns"))) > (mkdir-p doc-dir) > (copy-file "LICENSE" > (string-append doc-dir "/LICENSE")) > #t)))))) > (home-page "https://launchpad.net/py3dns") > (synopsis "Python 3 DNS library") > (description "This Python 3 module provides a DNS API for looking up DNS > entries from within Python 3 modules and applications. This module is a > simple, lightweight implementation.") > ;; license variant is the CNRI License Agreement for Python: > (license license:psfl))) > > Yours is better except the description and possibly license. The license is already installed to %out/share/doc/name-version/LICENSE I think I intended to come back for the description later :) > > > Lastly, I have put the HTTP and DNS packages in the python-web.scm > module and the rest in python-xyz.scm, except mailman itself which I > put in mail.scm. I do not know if that is right but I suppose you > plan to do that too. > I hadn't decided yet, I just put them all in the one file for now and I figured I'd put them where they belong later. > Regards, > Florian Thanks! -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Mailman packaging (was: Re: Python package naming: Dots vs hyphens) 2019-11-18 10:13 ` Efraim Flashner @ 2019-11-18 13:14 ` pelzflorian (Florian Pelz) 2019-11-20 16:36 ` Pjotr Prins 2021-09-29 16:34 ` Christine Lemmer-Webber 2 siblings, 0 replies; 15+ messages in thread From: pelzflorian (Florian Pelz) @ 2019-11-18 13:14 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel, pjotr2019 Thank you for your work and for looking at projects’ mailing lists etc. :) I still have not set up mailman on my server, but am still going to work on it. I agree everywhere except the non-free emails and a typo in a description, see below. On Mon, Nov 18, 2019 at 12:13:51PM +0200, Efraim Flashner wrote: > On Wed, Nov 06, 2019 at 02:18:33PM +0100, pelzflorian (Florian Pelz) wrote: > > You have: > > > > (define-public mailman > > (package > > ... > > (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.") > > > > I have: > > > > (description "This is the core engine for the GNU Mailing List manager. It > > is part of the full GNU Mailman 3 suite. Mailman is the GNU Mailing List > > Manager, a program that manages electronic mail discussion groups.") > > > > Maybe your mailman description is more appropriate later for a service > > in doc/guix.texi instead of this package? Feel free to disagree. > > > > I kept mine for now > OK. It is good for finding the main mailman package, I agree. > > You have: > > > > (define-public python-flufl.bounce > > ... > > (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))) > > > > > > I have the same package inputs etc., except: > > > > (synopsis "Email bounce detectors") > > (description "The @dfn{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 (DSN).") > > (license (list license:asl2.0 ;except for an emails used as test data > > ;which may be non-free > > license:lgpl3)))) ;only for setup_helpers.py > > > > I prefer your description without DSN at the end, but I prefer my > > license list. > > > > According to Debian the test emails are OK > https://sources.debian.org/src/flufl.bounce/3.0-1/debian/copyright/ > AFAIU non-free e-mails as test data are not a problem for the FSDG anyway, but I am not convinced the authors listed in that Debian copyright file have asked the e-mails’ authors for permission. I cannot decide if a comment like > > (license (list license:asl2.0 ;except for an emails used as test data > > ;which may be non-free is necessary though. Further below: > > I have: > > > > (define-public python-dkimpy > > […] > > (license > > license:zlib)));except for an email used as test data which may be non-free > > > > Yours seems much better, except the license header. > > > > This is the same as the above test data issue. I continue: > > You have: > > > > (define-public python-flufl.lock > > ... > > (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))) > > > > I have: > > > > (synopsis > > "NFS-safe file locking with timeouts for POSIX systems.") > > (description > > "The @dfn{flufl.lock} package provides NFS-safe file locking with > > timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the > > @code{open} system call but uses a lockfile. Lock objects support > > lock-breaking so that you can’t wedge a process forever. Locks have a > > lifetime, which is the maximum length of time the process expects to retain > > the lock.") > > (license (list license:asl2.0 > > license:lgpl3)))) ;only for setup_helpers.py > > > > I think my description is too long and yours is too short. I prefer > > my license list. > > I took the first two sentences of yours and then combined the last two. > Good. :) You are missing a plural s in the last sentence now though: (description "The @dfn{flufl.lock} package provides NFS-safe file locking with timeouts for POSIX systems. It is similar to the @code{O_EXCL} option of the @code{open} system call but uses a lockfile. Lock object support lock-breaking and have a maximum lifetime built-in.") > > > > > > You have: > > > > (define-public python-importlib-resources > > ... > > > > I have no such package because it is no longer needed, I think. I > > have not packaged all dependencies yet so I cannot try building > > mailman. You made a comment in your mailman package that > > importlib-resources is no longer needed. > > > > I tried to build mailman without it but it complained that it was > missing. > You are right. Changing this would require changes to many files. Your importlib_resources package looks fine. > > I have: > > > > (define-public python-py3dns > > ... > > […] > > ;; license variant is the CNRI License Agreement for Python: > > (license license:psfl))) > > > > Yours is better except the description and possibly license. > > The license is already installed to %out/share/doc/name-version/LICENSE OK, I agree, such comments are superfluous. > I think I intended to come back for the description later :) > Regards, Florian ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Mailman packaging (was: Re: Python package naming: Dots vs hyphens) 2019-11-18 10:13 ` Efraim Flashner 2019-11-18 13:14 ` pelzflorian (Florian Pelz) @ 2019-11-20 16:36 ` Pjotr Prins 2021-09-29 16:34 ` Christine Lemmer-Webber 2 siblings, 0 replies; 15+ messages in thread From: Pjotr Prins @ 2019-11-20 16:36 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel This is great. Finally we can consider hosting our own mail servers. I have a few google groups that need love. Pj. ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Mailman packaging (was: Re: Python package naming: Dots vs hyphens) 2019-11-18 10:13 ` Efraim Flashner 2019-11-18 13:14 ` pelzflorian (Florian Pelz) 2019-11-20 16:36 ` Pjotr Prins @ 2021-09-29 16:34 ` Christine Lemmer-Webber 2021-09-30 7:54 ` pelzflorian (Florian Pelz) 2 siblings, 1 reply; 15+ messages in thread From: Christine Lemmer-Webber @ 2021-09-29 16:34 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel, pjotr2019 Efraim Flashner <efraim@flashner.co.il> writes: > [[PGP Signed Part:Undecided]] > On Wed, Nov 06, 2019 at 02:18:33PM +0100, pelzflorian (Florian Pelz) wrote: >> Long e-mail / review follows. Feel free to disagree. >> >> On Wed, Nov 06, 2019 at 09:19:17AM +0200, Efraim Flashner wrote: >> > On Wed, Nov 06, 2019 at 07:49:56AM +0100, pelzflorian (Florian Pelz) wrote: >> > > I am in the process of packaging mailman 3 which according to the pypi >> > > importer needs packages like >> > > >> > > python-flufl.bounce >> > > python-flufl.i18n >> > > python-flufl.lock >> > > python-lazr.config >> > > python-lazr.delegates >> > > python-zope.component >> > > python-zope.configuration >> > > python-zope.configuration >> > > python-zope.event >> > > python-zope.interface >> > > >> > >> > I've actually last week started working on that. I've only done the >> > python part, haven't searched for any javascript or font-awesome which >> > I'm pretty sure I saw. I've also started working on a service for it >> > which I haven't committed yet, but it looks like it's going to be >> > complex. >> > >> > https://gitlab.com/genenetwork/guix-bioinformatics/blob/master/gn/packages/mailman.scm >> > >> >> Wow. That is good. You have the better setup and have packaged more >> of the Mailman Suite so please continue with yours. I too started >> last week. I have only looked at the python part of mailman core >> myself. Let me compare and complain about some of what I have done >> differently. Some things are clearly better your way. ;) You have >> come further. I will watch your repo now and try and test other >> mailman things tomorrow. (A couple of years later...) Has anyone worked on this or used it in recent times? The above link no longer works. However I see: https://gitlab.com/genenetwork/guix-bioinformatics/-/tree/wip-mailman ... which hasn't seen activity for about a year, but seems promising? ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Mailman packaging (was: Re: Python package naming: Dots vs hyphens) 2021-09-29 16:34 ` Christine Lemmer-Webber @ 2021-09-30 7:54 ` pelzflorian (Florian Pelz) 0 siblings, 0 replies; 15+ messages in thread From: pelzflorian (Florian Pelz) @ 2021-09-30 7:54 UTC (permalink / raw) To: Christine Lemmer-Webber; +Cc: guix-devel, pjotr2019 Hello Christine, On Wed, Sep 29, 2021 at 12:34:06PM -0400, Christine Lemmer-Webber wrote: > Has anyone worked on this or used it in recent times? Sorry no, it was too much for me. > The above link no > longer works. However I see: > > https://gitlab.com/genenetwork/guix-bioinformatics/-/tree/wip-mailman > > ... which hasn't seen activity for about a year, but seems promising? Note that Mailman-core is not enough, you will need hyperkitty and an MTA and such things. There are other Django services in Guix by now (Patchwork); perhaps it will be similar, I have not tried. Regards, Florian ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Python package naming: Dots vs hyphens 2019-11-06 7:19 ` Efraim Flashner 2019-11-06 13:13 ` pelzflorian (Florian Pelz) 2019-11-06 13:18 ` Mailman packaging (was: Re: Python package naming: Dots vs hyphens) pelzflorian (Florian Pelz) @ 2019-11-06 13:53 ` Tobias Geerinckx-Rice 2 siblings, 0 replies; 15+ messages in thread From: Tobias Geerinckx-Rice @ 2019-11-06 13:53 UTC (permalink / raw) To: guix-devel; +Cc: pelzflorian (Florian Pelz) [-- Attachment #1: Type: text/plain, Size: 352 bytes --] Florian, Efraim Flashner 写道: > For new packages I would use whatever upstream uses in regard to > '-' vs > '.'. For existing ones, how many are there? It might be best to > just > leave them as-is rather than go through the dance of deprecating > the old > packages. I agree with Efraim on both points. Kind regards, T G-R [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 832 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Python package naming: Dots vs hyphens 2019-11-06 6:49 Python package naming: Dots vs hyphens pelzflorian (Florian Pelz) 2019-11-06 7:19 ` Efraim Flashner @ 2019-11-10 10:57 ` Andreas Enge 2019-11-11 9:30 ` Efraim Flashner 1 sibling, 1 reply; 15+ messages in thread From: Andreas Enge @ 2019-11-10 10:57 UTC (permalink / raw) To: pelzflorian (Florian Pelz); +Cc: guix-devel Hello, On Wed, Nov 06, 2019 at 07:49:56AM +0100, pelzflorian (Florian Pelz) wrote: > Shall I rename python-zope-* to python-zope.*? the package naming guidelines say "replace underscores by hyphens". I would extend this to say "replace punctuation marks by (one) hyphen". Probably when we wrote the paragraph, the case had not presented itself yet. Similar things are done at least in perl, where the "::" of the module hierarchy is replaced by "-". Is this case analogous to python? Andreas ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Python package naming: Dots vs hyphens 2019-11-10 10:57 ` Andreas Enge @ 2019-11-11 9:30 ` Efraim Flashner 2019-11-11 10:24 ` pelzflorian (Florian Pelz) 0 siblings, 1 reply; 15+ messages in thread From: Efraim Flashner @ 2019-11-11 9:30 UTC (permalink / raw) To: Andreas Enge; +Cc: guix-devel [-- Attachment #1: Type: text/plain, Size: 1122 bytes --] On Sun, Nov 10, 2019 at 11:57:22AM +0100, Andreas Enge wrote: > Hello, > > On Wed, Nov 06, 2019 at 07:49:56AM +0100, pelzflorian (Florian Pelz) wrote: > > Shall I rename python-zope-* to python-zope.*? > > the package naming guidelines say "replace underscores by hyphens". > I would extend this to say "replace punctuation marks by (one) hyphen". > Probably when we wrote the paragraph, the case had not presented > itself yet. Similar things are done at least in perl, where the "::" > of the module hierarchy is replaced by "-". Is this case analogous to > python? > Not entirely, my understanding of Perl is that the double colon is part of the namespacing of the language. In python the '.' is part of the package name. I would also point out that for Go the '.' is effectively part of the package name and we change them all to hyphens. I think hyphens is the way to go here. -- Efraim Flashner <efraim@flashner.co.il> אפרים פלשנר GPG key = A28B F40C 3E55 1372 662D 14F7 41AA E7DC CA3D 8351 Confidentiality cannot be guaranteed on emails sent or received unencrypted [-- Attachment #2: signature.asc --] [-- Type: application/pgp-signature, Size: 833 bytes --] ^ permalink raw reply [flat|nested] 15+ messages in thread
* Re: Python package naming: Dots vs hyphens 2019-11-11 9:30 ` Efraim Flashner @ 2019-11-11 10:24 ` pelzflorian (Florian Pelz) 0 siblings, 0 replies; 15+ messages in thread From: pelzflorian (Florian Pelz) @ 2019-11-11 10:24 UTC (permalink / raw) To: Efraim Flashner; +Cc: guix-devel On Mon, Nov 11, 2019 at 11:30:21AM +0200, Efraim Flashner wrote: > I think hyphens is the way to go here. > I search for [!#%&'()*,./:;?@_{}] in the output of florian@florianmflorian@florianmacbook ~/git/guix-artwork/website$ GUILE_LOAD_PATH=.:$GUILE_LOAD_PATH guile -c '(write (map (@ (guix packages) package-name) ((@ (apps packages data) all-packages))))' and see a few packages with periods, including but not limited to python packages. Perhaps a change to importers like this would be appropriate, would it not? diff --git a/guix/import/utils.scm b/guix/import/utils.scm index 4694b6e7ef..6fecf929ec 100644 --- a/guix/import/utils.scm +++ b/guix/import/utils.scm @@ -205,9 +205,9 @@ to in the (guix licenses) module, or #f if there is no such known license." (assoc-ref licenses license)) (define (snake-case str) - "Return a downcased version of the string STR where underscores are replaced + "Return a downcased version of the string STR where punctuation is replaced with dashes." - (string-join (string-split (string-downcase str) #\_) "-")) + (string-join (string-split (string-downcase str) char-set:punctuation) "-")) (define (beautify-description description) "Improve the package DESCRIPTION by turning a beginning sentence fragment (Plus documentation in doc/guix.texi.) Regards, Florian ^ permalink raw reply related [flat|nested] 15+ messages in thread
end of thread, other threads:[~2021-09-30 7:55 UTC | newest] Thread overview: 15+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2019-11-06 6:49 Python package naming: Dots vs hyphens pelzflorian (Florian Pelz) 2019-11-06 7:19 ` Efraim Flashner 2019-11-06 13:13 ` pelzflorian (Florian Pelz) 2019-11-07 7:34 ` Efraim Flashner 2019-11-06 13:18 ` Mailman packaging (was: Re: Python package naming: Dots vs hyphens) pelzflorian (Florian Pelz) 2019-11-13 22:16 ` pelzflorian (Florian Pelz) 2019-11-18 10:13 ` Efraim Flashner 2019-11-18 13:14 ` pelzflorian (Florian Pelz) 2019-11-20 16:36 ` Pjotr Prins 2021-09-29 16:34 ` Christine Lemmer-Webber 2021-09-30 7:54 ` pelzflorian (Florian Pelz) 2019-11-06 13:53 ` Python package naming: Dots vs hyphens Tobias Geerinckx-Rice 2019-11-10 10:57 ` Andreas Enge 2019-11-11 9:30 ` Efraim Flashner 2019-11-11 10:24 ` pelzflorian (Florian Pelz)
Code repositories for project(s) associated with this external index https://git.savannah.gnu.org/cgit/guix.git This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.