[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/plz 42584e1af5 2/2: Merge: (plz) :body (file FILENAME)
|
From: |
ELPA Syncer |
|
Subject: |
[elpa] externals/plz 42584e1af5 2/2: Merge: (plz) :body (file FILENAME) |
|
Date: |
Wed, 10 May 2023 21:00:58 -0400 (EDT) |
branch: externals/plz
commit 42584e1af5618a370e5ad2ffac16672733214941
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>
Merge: (plz) :body (file FILENAME)
And docstring fix.
---
README.org | 10 +++++++++-
plz.el | 10 +++++++++-
plz.info | 50 +++++++++++++++++++++++++++++++-------------------
tests/test-plz.el | 18 ++++++++++++++++++
4 files changed, 67 insertions(+), 21 deletions(-)
diff --git a/README.org b/README.org
index 6c08b4f204..2a486f0806 100644
--- a/README.org
+++ b/README.org
@@ -46,6 +46,8 @@
The main public function is ~plz~, which sends an HTTP request and returns
either the result of the specified type (for a synchronous request), or the
~curl~ process object (for asynchronous requests). For asynchronous requests,
callback, error-handling, and finalizer functions may be specified, as well as
various other options.
+# TODO: Add ":body (file FILENAME)" to docs.
+
** Examples
Synchronously =GET= a URL and return the response body as a decoded string
(here, raw JSON):
@@ -108,6 +110,8 @@ Synchronously download a JPEG file, then create an Emacs
image object from the d
~HEADERS~ may be an alist of extra headers to send with the request.
+ ~BODY~ may be a string, a buffer, or a list like ~(file FILENAME)~ to
upload a file from disk.
+
~BODY-TYPE~ may be ~text~ to send ~BODY~ as text, or ~binary~ to send it as
binary.
~AS~ selects the kind of result to pass to the callback function ~THEN~, or
the kind of result to return for synchronous requests. It may be:
@@ -175,7 +179,11 @@ You may also clear a queue with ~plz-clear~, which cancels
any active or queued
** 0.6-pre
-Nothing new yet.
+*Additions*
++ Function ~plz~'s ~:body~ argument now accepts a list like ~(file FILENAME)~
to upload a file from disk (by passing the filename to curl, rather than
reading its content into Emacs and sending it to curl through the pipe).
+
+*Fixes*
++ Function ~plz~'s docstring now mentions that the ~:body~ argument may also
be a buffer (an intentional feature that was accidentally undocumented).
** 0.5.4
diff --git a/plz.el b/plz.el
index 108533d45f..c66f486e89 100644
--- a/plz.el
+++ b/plz.el
@@ -278,6 +278,9 @@ selected result.
HEADERS may be an alist of extra headers to send with the
request.
+BODY may be a string, a buffer, or a list like `(file FILENAME)'
+to upload a file from disk.
+
BODY-TYPE may be `text' to send BODY as text, or `binary' to send
it as binary.
@@ -369,7 +372,12 @@ NOQUERY is passed to `make-process', which see."
(cons "--request" (upcase
(symbol-name method)))
;; It appears that this must be
the last argument
;; in order to pass data on the
rest of STDIN.
- (cons data-arg "@-")))
+ (pcase body
+ (`(file ,filename)
+ ;; Use `expand-file-name'
because curl doesn't
+ ;; expand, e.g. "~" into
"/home/...".
+ (cons "--upload-file"
(expand-file-name filename)))
+ (_ (cons data-arg "@-")))))
('delete
(list (cons "--dump-header" "-")
(cons "--request" (upcase
(symbol-name method)))))
diff --git a/plz.info b/plz.info
index 5ce233a9ee..357e1c98a9 100644
--- a/plz.info
+++ b/plz.info
@@ -175,6 +175,9 @@ File: README.info, Node: Functions, Next: Queueing,
Prev: Examples, Up: Usag
‘HEADERS’ may be an alist of extra headers to send with the
request.
+ ‘BODY’ may be a string, a buffer, or a list like ‘(file FILENAME)’
+ to upload a file from disk.
+
‘BODY-TYPE’ may be ‘text’ to send ‘BODY’ as text, or ‘binary’ to
send it as binary.
@@ -294,7 +297,16 @@ File: README.info, Node: 06-pre, Next: 054, Up:
Changelog
3.1 0.6-pre
===========
-Nothing new yet.
+*Additions*
+ • Function ‘plz’’s ‘:body’ argument now accepts a list like ‘(file
+ FILENAME)’ to upload a file from disk (by passing the filename to
+ curl, rather than reading its content into Emacs and sending it to
+ curl through the pipe).
+
+ *Fixes*
+ • Function ‘plz’’s docstring now mentions that the ‘:body’ argument
+ may also be a buffer (an intentional feature that was accidentally
+ undocumented).
File: README.info, Node: 054, Next: 053, Prev: 06-pre, Up: Changelog
@@ -477,24 +489,24 @@ Node: Manual1566
Node: Usage1872
Node: Examples2373
Node: Functions3740
-Node: Queueing6734
-Node: Tips7992
-Node: Changelog8293
-Node: 06-pre8551
-Node: 0548658
-Node: 0538905
-Node: 0529221
-Node: 0519428
-Node: 059680
-Node: 049886
-Node: 0310792
-Node: 02111240
-Node: 0211389
-Node: 0111520
-Node: Credits11616
-Node: Development11982
-Node: Copyright assignment12496
-Node: License13084
+Node: Queueing6848
+Node: Tips8106
+Node: Changelog8407
+Node: 06-pre8665
+Node: 0549212
+Node: 0539459
+Node: 0529775
+Node: 0519982
+Node: 0510234
+Node: 0410440
+Node: 0311346
+Node: 02111794
+Node: 0211943
+Node: 0112074
+Node: Credits12170
+Node: Development12536
+Node: Copyright assignment13050
+Node: License13638
End Tag Table
diff --git a/tests/test-plz.el b/tests/test-plz.el
index 05001435ef..f78f6e4417 100644
--- a/tests/test-plz.el
+++ b/tests/test-plz.el
@@ -503,6 +503,24 @@
(when (file-exists-p filename)
(delete-file filename)))))
+(plz-deftest plz-upload-file-by-name ()
+ (let ((filename (make-temp-file "plz-"))
+ response-json process)
+ (unwind-protect
+ (progn
+ (with-temp-file filename
+ (insert "deadbeef"))
+ (setf process
+ (plz 'put "https://httpbin.org/put"
+ :body `(file ,filename)
+ :as #'json-read
+ :then (lambda (json)
+ (setf response-json json))))
+ (plz-test-wait process)
+ (should (equal "deadbeef" (alist-get 'data response-json)))
+ (should-not (alist-get 'files response-json)))
+ (delete-file filename))))
+
;;;;; Queue
;; TODO: Test that limit is enforced (though it seems to work fine).