emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/rt-liberation 6e75dbb 31/72: * rt-liberation-rest.el: S


From: Stefan Monnier
Subject: [elpa] externals/rt-liberation 6e75dbb 31/72: * rt-liberation-rest.el: Start work on `show' query.
Date: Wed, 5 Aug 2020 11:57:38 -0400 (EDT)

branch: externals/rt-liberation
commit 6e75dbbea883784029ca20e9ca0f65de6a17445c
Author: Yoni Rabkin <yrk@gnu.org>
Commit: Yoni Rabkin <yrk@gnu.org>

    * rt-liberation-rest.el: Start work on `show' query.
    
    Start work toward making a drop in replacement for the CLI `show' query
    using the REST API.
---
 rt-liberation-rest.el | 82 ++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 59 insertions(+), 23 deletions(-)

diff --git a/rt-liberation-rest.el b/rt-liberation-rest.el
index 2fbe8a6..a13b039 100644
--- a/rt-liberation-rest.el
+++ b/rt-liberation-rest.el
@@ -33,8 +33,11 @@
 (require 'url-util)
 
 
-(defvar rt-liber-rest-debug ""
-  "Debug capture of last HTTP call.")
+(defvar rt-liber-rest-debug-buffer-name "*rt-liber-rest debug log*"
+  "Buffer name of debug capture.")
+
+(defvar rt-liber-rest-debug-p nil
+  "If non-nil, record traffic in a debug buffer.")
 
 (defvar rt-liber-rest-scheme "https"
   "Scheme used for transport. Is one of http or https.")
@@ -48,9 +51,22 @@
 (defvar rt-liber-rest-password ""
   "Password of RT account.")
 
+(defvar rt-liber-rest-verbose-p t
+  "If non-nil, be verbose about what's happening.")
+
+
+(defun rt-liber-rest-write-debug (str)
+  "Write to debug buffer."
+  (when (not (stringp str))
+    (error "argument not string"))
+  (when rt-liber-rest-debug-p
+    (with-current-buffer
+       (get-buffer-create rt-liber-rest-debug-buffer-name)
+      (goto-char (point-max))
+      (insert str))))
 
 (defun rt-liber-rest-search-string (scheme url username password query)
-  ""
+  "Return the search query string."
   (let ((user (url-encode-url username))
        (pass (url-encode-url password)))
     (concat scheme
@@ -64,7 +80,7 @@
            "orderby=+Created")))
 
 (defun rt-liber-rest-show-string (scheme url ticket-id-list username password 
query)
-  ""
+  "Return the ticket show string."
   (let ((user (url-encode-url username))
        (pass (url-encode-url password)))
     (concat scheme
@@ -76,7 +92,7 @@
            "pass=" pass "&")))
 
 (defun rt-liber-rest-call (url)
-  ""
+  "Perform a REST call with URL."
   (let ((url-request-method "POST"))
     (let ((response
           (url-retrieve-synchronously url))
@@ -85,10 +101,13 @@
            (with-current-buffer response
              (buffer-substring-no-properties (point-min)
                                              (point-max))))
-      (setq rt-liber-rest-debug str)
+      
+      (rt-liber-rest-write-debug
+       (format "outgoing -->\n%s\n<-- incoming\n%s\n" url str))
       str)))
 
 (defun rt-liber-rest-query-runner (op query-string)
+  "Run OP on QUERY-STRING."
   (message "starting REST '%s' query at %s..." op (current-time-string))
   (when (or (not (stringp op))
            (not (stringp query-string)))
@@ -100,22 +119,14 @@
                                       rt-liber-rest-username
                                       rt-liber-rest-password
                                       query-string)))
-       ;; The "show" API call doesn't support getting multiple
-       ;; tickets at once. This is a problem. I've emailed the
-       ;; rt-users mailing list asking how to to this.
-       ;;
-       ;; A much more insidious method to figure this out is to
-       ;; wireshark the CLI connection as it asks for multiple
-       ;; tickets and see if we can capture the query the CLI
-       ;; uses. This would necessitate a non-HTTPS connection, such
-       ;; that the one to the demo servers.
        ((string= op "show")
-        (rt-liber-rest-show-string rt-liber-rest-scheme
-                                   rt-liber-rest-url
-                                   query-string
-                                   rt-liber-rest-username
-                                   rt-liber-rest-password
-                                   query-string))
+        (rt-liber-rest-call
+         (rt-liber-rest-show-string rt-liber-rest-scheme
+                                    rt-liber-rest-url
+                                    query-string
+                                    rt-liber-rest-username
+                                    rt-liber-rest-password
+                                    query-string)))
        (t (error "unknown op [%s]" op))))
 
 (defun rt-liber-rest-parse-http-header ()
@@ -146,7 +157,32 @@
    (rt-liber-rest-query-runner "ls" query)
    'rt-liber-rest-ticketsql-runner-parser-f))
 
-
-(provide 'rt-liber-rest)
+(defun rt-liber-rest-show-query-runner (idsublist)
+  "Iterate over IDSUBLIST and return the collected result."
+  (when (not (listp idsublist))
+    (error "argument not list"))
+  (with-temp-buffer
+    (let ((ticket-ids (reverse (copy-tree idsublist)))
+         (c 1)
+         (l (length idsublist)))
+      (while ticket-ids
+
+       (when rt-liber-rest-verbose-p
+         (message "retrieving ticket %d/%d" c l)
+         (setq c (1+ c)))
+
+       (insert
+        (rt-liber-rest-query-runner "show" (caar ticket-ids)))
+       (setq ticket-ids (cdr ticket-ids))))
+    (buffer-substring (point-min) (point-max))))
+
+(defun rt-liber-rest-run-show-base-query (idsublist)
+  "Run \"show\" type query against the server with IDSUBLIST."
+  ;;(rt-liber-parse-answer
+  (rt-liber-rest-show-query-runner idsublist))
+;;#'rt-liber-ticket-base-retriever-parser-f))
+
+
+(provide 'rt-liberation-rest)
 
 ;;; rt-liberation-rest.el ends here.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]