aboutsummaryrefslogtreecommitdiff
(define-module (gn packages cwl)
  #:use-module ((guix licenses) #:prefix license:)
  #:use-module (guix download)
  #:use-module (guix gexp)
  #:use-module (guix packages)
  #:use-module (guix build-system pyproject)
  #:use-module (guix build-system python)
  #:use-module (gnu packages)
  #:use-module (gnu packages bioinformatics)
  #:use-module (gnu packages docker)
  #:use-module (gnu packages node)
  #:use-module (gnu packages python-web)
  #:use-module (gnu packages python-xyz)
  #:use-module (gnu packages serialization)
  #:use-module (gnu packages time)
  #:use-module (gn packages python))


(define-public cwl-runner
  (package
    (name "cwl-runner")
    (version "1.0")
    (source
      (origin
        (method url-fetch)
        (uri (pypi-uri "cwl_runner" version))
        (sha256
         (base32
          "0011am2xqwchysdznayrmwhg4bfjl4wlq6m4k20z1m7gccyzjgw0"))))
    (build-system python-build-system)
    (propagated-inputs
     `(("cwltool" ,cwltool)))
    (home-page
     "https://github.com/common-workflow-language/common-workflow-language")
    (synopsis "Common workflow language reference implementation")
    (description
     "Common workflow language alternate entry point to allow cwl-runner 
script as an implementation-agnostic script interpreter.") 
     (license license:asl2.0)))

;; python-toil tightly integrates with cwltool using it as a library. So,
;; create a library version of cwltool where inputs become propagated inputs.
(define-public python-cwltool
  (package
    (inherit cwltool)
    (name "python-cwltool")
    (inputs
     (list node))
    (propagated-inputs
     (modify-inputs (package-inputs cwltool)
       (delete "node")))))

(define-public python-toil
  (package
    (name "python-toil")
    (version "6.1.0")
    (source (origin
              (method url-fetch)
              (uri (pypi-uri "toil" version))
              (sha256
               (base32
                "0hwaihnncsfxw0sf3iigvgw6nylrb56lpk8qjadkgazr98dsp4ha"))))
    (build-system pyproject-build-system)
    (arguments
     (list
      #:phases
      #~(modify-phases %standard-phases
          (add-after 'unpack 'disable-optional-features
            (lambda _
              (substitute* "requirements-cwl.txt"
                ;; Loosen version restrictions on ruamel.yaml.
                (("ruamel.yaml[<>=.,[:digit:]]*\n") "ruamel.yaml\n")
                ;; Remove optional dependency on galaxy-util and
                ;; galaxy-tool-util. TODO: Package these and restore these
                ;; dependencies.
                (("galaxy-util[^\n]*") "")
                (("galaxy-tool-util[^\n]*") ""))
              ;; Disable optional wdl, wes and mesos features. We don't yet
              ;; have dependencies packaged for them. TODO: Package these
              ;; dependencies and enable these features.
              (substitute* "setup.py"
                (("\"wdl\",") "")
                (("toil-cwl-runner = toil.cwl.cwltoil:main \\[cwl\\]")
                 "toil-cwl-runner = toil.cwl.cwltoil:main")
                (("'toil-wdl-runner = toil.wdl.wdltoil:main \\[wdl\\]',") "")
                (("'toil-wes-cwl-runner = toil.server.cli.wes_cwl_runner:main \\[server\\]',") "")
                (("'_toil_mesos_executor = toil.batchSystems.mesos.executor:main \\[mesos\\]',") "")))))))
    (propagated-inputs
     (list python-addict
           python-cachecontrol
           python-configargparse
           python-cwltool
           python-dateutil
           python-dill
           python-docker
           python-enlighten
           python-psutil
           python-pypubsub
           python-pytz
           python-pyyaml
           python-requests
           python-ruamel.yaml
           python-typing-extensions-4.10
           python-urllib3))
    (home-page "https://github.com/DataBiosphere/toil")
    (synopsis "Scalable, efficient and cross-platform workflow engine")
    (description "Toil is a scalable, efficient, cross-platform pipeline
management system, written entirely in Python, and designed around the
principles of functional programming.")
    (license (list license:asl2.0    ;; main license
                   license:expat)))) ;; src/toil/batchSystems/lsf.py and
                                     ;; src/toil/batchSystems/lsfHelper.py