branch: externals/llm commit e07c84b81b32031454a48dd43b4b0d9e0b4ffc7b Author: Roman Scherer <ro...@burningswell.com> Commit: Roman Scherer <ro...@burningswell.com>
Improve Curl/HTTP error handling Curl and HTTP errors need to be handled differently. Since curl errors don't have a response, we don't need to transform the body according to a media type. --- plz-media-type.el | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/plz-media-type.el b/plz-media-type.el index e7f13f8a87..f8094c057e 100644 --- a/plz-media-type.el +++ b/plz-media-type.el @@ -76,6 +76,10 @@ (cl-defgeneric plz-media-type-process (media-type process chunk) "Process the CHUNK according to MEDIA-TYPE using PROCESS.") +(cl-defmethod plz-media-type-else ((_ (eql nil)) error) + "Transform the ERROR into a format suitable for MEDIA-TYPE." + error) + (defun plz-media-type-parse (header) "Parse the Content-Type HEADER. @@ -348,19 +352,27 @@ be `hash-table', `alist' (the default) or `plist'." (t . ,(plz-media-type:application/octet-stream))) "Alist from media type to content type.") -(defun plz-media-type--handle-sync-error (media-types error) - "Handle the synchronous ERROR of type `plz-http-error' with MEDIA-TYPES." +(defun plz-media-type--handle-sync-http-error (error media-types) + "Handle the synchronous HTTP ERROR using MEDIA-TYPES." (let* ((msg (cadr error)) (plzerror (caddr error))) (signal (car error) - (let ((response (plz-error-response plzerror))) - (if-let (media-type (plz-media-type--of-response media-types response)) - (list msg (with-temp-buffer - (when-let (body (plz-response-body response)) - (insert body) - (goto-char (point-min))) - (plz-media-type-else media-type plzerror))) - (cdr error)))))) + (cond + ((plz-error-response plzerror) + (let ((response (plz-error-response plzerror))) + (if-let (media-type (plz-media-type--of-response media-types response)) + (list msg (with-temp-buffer + (when-let (body (plz-response-body response)) + (insert body) + (goto-char (point-min))) + (plz-media-type-else media-type plzerror))) + (cdr error)))))))) + +(defun plz-media-type--handle-sync-error (error media-types) + "Handle the synchronous ERROR using MEDIA-TYPES." + (if (eq 'plz-http-error (car error)) + (plz-media-type--handle-sync-http-error error media-types) + (signal (car error) (cdr error)))) (cl-defun plz-media-type-request (method @@ -498,7 +510,7 @@ not. ((processp result) result) (t (user-error "Unexpected response: %s" result)))) - (plz-error (plz-media-type--handle-sync-error media-types error))) + (plz-error (plz-media-type--handle-sync-error error media-types))) (apply #'plz (append (list method url) rest)))) ;;;; Footer