Subject: Re: [PATCH] gnu: Add python-tinydb.

From: Vinicius Monego <[email-masked]>
Date: Thu, 11 Nov 2021 05:26:45 +0000

Hi jgart,

Em ter, 2021-10-12 às 01:44 -0400, jgart escreveu:
> * gnu/packages/databases.scm (python-tinydb): New variable.
> ---
>  gnu/packages/databases.scm | 40

Don't miss your copyright in this file.

> ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 40 insertions(+)
> 
> diff --git a/gnu/packages/databases.scm 
> b/gnu/packages/databases.scm
> index b1dd44da1c..60970b9c8e 100644
> --- a/gnu/packages/databases.scm
> +++ b/gnu/packages/databases.scm
> @@ -579,6 +579,46 @@ the API, and provides features such as:
>  @end itemize")
>      (license license:bsd-3)))
>  
> +(define-public python-tinydb
> +  (package
> +    (name "python-tinydb")
> +    (version "4.5.2")
> +    (source (origin
> +              (method url-fetch)
> +              (uri (pypi-uri "tinydb" version))
> +              (sha256
> +               (base32
> +               
> "1x9c4s42930wwal3ds0plwb57kg5c3gj7kbpy64c29vq478b463x"))))
> +    (build-system python-build-system)

The indentation is off below.

> +    (arguments
> +       ;; PyPi tarball does not contain tests and github repository
> does not 
> +       ;; have a setup.py file (only pyproject).

I recently noticed this pattern of shipping only Poetry in the
repository while at the same time not shipping tests in PyPI. I don't
know why this is happening or what we can do about it in guix, the best
for now is to source from PyPI and skip tests like in this package.

> +      `(#:tests? #f
> +        #:phases
> +        (modify-phases %standard-phases
> +          (replace 'check
> +            (lambda* (#:key inputs outputs tests? #:allow-other-
> keys)
> +              (when tests?
> +                (add-installed-pythonpath inputs outputs)
> +                (setenv "PYTHONPATH" (string-append ".:" (getenv
> "PYTHONPATH")))

The two lines above are redundant. The second line is the manual way of
doing what the first one does. But if we don't have a way to run the
tests, I'd not override the check phase.

> +                (invoke "pytest")))))))
> +    (native-inputs
> +      `(("python-pytest" ,python-pytest)
> +        ("python-pytest-cov" ,python-pytest-cov)
> +        ("python-pycodestyle" ,python-pycodestyle)
> +        ("python-pyyaml" ,python-pyyaml)))

Test-related native inputs are also useless if tests can't run.

> +    (propagated-inputs
> +      `(("python-typing-extensions" ,python-typing-extensions)))
> +    (home-page "https://github.com/msiemens/tinydb")
> +    (synopsis
> +      "TinyDB is a lightweight document oriented database")

Same line for the synopsis.

> +    (description
> +"TinyDB is a lightweight document oriented database optimized for
> +your happiness.  It's written in pure Python and has no external
> +dependencies.  The targets are small apps that would be blown away
> by a
> +SQL-DB or an external database server.")

I'd suggest "TinyDB is a small document oriented database written in
pure Python with no external dependencies. [...]".

> +    (license license:expat)))
> +
>  (define-public python-pylibmc
>    (package
>      (name "python-pylibmc")