Implicit pod-id
This commit is contained in:
parent
05ecf97127
commit
6214f06146
5 changed files with 110 additions and 106 deletions
|
|
@ -15,8 +15,8 @@
|
||||||
([pod-id-or-pod sym args] (invoke pod-id-or-pod sym args {}))
|
([pod-id-or-pod sym args] (invoke pod-id-or-pod sym args {}))
|
||||||
([pod-id-or-pod sym args opts] (jvm/invoke pod-id-or-pod sym args opts)))
|
([pod-id-or-pod sym args opts] (jvm/invoke pod-id-or-pod sym args opts)))
|
||||||
|
|
||||||
(defn add-transit-read-handler [pod-id tag fn]
|
(defn add-transit-read-handler [tag fn]
|
||||||
(jvm/add-transit-read-handler pod-id tag fn))
|
(jvm/add-transit-read-handler tag fn))
|
||||||
|
|
||||||
(defn add-transit-write-handler [pod-id tag fn classes]
|
(defn add-transit-write-handler [tag fn classes]
|
||||||
(jvm/add-transit-write-handler pod-id tag fn classes))
|
(jvm/add-transit-write-handler tag fn classes))
|
||||||
|
|
|
||||||
|
|
@ -39,12 +39,14 @@
|
||||||
(defn next-id []
|
(defn next-id []
|
||||||
(str (java.util.UUID/randomUUID)))
|
(str (java.util.UUID/randomUUID)))
|
||||||
|
|
||||||
|
(def ^:dynamic *pod-id* nil)
|
||||||
|
|
||||||
(defonce transit-read-handlers (atom {}))
|
(defonce transit-read-handlers (atom {}))
|
||||||
(defonce transit-read-handler-maps (atom {}))
|
(defonce transit-read-handler-maps (atom {}))
|
||||||
|
|
||||||
(defn update-transit-read-handler-map [pod-id]
|
(defn update-transit-read-handler-map []
|
||||||
(swap! transit-read-handler-maps assoc pod-id
|
(swap! transit-read-handler-maps assoc *pod-id*
|
||||||
(transit/read-handler-map (get @transit-read-handlers pod-id))))
|
(transit/read-handler-map (get @transit-read-handlers *pod-id*))))
|
||||||
|
|
||||||
(defn transit-json-read [pod-id ^String s]
|
(defn transit-json-read [pod-id ^String s]
|
||||||
(with-open [bais (java.io.ByteArrayInputStream. (.getBytes s "UTF-8"))]
|
(with-open [bais (java.io.ByteArrayInputStream. (.getBytes s "UTF-8"))]
|
||||||
|
|
@ -52,29 +54,28 @@
|
||||||
(transit/read r))))
|
(transit/read r))))
|
||||||
|
|
||||||
;; https://www.cognitect.com/blog/2015/9/10/extending-transit
|
;; https://www.cognitect.com/blog/2015/9/10/extending-transit
|
||||||
(defn add-transit-read-handler [pod-id tag fn]
|
(defn add-transit-read-handler [tag fn]
|
||||||
(let [rh (transit/read-handler fn)]
|
(let [rh (transit/read-handler fn)]
|
||||||
(swap! transit-read-handlers assoc-in [pod-id tag] rh)
|
(swap! transit-read-handlers assoc-in [*pod-id* tag] rh)
|
||||||
(update-transit-read-handler-map pod-id)
|
(update-transit-read-handler-map)
|
||||||
nil))
|
nil))
|
||||||
|
|
||||||
(defonce transit-write-handlers (atom {}))
|
(defonce transit-write-handlers (atom {}))
|
||||||
(defonce transit-write-handler-maps (atom {}))
|
(defonce transit-write-handler-maps (atom {}))
|
||||||
|
|
||||||
(defn update-transit-write-handler-map [pod-id]
|
(defn update-transit-write-handler-map []
|
||||||
(swap! transit-write-handler-maps assoc pod-id
|
(swap! transit-write-handler-maps assoc *pod-id*
|
||||||
(transit/write-handler-map (get @transit-write-handlers pod-id))))
|
(transit/write-handler-map (get @transit-write-handlers *pod-id*))))
|
||||||
|
|
||||||
;; https://www.cognitect.com/blog/2015/9/10/extending-transit
|
;; https://www.cognitect.com/blog/2015/9/10/extending-transit
|
||||||
(defn add-transit-write-handler [pod-id tag fn classes]
|
(defn add-transit-write-handler [tag fn classes]
|
||||||
(let [rh (transit/write-handler tag fn)]
|
(let [rh (transit/write-handler tag fn)]
|
||||||
(doseq [class classes]
|
(doseq [class classes]
|
||||||
(swap! transit-write-handlers assoc-in [pod-id class] rh)))
|
(swap! transit-write-handlers assoc-in [*pod-id* class] rh)))
|
||||||
(update-transit-write-handler-map pod-id)
|
(update-transit-write-handler-map)
|
||||||
nil)
|
nil)
|
||||||
|
|
||||||
(defn transit-json-write [pod-id ^String s]
|
(defn transit-json-write [pod-id ^String s]
|
||||||
;; (.println System/err (:pod-id pod))
|
|
||||||
(with-open [baos (java.io.ByteArrayOutputStream. 4096)]
|
(with-open [baos (java.io.ByteArrayOutputStream. 4096)]
|
||||||
(let [w (transit/writer baos :json {:handlers (get @transit-write-handler-maps pod-id)})]
|
(let [w (transit/writer baos :json {:handlers (get @transit-write-handler-maps pod-id)})]
|
||||||
(transit/write w s)
|
(transit/write w s)
|
||||||
|
|
@ -147,6 +148,7 @@
|
||||||
(binding [*out* *err*]
|
(binding [*out* *err*]
|
||||||
(println "Cannot read Transit JSON: " (pr-str s))
|
(println "Cannot read Transit JSON: " (pr-str s))
|
||||||
(throw e))))))]
|
(throw e))))))]
|
||||||
|
(binding [*pod-id* (:pod-id pod)]
|
||||||
(try
|
(try
|
||||||
(loop []
|
(loop []
|
||||||
(let [reply (try (read stdout)
|
(let [reply (try (read stdout)
|
||||||
|
|
@ -219,7 +221,7 @@
|
||||||
(recur))))
|
(recur))))
|
||||||
(catch Exception e
|
(catch Exception e
|
||||||
(binding [*out* *err* #_err-stream]
|
(binding [*out* *err* #_err-stream]
|
||||||
(prn e))))))
|
(prn e)))))))
|
||||||
|
|
||||||
(def pods (atom {}))
|
(def pods (atom {}))
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,9 +55,10 @@
|
||||||
(when defer?
|
(when defer?
|
||||||
[ns-name pod]))
|
[ns-name pod]))
|
||||||
namespaces)))
|
namespaces)))
|
||||||
|
(binding [impl/*pod-id* (:pod-id pod)]
|
||||||
(doseq [[ns-sym vars lazy?] namespaces
|
(doseq [[ns-sym vars lazy?] namespaces
|
||||||
:when (not lazy?)]
|
:when (not lazy?)]
|
||||||
(process-namespace {:name ns-sym :vars vars}))
|
(process-namespace {:name ns-sym :vars vars})))
|
||||||
(future (impl/processor pod))
|
(future (impl/processor pod))
|
||||||
{:pod/id (:pod-id pod)})))
|
{:pod/id (:pod-id pod)})))
|
||||||
|
|
||||||
|
|
@ -70,8 +71,8 @@
|
||||||
([pod-id sym args] (invoke pod-id sym args {}))
|
([pod-id sym args] (invoke pod-id sym args {}))
|
||||||
([pod-id sym args opts] (impl/invoke-public pod-id sym args opts)))
|
([pod-id sym args opts] (impl/invoke-public pod-id sym args opts)))
|
||||||
|
|
||||||
(defn add-transit-read-handler [pod-id tag fn]
|
(defn add-transit-read-handler [tag fn]
|
||||||
(impl/add-transit-read-handler pod-id tag fn))
|
(impl/add-transit-read-handler tag fn))
|
||||||
|
|
||||||
(defn add-transit-write-handler [pod-id tag fn classes]
|
(defn add-transit-write-handler [tag fn classes]
|
||||||
(impl/add-transit-write-handler pod-id tag fn classes))
|
(impl/add-transit-write-handler tag fn classes))
|
||||||
|
|
|
||||||
|
|
@ -65,9 +65,10 @@
|
||||||
(when prev-load-fn
|
(when prev-load-fn
|
||||||
(prev-load-fn m))))]
|
(prev-load-fn m))))]
|
||||||
(swap! env assoc :load-fn new-load-fn)))
|
(swap! env assoc :load-fn new-load-fn)))
|
||||||
|
(binding [impl/*pod-id* (:pod-id pod)]
|
||||||
(doseq [[ns-name vars lazy?] namespaces
|
(doseq [[ns-name vars lazy?] namespaces
|
||||||
:when (not lazy?)]
|
:when (not lazy?)]
|
||||||
(process-namespace ctx {:name ns-name :vars vars}))
|
(process-namespace ctx {:name ns-name :vars vars})))
|
||||||
(sci/future (impl/processor pod))
|
(sci/future (impl/processor pod))
|
||||||
{:pod/id (:pod-id pod)})))
|
{:pod/id (:pod-id pod)})))
|
||||||
|
|
||||||
|
|
@ -80,8 +81,8 @@
|
||||||
([pod-id sym args] (invoke pod-id sym args {}))
|
([pod-id sym args] (invoke pod-id sym args {}))
|
||||||
([pod-id sym args opts] (impl/invoke-public pod-id sym args opts)))
|
([pod-id sym args opts] (impl/invoke-public pod-id sym args opts)))
|
||||||
|
|
||||||
(defn add-transit-read-handler [pod-id tag fn]
|
(defn add-transit-read-handler [tag fn]
|
||||||
(impl/add-transit-read-handler pod-id tag fn))
|
(impl/add-transit-read-handler tag fn))
|
||||||
|
|
||||||
(defn add-transit-write-handler [pod-id tag fn classes]
|
(defn add-transit-write-handler [tag fn classes]
|
||||||
(impl/add-transit-write-handler pod-id tag fn classes))
|
(impl/add-transit-write-handler tag fn classes))
|
||||||
|
|
|
||||||
|
|
@ -123,9 +123,9 @@
|
||||||
{"name" "-local-date-time"}
|
{"name" "-local-date-time"}
|
||||||
{"name" "local-date-time"
|
{"name" "local-date-time"
|
||||||
"code" "
|
"code" "
|
||||||
(babashka.pods/add-transit-read-handler \"pod.test-pod\" \"local-date-time\"
|
(babashka.pods/add-transit-read-handler \"local-date-time\"
|
||||||
(fn [s] (java.time.LocalDateTime/parse s)))
|
(fn [s] (java.time.LocalDateTime/parse s)))
|
||||||
(babashka.pods/add-transit-write-handler \"pod.test-pod\" \"local-date-time\"
|
(babashka.pods/add-transit-write-handler \"local-date-time\"
|
||||||
str #{java.time.LocalDateTime})
|
str #{java.time.LocalDateTime})
|
||||||
(defn local-date-time [x]
|
(defn local-date-time [x]
|
||||||
(-local-date-time x))"}]
|
(-local-date-time x))"}]
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue