From b351a52c8c97fe5c00023e09ac511630149f3d4f Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Thu, 4 Jan 2024 01:28:36 +0300 Subject: [PATCH 1/5] biome-multi: basically works --- biome-api.el | 37 ++++++++ biome-multi.el | 236 +++++++++++++++++++++++++++++++++++++++++++++++++ biome-query.el | 16 ++-- biome.el | 12 +++ 4 files changed, 296 insertions(+), 5 deletions(-) create mode 100644 biome-multi.el diff --git a/biome-api.el b/biome-api.el index 28a9866..4766f54 100644 --- a/biome-api.el +++ b/biome-api.el @@ -128,5 +128,42 @@ called with QUERY and the data returned by the API as arguments." (cl-function (lambda (&key error-thrown response &allow-other-keys) (biome-api--show-error error-thrown response)))))) +(defun biome-api-get-multiple (queries callback) + "Get data from Open Meteo API. + +QUERIES is a list of forms as defined by `biome-query-current'. CALLBACK is +called with QUERIES and the data returned by the API as arguments." + (let (requests) + (seq-map-indexed + (lambda (query idx) + (push + (request (alist-get (alist-get :name query) + biome-api-urls nil nil #'equal) + :type "GET" + :params (biome-api--get-params query) + :parser #'json-read + :success (cl-function + (lambda (&key data &allow-other-keys) + ;; I'm not sure why, but `request-response-done-p' for + ;; the current request returns nil. I don't + ;; know how stable this is, so... + (let ((completed-count + (cl-loop for i from 0 + for request in requests + if (or (request-response-done-p request) + (= i (- (length requests) 1 idx))) + sum 1))) + (message "Completed %d/%d requests" + completed-count (length queries)) + (when (eq (length queries) completed-count) + (funcall callback (copy-tree queries) + (mapcar #'request-response-data + (reverse requests))))))) + :error + (cl-function (lambda (&key error-thrown response &allow-other-keys) + (biome-api--show-error error-thrown response)))) + requests)) + queries))) + (provide 'biome-api) ;;; biome-api.el ends here diff --git a/biome-multi.el b/biome-multi.el new file mode 100644 index 0000000..01e7e76 --- /dev/null +++ b/biome-multi.el @@ -0,0 +1,236 @@ +;;; biome-multi.el --- Do multiple queries to Open Meteo -*- lexical-binding: t -*- + +;; Copyright (C) 2024 Korytov Pavel + +;; Author: Korytov Pavel +;; Maintainer: Korytov Pavel + +;; This file is NOT part of GNU Emacs. + +;; This program is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;;; Commentary: + +;; TODO + +;;; Code: +(require 'biome-query) +(require 'font-lock) +(require 'transient) + +(defvar biome-multi-query-current nil + "Current query. + +This is a list of forms as defined by `biome-query-current'.") + +(defvar biome-multi--callback nil + "Call this with the selected query.") + +(defclass biome-multi--transient-report (transient-suffix) + ((transient :initform t)) + "A class to display the current report for `biome-multi'.") + +(cl-defmethod transient-init-value ((_ biome-multi--transient-report)) + "A dummy method for `biome-multi--transient-report'." + nil) + +(cl-defmethod transient-format ((_ biome-multi--transient-report)) + "TODO." + (if (seq-empty-p biome-multi-query-current) + (propertize "Add at least one query" 'face 'error) + (cl-loop for i from 0 + for query in biome-multi-query-current + concat (propertize (format "Query #%d: %s\n" i + (alist-get :name query)) + 'face 'font-lock-keyword-face) + concat (biome-query--format query) + if (not (eq i (1- (length biome-multi-query-current)))) + concat "\n"))) + +(transient-define-infix biome-multi--transient-report-infix () + :class 'biome-multi--transient-report + :key "~~1") + +(defun biome-multi-add-query () + (interactive) + (biome-query + (lambda (query) + (if (seq-empty-p biome-multi-query-current) + (setq biome-multi-query-current (list (copy-tree query))) + (nconc biome-multi-query-current (list (copy-tree query)))) + (biome-multi-query biome-multi--callback)))) + +(defun biome-multi-reset () + (interactive) + (setq biome-multi-query-current nil)) + +(defun biome-multi-edit (idx) + (interactive "nQuery number: ") + (when (or (< idx 0) + (>= idx (length biome-multi-query-current))) + (user-error "Invalid query number")) + (setq biome-query-current (nth idx biome-multi-query-current)) + (setq biome-query--callback + (lambda (query) + (setf (nth idx biome-multi-query-current) query) + (biome-multi-query biome-multi--callback))) + (biome-query--section-open (alist-get :name biome-query-current))) + +(defun biome-multi-remove (idx) + (interactive "nQuery number: ") + (when (or (< idx 0) + (>= idx (length biome-multi-query-current))) + (user-error "Invalid query number")) + (setq biome-multi-query-current + (cl-loop for query in biome-multi-query-current + for i from 0 + unless (eq i idx) + collect query))) + +(defun biome-multi-exec () + (interactive) + (when (seq-empty-p biome-multi-query-current) + (user-error "No queries to execute")) + (funcall biome-multi--callback biome-multi-query-current)) + +(transient-define-prefix biome-multi-query (callback) + ["Open Meteo Multi Query" + (biome-multi--transient-report-infix)] + ["Queries" + :class transient-row + ("a" "Add query" biome-multi-add-query) + ("e" "Edit query" biome-multi-edit :transient t) + ("d" "Delete query" biome-multi-remove :transient t)] + ["Actions" + :class transient-row + ("RET" "Run" biome-multi-exec) + ("R" "Reset" biome-multi-reset :transient t) + ("q" "Quit" transient-quit-one)] + (interactive (list nil)) + (unless callback + (error "Callback is not set. Run M-x `biome-multi' instead")) + (setq biome-multi--callback callback) + (transient-setup 'biome-multi-query)) + +(defun biome-multi--unique-names-grouped (names-by-group group-names) + (let ((name-occurences (make-hash-table :test #'equal)) + (names-mapping (make-hash-table :test #'equal))) + (cl-loop for names in names-by-group + do (cl-loop for name in names + do (puthash name + (1+ (gethash name name-occurences 0)) + name-occurences))) + (cl-loop for names in names-by-group + for group-name in group-names + do (cl-loop + for name in names + for occurences = (gethash name name-occurences) + do (puthash (format "%s--%s" group-name name) + (if (= occurences 1) + name + (format "%s_%s" name + (replace-regexp-in-string + (rx space) "_" (downcase group-name)))) + names-mapping))) + names-mapping)) + +(defun biome-multi--unique-names (names) + (let ((name-occurences (make-hash-table :test #'equal)) + (added-occurences (make-hash-table :test #'equal))) + (cl-loop for name in names + do (puthash name + (1+ (gethash name name-occurences 0)) + name-occurences)) + (cl-loop for name in names + for occurences = (gethash name name-occurences) + for added = (gethash name added-occurences) + collect (if (= occurences 1) + name + (format "%s_%d" name + (puthash + name + (1+ (or added 0)) + added-occurences)))))) + +(defun biome-multi--join-results (queries query-names vars-mapping results) + (let ((times (make-hash-table :test #'equal)) + (var-values-per-time (make-hash-table :test #'equal))) + (cl-loop for result in results + for query in queries + for query-name in query-names + for group-name = (alist-get :group query) + for vars-field = (intern group-name) + for times-vector = (thread-last + result (alist-get vars-field) (alist-get 'time)) + do (cl-loop for time across times-vector + do (puthash time t times)) + do (cl-loop for (var-name . values) in (seq-filter + (lambda (v) (not (eq 'time (car v)))) + (alist-get vars-field result)) + for mapped-var-name = + (gethash (format "%s--%s" query-name var-name) vars-mapping) + for var-values = (make-hash-table :test #'equal) + do (cl-loop for time across times-vector + for value across values + do (puthash time value var-values)) + do (puthash mapped-var-name var-values var-values-per-time))) + (let ((times-sorted (seq-sort #'string-lessp (hash-table-keys times)))) + `((time . ,(vconcat times-sorted)) + ,@(cl-loop for var-name being the hash-keys of var-values-per-time + using (hash-values var-values) + collect + (cons (intern var-name) + (vconcat + (cl-loop for time in times-sorted + collect (gethash time var-values))))))))) + +(defun biome-multi--merge (queries results) + "Merge QUERIES into one query. + +QUERIES is a list of forms as defined by `biome-query-current'." + (let* ((vars-by-group + (cl-loop for query in queries + for group = (alist-get :group query) + collect (alist-get group (alist-get :params query) + nil nil #'string-equal))) + (query-names + (biome-multi--unique-names + (cl-loop for query in queries + collect (alist-get :name query)))) + (vars-mapping (biome-multi--unique-names-grouped vars-by-group query-names))) + `(((:name . "Multi Query") + (:group . "multi") + (:params . (("multi" . + ,(cl-loop for var-name being the hash-values of vars-mapping + collect var-name))))) + ((multi_units + . ,(cons + (cons 'time "iso8601") + (cl-loop + for result in results + for query in queries + for query-name in query-names + for group-name = (alist-get :group query) + for units-field = (intern (format "%s_units" group-name)) + append (cl-loop + for (var-name . unit) in (alist-get units-field result) + unless (equal var-name 'time) + collect (cons (intern + (gethash (format "%s--%s" query-name var-name) + vars-mapping)) + unit))))) + (multi . ,(biome-multi--join-results queries query-names vars-mapping results)))))) + +(provide 'biome-multi) +;;; biome-multi.el ends here diff --git a/biome-query.el b/biome-query.el index 9d8db40..28cbef1 100644 --- a/biome-query.el +++ b/biome-query.el @@ -175,12 +175,14 @@ KEY is the api key of the variable. VAR-NAMES is the output of (capitalize (replace-regexp-in-string (regexp-quote "_") " " key)))) -(cl-defmethod transient-format ((_obj biome-query--transient-report)) - "Format the `biome-query-current'." - (let ((group (alist-get :group biome-query-current)) +(defun biome-query--format (query) + "Format QUERY for display. + +QUERY is a form as defined by `transient-define-prefix'." + (let ((group (alist-get :group query)) (var-names (biome-query--get-var-names-cache)) lat lon group-vars line-vars vars) - (dolist (item (alist-get :params biome-query-current)) + (dolist (item (alist-get :params query)) (cond ((stringp item) (push (biome-query--get-header item var-names) vars)) @@ -251,6 +253,10 @@ KEY is the api key of the variable. VAR-NAMES is the output of (when line-vars (concat (mapconcat #'identity line-vars "\n") "\n"))))) +(cl-defmethod transient-format ((_obj biome-query--transient-report)) + "Format the `biome-query-current'." + (biome-query--format biome-query-current)) + (transient-define-infix biome-query--transient-report-infix () :class 'biome-query--transient-report :key "~~1") @@ -953,7 +959,7 @@ SUFFIXES is a list of suffix definitions." "Process the query made by `biome-query'." (interactive) (unless biome-query--callback - (user-error "Biome-query--callback is not set")) + (error "Biome-query--callback is not set")) (funcall biome-query--callback biome-query-current)) (defun biome-query--generate-preset () diff --git a/biome.el b/biome.el index 576f274..ae6d5ea 100644 --- a/biome.el +++ b/biome.el @@ -40,6 +40,7 @@ ;;; Code: (require 'biome-api) +(require 'biome-multi) (require 'biome-query) (require 'biome-grid) @@ -73,6 +74,17 @@ API." ;; previous invocation of `biome' (biome-query--section-open (alist-get :name biome-query-current))) +(defun biome-multi () + "Run multiple queries to Open Meteo and join results." + (interactive) + (biome-multi-query + (lambda (query) + (biome-api-get-multiple + query + (lambda (queries results) + (let ((merged (biome-multi--merge queries results))) + (funcall biome-frontend (nth 0 merged) (nth 1 merged)))))))) + (defmacro biome-def-preset (name params) "Declare a query preset. From dbea2562e295f95efb4f59691ac9ed04073f06c9 Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Thu, 4 Jan 2024 01:35:56 +0300 Subject: [PATCH 2/5] biome-multi: docs --- biome-multi.el | 35 ++++++++++++++++++++++++++++++++--- biome.el | 2 +- 2 files changed, 33 insertions(+), 4 deletions(-) diff --git a/biome-multi.el b/biome-multi.el index 01e7e76..8794436 100644 --- a/biome-multi.el +++ b/biome-multi.el @@ -22,7 +22,7 @@ ;;; Commentary: -;; TODO +;; Tools for doing multiple queries to Open Meteo. ;;; Code: (require 'biome-query) @@ -46,7 +46,7 @@ This is a list of forms as defined by `biome-query-current'.") nil) (cl-defmethod transient-format ((_ biome-multi--transient-report)) - "TODO." + "Format the current report for `biome-multi'." (if (seq-empty-p biome-multi-query-current) (propertize "Add at least one query" 'face 'error) (cl-loop for i from 0 @@ -63,6 +63,7 @@ This is a list of forms as defined by `biome-query-current'.") :key "~~1") (defun biome-multi-add-query () + "Add new query to `biome-multi'." (interactive) (biome-query (lambda (query) @@ -72,10 +73,12 @@ This is a list of forms as defined by `biome-query-current'.") (biome-multi-query biome-multi--callback)))) (defun biome-multi-reset () + "Reset `biome-multi'." (interactive) (setq biome-multi-query-current nil)) (defun biome-multi-edit (idx) + "Edit query number IDX in `biome-multi'." (interactive "nQuery number: ") (when (or (< idx 0) (>= idx (length biome-multi-query-current))) @@ -88,6 +91,7 @@ This is a list of forms as defined by `biome-query-current'.") (biome-query--section-open (alist-get :name biome-query-current))) (defun biome-multi-remove (idx) + "Remove query number IDX from `biome-multi'." (interactive "nQuery number: ") (when (or (< idx 0) (>= idx (length biome-multi-query-current))) @@ -99,6 +103,7 @@ This is a list of forms as defined by `biome-query-current'.") collect query))) (defun biome-multi-exec () + "Process the query made by `biome-multi-query'." (interactive) (when (seq-empty-p biome-multi-query-current) (user-error "No queries to execute")) @@ -124,6 +129,11 @@ This is a list of forms as defined by `biome-query-current'.") (transient-setup 'biome-multi-query)) (defun biome-multi--unique-names-grouped (names-by-group group-names) + "Make names unique in accordance with GROUP-NAMES. + +NAMES-BY-GROUP is a list of lists of names. GROUP-NAMES is a list +of group names. The function returns a hash table mapping +original names to unique names." (let ((name-occurences (make-hash-table :test #'equal)) (names-mapping (make-hash-table :test #'equal))) (cl-loop for names in names-by-group @@ -146,6 +156,10 @@ This is a list of forms as defined by `biome-query-current'.") names-mapping)) (defun biome-multi--unique-names (names) + "Make NAMES unique. + +NAMES is a list of strings. The return value is a list of +strings as well." (let ((name-occurences (make-hash-table :test #'equal)) (added-occurences (make-hash-table :test #'equal))) (cl-loop for name in names @@ -164,6 +178,17 @@ This is a list of forms as defined by `biome-query-current'.") added-occurences)))))) (defun biome-multi--join-results (queries query-names vars-mapping results) + "Join RESULTS of QUERIES by time. + +Time has be in a string format, comparable by `string-lessp'. + +QUERIES is a list of forms as defined by `biome-query-current'. +QUERY-NAMES is a list of query names, made unique. VARS-MAPPING is +the result of `biome-multi--unique-names-grouped' on the list of +variables. RESULTS is a list of responses from Open Meteo. + +This function returns the results field mimicking the one returned +by Open Meteo." (let ((times (make-hash-table :test #'equal)) (var-values-per-time (make-hash-table :test #'equal))) (cl-loop for result in results @@ -198,7 +223,11 @@ This is a list of forms as defined by `biome-query-current'.") (defun biome-multi--merge (queries results) "Merge QUERIES into one query. -QUERIES is a list of forms as defined by `biome-query-current'." +QUERIES is a list of forms as defined by `biome-query-current'. RESULTS +is a list of responses from Open Meteo. + +The function mimicks the response of Open Meteo, but only insofar +as it is necessary for `biome-grid'." (let* ((vars-by-group (cl-loop for query in queries for group = (alist-get :group query) diff --git a/biome.el b/biome.el index ae6d5ea..2958ccb 100644 --- a/biome.el +++ b/biome.el @@ -75,7 +75,7 @@ API." (biome-query--section-open (alist-get :name biome-query-current))) (defun biome-multi () - "Run multiple queries to Open Meteo and join results." + "Run multiple queries to Open Meteo and join the results." (interactive) (biome-multi-query (lambda (query) From 0b0333c111fb63d1a4e81c8fc0a94804c9f840aa Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Thu, 4 Jan 2024 01:45:18 +0300 Subject: [PATCH 3/5] biome-multi: presets and lint errors --- biome-api.el | 2 +- biome-multi.el | 17 +++++++++++++++-- biome.el | 18 +++++++++++++++++- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/biome-api.el b/biome-api.el index 4766f54..31e7294 100644 --- a/biome-api.el +++ b/biome-api.el @@ -143,7 +143,7 @@ called with QUERIES and the data returned by the API as arguments." :params (biome-api--get-params query) :parser #'json-read :success (cl-function - (lambda (&key data &allow-other-keys) + (lambda (&allow-other-keys) ;; I'm not sure why, but `request-response-done-p' for ;; the current request returns nil. I don't ;; know how stable this is, so... diff --git a/biome-multi.el b/biome-multi.el index 8794436..22c19a6 100644 --- a/biome-multi.el +++ b/biome-multi.el @@ -65,7 +65,8 @@ This is a list of forms as defined by `biome-query-current'.") (defun biome-multi-add-query () "Add new query to `biome-multi'." (interactive) - (biome-query + (funcall-interactively + #'biome-query (lambda (query) (if (seq-empty-p biome-multi-query-current) (setq biome-multi-query-current (list (copy-tree query))) @@ -109,17 +110,29 @@ This is a list of forms as defined by `biome-query-current'.") (user-error "No queries to execute")) (funcall biome-multi--callback biome-multi-query-current)) +(defun biome-multi--generate-preset () + "Generate a preset for the current multi-query." + (interactive) + (let ((buf (generate-new-buffer "*biome-preset*"))) + (with-current-buffer buf + (emacs-lisp-mode) + (insert ";; Add this to your config\n") + (insert (pp-to-string `(biome-def-multi-preset ,(gensym "biome-query-preset-") + ,biome-multi-query-current)))) + (switch-to-buffer buf))) + (transient-define-prefix biome-multi-query (callback) ["Open Meteo Multi Query" (biome-multi--transient-report-infix)] ["Queries" :class transient-row - ("a" "Add query" biome-multi-add-query) + ("a" "Add query" biome-multi-add-query :transient transient--do-replace) ("e" "Edit query" biome-multi-edit :transient t) ("d" "Delete query" biome-multi-remove :transient t)] ["Actions" :class transient-row ("RET" "Run" biome-multi-exec) + ("P" "Generate preset definition" biome-multi--generate-preset) ("R" "Reset" biome-multi-reset :transient t) ("q" "Quit" transient-quit-one)] (interactive (list nil)) diff --git a/biome.el b/biome.el index 2958ccb..f1e2b9a 100644 --- a/biome.el +++ b/biome.el @@ -77,7 +77,9 @@ API." (defun biome-multi () "Run multiple queries to Open Meteo and join the results." (interactive) - (biome-multi-query + (funcall-interactively + #'biome-multi-query + biome-multi-query (lambda (query) (biome-api-get-multiple query @@ -102,5 +104,19 @@ PARAMS as query." (setq biome-query-current ',params) (biome-query--section-open (alist-get :name ',params)))) +(defmacro biome-def-multi-preset (name params) + "Declare a multi-query preset. + +NAME is the name of the target function. PARAMS is a form as defined +by `biome-multi-query-current'. + +This macro creates an interactive function that runs `biome-multi' with +PARAMS as query." + (declare (indent 1)) + `(defun ,name () + (interactive) + (setq biome-multi-query-current ',params) + (call-interactively #'biome-multi))) + (provide 'biome) ;;; biome.el ends here From 39a4b9e7fe3911a0b5ae27caae63b49507b836cb Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Thu, 4 Jan 2024 02:02:37 +0300 Subject: [PATCH 4/5] docs: add mutli-queries to README --- README.org | 31 +++++++++++++++++++++++++++++++ img/multi.png | Bin 0 -> 51870 bytes 2 files changed, 31 insertions(+) create mode 100644 img/multi.png diff --git a/README.org b/README.org index c713205..c399a4a 100644 --- a/README.org +++ b/README.org @@ -72,6 +72,37 @@ Table formatting can be configured with =biome-grid-format=; check the docstring biome-grid-format)) #+end_src +* Composite queries +The package also allows executing multiple queries at once to join their results. This can be useful for comparing weather in different locations or for viewing different reports about the same location. + +Run =M-x biome-multi= to invoke the-multi query dialog. + +[[./img/multi.png]] + +(/yes, I've switched to a light theme since the time of the previous screenshot/) + +Pressing =a= invokes the standard query dialog, where pressing =RET= returns to the root dialog, adding the query to the list. Pressing =RET= in the root dialog executes the queries in the list. + +Queries are executed concurrently. The results are shown if all queries have been successfully completed. + +=P= generates a preset defintion for the current query: +#+begin_src emacs-lisp +(biome-def-multi-preset biome-query-preset-601 + (((:name . "Air Quality") + (:group . "hourly") + (:params + ("hourly" "uv_index" "european_aqi") + ("longitude" . 24.93545) + ("latitude" . 60.16952))) + ((:name . "Weather Forecast") + (:group . "hourly") + (:params + ("hourly" "weathercode" "snowfall" "showers" "rain" "temperature_2m") + ("longitude" . 24.93545) + ("latitude" . 60.16952))))) +#+end_src +Just note that the macro is called =biome-def-multi-preset=. + * Implementation notes This isn't the most complicated thing I've done, but it's probably the most over-engineered one. diff --git a/img/multi.png b/img/multi.png new file mode 100644 index 0000000000000000000000000000000000000000..aa5ad80a3ee6d7b3ce5290be6f76346cd4c87c3e GIT binary patch literal 51870 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 CLxiya literal 0 HcmV?d00001 From 1af11fa1076900984b6dcc6d3de6eac19f01843a Mon Sep 17 00:00:00 2001 From: SqrtMinusOne Date: Thu, 4 Jan 2024 02:02:56 +0300 Subject: [PATCH 5/5] biome: fix typo --- biome.el | 1 - 1 file changed, 1 deletion(-) diff --git a/biome.el b/biome.el index f1e2b9a..f0af0ca 100644 --- a/biome.el +++ b/biome.el @@ -79,7 +79,6 @@ API." (interactive) (funcall-interactively #'biome-multi-query - biome-multi-query (lambda (query) (biome-api-get-multiple query