Subject: [bug#50887] [PATCH] gnu: Add python-fitsio.

From: Xinglu Chen <[email-masked]>
Date: Fri, 01 Oct 2021 16:05:44 +0200

On Wed, Sep 29 2021, Konrad Hinsen wrote:

> * gnu/packages/astronomy.scm (python-fitsio): New variable.
> ---
>  gnu/packages/astronomy.scm | 43 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 43 insertions(+)
>
> diff --git a/gnu/packages/astronomy.scm b/gnu/packages/astronomy.scm
> index a3f7d5cbf4..4fba3aae99 100644
> --- a/gnu/packages/astronomy.scm
> +++ b/gnu/packages/astronomy.scm
> @@ -96,6 +96,49 @@ in FITS files.")
>      (license (license:non-copyleft "file://License.txt"
>                            "See License.txt in the distribution."))))
>  
> +(define-public python-fitsio
> +  (package
> +    (name "python-fitsio")
> +    (version "1.1.5")
> +    (source
> +     (origin
> +       (method url-fetch)
> +       (uri (pypi-uri "fitsio" version))
> +       (sha256
> +        (base32 "1llql2i6xr9lkdl81jx5nvz80kspamvira90546y32ldy551hq1l"))))
> +    (build-system python-build-system)
> +    (arguments
> +     `(#:phases
> +       (modify-phases %standard-phases
> +         (add-after 'unpack 'unbundle-cfitsio
> +           (lambda* (#:key inputs #:allow-other-keys)
> +             (let* ((cfitsio (assoc-ref inputs "cfitsio"))
> +                    (includedir (string-append "\"" cfitsio "/include\""))
> +                    (libdir (string-append "\"" cfitsio "/lib\"")))
> +               ;; Use Guix' cfitsio instead of the bundled one
> +               (substitute* "setup.py"
> +                 (("self.use_system_fitsio = False") "pass")
> +                 (("self.system_fitsio_includedir = None") "pass")
> +                 (("self.system_fitsio_libdir = None") "pass")
> +                 (("self.use_system_fitsio") "True")
> +                 (("self.system_fitsio_includedir") includedir)
> +                 (("self.system_fitsio_libdir") libdir)))

Maybe the bundled cfitsio should also be deleted in a ‘snippet’ in the ‘origin’?

> +             ;; The bzip2 test fails because Guix' cfitsio
> +             ;; is built without bzip2 support.
> +             (substitute* "fitsio/test.py"
> +               (("'SKIP_BZIP_TEST' in os.environ") "True"))

This part should probably be put in a separate phase, maybe you could
call it ‘skip-bzip-test’.

> +             #t)))))

Phases don’t need to return #t.

> +    (propagated-inputs
> +     `(("python-numpy" ,python-numpy)
> +       ("cfitsio" ,cfitsio)))
> +    (home-page "https://github.com/esheldon/fitsio")
> +    (synopsis
> +     "Python library to read from and write to FITS files")
> +    (description
> +     "A compact Python library for reading from and writing to FITS files,
> +based on the CFITSIO library.")

The sentence is lacking a subject; the meaning of “FITS” should be
written (I had no idea what it meant).  I suggest something like

  This package provides a Python library for reading from and writing to
  @acronym{FITS, Flexible Image Transport System} files using the
  CFITSIO library.  Among other things, it can

  @itemize
  @item read and write image, binary, and ascii table extensions;

  @item read arbitrary subsets of tables in a lazy manner;

  @item query the rows and columns of a table;

  @item read and write header keywords;

  @item read and write Gzip files directory;

  @item read Zip and Bzip2 files.
  @end itemize

> +    (license license:gpl2)))

‘LICENSE.txt’ looks like gpl2+

Could you send an updated patch?