unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
* [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils.
@ 2023-01-15 21:47 Felix Gruber
  2023-01-15 21:50 ` [bug#60838] [PATCH 1/8] gnu: Add python-click-default-group-wheel Felix Gruber
                   ` (9 more replies)
  0 siblings, 10 replies; 38+ messages in thread
From: Felix Gruber @ 2023-01-15 21:47 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

This patchset adds new packages for the database exploration and
manipulation tools datasette and sqlite-utils, as well as some missing
dependencies of those two packages.

Since datasette and sqlite-utils do not contain any tests in their pypi
source archives, I've tested both on the global power plant database,
which can be downloaded as CSV file from
https://datasets.wri.org/dataset/globalpowerplantdatabase

First, I tested sqlite-utils by converting the power plants CSV file
to a sqlite database, using

  sqlite-utils insert powerplants.db powerplants \
    global_power_plant_database.csv --csv

Then I used datasette to explore the newly created database with

  datasette serve powerplants.db -o

(Note the -o option to automatically open the datasette instance in
your webbrowser.)

So far everything seems to work.

Felix Gruber (8):
  gnu: Add python-click-default-group-wheel.
  gnu: Add python-sqlite-fts4.
  gnu: Add python-sqlite-utils.
  gnu: python-janus: Update to 1.0.0.
  gnu: Add python-pluggy-next.
  gnu: Add python-asgi-lifespan.
  gnu: Add python-asgi-csrf.
  gnu: Add datasette.

 gnu/packages/databases.scm  | 104 ++++++++++++++++++++++++++++++++++++
 gnu/packages/python-web.scm |  50 ++++++++++++++++-
 gnu/packages/python-xyz.scm |  45 ++++++++++++++--
 3 files changed, 195 insertions(+), 4 deletions(-)

-- 
2.38.1





^ permalink raw reply	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 1/8] gnu: Add python-click-default-group-wheel.
  2023-01-15 21:47 [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Felix Gruber
@ 2023-01-15 21:50 ` Felix Gruber
  2023-03-22  1:04   ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
  2023-01-15 21:51 ` [bug#60838] [PATCH 2/8] gnu: Add python-sqlite-fts4 Felix Gruber
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 38+ messages in thread
From: Felix Gruber @ 2023-01-15 21:50 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

* gnu/packages/python-xyz.scm (python-click-default-group-wheel): New
  variable.
---
 gnu/packages/python-xyz.scm | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index c91561e787..1dbe9d611f 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -108,7 +108,7 @@
 ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
 ;;; Copyright © 2021 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
 ;;; Copyright © 2021, 2022 Pradana Aumars <paumars@courrier.dev>
-;;; Copyright © 2021, 2022 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021, 2022, 2023 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Sébastien Lerique <sl@eauchat.org>
 ;;; Copyright © 2021 Raphaël Mélotte <raphael.melotte@mind.be>
 ;;; Copyright © 2021 ZmnSCPxj <ZmnSCPxj@protonmail.com>
@@ -14769,6 +14769,30 @@ (define-public python-click-default-group
     (home-page "https://github.com/click-contrib/click-default-group")
     (license license:bsd-3)))
 
+(define-public python-click-default-group-wheel
+  ;; Fork of python-click-default-group used by sqlite-utils and datasette.
+  ;; See https://github.com/click-contrib/click-default-group/issues/21
+  (package
+    (name "python-click-default-group-wheel")
+    (version "1.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "click-default-group-wheel" version))
+              (sha256
+               (base32
+                "0ivpdng2391v8afd5j1xdv9vbbr9iafbdh6h5shqhgn0j8ns83g9"))))
+    (build-system python-build-system)
+    (arguments
+      '(#:tests? #f)) ; no tests in pypi package
+    (propagated-inputs (list python-click))
+    (home-page "https://github.com/sublee/click-default-group/")
+    (synopsis
+     "Extends click.Group to invoke a command without explicit subcommand name")
+    (description
+      "This package provides click-default-group with an additional pure
+Python wheel package, compatible with Pyodide.")
+    (license license:bsd-3)))
+
 (define-public python-structlog
   (package
     (name "python-structlog")
-- 
2.38.1





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 2/8] gnu: Add python-sqlite-fts4.
  2023-01-15 21:47 [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Felix Gruber
  2023-01-15 21:50 ` [bug#60838] [PATCH 1/8] gnu: Add python-click-default-group-wheel Felix Gruber
@ 2023-01-15 21:51 ` Felix Gruber
  2023-03-22  1:05   ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
  2023-01-15 21:51 ` [bug#60838] [PATCH 3/8] gnu: Add python-sqlite-utils Felix Gruber
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 38+ messages in thread
From: Felix Gruber @ 2023-01-15 21:51 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

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

diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 2a66efb2a0..375d34b051 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -3557,6 +3557,24 @@ (define-public python-alembic
 SQLAlchemy Database Toolkit for Python.")
     (license license:expat)))
 
+(define-public python-sqlite-fts4
+  (package
+    (name "python-sqlite-fts4")
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "sqlite-fts4" version))
+              (sha256
+               (base32
+                "034kx0ac556sywy1p4qcrc36l24w3q0xwswqv2z9s3k8yvm5xc3q"))))
+    (build-system python-build-system)
+    (native-inputs (list python-pytest))
+    (home-page "https://github.com/simonw/sqlite-fts4")
+    (synopsis "Python functions for working with SQLite FTS4 search")
+    (description "Custom SQLite functions written in Python for ranking
+documents indexed using the SQLite's FTS4 full text search extension.")
+    (license license:asl2.0)))
+
 (define-public python-pickleshare
   (package
     (name "python-pickleshare")
-- 
2.38.1





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 3/8] gnu: Add python-sqlite-utils.
  2023-01-15 21:47 [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Felix Gruber
  2023-01-15 21:50 ` [bug#60838] [PATCH 1/8] gnu: Add python-click-default-group-wheel Felix Gruber
  2023-01-15 21:51 ` [bug#60838] [PATCH 2/8] gnu: Add python-sqlite-fts4 Felix Gruber
@ 2023-01-15 21:51 ` Felix Gruber
  2023-03-22  1:08   ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
  2023-01-15 21:52 ` [bug#60838] [PATCH 4/8] gnu: python-janus: Update to 1.0.0 Felix Gruber
                   ` (6 subsequent siblings)
  9 siblings, 1 reply; 38+ messages in thread
From: Felix Gruber @ 2023-01-15 21:51 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

* gnu/packages/databases.scm (python-sqlite-utils): New variable.
---
 gnu/packages/databases.scm | 39 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 375d34b051..9831a3b761 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -3575,6 +3575,45 @@ (define-public python-sqlite-fts4
 documents indexed using the SQLite's FTS4 full text search extension.")
     (license license:asl2.0)))
 
+(define-public python-sqlite-utils
+  (package
+    (name "python-sqlite-utils")
+    (version "3.30")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "sqlite-utils" version))
+              (sha256
+               (base32
+                "0cvfbyvkh7gjh3ws3gj2yhjhr459nsz6c5vrkxjlad7isl95q01h"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; No tests provided in pypi package.
+    (propagated-inputs (list python-click python-click-default-group-wheel
+                             python-dateutil python-sqlite-fts4
+                             python-tabulate))
+    (home-page "https://github.com/simonw/sqlite-utils")
+    (synopsis
+     "CLI tool and Python utility functions for manipulating SQLite databases")
+    (description
+     "This package provides a CLI tool and Python utility functions for
+manipulating SQLite databases.
+
+It's main features are:
+@itemize
+@item Pipe JSON (or CSV or TSV) directly into a new SQLite database file,
+      automatically creating a table with the appropriate schema.
+@item Run in-memory SQL queries, including joins, directly against data
+      in CSV, TSV or JSON files and view the results.
+@item Configure SQLite full-text search against your database tables and
+      run search queries against them, ordered by relevance.
+@item Run transformations against your tables to make schema changes
+      that SQLite ALTER TABLE does not directly support, such as
+      changing the type of a column.
+@item Extract columns into separate tables to better normalize your
+      existing data.
+@end itemize")
+    (license license:asl2.0)))
+
 (define-public python-pickleshare
   (package
     (name "python-pickleshare")
-- 
2.38.1





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 4/8] gnu: python-janus: Update to 1.0.0.
  2023-01-15 21:47 [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Felix Gruber
                   ` (2 preceding siblings ...)
  2023-01-15 21:51 ` [bug#60838] [PATCH 3/8] gnu: Add python-sqlite-utils Felix Gruber
@ 2023-01-15 21:52 ` Felix Gruber
  2023-01-15 21:52 ` [bug#60838] [PATCH 5/8] gnu: Add python-pluggy-next Felix Gruber
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-01-15 21:52 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

* gnu/packages/python-xyz.scm (python-janus): Update to 1.0.0.
[propagated-inputs]: Add python-typing-extensions.
---
 gnu/packages/python-xyz.scm | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 1dbe9d611f..e614ffdf2b 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -291,13 +291,13 @@ (define-public python-xmldiff
 (define-public python-janus
   (package
     (name "python-janus")
-    (version "0.6.1")
+    (version "1.0.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "janus" version))
        (sha256
-        (base32 "030xvl2vghi5ispfalhvch1rl6i2jsy5bf1dgjafa7vifppy04j7"))))
+        (base32 "04hnrdcf03g1s0x3sr72sh9gnszz6kyfsl9dg8a4n0zvvhn6z5yz"))))
     (build-system python-build-system)
     (arguments
      `(#:phases
@@ -307,6 +307,8 @@ (define-public python-janus
              (when tests?
                (add-installed-pythonpath inputs outputs)
                (invoke "pytest" "--cov=janus" "--cov=tests")))))))
+    (propagated-inputs
+     (list python-typing-extensions))
     (native-inputs
      (list python-pytest python-pytest-cov python-pytest-asyncio))
     (home-page "https://github.com/aio-libs/janus/")
-- 
2.38.1





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 5/8] gnu: Add python-pluggy-next.
  2023-01-15 21:47 [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Felix Gruber
                   ` (3 preceding siblings ...)
  2023-01-15 21:52 ` [bug#60838] [PATCH 4/8] gnu: python-janus: Update to 1.0.0 Felix Gruber
@ 2023-01-15 21:52 ` Felix Gruber
  2023-01-15 21:53 ` [bug#60838] [PATCH 6/8] gnu: Add python-asgi-lifespan Felix Gruber
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-01-15 21:52 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

* gnu/packages/python-xyz.scm (python-pluggy-next): New variable.
---
 gnu/packages/python-xyz.scm | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index e614ffdf2b..8ee6cee947 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -15287,6 +15287,19 @@ (define-public python-pluggy
    (home-page "https://pypi.org/project/pluggy/")
    (license license:expat)))
 
+;;; TODO: Make this the default python-pluggy in the next rebuild cycle.
+(define-public python-pluggy-next
+  (package
+   (inherit python-pluggy)
+   (version "1.0.0")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (pypi-uri "pluggy" version))
+     (sha256
+      (base32
+       "0n8iadlas2z1b4h0fc73b043c7iwfvx9rgvqm1azjmffmhxkf922"))))))
+
 (define-public python-plumbum
   (package
     (name "python-plumbum")
-- 
2.38.1





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 6/8] gnu: Add python-asgi-lifespan.
  2023-01-15 21:47 [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Felix Gruber
                   ` (4 preceding siblings ...)
  2023-01-15 21:52 ` [bug#60838] [PATCH 5/8] gnu: Add python-pluggy-next Felix Gruber
@ 2023-01-15 21:53 ` Felix Gruber
  2023-01-15 21:53 ` [bug#60838] [PATCH 7/8] gnu: Add python-asgi-csrf Felix Gruber
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-01-15 21:53 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

* gnu/packages/python-web.scm (python-asgi-lifespan): New variable.
---
 gnu/packages/python-web.scm | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 7daa1b636c..b6ea8f385d 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -49,7 +49,7 @@
 ;;; Copyright © 2021 Alice Brenon <alice.brenon@ens-lyon.fr>
 ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
-;;; Copyright © 2022 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2022, 2023 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2022 Peter Polidoro <peter@polidoro.io>
 ;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
 ;;; Copyright © 2022 Luis Henrique Gomes Higino <luishenriquegh2701@gmail.com>
@@ -570,6 +570,29 @@ (define-public python-asgiref
 WSGI.  This package includes libraries for implementing ASGI servers.")
     (license license:bsd-3)))
 
+(define-public python-asgi-lifespan
+  (package
+    (name "python-asgi-lifespan")
+    (version "1.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "asgi-lifespan" version))
+              (sha256
+               (base32
+                "0zyvx8i43s1m2akqn5njwdh2zi6n05ji7mlvqx5pdi3k43dffcws"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; The pypi package does not contain the tests folder.
+    (native-inputs (list python-pytest python-pytest-asyncio python-pytest-cov))
+    (propagated-inputs (list python-sniffio))
+    (home-page "https://github.com/florimondmanca/asgi-lifespan")
+    (synopsis "Programmatic startup/shutdown of ASGI apps")
+    (description "Programmatically send startup/shutdown lifespan events
+into ASGI applications.  When used in combination with an ASGI-capable
+HTTP client such as HTTPX, this allows mocking or testing ASGI
+applications without having to spin up an ASGI server.")
+    (license license:expat)))
+
 (define-public python-css-html-js-minify
   (package
     (name "python-css-html-js-minify")
-- 
2.38.1





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 7/8] gnu: Add python-asgi-csrf.
  2023-01-15 21:47 [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Felix Gruber
                   ` (5 preceding siblings ...)
  2023-01-15 21:53 ` [bug#60838] [PATCH 6/8] gnu: Add python-asgi-lifespan Felix Gruber
@ 2023-01-15 21:53 ` Felix Gruber
  2023-01-15 21:53 ` [bug#60838] [PATCH 8/8] gnu: Add datasette Felix Gruber
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-01-15 21:53 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

* gnu/packages/python-web.scm (python-asgi-csrf): New variable.
---
 gnu/packages/python-web.scm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index b6ea8f385d..ee6d8a9f59 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -570,6 +570,31 @@ (define-public python-asgiref
 WSGI.  This package includes libraries for implementing ASGI servers.")
     (license license:bsd-3)))
 
+(define-public python-asgi-csrf
+  (package
+    (name "python-asgi-csrf")
+    (version "0.9")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "asgi-csrf" version))
+              (sha256
+               (base32
+                "06klgxfxzjfkyjky3rkvmf2r07r7r2my53qq7g9qy6mcmvfkp7bf"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-itsdangerous python-multipart))
+    (native-inputs (list python-asgi-lifespan
+                         python-httpx
+                         python-pytest
+                         python-pytest-asyncio
+                         python-pytest-cov
+                         python-starlette))
+    (home-page "https://github.com/simonw/asgi-csrf")
+    (synopsis "ASGI middleware for protecting against CSRF attacks")
+    (description "This middleware implements the Double Submit Cookie
+pattern, where a cookie is set that is then compared to a csrftoken
+hidden form field or a x-csrftoken HTTP header.")
+    (license license:asl2.0)))
+
 (define-public python-asgi-lifespan
   (package
     (name "python-asgi-lifespan")
-- 
2.38.1





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 8/8] gnu: Add datasette.
  2023-01-15 21:47 [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Felix Gruber
                   ` (6 preceding siblings ...)
  2023-01-15 21:53 ` [bug#60838] [PATCH 7/8] gnu: Add python-asgi-csrf Felix Gruber
@ 2023-01-15 21:53 ` Felix Gruber
  2023-03-17 19:19 ` [bug#60838] [PATCH v2 0/7] Add datasette and python-sqlite-utils Felix Gruber
  2023-03-22  0:59 ` [bug#60838] [PATCH 0/8] " Maxim Cournoyer
  9 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-01-15 21:53 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

* gnu/packages/databases.scm (datasette): New variable.
---
 gnu/packages/databases.scm | 47 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 9831a3b761..4913d3a82e 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -59,6 +59,7 @@
 ;;; Copyright © 2022 muradm <mail@muradm.net>
 ;;; Copyright © 2022 Thomas Albers Raviola <thomas@thomaslabs.org>
 ;;; Copyright © 2021, 2022 jgart <jgart@dismail.de>
+;;; Copyright © 2023 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -5051,3 +5052,49 @@ (define-public python-dogpile.cache
 provides API hooks which integrate these cache backends with the locking
 mechanism of @code{dogpile}.")
     (license license:expat)))
+
+(define-public datasette
+  (package
+    (name "datasette")
+    (version "0.64.1")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "datasette" version))
+        (sha256
+         (base32
+          "1m8gr2rzap34cg8z7k3mrax373i3jc8fbpq73fxb602la5zc6c6a"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:tests? #f                    ; pypi package contains no tests
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'loosen-requirements
+            (lambda _
+              ;; The package needlessly specifies exact versions
+              ;; of dependencies, when it works fine with others.
+              (substitute* "setup.py"
+                (("(black)==[0-9\\.]+" all package)
+                 package)))))))
+    (propagated-inputs (list python-aiofiles
+                             python-asgi-csrf
+                             python-asgiref
+                             python-click-7
+                             python-click-default-group-wheel
+                             python-httpx
+                             python-hupper
+                             python-itsdangerous
+                             python-janus
+                             python-jinja2
+                             python-mergedeep
+                             python-pint
+                             python-pluggy-next
+                             python-pyyaml
+                             python-uvicorn))
+    (home-page "https://datasette.io/")
+    (synopsis "Multi-tool for exploring and publishing data")
+    (description "Datasette is a tool for exploring and publishing data.
+It helps people take data of any shape or size and publish that as an
+interactive, explorable website and accompanying API.")
+    (license license:asl2.0)))
-- 
2.38.1





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v2 0/7]  Add datasette and python-sqlite-utils.
  2023-01-15 21:47 [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Felix Gruber
                   ` (7 preceding siblings ...)
  2023-01-15 21:53 ` [bug#60838] [PATCH 8/8] gnu: Add datasette Felix Gruber
@ 2023-03-17 19:19 ` Felix Gruber
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 1/7] gnu: Add python-click-default-group-wheel Felix Gruber
                     ` (7 more replies)
  2023-03-22  0:59 ` [bug#60838] [PATCH 0/8] " Maxim Cournoyer
  9 siblings, 8 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-17 19:19 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

This new version of the patchset removes the commit to update
python-janus which has already been updated to 1.0.0 on master since I
originally sent my patches. It also updates datasette to its latest
upstream version 0.64.2.

Felix Gruber (7):
  gnu: Add python-click-default-group-wheel.
  gnu: Add python-sqlite-fts4.
  gnu: Add python-sqlite-utils.
  gnu: Add python-pluggy-next.
  gnu: Add python-asgi-lifespan.
  gnu: Add python-asgi-csrf.
  gnu: Add datasette.

 gnu/packages/databases.scm  | 104 ++++++++++++++++++++++++++++++++++++
 gnu/packages/python-web.scm |  50 ++++++++++++++++-
 gnu/packages/python-xyz.scm |  39 +++++++++++++-
 3 files changed, 191 insertions(+), 2 deletions(-)

-- 
2.39.2





^ permalink raw reply	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v2 1/7] gnu: Add python-click-default-group-wheel.
  2023-03-17 19:19 ` [bug#60838] [PATCH v2 0/7] Add datasette and python-sqlite-utils Felix Gruber
@ 2023-03-17 19:19   ` Felix Gruber
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 2/7] gnu: Add python-sqlite-fts4 Felix Gruber
                     ` (6 subsequent siblings)
  7 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-17 19:19 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

* gnu/packages/python-xyz.scm (python-click-default-group-wheel): New
  variable.
---
 gnu/packages/python-xyz.scm | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 7c8b3b3378..a6bd592837 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -108,7 +108,7 @@
 ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
 ;;; Copyright © 2021 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
 ;;; Copyright © 2021, 2022 Pradana Aumars <paumars@courrier.dev>
-;;; Copyright © 2021, 2022 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021, 2022, 2023 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Sébastien Lerique <sl@eauchat.org>
 ;;; Copyright © 2021 Raphaël Mélotte <raphael.melotte@mind.be>
 ;;; Copyright © 2021 ZmnSCPxj <ZmnSCPxj@protonmail.com>
@@ -14892,6 +14892,30 @@ (define-public python-click-default-group
     (home-page "https://github.com/click-contrib/click-default-group")
     (license license:bsd-3)))
 
+(define-public python-click-default-group-wheel
+  ;; Fork of python-click-default-group used by sqlite-utils and datasette.
+  ;; See https://github.com/click-contrib/click-default-group/issues/21
+  (package
+    (name "python-click-default-group-wheel")
+    (version "1.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "click-default-group-wheel" version))
+              (sha256
+               (base32
+                "0ivpdng2391v8afd5j1xdv9vbbr9iafbdh6h5shqhgn0j8ns83g9"))))
+    (build-system python-build-system)
+    (arguments
+      '(#:tests? #f)) ; no tests in pypi package
+    (propagated-inputs (list python-click))
+    (home-page "https://github.com/sublee/click-default-group/")
+    (synopsis
+     "Extends click.Group to invoke a command without explicit subcommand name")
+    (description
+      "This package provides click-default-group with an additional pure
+Python wheel package, compatible with Pyodide.")
+    (license license:bsd-3)))
+
 (define-public python-structlog
   (package
     (name "python-structlog")
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v2 2/7] gnu: Add python-sqlite-fts4.
  2023-03-17 19:19 ` [bug#60838] [PATCH v2 0/7] Add datasette and python-sqlite-utils Felix Gruber
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 1/7] gnu: Add python-click-default-group-wheel Felix Gruber
@ 2023-03-17 19:19   ` Felix Gruber
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 3/7] gnu: Add python-sqlite-utils Felix Gruber
                     ` (5 subsequent siblings)
  7 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-17 19:19 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

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

diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index c24d067bb0..580359145e 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -3555,6 +3555,24 @@ (define-public python-alembic
 SQLAlchemy Database Toolkit for Python.")
     (license license:expat)))
 
+(define-public python-sqlite-fts4
+  (package
+    (name "python-sqlite-fts4")
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "sqlite-fts4" version))
+              (sha256
+               (base32
+                "034kx0ac556sywy1p4qcrc36l24w3q0xwswqv2z9s3k8yvm5xc3q"))))
+    (build-system python-build-system)
+    (native-inputs (list python-pytest))
+    (home-page "https://github.com/simonw/sqlite-fts4")
+    (synopsis "Python functions for working with SQLite FTS4 search")
+    (description "Custom SQLite functions written in Python for ranking
+documents indexed using the SQLite's FTS4 full text search extension.")
+    (license license:asl2.0)))
+
 (define-public python-pickleshare
   (package
     (name "python-pickleshare")
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v2 3/7] gnu: Add python-sqlite-utils.
  2023-03-17 19:19 ` [bug#60838] [PATCH v2 0/7] Add datasette and python-sqlite-utils Felix Gruber
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 1/7] gnu: Add python-click-default-group-wheel Felix Gruber
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 2/7] gnu: Add python-sqlite-fts4 Felix Gruber
@ 2023-03-17 19:19   ` Felix Gruber
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 4/7] gnu: Add python-pluggy-next Felix Gruber
                     ` (4 subsequent siblings)
  7 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-17 19:19 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

* gnu/packages/databases.scm (python-sqlite-utils): New variable.
---
 gnu/packages/databases.scm | 39 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 39 insertions(+)

diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 580359145e..d9ea2bba34 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -3573,6 +3573,45 @@ (define-public python-sqlite-fts4
 documents indexed using the SQLite's FTS4 full text search extension.")
     (license license:asl2.0)))
 
+(define-public python-sqlite-utils
+  (package
+    (name "python-sqlite-utils")
+    (version "3.30")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "sqlite-utils" version))
+              (sha256
+               (base32
+                "0cvfbyvkh7gjh3ws3gj2yhjhr459nsz6c5vrkxjlad7isl95q01h"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; No tests provided in pypi package.
+    (propagated-inputs (list python-click python-click-default-group-wheel
+                             python-dateutil python-sqlite-fts4
+                             python-tabulate))
+    (home-page "https://github.com/simonw/sqlite-utils")
+    (synopsis
+     "CLI tool and Python utility functions for manipulating SQLite databases")
+    (description
+     "This package provides a CLI tool and Python utility functions for
+manipulating SQLite databases.
+
+It's main features are:
+@itemize
+@item Pipe JSON (or CSV or TSV) directly into a new SQLite database file,
+      automatically creating a table with the appropriate schema.
+@item Run in-memory SQL queries, including joins, directly against data
+      in CSV, TSV or JSON files and view the results.
+@item Configure SQLite full-text search against your database tables and
+      run search queries against them, ordered by relevance.
+@item Run transformations against your tables to make schema changes
+      that SQLite ALTER TABLE does not directly support, such as
+      changing the type of a column.
+@item Extract columns into separate tables to better normalize your
+      existing data.
+@end itemize")
+    (license license:asl2.0)))
+
 (define-public python-pickleshare
   (package
     (name "python-pickleshare")
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v2 4/7] gnu: Add python-pluggy-next.
  2023-03-17 19:19 ` [bug#60838] [PATCH v2 0/7] Add datasette and python-sqlite-utils Felix Gruber
                     ` (2 preceding siblings ...)
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 3/7] gnu: Add python-sqlite-utils Felix Gruber
@ 2023-03-17 19:19   ` Felix Gruber
  2023-03-22  1:13     ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 5/7] gnu: Add python-asgi-lifespan Felix Gruber
                     ` (3 subsequent siblings)
  7 siblings, 1 reply; 38+ messages in thread
From: Felix Gruber @ 2023-03-17 19:19 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

* gnu/packages/python-xyz.scm (python-pluggy-next): New variable.
---
 gnu/packages/python-xyz.scm | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index a6bd592837..af1799591e 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -15408,6 +15408,19 @@ (define-public python-pluggy
    (home-page "https://pypi.org/project/pluggy/")
    (license license:expat)))
 
+;;; TODO: Make this the default python-pluggy in the next rebuild cycle.
+(define-public python-pluggy-next
+  (package
+   (inherit python-pluggy)
+   (version "1.0.0")
+   (source
+    (origin
+     (method url-fetch)
+     (uri (pypi-uri "pluggy" version))
+     (sha256
+      (base32
+       "0n8iadlas2z1b4h0fc73b043c7iwfvx9rgvqm1azjmffmhxkf922"))))))
+
 (define-public python-plumbum
   (package
     (name "python-plumbum")
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v2 5/7] gnu: Add python-asgi-lifespan.
  2023-03-17 19:19 ` [bug#60838] [PATCH v2 0/7] Add datasette and python-sqlite-utils Felix Gruber
                     ` (3 preceding siblings ...)
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 4/7] gnu: Add python-pluggy-next Felix Gruber
@ 2023-03-17 19:19   ` Felix Gruber
  2023-03-22  1:17     ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 6/7] gnu: Add python-asgi-csrf Felix Gruber
                     ` (2 subsequent siblings)
  7 siblings, 1 reply; 38+ messages in thread
From: Felix Gruber @ 2023-03-17 19:19 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

* gnu/packages/python-web.scm (python-asgi-lifespan): New variable.
---
 gnu/packages/python-web.scm | 25 ++++++++++++++++++++++++-
 1 file changed, 24 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 8a73c929a1..83e7d77da8 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -49,7 +49,7 @@
 ;;; Copyright © 2021 Alice Brenon <alice.brenon@ens-lyon.fr>
 ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
-;;; Copyright © 2022 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2022, 2023 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2022 Peter Polidoro <peter@polidoro.io>
 ;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
 ;;; Copyright © 2022 Luis Henrique Gomes Higino <luishenriquegh2701@gmail.com>
@@ -570,6 +570,29 @@ (define-public python-asgiref
 WSGI.  This package includes libraries for implementing ASGI servers.")
     (license license:bsd-3)))
 
+(define-public python-asgi-lifespan
+  (package
+    (name "python-asgi-lifespan")
+    (version "1.0.1")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "asgi-lifespan" version))
+              (sha256
+               (base32
+                "0zyvx8i43s1m2akqn5njwdh2zi6n05ji7mlvqx5pdi3k43dffcws"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:tests? #f)) ; The pypi package does not contain the tests folder.
+    (native-inputs (list python-pytest python-pytest-asyncio python-pytest-cov))
+    (propagated-inputs (list python-sniffio))
+    (home-page "https://github.com/florimondmanca/asgi-lifespan")
+    (synopsis "Programmatic startup/shutdown of ASGI apps")
+    (description "Programmatically send startup/shutdown lifespan events
+into ASGI applications.  When used in combination with an ASGI-capable
+HTTP client such as HTTPX, this allows mocking or testing ASGI
+applications without having to spin up an ASGI server.")
+    (license license:expat)))
+
 (define-public python-css-html-js-minify
   (package
     (name "python-css-html-js-minify")
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v2 6/7] gnu: Add python-asgi-csrf.
  2023-03-17 19:19 ` [bug#60838] [PATCH v2 0/7] Add datasette and python-sqlite-utils Felix Gruber
                     ` (4 preceding siblings ...)
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 5/7] gnu: Add python-asgi-lifespan Felix Gruber
@ 2023-03-17 19:19   ` Felix Gruber
  2023-03-22  1:19     ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 7/7] gnu: Add datasette Felix Gruber
  2023-03-18  8:13   ` [bug#60838] [PATCH v2 0/7] " Liliana Marie Prikler
  7 siblings, 1 reply; 38+ messages in thread
From: Felix Gruber @ 2023-03-17 19:19 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

* gnu/packages/python-web.scm (python-asgi-csrf): New variable.
---
 gnu/packages/python-web.scm | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 83e7d77da8..8c172d64c9 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -570,6 +570,31 @@ (define-public python-asgiref
 WSGI.  This package includes libraries for implementing ASGI servers.")
     (license license:bsd-3)))
 
+(define-public python-asgi-csrf
+  (package
+    (name "python-asgi-csrf")
+    (version "0.9")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "asgi-csrf" version))
+              (sha256
+               (base32
+                "06klgxfxzjfkyjky3rkvmf2r07r7r2my53qq7g9qy6mcmvfkp7bf"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-itsdangerous python-multipart))
+    (native-inputs (list python-asgi-lifespan
+                         python-httpx
+                         python-pytest
+                         python-pytest-asyncio
+                         python-pytest-cov
+                         python-starlette))
+    (home-page "https://github.com/simonw/asgi-csrf")
+    (synopsis "ASGI middleware for protecting against CSRF attacks")
+    (description "This middleware implements the Double Submit Cookie
+pattern, where a cookie is set that is then compared to a csrftoken
+hidden form field or a x-csrftoken HTTP header.")
+    (license license:asl2.0)))
+
 (define-public python-asgi-lifespan
   (package
     (name "python-asgi-lifespan")
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v2 7/7] gnu: Add datasette.
  2023-03-17 19:19 ` [bug#60838] [PATCH v2 0/7] Add datasette and python-sqlite-utils Felix Gruber
                     ` (5 preceding siblings ...)
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 6/7] gnu: Add python-asgi-csrf Felix Gruber
@ 2023-03-17 19:19   ` Felix Gruber
  2023-03-22  1:26     ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
  2023-03-18  8:13   ` [bug#60838] [PATCH v2 0/7] " Liliana Marie Prikler
  7 siblings, 1 reply; 38+ messages in thread
From: Felix Gruber @ 2023-03-17 19:19 UTC (permalink / raw)
  To: 60838; +Cc: Felix Gruber

* gnu/packages/databases.scm (datasette): New variable.
---
 gnu/packages/databases.scm | 47 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index d9ea2bba34..72960396fc 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -59,6 +59,7 @@
 ;;; Copyright © 2022 muradm <mail@muradm.net>
 ;;; Copyright © 2022 Thomas Albers Raviola <thomas@thomaslabs.org>
 ;;; Copyright © 2021, 2022 jgart <jgart@dismail.de>
+;;; Copyright © 2023 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -5049,3 +5050,49 @@ (define-public python-dogpile.cache
 provides API hooks which integrate these cache backends with the locking
 mechanism of @code{dogpile}.")
     (license license:expat)))
+
+(define-public datasette
+  (package
+    (name "datasette")
+    (version "0.64.2")
+    (source
+      (origin
+        (method url-fetch)
+        (uri (pypi-uri "datasette" version))
+        (sha256
+         (base32
+          "1z2qwj7gmyph4dnbr44p332f9ydpv7c4z5jiyai12bmgsgdnxqg9"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:tests? #f                    ; pypi package contains no tests
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'loosen-requirements
+            (lambda _
+              ;; The package needlessly specifies exact versions
+              ;; of dependencies, when it works fine with others.
+              (substitute* "setup.py"
+                (("(black)==[0-9\\.]+" all package)
+                 package)))))))
+    (propagated-inputs (list python-aiofiles
+                             python-asgi-csrf
+                             python-asgiref
+                             python-click-7
+                             python-click-default-group-wheel
+                             python-httpx
+                             python-hupper
+                             python-itsdangerous
+                             python-janus
+                             python-jinja2
+                             python-mergedeep
+                             python-pint
+                             python-pluggy-next
+                             python-pyyaml
+                             python-uvicorn))
+    (home-page "https://datasette.io/")
+    (synopsis "Multi-tool for exploring and publishing data")
+    (description "Datasette is a tool for exploring and publishing data.
+It helps people take data of any shape or size and publish that as an
+interactive, explorable website and accompanying API.")
+    (license license:asl2.0)))
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v2 0/7]  Add datasette and python-sqlite-utils.
  2023-03-17 19:19 ` [bug#60838] [PATCH v2 0/7] Add datasette and python-sqlite-utils Felix Gruber
                     ` (6 preceding siblings ...)
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 7/7] gnu: Add datasette Felix Gruber
@ 2023-03-18  8:13   ` Liliana Marie Prikler
  7 siblings, 0 replies; 38+ messages in thread
From: Liliana Marie Prikler @ 2023-03-18  8:13 UTC (permalink / raw)
  To: Felix Gruber, 60838

Hi Felix,

Am Freitag, dem 17.03.2023 um 19:19 +0000 schrieb Felix Gruber:
> This new version of the patchset removes the commit to update
> python-janus which has already been updated to 1.0.0 on master since
> I originally sent my patches. It also updates datasette to its latest
> upstream version 0.64.2.
> 
> Felix Gruber (7):
>   gnu: Add python-click-default-group-wheel.
>   gnu: Add python-sqlite-fts4.
>   gnu: Add python-sqlite-utils.
>   gnu: Add python-pluggy-next.
>   gnu: Add python-asgi-lifespan.
>   gnu: Add python-asgi-csrf.
>   gnu: Add datasette.
Unless someone wants to do this first, I'll schedule this for
upstreaming on April 2nd.  Why the long delay?  I have my own series
depending on pluggy-next coming up and it'll require standard review
time.

Cheers




^ permalink raw reply	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils.
  2023-01-15 21:47 [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Felix Gruber
                   ` (8 preceding siblings ...)
  2023-03-17 19:19 ` [bug#60838] [PATCH v2 0/7] Add datasette and python-sqlite-utils Felix Gruber
@ 2023-03-22  0:59 ` Maxim Cournoyer
  2023-03-26 19:43   ` [bug#60838] [PATCH v3 0/9] " Felix Gruber
  9 siblings, 1 reply; 38+ messages in thread
From: Maxim Cournoyer @ 2023-03-22  0:59 UTC (permalink / raw)
  To: Felix Gruber; +Cc: 60838

Hi Felix,

Felix Gruber <felgru@posteo.net> writes:

> This patchset adds new packages for the database exploration and
> manipulation tools datasette and sqlite-utils, as well as some missing
> dependencies of those two packages.
>
> Since datasette and sqlite-utils do not contain any tests in their pypi
> source archives [...]

This happens frequently for the PyPI source archives; I'd recommend
switching to git as automated tests are really worth to preserve the
package longer term.  Could you look into enabling the test suite by
checking out the projects source from git?  The pyproject-build-system
would probably make your life easy then (it knows to run pytest if it's
in the native-inputs, for example).

-- 
Thanks,
Maxim




^ permalink raw reply	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils.
  2023-01-15 21:50 ` [bug#60838] [PATCH 1/8] gnu: Add python-click-default-group-wheel Felix Gruber
@ 2023-03-22  1:04   ` Maxim Cournoyer
  0 siblings, 0 replies; 38+ messages in thread
From: Maxim Cournoyer @ 2023-03-22  1:04 UTC (permalink / raw)
  To: Felix Gruber; +Cc: 60838

Hi,

Felix Gruber <felgru@posteo.net> writes:

> * gnu/packages/python-xyz.scm (python-click-default-group-wheel): New
>   variable.
> ---
>  gnu/packages/python-xyz.scm | 26 +++++++++++++++++++++++++-
>  1 file changed, 25 insertions(+), 1 deletion(-)
>
> diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
> index c91561e787..1dbe9d611f 100644
> --- a/gnu/packages/python-xyz.scm
> +++ b/gnu/packages/python-xyz.scm
> @@ -108,7 +108,7 @@
>  ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
>  ;;; Copyright © 2021 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
>  ;;; Copyright © 2021, 2022 Pradana Aumars <paumars@courrier.dev>
> -;;; Copyright © 2021, 2022 Felix Gruber <felgru@posteo.net>
> +;;; Copyright © 2021, 2022, 2023 Felix Gruber <felgru@posteo.net>
>  ;;; Copyright © 2021 Sébastien Lerique <sl@eauchat.org>
>  ;;; Copyright © 2021 Raphaël Mélotte <raphael.melotte@mind.be>
>  ;;; Copyright © 2021 ZmnSCPxj <ZmnSCPxj@protonmail.com>
> @@ -14769,6 +14769,30 @@ (define-public python-click-default-group
>      (home-page "https://github.com/click-contrib/click-default-group")
>      (license license:bsd-3)))
>  
> +(define-public python-click-default-group-wheel
> +  ;; Fork of python-click-default-group used by sqlite-utils and datasette.
> +  ;; See https://github.com/click-contrib/click-default-group/issues/21
> +  (package
> +    (name "python-click-default-group-wheel")
> +    (version "1.2.2")
> +    (source (origin
> +              (method url-fetch)
> +              (uri (pypi-uri "click-default-group-wheel" version))
> +              (sha256
> +               (base32
> +                "0ivpdng2391v8afd5j1xdv9vbbr9iafbdh6h5shqhgn0j8ns83g9"))))
> +    (build-system python-build-system)
> +    (arguments
> +      '(#:tests? #f)) ; no tests in pypi package
> +    (propagated-inputs (list python-click))
> +    (home-page "https://github.com/sublee/click-default-group/")
> +    (synopsis
> +     "Extends click.Group to invoke a command without explicit subcommand name")

I'd try to make the synopsis read more like a synthesized version of
what this package *is*; it currently reads almost as a complete
sentence.  Perhaps something like: "Python extension for the
@code{click.Group} class".

> +    (description
> +      "This package provides click-default-group with an additional pure
> +Python wheel package, compatible with Pyodide.")

"additional pure Python wheel package" doesn't add mean/add much in my
opinion.  Based on the README.md content I'd use instead: "DefaultGroup
is a subclass of code{click.Group}, which invokes a default sub-command
instead of showing a help message when a sub-command is not passed."

-- 
Thanks,
Maxim




^ permalink raw reply	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils.
  2023-01-15 21:51 ` [bug#60838] [PATCH 2/8] gnu: Add python-sqlite-fts4 Felix Gruber
@ 2023-03-22  1:05   ` Maxim Cournoyer
  0 siblings, 0 replies; 38+ messages in thread
From: Maxim Cournoyer @ 2023-03-22  1:05 UTC (permalink / raw)
  To: Felix Gruber; +Cc: 60838

Felix Gruber <felgru@posteo.net> writes:

> * gnu/packages/databases.scm (python-sqlite-fts4): New variable.
> ---
>  gnu/packages/databases.scm | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
>
> diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
> index 2a66efb2a0..375d34b051 100644
> --- a/gnu/packages/databases.scm
> +++ b/gnu/packages/databases.scm
> @@ -3557,6 +3557,24 @@ (define-public python-alembic
>  SQLAlchemy Database Toolkit for Python.")
>      (license license:expat)))
>  
> +(define-public python-sqlite-fts4
> +  (package
> +    (name "python-sqlite-fts4")
> +    (version "1.0.3")
> +    (source (origin
> +              (method url-fetch)
> +              (uri (pypi-uri "sqlite-fts4" version))
> +              (sha256
> +               (base32
> +                "034kx0ac556sywy1p4qcrc36l24w3q0xwswqv2z9s3k8yvm5xc3q"))))
> +    (build-system python-build-system)
> +    (native-inputs (list python-pytest))
> +    (home-page "https://github.com/simonw/sqlite-fts4")
> +    (synopsis "Python functions for working with SQLite FTS4 search")
> +    (description "Custom SQLite functions written in Python for ranking

I'd start the description with "This package provides custom [...]", to
make it a complete sentence.

-- 
Thanks,
Maxim




^ permalink raw reply	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils.
  2023-01-15 21:51 ` [bug#60838] [PATCH 3/8] gnu: Add python-sqlite-utils Felix Gruber
@ 2023-03-22  1:08   ` Maxim Cournoyer
  0 siblings, 0 replies; 38+ messages in thread
From: Maxim Cournoyer @ 2023-03-22  1:08 UTC (permalink / raw)
  To: Felix Gruber; +Cc: 60838

Hi,

Felix Gruber <felgru@posteo.net> writes:

> * gnu/packages/databases.scm (python-sqlite-utils): New variable.
> ---
>  gnu/packages/databases.scm | 39 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 39 insertions(+)
>
> diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
> index 375d34b051..9831a3b761 100644
> --- a/gnu/packages/databases.scm
> +++ b/gnu/packages/databases.scm
> @@ -3575,6 +3575,45 @@ (define-public python-sqlite-fts4
>  documents indexed using the SQLite's FTS4 full text search extension.")
>      (license license:asl2.0)))
>  
> +(define-public python-sqlite-utils
> +  (package
> +    (name "python-sqlite-utils")
> +    (version "3.30")
> +    (source (origin
> +              (method url-fetch)
> +              (uri (pypi-uri "sqlite-utils" version))
> +              (sha256
> +               (base32
> +                "0cvfbyvkh7gjh3ws3gj2yhjhr459nsz6c5vrkxjlad7isl95q01h"))))
> +    (build-system python-build-system)
> +    (arguments
> +     '(#:tests? #f)) ; No tests provided in pypi package.

Try fetching the source from git to enable the test suite.

> +    (propagated-inputs (list python-click python-click-default-group-wheel
> +                             python-dateutil python-sqlite-fts4
> +                             python-tabulate))
> +    (home-page "https://github.com/simonw/sqlite-utils")
> +    (synopsis
> +     "CLI tool and Python utility functions for manipulating SQLite databases")
> +    (description
> +     "This package provides a CLI tool and Python utility functions for
> +manipulating SQLite databases.
> +
> +It's main features are:
> +@itemize
> +@item Pipe JSON (or CSV or TSV) directly into a new SQLite database file,
> +      automatically creating a table with the appropriate schema.
> +@item Run in-memory SQL queries, including joins, directly against data
> +      in CSV, TSV or JSON files and view the results.
> +@item Configure SQLite full-text search against your database tables and
> +      run search queries against them, ordered by relevance.
> +@item Run transformations against your tables to make schema changes
> +      that SQLite ALTER TABLE does not directly support, such as
> +      changing the type of a column.
> +@item Extract columns into separate tables to better normalize your
> +      existing data.
> +@end itemize")
> +    (license license:asl2.0)))

I think the conventional way to indent @item is to use something like:

--8<---------------cut here---------------start------------->8---
@item
Text on
multiple lines.
@item
More text
on multiple lines.
@item
etc.
--8<---------------cut here---------------end--------------->8---

-- 
Thanks,
Maxim




^ permalink raw reply	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils.
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 4/7] gnu: Add python-pluggy-next Felix Gruber
@ 2023-03-22  1:13     ` Maxim Cournoyer
  0 siblings, 0 replies; 38+ messages in thread
From: Maxim Cournoyer @ 2023-03-22  1:13 UTC (permalink / raw)
  To: Felix Gruber; +Cc: 60838

Hi,

Felix Gruber <felgru@posteo.net> writes:

> * gnu/packages/python-xyz.scm (python-pluggy-next): New variable.
> ---
>  gnu/packages/python-xyz.scm | 13 +++++++++++++
>  1 file changed, 13 insertions(+)
>
> diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
> index a6bd592837..af1799591e 100644
> --- a/gnu/packages/python-xyz.scm
> +++ b/gnu/packages/python-xyz.scm
> @@ -15408,6 +15408,19 @@ (define-public python-pluggy
>     (home-page "https://pypi.org/project/pluggy/")
>     (license license:expat)))
>  
> +;;; TODO: Make this the default python-pluggy in the next rebuild cycle.
> +(define-public python-pluggy-next
> +  (package
> +   (inherit python-pluggy)
> +   (version "1.0.0")
> +   (source
> +    (origin
> +     (method url-fetch)
> +     (uri (pypi-uri "pluggy" version))
> +     (sha256
> +      (base32
> +       "0n8iadlas2z1b4h0fc73b043c7iwfvx9rgvqm1azjmffmhxkf922"))))))
> +
>  (define-public python-plumbum
>    (package
>      (name "python-plumbum")

I'll install this one to master in a moment.

-- 
Thanks,
Maxim




^ permalink raw reply	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils.
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 5/7] gnu: Add python-asgi-lifespan Felix Gruber
@ 2023-03-22  1:17     ` Maxim Cournoyer
  0 siblings, 0 replies; 38+ messages in thread
From: Maxim Cournoyer @ 2023-03-22  1:17 UTC (permalink / raw)
  To: Felix Gruber; +Cc: 60838

Hi,

Felix Gruber <felgru@posteo.net> writes:

> * gnu/packages/python-web.scm (python-asgi-lifespan): New variable.
> ---
>  gnu/packages/python-web.scm | 25 ++++++++++++++++++++++++-
>  1 file changed, 24 insertions(+), 1 deletion(-)
>
> diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
> index 8a73c929a1..83e7d77da8 100644
> --- a/gnu/packages/python-web.scm
> +++ b/gnu/packages/python-web.scm
> @@ -49,7 +49,7 @@
>  ;;; Copyright © 2021 Alice Brenon <alice.brenon@ens-lyon.fr>
>  ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
>  ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
> -;;; Copyright © 2022 Felix Gruber <felgru@posteo.net>
> +;;; Copyright © 2022, 2023 Felix Gruber <felgru@posteo.net>
>  ;;; Copyright © 2022 Peter Polidoro <peter@polidoro.io>
>  ;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
>  ;;; Copyright © 2022 Luis Henrique Gomes Higino <luishenriquegh2701@gmail.com>
> @@ -570,6 +570,29 @@ (define-public python-asgiref
>  WSGI.  This package includes libraries for implementing ASGI servers.")
>      (license license:bsd-3)))
>  
> +(define-public python-asgi-lifespan
> +  (package
> +    (name "python-asgi-lifespan")
> +    (version "1.0.1")
> +    (source (origin
> +              (method url-fetch)
> +              (uri (pypi-uri "asgi-lifespan" version))
> +              (sha256
> +               (base32
> +                "0zyvx8i43s1m2akqn5njwdh2zi6n05ji7mlvqx5pdi3k43dffcws"))))
> +    (build-system python-build-system)

To run pytest tests without having to override the check suite, you'll
want to use the pyproject-build-system.

> +    (arguments
> +     '(#:tests? #f)) ; The pypi package does not contain the tests folder.

Please fetch from git to run the test suite.  I typically leave a
comment ";for tests" to the right of the (method git-fetch) line, to
explain why we deviate from the source archives.

> +    (native-inputs (list python-pytest python-pytest-asyncio python-pytest-cov))
> +    (propagated-inputs (list python-sniffio))
> +    (home-page "https://github.com/florimondmanca/asgi-lifespan")
> +    (synopsis "Programmatic startup/shutdown of ASGI apps")
> +    (description "Programmatically send startup/shutdown lifespan events
> +into ASGI applications.  When used in combination with an ASGI-capable
> +HTTP client such as HTTPX, this allows mocking or testing ASGI
> +applications without having to spin up an ASGI server.")
> +    (license license:expat)))

Please define the lesser known acronyms in the description, using for
example like in "into Asynchronous Server Gateway Interface (ASGI)
applications." or the Texinfo @acronym command.

-- 
Thanks,
Maxim




^ permalink raw reply	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils.
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 6/7] gnu: Add python-asgi-csrf Felix Gruber
@ 2023-03-22  1:19     ` Maxim Cournoyer
  0 siblings, 0 replies; 38+ messages in thread
From: Maxim Cournoyer @ 2023-03-22  1:19 UTC (permalink / raw)
  To: Felix Gruber; +Cc: 60838

Hi,

Felix Gruber <felgru@posteo.net> writes:

> * gnu/packages/python-web.scm (python-asgi-csrf): New variable.
> ---
>  gnu/packages/python-web.scm | 25 +++++++++++++++++++++++++
>  1 file changed, 25 insertions(+)
>
> diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
> index 83e7d77da8..8c172d64c9 100644
> --- a/gnu/packages/python-web.scm
> +++ b/gnu/packages/python-web.scm
> @@ -570,6 +570,31 @@ (define-public python-asgiref
>  WSGI.  This package includes libraries for implementing ASGI servers.")
>      (license license:bsd-3)))
>  
> +(define-public python-asgi-csrf
> +  (package
> +    (name "python-asgi-csrf")
> +    (version "0.9")
> +    (source (origin
> +              (method url-fetch)
> +              (uri (pypi-uri "asgi-csrf" version))
> +              (sha256
> +               (base32
> +                "06klgxfxzjfkyjky3rkvmf2r07r7r2my53qq7g9qy6mcmvfkp7bf"))))
> +    (build-system python-build-system)
> +    (propagated-inputs (list python-itsdangerous python-multipart))
> +    (native-inputs (list python-asgi-lifespan
> +                         python-httpx
> +                         python-pytest
> +                         python-pytest-asyncio
> +                         python-pytest-cov
> +                         python-starlette))
> +    (home-page "https://github.com/simonw/asgi-csrf")
> +    (synopsis "ASGI middleware for protecting against CSRF attacks")
> +    (description "This middleware implements the Double Submit Cookie
> +pattern, where a cookie is set that is then compared to a csrftoken
> +hidden form field or a x-csrftoken HTTP header.")
> +    (license license:asl2.0)))

Please define ASGI and CSRF in full, at least in the description.
I'd also adorn the 'csrftoken' and 'x-csrftoken' words with @code.

-- 
Thanks,
Maxim




^ permalink raw reply	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils.
  2023-03-17 19:19   ` [bug#60838] [PATCH v2 7/7] gnu: Add datasette Felix Gruber
@ 2023-03-22  1:26     ` Maxim Cournoyer
  0 siblings, 0 replies; 38+ messages in thread
From: Maxim Cournoyer @ 2023-03-22  1:26 UTC (permalink / raw)
  To: Felix Gruber; +Cc: 60838

Hello,

Felix Gruber <felgru@posteo.net> writes:

> * gnu/packages/databases.scm (datasette): New variable.
> ---
>  gnu/packages/databases.scm | 47 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 47 insertions(+)
>
> diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
> index d9ea2bba34..72960396fc 100644
> --- a/gnu/packages/databases.scm
> +++ b/gnu/packages/databases.scm
> @@ -59,6 +59,7 @@
>  ;;; Copyright © 2022 muradm <mail@muradm.net>
>  ;;; Copyright © 2022 Thomas Albers Raviola <thomas@thomaslabs.org>
>  ;;; Copyright © 2021, 2022 jgart <jgart@dismail.de>
> +;;; Copyright © 2023 Felix Gruber <felgru@posteo.net>
>  ;;;
>  ;;; This file is part of GNU Guix.
>  ;;;
> @@ -5049,3 +5050,49 @@ (define-public python-dogpile.cache
>  provides API hooks which integrate these cache backends with the locking
>  mechanism of @code{dogpile}.")
>      (license license:expat)))
> +
> +(define-public datasette
> +  (package
> +    (name "datasette")
> +    (version "0.64.2")
> +    (source
> +      (origin
> +        (method url-fetch)
> +        (uri (pypi-uri "datasette" version))
> +        (sha256
> +         (base32
> +          "1z2qwj7gmyph4dnbr44p332f9ydpv7c4z5jiyai12bmgsgdnxqg9"))))
> +    (build-system pyproject-build-system)
> +    (arguments
> +     (list
> +      #:tests? #f                    ; pypi package contains no tests

That's a lame excuse for disabling the test suite, in my opinion (and I
know it can be tempting to use it!) :-).  Please fetch from git when
there are no tests in the sdist releases (which is increasingly common,
it seems).

> +      #:phases
> +      #~(modify-phases %standard-phases
> +          (add-after 'unpack 'loosen-requirements

Nitpick: I call these phases 'relax-requirements.

> +            (lambda _
> +              ;; The package needlessly specifies exact versions
> +              ;; of dependencies, when it works fine with others.
> +              (substitute* "setup.py"
> +                (("(black)==[0-9\\.]+" all package)
> +                 package)))))))

The above only affects the 'black' package, right?  Since the 'all'
binding is not used, it can be set to '_' instead.

> +    (propagated-inputs (list python-aiofiles
> +                             python-asgi-csrf
> +                             python-asgiref
> +                             python-click-7
> +                             python-click-default-group-wheel
> +                             python-httpx
> +                             python-hupper
> +                             python-itsdangerous
> +                             python-janus
> +                             python-jinja2
> +                             python-mergedeep
> +                             python-pint
> +                             python-pluggy-next
> +                             python-pyyaml
> +                             python-uvicorn))
> +    (home-page "https://datasette.io/")
> +    (synopsis "Multi-tool for exploring and publishing data")
> +    (description "Datasette is a tool for exploring and publishing data.
> +It helps people take data of any shape or size and publish that as an
> +interactive, explorable website and accompanying API.")
> +    (license license:asl2.0)))

It otherwise looks very good!  Apart from enabling the tests suite where
applicable, my comments are mostly cosmetic, so a v2 and we should be
good!  Thank you for the contribution!

-- 
Maxim




^ permalink raw reply	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v3 0/9] Add datasette and python-sqlite-utils.
  2023-03-22  0:59 ` [bug#60838] [PATCH 0/8] " Maxim Cournoyer
@ 2023-03-26 19:43   ` Felix Gruber
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 1/9] gnu: Add python-click-default-group-wheel Felix Gruber
                       ` (8 more replies)
  0 siblings, 9 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-26 19:43 UTC (permalink / raw)
  To: 60838, Maxim Cournoyer; +Cc: Felix Gruber

Hi Maxim,

Thank you for your review.
I've updated my patchset with your suggested changes. In particular,
I now fetch from Git to obtain the tests which were missing in the pypi
packages. I had to disable a few tests in python-asgi-lifespan and in
datasette because they were failing for no apparent reason.
I also had to update the python-pluggy dependency in the
python-pytest-7.1 package, because it was preventing datasette from
finding the newer python-pluggy version. I confirmed that all packages
that (transitively) depend on python-pytest-7.1 still successfully build
after that change.

Finally, I had to add two new packages python-trustme-next and
python-cogapp since they are used by datasettes tests.

Kind regards,
Felix

Felix Gruber (9):
  gnu: Add python-click-default-group-wheel.
  gnu: Add python-sqlite-fts4.
  gnu: Add python-sqlite-utils.
  gnu: Add python-asgi-lifespan.
  gnu: Add python-asgi-csrf.
  gnu: Add python-trustme-next.
  gnu: Add python-cogapp.
  gnu: python-pytest-7.1: Depend on python-pluggy-next.
  gnu: Add datasette.

 gnu/packages/check.scm         |   6 +-
 gnu/packages/databases.scm     | 158 +++++++++++++++++++++++++++++++++
 gnu/packages/python-crypto.scm |  15 ++++
 gnu/packages/python-web.scm    |  79 ++++++++++++++++-
 gnu/packages/python-xyz.scm    |  48 +++++++++-
 5 files changed, 303 insertions(+), 3 deletions(-)

-- 
2.39.2





^ permalink raw reply	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v3 1/9] gnu: Add python-click-default-group-wheel.
  2023-03-26 19:43   ` [bug#60838] [PATCH v3 0/9] " Felix Gruber
@ 2023-03-26 19:43     ` Felix Gruber
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 2/9] gnu: Add python-sqlite-fts4 Felix Gruber
                       ` (7 subsequent siblings)
  8 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-26 19:43 UTC (permalink / raw)
  To: 60838, Maxim Cournoyer; +Cc: Felix Gruber

* gnu/packages/python-xyz.scm (python-click-default-group-wheel): New
  variable.
---
 gnu/packages/python-xyz.scm | 26 +++++++++++++++++++++++++-
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 3f0005faa2..9240fad2e6 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -108,7 +108,7 @@
 ;;; Copyright © 2021 Simon Streit <simon@netpanic.org>
 ;;; Copyright © 2021 Daniel Meißner <daniel.meissner-i4k@ruhr-uni-bochum.de>
 ;;; Copyright © 2021, 2022 Pradana Aumars <paumars@courrier.dev>
-;;; Copyright © 2021, 2022 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2021, 2022, 2023 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2021 Sébastien Lerique <sl@eauchat.org>
 ;;; Copyright © 2021 Raphaël Mélotte <raphael.melotte@mind.be>
 ;;; Copyright © 2021 ZmnSCPxj <ZmnSCPxj@protonmail.com>
@@ -14964,6 +14964,30 @@ (define-public python-click-default-group
     (home-page "https://github.com/click-contrib/click-default-group")
     (license license:bsd-3)))
 
+(define-public python-click-default-group-wheel
+  ;; Fork of python-click-default-group used by sqlite-utils and datasette.
+  ;; See https://github.com/click-contrib/click-default-group/issues/21
+  (package
+    (name "python-click-default-group-wheel")
+    (version "1.2.2")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "click-default-group-wheel" version))
+              (sha256
+               (base32
+                "0ivpdng2391v8afd5j1xdv9vbbr9iafbdh6h5shqhgn0j8ns83g9"))))
+    (build-system python-build-system)
+    (arguments
+      '(#:tests? #f)) ; no tests in pypi package
+    (propagated-inputs (list python-click))
+    (home-page "https://github.com/sublee/click-default-group/")
+    (synopsis "Python extension for the @code{click.Group} class")
+    (description
+      "DefaultGroup is a subclass of @code{click.Group} which invokes a
+default sub-command instead of showing a help message when a sub-command
+is not passed.")
+    (license license:bsd-3)))
+
 (define-public python-structlog
   (package
     (name "python-structlog")
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v3 2/9] gnu: Add python-sqlite-fts4.
  2023-03-26 19:43   ` [bug#60838] [PATCH v3 0/9] " Felix Gruber
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 1/9] gnu: Add python-click-default-group-wheel Felix Gruber
@ 2023-03-26 19:43     ` Felix Gruber
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 3/9] gnu: Add python-sqlite-utils Felix Gruber
                       ` (6 subsequent siblings)
  8 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-26 19:43 UTC (permalink / raw)
  To: 60838, Maxim Cournoyer; +Cc: Felix Gruber

* gnu/packages/databases.scm (python-sqlite-fts4): New variable.
---
 gnu/packages/databases.scm | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index e51ddd5bf2..7a5f62c0f4 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -3561,6 +3561,25 @@ (define-public python-alembic
 SQLAlchemy Database Toolkit for Python.")
     (license license:expat)))
 
+(define-public python-sqlite-fts4
+  (package
+    (name "python-sqlite-fts4")
+    (version "1.0.3")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "sqlite-fts4" version))
+              (sha256
+               (base32
+                "034kx0ac556sywy1p4qcrc36l24w3q0xwswqv2z9s3k8yvm5xc3q"))))
+    (build-system python-build-system)
+    (native-inputs (list python-pytest))
+    (home-page "https://github.com/simonw/sqlite-fts4")
+    (synopsis "Python functions for working with SQLite FTS4 search")
+    (description "This package provieds custom SQLite functions written
+in Python for ranking documents indexed using the SQLite's FTS4 full
+text search extension.")
+    (license license:asl2.0)))
+
 (define-public python-pickleshare
   (package
     (name "python-pickleshare")
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v3 3/9] gnu: Add python-sqlite-utils.
  2023-03-26 19:43   ` [bug#60838] [PATCH v3 0/9] " Felix Gruber
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 1/9] gnu: Add python-click-default-group-wheel Felix Gruber
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 2/9] gnu: Add python-sqlite-fts4 Felix Gruber
@ 2023-03-26 19:43     ` Felix Gruber
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 4/9] gnu: Add python-asgi-lifespan Felix Gruber
                       ` (5 subsequent siblings)
  8 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-26 19:43 UTC (permalink / raw)
  To: 60838, Maxim Cournoyer; +Cc: Felix Gruber

* gnu/packages/databases.scm (python-sqlite-utils): New variable.
---
 gnu/packages/databases.scm | 46 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 46 insertions(+)

diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 7a5f62c0f4..87fa24038f 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -3580,6 +3580,52 @@ (define-public python-sqlite-fts4
 text search extension.")
     (license license:asl2.0)))
 
+(define-public python-sqlite-utils
+  (package
+    (name "python-sqlite-utils")
+    (version "3.30")
+    (source (origin
+              (method git-fetch)  ; for tests
+              (uri (git-reference
+                    (url "https://github.com/simonw/sqlite-utils")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1a58syvh5jp40vi5libsxkqy99z75kj4ckxqmylbhd342ppfy1wp"))))
+    (build-system pyproject-build-system)
+    (propagated-inputs (list python-click python-click-default-group-wheel
+                             python-dateutil python-sqlite-fts4
+                             python-tabulate))
+    (native-inputs (list python-pytest))
+    (home-page "https://github.com/simonw/sqlite-utils")
+    (synopsis
+     "CLI tool and Python utility functions for manipulating SQLite databases")
+    (description
+     "This package provides a CLI tool and Python utility functions for
+manipulating SQLite databases.
+
+It's main features are:
+@itemize
+@item
+Pipe JSON (or CSV or TSV) directly into a new SQLite database file,
+automatically creating a table with the appropriate schema.
+@item
+Run in-memory SQL queries, including joins, directly against data in
+CSV, TSV or JSON files and view the results.
+@item
+Configure SQLite full-text search against your database tables and run
+search queries against them, ordered by relevance.
+@item
+Run transformations against your tables to make schema changes that
+SQLite ALTER TABLE does not directly support, such as changing the type
+of a column.
+@item
+Extract columns into separate tables to better normalize your existing
+data.
+@end itemize")
+    (license license:asl2.0)))
+
 (define-public python-pickleshare
   (package
     (name "python-pickleshare")
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v3 4/9] gnu: Add python-asgi-lifespan.
  2023-03-26 19:43   ` [bug#60838] [PATCH v3 0/9] " Felix Gruber
                       ` (2 preceding siblings ...)
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 3/9] gnu: Add python-sqlite-utils Felix Gruber
@ 2023-03-26 19:43     ` Felix Gruber
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 5/9] gnu: Add python-asgi-csrf Felix Gruber
                       ` (4 subsequent siblings)
  8 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-26 19:43 UTC (permalink / raw)
  To: 60838, Maxim Cournoyer; +Cc: Felix Gruber

* gnu/packages/python-web.scm (python-asgi-lifespan): New variable.
---
 gnu/packages/python-web.scm | 52 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 51 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 072d160c26..8e3f778919 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -49,7 +49,7 @@
 ;;; Copyright © 2021 Alice Brenon <alice.brenon@ens-lyon.fr>
 ;;; Copyright © 2022 John Kehayias <john.kehayias@protonmail.com>
 ;;; Copyright © 2022 Denis 'GNUtoo' Carikli <GNUtoo@cyberdimension.org>
-;;; Copyright © 2022 Felix Gruber <felgru@posteo.net>
+;;; Copyright © 2022, 2023 Felix Gruber <felgru@posteo.net>
 ;;; Copyright © 2022 Peter Polidoro <peter@polidoro.io>
 ;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
 ;;; Copyright © 2022 Luis Henrique Gomes Higino <luishenriquegh2701@gmail.com>
@@ -570,6 +570,56 @@ (define-public python-asgiref
 WSGI.  This package includes libraries for implementing ASGI servers.")
     (license license:bsd-3)))
 
+(define-public python-asgi-lifespan
+  (package
+    (name "python-asgi-lifespan")
+    (version "1.0.1")
+    (source (origin
+              (method git-fetch)  ; for tests
+              (uri (git-reference
+                    (url "https://github.com/florimondmanca/asgi-lifespan")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "10a5ci9ddr8wnjf3wai7xifbbplirhyrgvw4p28q0ha63cvhb2j2"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+       #:test-flags
+       ;; disable failing tests
+       '(list "-k"
+              (string-append
+                "not test_lifespan_manager[asyncio-None-ValueError-None]"
+                " and not test_lifespan_manager[asyncio-ValueError-None-None]"
+                " and not test_lifespan_manager[asyncio-ValueError-ValueError-None]"
+                " and not test_lifespan_manager[trio-None-ValueError-None]"
+                " and not test_lifespan_manager[trio-ValueError-None-None]"
+                " and not test_lifespan_manager[trio-ValueError-ValueError-None]"))
+       #:phases
+       '(modify-phases %standard-phases
+          (add-after 'unpack 'lower-coverage-requirement
+            ;; after disabling the failing tests, the coverage
+            ;; dropped slightly below 100%.
+            (lambda _
+              (substitute* "setup.cfg"
+                (("(--cov-fail-under=)[0-9]+" _ cov)
+                 (string-append cov "90"))))))))
+    (native-inputs (list python-pytest
+                         python-pytest-asyncio
+                         python-pytest-cov
+                         python-pytest-trio
+                         python-starlette))
+    (propagated-inputs (list python-sniffio))
+    (home-page "https://github.com/florimondmanca/asgi-lifespan")
+    (synopsis "Programmatic startup/shutdown of ASGI apps")
+    (description "Programmatically send startup/shutdown lifespan events
+into Asynchronous Server Gateway Interface (ASGI) applications.  When
+used in combination with an ASGI-capable HTTP client such as HTTPX, this
+allows mocking or testing ASGI applications without having to spin up an
+ASGI server.")
+    (license license:expat)))
+
 (define-public python-css-html-js-minify
   (package
     (name "python-css-html-js-minify")
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v3 5/9] gnu: Add python-asgi-csrf.
  2023-03-26 19:43   ` [bug#60838] [PATCH v3 0/9] " Felix Gruber
                       ` (3 preceding siblings ...)
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 4/9] gnu: Add python-asgi-lifespan Felix Gruber
@ 2023-03-26 19:43     ` Felix Gruber
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 6/9] gnu: Add python-trustme-next Felix Gruber
                       ` (3 subsequent siblings)
  8 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-26 19:43 UTC (permalink / raw)
  To: 60838, Maxim Cournoyer; +Cc: Felix Gruber

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

diff --git a/gnu/packages/python-web.scm b/gnu/packages/python-web.scm
index 8e3f778919..0be4078513 100644
--- a/gnu/packages/python-web.scm
+++ b/gnu/packages/python-web.scm
@@ -570,6 +570,33 @@ (define-public python-asgiref
 WSGI.  This package includes libraries for implementing ASGI servers.")
     (license license:bsd-3)))
 
+(define-public python-asgi-csrf
+  (package
+    (name "python-asgi-csrf")
+    (version "0.9")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "asgi-csrf" version))
+              (sha256
+               (base32
+                "06klgxfxzjfkyjky3rkvmf2r07r7r2my53qq7g9qy6mcmvfkp7bf"))))
+    (build-system python-build-system)
+    (propagated-inputs (list python-itsdangerous python-multipart))
+    (native-inputs (list python-asgi-lifespan
+                         python-httpx
+                         python-pytest
+                         python-pytest-asyncio
+                         python-pytest-cov
+                         python-starlette))
+    (home-page "https://github.com/simonw/asgi-csrf")
+    (synopsis "ASGI middleware for protecting against CSRF attacks")
+    (description "This Asynchronous Server Gateway Interface (ASGI)
+middleware protects against Cross-site request forgery (CSRF) attacks.
+It implements the Double Submit Cookie pattern, where a cookie is set
+that is then compared to a @code{csrftoken} hidden form field or a
+@code{x-csrftoken} HTTP header.")
+    (license license:asl2.0)))
+
 (define-public python-asgi-lifespan
   (package
     (name "python-asgi-lifespan")
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v3 6/9] gnu: Add python-trustme-next.
  2023-03-26 19:43   ` [bug#60838] [PATCH v3 0/9] " Felix Gruber
                       ` (4 preceding siblings ...)
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 5/9] gnu: Add python-asgi-csrf Felix Gruber
@ 2023-03-26 19:43     ` Felix Gruber
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 7/9] gnu: Add python-cogapp Felix Gruber
                       ` (2 subsequent siblings)
  8 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-26 19:43 UTC (permalink / raw)
  To: 60838, Maxim Cournoyer; +Cc: Felix Gruber

* gnu/packages/python-crypto.scm (python-trustme-next): New variable.
---
 gnu/packages/python-crypto.scm | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/gnu/packages/python-crypto.scm b/gnu/packages/python-crypto.scm
index c9071c4cf6..134b59427d 100644
--- a/gnu/packages/python-crypto.scm
+++ b/gnu/packages/python-crypto.scm
@@ -27,6 +27,7 @@
 ;;; Copyright © 2021, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 ;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
 ;;; Copyright © 2022 Antero Mejr <antero@mailbox.org>
+;;; Copyright © 2023 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -1536,6 +1537,20 @@ (define-public python-trustme
     ;; Either license applies.
     (license (list license:expat license:asl2.0))))
 
+;;; TODO: Make this the default python-trustme in the next rebuild cycle.
+(define-public python-trustme-next
+  (package
+    (inherit python-trustme)
+    (version "0.9.0")
+    (source
+     (origin
+       (method url-fetch)
+       (uri (pypi-uri "trustme" version))
+       (sha256
+        (base32 "0v2qzszmyazfgc1snicdr4b4qdajpjd4pbinpgrn9vfff0yv41sy"))))
+    (propagated-inputs
+     (list python-cryptography python-idna python-ipaddress))))
+
 (define-public python-certipy
   (package
     (name "python-certipy")
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v3 7/9] gnu: Add python-cogapp.
  2023-03-26 19:43   ` [bug#60838] [PATCH v3 0/9] " Felix Gruber
                       ` (5 preceding siblings ...)
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 6/9] gnu: Add python-trustme-next Felix Gruber
@ 2023-03-26 19:43     ` Felix Gruber
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 8/9] gnu: python-pytest-7.1: Depend on python-pluggy-next Felix Gruber
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 9/9] gnu: Add datasette Felix Gruber
  8 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-26 19:43 UTC (permalink / raw)
  To: 60838, Maxim Cournoyer; +Cc: Felix Gruber

* gnu/packages/python-xyz.scm (python-cogapp): New variable.
---
 gnu/packages/python-xyz.scm | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/gnu/packages/python-xyz.scm b/gnu/packages/python-xyz.scm
index 9240fad2e6..391a75e341 100644
--- a/gnu/packages/python-xyz.scm
+++ b/gnu/packages/python-xyz.scm
@@ -31583,6 +31583,28 @@ (define-public python-geomet
 versa.  Extended WKB/WKT are also supported.")
     (license license:asl2.0)))
 
+(define-public python-cogapp
+  (package
+    (name "python-cogapp")
+    (version "3.3.0")
+    (source (origin
+              (method url-fetch)
+              (uri (pypi-uri "cogapp" version))
+              (sha256
+               (base32
+                "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
+    (build-system python-build-system)
+    (arguments
+     '(#:tests? #f))
+    (home-page "http://nedbatchelder.com/code/cog")
+    (synopsis
+     "Content generator for executing Python snippets in source files")
+    (description
+     "Cog is a file generation tool. It lets you use pieces of Python
+code as generators in your source files to generate whatever text you
+need.")
+    (license license:expat)))
+
 (define-public python-bsdiff4
   (package
     (name "python-bsdiff4")
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v3 8/9] gnu: python-pytest-7.1: Depend on python-pluggy-next.
  2023-03-26 19:43   ` [bug#60838] [PATCH v3 0/9] " Felix Gruber
                       ` (6 preceding siblings ...)
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 7/9] gnu: Add python-cogapp Felix Gruber
@ 2023-03-26 19:43     ` Felix Gruber
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 9/9] gnu: Add datasette Felix Gruber
  8 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-26 19:43 UTC (permalink / raw)
  To: 60838, Maxim Cournoyer; +Cc: Felix Gruber

* gnu/packages/check.scm (python-pytest-7.1)[propagated-inputs]: Replace
  python-pluggy with python-pluggy-next.
---
 gnu/packages/check.scm | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/check.scm b/gnu/packages/check.scm
index 0c8777a074..03b5828efc 100644
--- a/gnu/packages/check.scm
+++ b/gnu/packages/check.scm
@@ -1326,7 +1326,11 @@ (define-public python-pytest-7.1
         #~(modify-phases #$phases
             (add-before 'build 'pretend-version
               (lambda _
-                (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))))))))
+                (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))))))
+    (propagated-inputs
+      (modify-inputs (package-propagated-inputs python-pytest)
+                     (replace "python-pluggy" python-pluggy-next)))
+    ))
 
 (define-public python-pytest-bootstrap
   (package
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH v3 9/9] gnu: Add datasette.
  2023-03-26 19:43   ` [bug#60838] [PATCH v3 0/9] " Felix Gruber
                       ` (7 preceding siblings ...)
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 8/9] gnu: python-pytest-7.1: Depend on python-pluggy-next Felix Gruber
@ 2023-03-26 19:43     ` Felix Gruber
  2023-03-29 17:22       ` bug#60838: [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
  8 siblings, 1 reply; 38+ messages in thread
From: Felix Gruber @ 2023-03-26 19:43 UTC (permalink / raw)
  To: 60838, Maxim Cournoyer; +Cc: Felix Gruber

* gnu/packages/databases.scm (datasette): New variable.
---
 gnu/packages/databases.scm | 93 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 93 insertions(+)

diff --git a/gnu/packages/databases.scm b/gnu/packages/databases.scm
index 87fa24038f..86e45d8a1e 100644
--- a/gnu/packages/databases.scm
+++ b/gnu/packages/databases.scm
@@ -59,6 +59,7 @@
 ;;; Copyright © 2022 muradm <mail@muradm.net>
 ;;; Copyright © 2022 Thomas Albers Raviola <thomas@thomaslabs.org>
 ;;; Copyright © 2021, 2022 jgart <jgart@dismail.de>
+;;; Copyright © 2023 Felix Gruber <felgru@posteo.net>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -5084,3 +5085,95 @@ (define-public python-dogpile.cache
 provides API hooks which integrate these cache backends with the locking
 mechanism of @code{dogpile}.")
     (license license:expat)))
+
+(define-public datasette
+  (package
+    (name "datasette")
+    (version "0.64.2")
+    (source (origin
+              (method git-fetch)  ; for tests
+              (uri (git-reference
+                    (url "https://github.com/simonw/datasette")
+                    (commit version)))
+              (file-name (git-file-name name version))
+              (sha256
+               (base32
+                "1c8ajdaraynrjvsb8xxxnkb7zgm5fwq60qczaz00n465ki80j4h3"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list
+      #:test-flags
+      ;; disable failing tests
+      '(list
+         "--deselect"
+         "tests/test_api.py::test_database_page_for_database_with_dot_in_name"
+         "--deselect"
+         "tests/test_api.py::test_row_strange_table_name"
+         "--deselect"
+         "tests/test_api.py::test_database_with_space_in_name"
+         "--deselect"
+         "tests/test_api.py::test_tilde_encoded_database_names[fo%o]"
+         "--deselect"
+         "tests/test_api.py::test_tilde_encoded_database_names[f~/c.d]"
+         "--deselect"
+         "tests/test_cli.py::test_weird_database_names"
+         "--deselect"
+         "tests/test_html.py::test_css_classes_on_body[/fixtures/table~2Fwith~2Fslashes~2Ecsv-expected_classes5]"
+         "--deselect"
+         "tests/test_html.py::test_templates_considered[/fixtures/table~2Fwith~2Fslashes~2Ecsv-table-fixtures-tablewithslashescsv-fa7563.html, *table.html]"
+         "--deselect"
+         "tests/test_html.py::test_row_html_compound_primary_key[/fixtures/compound_primary_key/a~2Fb,~2Ec~2Dd-expected1]"
+         "--deselect"
+         "tests/test_html.py::test_edit_sql_link_on_canned_queries[/fixtures/~F0~9D~90~9C~F0~9D~90~A2~F0~9D~90~AD~F0~9D~90~A2~F0~9D~90~9E~F0~9D~90~AC-/fixtures?sql=select+id%2C+name+from+facet_cities+order+by+id+limit+1%3B]"
+         "--deselect"
+         "tests/test_html.py::test_alternate_url_json[/fixtures/table~2Fwith~2Fslashes~2Ecsv-http://localhost/fixtures/table~2Fwith~2Fslashes~2Ecsv.json]"
+         "--deselect"
+         "tests/test_table_api.py::test_table_with_slashes_in_name"
+         "--deselect"
+         "tests/test_table_api.py::test_searchable[/fixtures/searchable.json?_search=te*+AND+do*&_searchmode=raw-expected_rows3]"
+         "--deselect"
+         "tests/test_table_api.py::test_searchmode[table_metadata1-_search=te*+AND+do*-expected_rows1]"
+         "--deselect"
+         "tests/test_table_api.py::test_searchmode[table_metadata2-_search=te*+AND+do*&_searchmode=raw-expected_rows2]"
+         "--deselect"
+         "tests/test_table_api.py::test_custom_query_with_unicode_characters")
+      #:phases
+      #~(modify-phases %standard-phases
+          (add-after 'unpack 'relax-requirements
+            (lambda _
+              ;; The package needlessly specifies exact versions
+              ;; of dependencies, when it works fine with others.
+              (substitute* "setup.py"
+                (("(black)==[0-9\\.]+" _ package)
+                 package)))))))
+    (propagated-inputs (list python-aiofiles
+                             python-asgi-csrf
+                             python-asgiref
+                             python-click
+                             python-click-default-group-wheel
+                             python-httpx
+                             python-hupper
+                             python-itsdangerous
+                             python-janus
+                             python-jinja2
+                             python-mergedeep
+                             python-pint
+                             python-pluggy-next
+                             python-pyyaml
+                             python-uvicorn))
+    (native-inputs (list python-beautifulsoup4
+                         python-black
+                         python-cogapp
+                         python-pytest-7.1
+                         python-pytest-asyncio
+                         python-pytest-runner
+                         python-pytest-timeout
+                         python-pytest-xdist-next
+                         python-setuptools
+                         python-trustme-next))
+    (home-page "https://datasette.io/")
+    (synopsis "Multi-tool for exploring and publishing data")
+    (description "Datasette is a tool for exploring and publishing data.
+It helps people take data of any shape or size and publish that as an
+interactive, explorable website and accompanying API.")
+    (license license:asl2.0)))
-- 
2.39.2





^ permalink raw reply related	[flat|nested] 38+ messages in thread

* bug#60838: [PATCH 0/8] Add datasette and python-sqlite-utils.
  2023-03-26 19:43     ` [bug#60838] [PATCH v3 9/9] gnu: Add datasette Felix Gruber
@ 2023-03-29 17:22       ` Maxim Cournoyer
  2023-03-29 19:38         ` [bug#60838] " Felix Gruber
  0 siblings, 1 reply; 38+ messages in thread
From: Maxim Cournoyer @ 2023-03-29 17:22 UTC (permalink / raw)
  To: Felix Gruber; +Cc: 60838-done

Hi Felix!

Thanks for the rework!  I'm applied it locally, then looked at it more
closely; I ended up with the following changes, which I'll comment
inline below:

--8<---------------cut here---------------start------------->8---
5 files changed, 105 insertions(+), 116 deletions(-)
gnu/packages/check.scm         |   7 +++----
gnu/packages/databases.scm     | 125 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------
gnu/packages/python-crypto.scm |  17 ++++++-----------
gnu/packages/python-web.scm    |  56 +++++++++++++++++++++++++++++-------------------------
gnu/packages/python-xyz.scm    |  16 ++++++----------

modified   gnu/packages/check.scm
@@ -1322,15 +1322,14 @@ (define-public python-pytest-7.1
          "0f8c31v5r2kgjixvy267n0nhc4xsy65g3n9lz1i1377z5pn5ydjg"))))
     (arguments
      (substitute-keyword-arguments (package-arguments python-pytest)
-      ((#:phases phases #~%standard-phases)
+       ((#:phases phases #~%standard-phases)
         #~(modify-phases #$phases
             (add-before 'build 'pretend-version
               (lambda _
                 (setenv "SETUPTOOLS_SCM_PRETEND_VERSION" #$version)))))))
     (propagated-inputs
-      (modify-inputs (package-propagated-inputs python-pytest)
-                     (replace "python-pluggy" python-pluggy-next)))
-    ))
+     (modify-inputs (package-propagated-inputs python-pytest)
+       (replace "python-pluggy" python-pluggy-next)))))

Stylistic.  Lonely parens are sad :-).

 (define-public python-pytest-bootstrap
   (package
modified   gnu/packages/databases.scm
@@ -3586,7 +3586,7 @@ (define-public python-sqlite-utils
     (name "python-sqlite-utils")
     (version "3.30")
     (source (origin
-              (method git-fetch)  ; for tests
+              (method git-fetch)        ;for tests

Stylistic; I do not use a space between the ';' and the comment for
inline comments.
               
               (uri (git-reference
                     (url "https://github.com/simonw/sqlite-utils")
                     (commit version)))
@@ -3595,7 +3595,17 @@ (define-public python-sqlite-utils
                (base32
                 "1a58syvh5jp40vi5libsxkqy99z75kj4ckxqmylbhd342ppfy1wp"))))
     (build-system pyproject-build-system)
-    (propagated-inputs (list python-click python-click-default-group-wheel
+    (arguments
+     (list #:phases #~(modify-phases %standard-phases
+                        (add-after 'unpack 'relax-requirements
+                          (lambda _
+                            (substitute* "setup.py"
+                              ;; This is a variant designed to have a binary
+                              ;; wheel made available on PyPI, which is not a
+                              ;; concern to Guix.
+                              (("click-default-group-wheel")
+                               "click-default-group")))))))

I ended up not packaging the click-default-group-wheel variant and used
the our existing python-click-default-group package instead, since the
variant probably caters to Windows users installing from PyPI.

+    (propagated-inputs (list python-click python-click-default-group
                              python-dateutil python-sqlite-fts4
                              python-tabulate))
     (native-inputs (list python-pytest))
@@ -3604,9 +3614,7 @@ (define-public python-sqlite-utils
      "CLI tool and Python utility functions for manipulating SQLite databases")
     (description
      "This package provides a CLI tool and Python utility functions for
-manipulating SQLite databases.
-
-It's main features are:
+manipulating SQLite databases.  It's main features are:
 @itemize
 @item
 Pipe JSON (or CSV or TSV) directly into a new SQLite database file,
@@ -5091,7 +5099,7 @@ (define-public datasette
     (name "datasette")
     (version "0.64.2")
     (source (origin
-              (method git-fetch)  ; for tests
+              (method git-fetch)        ;for tests
               (uri (git-reference
                     (url "https://github.com/simonw/datasette")
                     (commit version)))
@@ -5103,40 +5111,25 @@ (define-public datasette
     (arguments
      (list
       #:test-flags
-      ;; disable failing tests
-      '(list
-         "--deselect"
-         "tests/test_api.py::test_database_page_for_database_with_dot_in_name"
-         "--deselect"
-         "tests/test_api.py::test_row_strange_table_name"
-         "--deselect"
-         "tests/test_api.py::test_database_with_space_in_name"
-         "--deselect"
-         "tests/test_api.py::test_tilde_encoded_database_names[fo%o]"
-         "--deselect"
-         "tests/test_api.py::test_tilde_encoded_database_names[f~/c.d]"
-         "--deselect"
-         "tests/test_cli.py::test_weird_database_names"
-         "--deselect"
-         "tests/test_html.py::test_css_classes_on_body[/fixtures/table~2Fwith~2Fslashes~2Ecsv-expected_classes5]"
-         "--deselect"
-         "tests/test_html.py::test_templates_considered[/fixtures/table~2Fwith~2Fslashes~2Ecsv-table-fixtures-tablewithslashescsv-fa7563.html, *table.html]"
-         "--deselect"
-         "tests/test_html.py::test_row_html_compound_primary_key[/fixtures/compound_primary_key/a~2Fb,~2Ec~2Dd-expected1]"
-         "--deselect"
-         "tests/test_html.py::test_edit_sql_link_on_canned_queries[/fixtures/~F0~9D~90~9C~F0~9D~90~A2~F0~9D~90~AD~F0~9D~90~A2~F0~9D~90~9E~F0~9D~90~AC-/fixtures?sql=select+id%2C+name+from+facet_cities+order+by+id+limit+1%3B]"
-         "--deselect"
-         "tests/test_html.py::test_alternate_url_json[/fixtures/table~2Fwith~2Fslashes~2Ecsv-http://localhost/fixtures/table~2Fwith~2Fslashes~2Ecsv.json]"
-         "--deselect"
-         "tests/test_table_api.py::test_table_with_slashes_in_name"
-         "--deselect"
-         "tests/test_table_api.py::test_searchable[/fixtures/searchable.json?_search=te*+AND+do*&_searchmode=raw-expected_rows3]"
-         "--deselect"
-         "tests/test_table_api.py::test_searchmode[table_metadata1-_search=te*+AND+do*-expected_rows1]"
-         "--deselect"
-         "tests/test_table_api.py::test_searchmode[table_metadata2-_search=te*+AND+do*&_searchmode=raw-expected_rows2]"
-         "--deselect"
-         "tests/test_table_api.py::test_custom_query_with_unicode_characters")
+      ;; There are multiple unexplained test failures (see:
+      ;; https://github.com/simonw/datasette/issues/2048).
+      #~(list "-k" (string-append
+                    "not (test_database_page_for_database_with_dot_in_name"
+                    " or test_row_strange_table_name"
+                    " or test_database_with_space_in_name"
+                    " or test_tilde_encoded_database_names"
+                    " or test_weird_database_names"
+                    " or test_css_classes_on_body"
+                    " or test_templates_considered"
+                    " or test_row_html_compound_primary_key"
+                    " or test_edit_sql_link_on_canned_queries"
+                    " or test_alternate_url_json"
+                    " or test_table_with_slashes_in_name"
+                    " or test_searchable"
+                    " or test_custom_query_with_unicode_characters"
+                    " or test_searchmode)")

I had two failures in the last suite; I reformatted for compactness nad
readability.

+              "-n" (number->string (parallel-job-count))

Since python-xdist is a native-input, we can make use of it (run tests i
parallel)

+              "-m" "not serial")        ;cannot run in parallel

I found that bit in the github workflow file of the project, necessary
when running the tests in parallel.

       #:phases
       #~(modify-phases %standard-phases
           (add-after 'unpack 'relax-requirements
@@ -5146,31 +5139,33 @@ (define-public datasette
               (substitute* "setup.py"
                 (("(black)==[0-9\\.]+" _ package)
                  package)))))))
-    (propagated-inputs (list python-aiofiles
-                             python-asgi-csrf
-                             python-asgiref
-                             python-click
-                             python-click-default-group-wheel
-                             python-httpx
-                             python-hupper
-                             python-itsdangerous
-                             python-janus
-                             python-jinja2
-                             python-mergedeep
-                             python-pint
-                             python-pluggy-next
-                             python-pyyaml
-                             python-uvicorn))
-    (native-inputs (list python-beautifulsoup4
-                         python-black
-                         python-cogapp
-                         python-pytest-7.1
-                         python-pytest-asyncio
-                         python-pytest-runner
-                         python-pytest-timeout
-                         python-pytest-xdist-next
-                         python-setuptools
-                         python-trustme-next))
+                 package)
+                (("click-default-group-wheel")
+                 "click-default-group")))))))

Same fix as earlier.

+    (propagated-inputs
+     (list python-aiofiles
+           python-asgi-csrf
+           python-asgiref
+           python-click
+           python-click-default-group
+           python-httpx
+           python-hupper
+           python-itsdangerous
+           python-janus
+           python-jinja2
+           python-mergedeep
+           python-pint
+           python-pluggy-next
+           python-pyyaml
+           python-uvicorn))
+    (native-inputs
+     (list python-beautifulsoup4
+           python-black
+           python-cogapp
+           python-pytest-7.1
+           python-pytest-asyncio
+           python-pytest-runner
+           python-pytest-timeout
+           python-pytest-xdist-next
+           python-setuptools
+           python-trustme))

Stylistic changes.

     (home-page "https://datasette.io/")
     (synopsis "Multi-tool for exploring and publishing data")
     (description "Datasette is a tool for exploring and publishing data.
modified   gnu/packages/python-crypto.scm
@@ -1503,21 +1503,14 @@ (define-public python-secretstorage
 (define-public python-trustme
   (package
     (name "python-trustme")
-    (version "0.6.0")
+    (version "0.9.0")
     (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "trustme" version))
        (sha256
-        (base32 "0v3vr5z6apnfmklf07m45kv5kaqvm6hxrkaqywch57bjd2siiywx"))))
-    (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 "pytest" "-vv"))))))
+        (base32 "0v2qzszmyazfgc1snicdr4b4qdajpjd4pbinpgrn9vfff0yv41sy"))))
+    (build-system pyproject-build-system)
     (native-inputs
      (list python-more-itertools
            python-pyopenssl
@@ -1526,7 +1519,9 @@ (define-public python-trustme
            python-service-identity
            python-zipp))
     (propagated-inputs
-     (list python-cryptography))
+     (list python-cryptography
+           python-idna
+           python-ipaddress))
     (home-page "https://github.com/python-trio/trustme")
     (synopsis "Fake a certificate authority for tests")
     (description

I've chosen to bump our main python-trustme package to its latest
version instead of introducing a 'python-trustme-next' variant, since
all its dependents rebuilt OK with it.  It's best to avoid variants
unless there's no other option.

modified   gnu/packages/python-web.scm
@@ -575,18 +575,30 @@ (define-public python-asgi-csrf
     (name "python-asgi-csrf")
     (version "0.9")
     (source (origin
-              (method url-fetch)
-              (uri (pypi-uri "asgi-csrf" version))
+              (method git-fetch)        ;for tests
+              (uri (git-reference
+                    (url "https://github.com/simonw/asgi-csrf")
+                    (commit version)))
+              (file-name (git-file-name name version))

I switched to git because otherwise the test suite ran 0 test
(successfully, ah!).

               (sha256
                (base32
-                "06klgxfxzjfkyjky3rkvmf2r07r7r2my53qq7g9qy6mcmvfkp7bf"))))
-    (build-system python-build-system)
+                "1j134mjh0ff61rvkm3q67m463j1bhyxc9dwsdany3scnd4vsqqws"))))
+    (build-system pyproject-build-system)
+    (arguments
+     (list #:test-flags
+           ;; Provide a null config to avoid the extraneous dependency on
+           ;; python-pytest-coverage.
+           #~(list "-c" "/dev/null"

This trick was used to avoid the --cov* options added to pytest options,
to avoid requiring the coverage tool.

+                   ;; Disable two failing tests (see:
+                   ;; https://github.com/simonw/asgi-csrf/issues/24).
+                   "-k" (string-append
+                         "not (test_multipart "
+                         "or test_multipart_failure_wrong_token)"))))

I encountered two test failures, so I reported them upstream and skipped
them in the package.
     
     (propagated-inputs (list python-itsdangerous python-multipart))
     (native-inputs (list python-asgi-lifespan
                          python-httpx
                          python-pytest
                          python-pytest-asyncio
-                         python-pytest-cov
                          python-starlette))
     (home-page "https://github.com/simonw/asgi-csrf")
     (synopsis "ASGI middleware for protecting against CSRF attacks")
@@ -602,7 +614,7 @@ (define-public python-asgi-lifespan
     (name "python-asgi-lifespan")
     (version "1.0.1")
     (source (origin
-              (method git-fetch)  ; for tests
+              (method git-fetch)        ;for tests
               (uri (git-reference
                     (url "https://github.com/florimondmanca/asgi-lifespan")
                     (commit version)))
@@ -613,28 +625,20 @@ (define-public python-asgi-lifespan
     (build-system pyproject-build-system)
     (arguments
      (list
-       #:test-flags
-       ;; disable failing tests
-       '(list "-k"
-              (string-append
-                "not test_lifespan_manager[asyncio-None-ValueError-None]"
-                " and not test_lifespan_manager[asyncio-ValueError-None-None]"
-                " and not test_lifespan_manager[asyncio-ValueError-ValueError-None]"
-                " and not test_lifespan_manager[trio-None-ValueError-None]"
-                " and not test_lifespan_manager[trio-ValueError-None-None]"
-                " and not test_lifespan_manager[trio-ValueError-ValueError-None]"))
-       #:phases
-       '(modify-phases %standard-phases
-          (add-after 'unpack 'lower-coverage-requirement
-            ;; after disabling the failing tests, the coverage
-            ;; dropped slightly below 100%.
-            (lambda _
-              (substitute* "setup.cfg"
-                (("(--cov-fail-under=)[0-9]+" _ cov)
-                 (string-append cov "90"))))))))
+      #:test-flags
+      '(list "-c" "/dev/null"           ;ignore coverage-related options
+             "-k"
+             (string-append
+              ;; XXX: Some tests fail because of a 'lifespan.shutdown.failed'
+              ;; extra event, perhaps because our version of trio is older.

I left a comment explaining a reason why we may be seeing these
failures.  Our environment differs from upstream so I haven't reported
them there.  We'd need to update a bunch of asyncio things but these are
rather tied to the Pytest version, I think.

+              "not (test_lifespan_manager[asyncio-None-ValueError-None]"
+              " or test_lifespan_manager[asyncio-ValueError-None-None]"
+              " or test_lifespan_manager[asyncio-ValueError-ValueError-None]"
+              " or test_lifespan_manager[trio-None-ValueError-None]"
+              " or test_lifespan_manager[trio-ValueError-None-None]"
+              " or test_lifespan_manager[trio-ValueError-ValueError-None])"))))
     (native-inputs (list python-pytest
                          python-pytest-asyncio
-                         python-pytest-cov
                          python-pytest-trio
                          python-starlette))
     (propagated-inputs (list python-sniffio))
modified   gnu/packages/python-xyz.scm
@@ -31569,16 +31569,12 @@ (define-public python-cogapp
               (sha256
                (base32
                 "1c0xx3p3lzrlyqhmccyq9c50f8v9pqk2992gb4nl50h2yy1m3s8v"))))
-    (build-system python-build-system)
-    (arguments
-     '(#:tests? #f))
-    (home-page "http://nedbatchelder.com/code/cog")
-    (synopsis
-     "Content generator for executing Python snippets in source files")
-    (description
-     "Cog is a file generation tool. It lets you use pieces of Python
-code as generators in your source files to generate whatever text you
-need.")
+    (build-system pyproject-build-system)
+    (native-inputs (list python-pytest))
+    (home-page "https://nedbatchelder.com/code/cog")
+    (synopsis "Content generation tool that leverages Python")
+    (description "Cog is a file generation tool.  It allows using pieces of
+Python code as generators in your source files to generate arbitrary text.")
     (license license:expat)))

Here I've switched the build system to pyproject-build-system and added
python-pytest; the package had tests.  I've also used HTTPS for the home
page URL and reworded synopsis a bit.
--8<---------------cut here---------------end--------------->8---

With this, the changes were installed.  I hope my review comments were
insightful for your future contributions!

Thank you!

-- 
Maxim




^ permalink raw reply	[flat|nested] 38+ messages in thread

* [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils.
  2023-03-29 17:22       ` bug#60838: [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
@ 2023-03-29 19:38         ` Felix Gruber
  0 siblings, 0 replies; 38+ messages in thread
From: Felix Gruber @ 2023-03-29 19:38 UTC (permalink / raw)
  To: Maxim Cournoyer; +Cc: 60838-done

Hi Maxim,

On 3/29/23 19:22, Maxim Cournoyer wrote:
> With this, the changes were installed.  I hope my review comments were
> insightful for your future contributions!

Many thanks for your detailed review comments. I've definitely learned a 
few things here that will be useful for my future patches!

Kind regards,
Felix





^ permalink raw reply	[flat|nested] 38+ messages in thread

end of thread, other threads:[~2023-03-29 19:39 UTC | newest]

Thread overview: 38+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-15 21:47 [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Felix Gruber
2023-01-15 21:50 ` [bug#60838] [PATCH 1/8] gnu: Add python-click-default-group-wheel Felix Gruber
2023-03-22  1:04   ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
2023-01-15 21:51 ` [bug#60838] [PATCH 2/8] gnu: Add python-sqlite-fts4 Felix Gruber
2023-03-22  1:05   ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
2023-01-15 21:51 ` [bug#60838] [PATCH 3/8] gnu: Add python-sqlite-utils Felix Gruber
2023-03-22  1:08   ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
2023-01-15 21:52 ` [bug#60838] [PATCH 4/8] gnu: python-janus: Update to 1.0.0 Felix Gruber
2023-01-15 21:52 ` [bug#60838] [PATCH 5/8] gnu: Add python-pluggy-next Felix Gruber
2023-01-15 21:53 ` [bug#60838] [PATCH 6/8] gnu: Add python-asgi-lifespan Felix Gruber
2023-01-15 21:53 ` [bug#60838] [PATCH 7/8] gnu: Add python-asgi-csrf Felix Gruber
2023-01-15 21:53 ` [bug#60838] [PATCH 8/8] gnu: Add datasette Felix Gruber
2023-03-17 19:19 ` [bug#60838] [PATCH v2 0/7] Add datasette and python-sqlite-utils Felix Gruber
2023-03-17 19:19   ` [bug#60838] [PATCH v2 1/7] gnu: Add python-click-default-group-wheel Felix Gruber
2023-03-17 19:19   ` [bug#60838] [PATCH v2 2/7] gnu: Add python-sqlite-fts4 Felix Gruber
2023-03-17 19:19   ` [bug#60838] [PATCH v2 3/7] gnu: Add python-sqlite-utils Felix Gruber
2023-03-17 19:19   ` [bug#60838] [PATCH v2 4/7] gnu: Add python-pluggy-next Felix Gruber
2023-03-22  1:13     ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
2023-03-17 19:19   ` [bug#60838] [PATCH v2 5/7] gnu: Add python-asgi-lifespan Felix Gruber
2023-03-22  1:17     ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
2023-03-17 19:19   ` [bug#60838] [PATCH v2 6/7] gnu: Add python-asgi-csrf Felix Gruber
2023-03-22  1:19     ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
2023-03-17 19:19   ` [bug#60838] [PATCH v2 7/7] gnu: Add datasette Felix Gruber
2023-03-22  1:26     ` [bug#60838] [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
2023-03-18  8:13   ` [bug#60838] [PATCH v2 0/7] " Liliana Marie Prikler
2023-03-22  0:59 ` [bug#60838] [PATCH 0/8] " Maxim Cournoyer
2023-03-26 19:43   ` [bug#60838] [PATCH v3 0/9] " Felix Gruber
2023-03-26 19:43     ` [bug#60838] [PATCH v3 1/9] gnu: Add python-click-default-group-wheel Felix Gruber
2023-03-26 19:43     ` [bug#60838] [PATCH v3 2/9] gnu: Add python-sqlite-fts4 Felix Gruber
2023-03-26 19:43     ` [bug#60838] [PATCH v3 3/9] gnu: Add python-sqlite-utils Felix Gruber
2023-03-26 19:43     ` [bug#60838] [PATCH v3 4/9] gnu: Add python-asgi-lifespan Felix Gruber
2023-03-26 19:43     ` [bug#60838] [PATCH v3 5/9] gnu: Add python-asgi-csrf Felix Gruber
2023-03-26 19:43     ` [bug#60838] [PATCH v3 6/9] gnu: Add python-trustme-next Felix Gruber
2023-03-26 19:43     ` [bug#60838] [PATCH v3 7/9] gnu: Add python-cogapp Felix Gruber
2023-03-26 19:43     ` [bug#60838] [PATCH v3 8/9] gnu: python-pytest-7.1: Depend on python-pluggy-next Felix Gruber
2023-03-26 19:43     ` [bug#60838] [PATCH v3 9/9] gnu: Add datasette Felix Gruber
2023-03-29 17:22       ` bug#60838: [PATCH 0/8] Add datasette and python-sqlite-utils Maxim Cournoyer
2023-03-29 19:38         ` [bug#60838] " Felix Gruber

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).