/src/leiningen/jupyter/extension.clj

https://github.com/didiercrunch/lein-jupyter · Clojure · 52 lines · 43 code · 9 blank · 0 comment · 5 complexity · 58a10a189b5dbf6a765a466af5d95929 MD5 · raw file

  1. (ns leiningen.jupyter.extension
  2. (:import [java.nio.file Files]
  3. [java.nio.file.attribute FileAttribute])
  4. (:require [clojure.string :as string]
  5. [clojure.java.io :as io]
  6. [clojure.java.shell :refer [sh]]
  7. [leiningen.jupyter.params :as params]))
  8. (def resources
  9. (map io/file ["lein-jupyter-parinfer/README.md"
  10. "lein-jupyter-parinfer/index.js"
  11. "lein-jupyter-parinfer/parinfer-codemirror.js"
  12. "lein-jupyter-parinfer/parinfer.js"]))
  13. (defn get-resource-by-name [n]
  14. (slurp (io/resource (str n))))
  15. (defn move-resource [dest content]
  16. (io/make-parents dest)
  17. (spit dest content))
  18. (defn copy-resource-dir-in-tmp-dir [name]
  19. (let [root-tmp-dir (.toFile (Files/createTempDirectory "lein-jupyter" (into-array FileAttribute [])))
  20. tmp-dir (io/file root-tmp-dir name)]
  21. (doall (map #(move-resource (io/file tmp-dir (.getName %)) (get-resource-by-name %)) resources))
  22. tmp-dir))
  23. (defn enable-extension
  24. "enable the lein-jupyter-parinfer extension the user space"
  25. [jupyter]
  26. (let [enable-out (sh jupyter "nbextension" "enable" "lein-jupyter-parinfer/index" "--user")]
  27. (if (not= 0 (:exit enable-out))
  28. (leiningen.core.main/warn "Did not succeed to enable lein-jupyter-parinfer extension"
  29. (:err enable-out))
  30. true)))
  31. (defn install-extension
  32. "Instal the lein-jupyter-parinfer extension the user space"
  33. [jupyter]
  34. (let [extension-dir (copy-resource-dir-in-tmp-dir "lein-jupyter-parinfer")
  35. install-out (sh jupyter "nbextension" "install" (.getCanonicalPath extension-dir) "--user")]
  36. (if (not= 0 (:exit install-out))
  37. (leiningen.core.main/warn "Did not succeed to install lein-jupyter-parinfer extension"
  38. (:err install-out))
  39. true)))
  40. (defn install-and-enable-extension [project]
  41. (let [jupyter (params/jupyer-executable project)]
  42. (and (install-extension jupyter)
  43. (enable-extension jupyter))))