Internal functions used by [[metabase.api.common]]. | (ns metabase.api.common.internal (:require [clojure.walk :as walk] [malli.core :as mc] [malli.transform :as mtx] [metabase.server.streaming-response] [metabase.util :as u] [potemkin.types :as p.types]) (:import (metabase.server.streaming_response StreamingResponse))) |
(set! *warn-on-reflection* true) | |
(comment metabase.server.streaming-response/keep-me) | |
Return a sequence of keywords for URL args in string (route-arg-keywords "/:id/cards") -> [:id] | (defn route-arg-keywords [route] (->> (re-seq #":([\w-]+)" route) (map second) (map keyword))) |
(defn- requiring-resolve-form [form] (walk/postwalk (fn [x] (if (symbol? x) (try @(requiring-resolve x) (catch Exception _ x)) x)) form)) | |
Note: this is called in a macro context, so it can potentially be passed a symbol that resolves to a schema. | (defn ->matching-regex [schema] (let [schema (try #_:clj-kondo/ignore (eval schema) (catch Exception _ #_:clj-kondo/ignore (requiring-resolve-form schema))) schema-type (mc/type schema)] [schema-type (condp = schema-type ;; can use any regex directly :re (first (mc/children schema)) :keyword #"[\S]+" 'pos-int? #"[0-9]+" :int #"-?[0-9]+" 'int? #"-?[0-9]+" :uuid u/uuid-regex 'uuid? u/uuid-regex nil)])) |
Transformer used on values coming over the API via defendpoint. | (def defendpoint-transformer (mtx/transformer (mtx/string-transformer) (mtx/json-transformer) (mtx/default-value-transformer))) |
Protocol for transformations that should be done to the value returned by a | (p.types/defprotocol+ EndpointResponse (wrap-response-if-needed [this] "Transform the value returned by a `defendpoint` form as needed, e.g. by adding `:status` and `:body`.")) |
(extend-protocol EndpointResponse Object (wrap-response-if-needed [this] {:status 200, :body this}) nil (wrap-response-if-needed [_] {:status 204, :body nil}) StreamingResponse (wrap-response-if-needed [this] this) clojure.lang.IPersistentMap (wrap-response-if-needed [m] (if (and (:status m) (contains? m :body)) m {:status 200, :body m}))) | |