(TK-27) Modify create-client function
Modify create-client function in async.clj to now return a new client wrapped in the async-client protocol. Make create-client public. Modify request to make a default client if none is provided to support these changes.
This commit is contained in:
parent
085ad7a4d0
commit
3a3e60109d
1 changed files with 52 additions and 16 deletions
|
@ -35,14 +35,15 @@
|
||||||
;;; Async Client protocol
|
;;; Async Client protocol
|
||||||
|
|
||||||
(defprotocol async-client
|
(defprotocol async-client
|
||||||
(get [url] [url opts])
|
(get [this url] [this url opts])
|
||||||
(head [url] [url opts])
|
(head [this url] [this url opts])
|
||||||
(post [url] [url opts])
|
(post [this url] [this url opts])
|
||||||
(put [url] [url opts])
|
(put [this url] [this url opts])
|
||||||
(delete [url] [url opts])
|
(delete [this url] [this url opts])
|
||||||
(trace [url] [url opts])
|
(trace [this url] [this url opts])
|
||||||
(options [url] [url opts])
|
(options [this url] [this url opts])
|
||||||
(patch [url] [url opts]))
|
(patch [this url] [this url opts])
|
||||||
|
(close [this]))
|
||||||
|
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
;;; Private SSL configuration functions
|
;;; Private SSL configuration functions
|
||||||
|
@ -239,11 +240,17 @@
|
||||||
[opts :- schemas/UserRequestOptions]
|
[opts :- schemas/UserRequestOptions]
|
||||||
(select-keys opts [:ssl-context :ssl-ca-cert :ssl-cert :ssl-key]))
|
(select-keys opts [:ssl-context :ssl-ca-cert :ssl-cert :ssl-key]))
|
||||||
|
|
||||||
(schema/defn create-client :- schemas/Client
|
(schema/defn create-default-client :- schemas/Client
|
||||||
[opts :- schemas/ClientOptions]
|
[opts :- schemas/RawUserRequestOptions]
|
||||||
(let [opts (configure-ssl opts)
|
(let [defaults {:headers {}
|
||||||
client (if (:ssl-context opts)
|
:body nil
|
||||||
(.. (HttpAsyncClients/custom) (setSSLContext (:ssl-context opts)) build)
|
:decompress-body true
|
||||||
|
:as :stream}
|
||||||
|
opts (merge defaults opts)
|
||||||
|
client-opts (extract-client-opts opts)
|
||||||
|
configured-opts (configure-ssl client-opts)
|
||||||
|
client (if (:ssl-context configured-opts)
|
||||||
|
(.. (HttpAsyncClients/custom) (setSSLContext (:ssl-context configured-opts)) build)
|
||||||
(HttpAsyncClients/createDefault))]
|
(HttpAsyncClients/createDefault))]
|
||||||
(.start client)
|
(.start client)
|
||||||
client))
|
client))
|
||||||
|
@ -285,13 +292,16 @@
|
||||||
(request opts nil))
|
(request opts nil))
|
||||||
([opts :- schemas/RawUserRequestOptions
|
([opts :- schemas/RawUserRequestOptions
|
||||||
callback :- schemas/ResponseCallbackFn]
|
callback :- schemas/ResponseCallbackFn]
|
||||||
|
(let [client (create-default-client opts)]
|
||||||
|
(request opts callback client)))
|
||||||
|
([opts :- schemas/RawUserRequestOptions
|
||||||
|
callback :- schemas/ResponseCallbackFn
|
||||||
|
client :- schemas/Client]
|
||||||
(let [defaults {:headers {}
|
(let [defaults {:headers {}
|
||||||
:body nil
|
:body nil
|
||||||
:decompress-body true
|
:decompress-body true
|
||||||
:as :stream}
|
:as :stream}
|
||||||
opts (merge defaults opts)
|
opts (merge defaults opts)
|
||||||
client-opts (extract-client-opts opts)
|
|
||||||
client (create-client client-opts)
|
|
||||||
{:keys [method url body] :as coerced-opts} (coerce-opts opts)
|
{:keys [method url body] :as coerced-opts} (coerce-opts opts)
|
||||||
request (construct-request method url)
|
request (construct-request method url)
|
||||||
result (promise)]
|
result (promise)]
|
||||||
|
@ -302,6 +312,32 @@
|
||||||
(future-callback client result opts callback))
|
(future-callback client result opts callback))
|
||||||
result)))
|
result)))
|
||||||
|
|
||||||
|
(schema/defn create-client :- async-client
|
||||||
|
[opts :- schemas/ClientOptions]
|
||||||
|
(let [opts (configure-ssl opts)
|
||||||
|
client (if (:ssl-context opts)
|
||||||
|
(.. (HttpAsyncClients/custom) (setSSLContext (:ssl-context opts)) build)
|
||||||
|
(HttpAsyncClients/createDefault))]
|
||||||
|
(.start client)
|
||||||
|
(reify async-client
|
||||||
|
(get [_ url] (get url {}))
|
||||||
|
(get [_ url opts] (request (assoc opts :method :get :url url) nil client))
|
||||||
|
(head [_ url] (head url {}))
|
||||||
|
(head [_ url opts] (request (assoc opts :method :head :url url) nil client))
|
||||||
|
(post [_ url] (post url {}))
|
||||||
|
(post [_ url opts] (request (assoc opts :method :post :url url) nil client))
|
||||||
|
(put [_ url] (put url {}))
|
||||||
|
(put [_ url opts] (request (assoc opts :method :put :url url) nil client))
|
||||||
|
(delete [_ url] (delete url {}))
|
||||||
|
(delete [_ url opts] (request (assoc opts :method :delete :url url) nil client))
|
||||||
|
(trace [_ url] (trace url {}))
|
||||||
|
(trace [_ url opts] (request (assoc opts :method :trace :url url) nil client))
|
||||||
|
(options [_ url] (options url {}))
|
||||||
|
(options [_ url opts] (request (assoc opts :method :options :url url) nil client))
|
||||||
|
(patch [_ url] (patch url {}))
|
||||||
|
(patch [_ url opts] (request (assoc opts :method :patch :url url) nil client))
|
||||||
|
(close [_] (.close client)))))
|
||||||
|
|
||||||
(defn get
|
(defn get
|
||||||
"Issue an asynchronous HTTP GET request. This will raise an exception if an
|
"Issue an asynchronous HTTP GET request. This will raise an exception if an
|
||||||
error is returned."
|
error is returned."
|
||||||
|
|
Loading…
Reference in a new issue