[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/repology e1cc934c92 1/2: repology-utils: Add delay betw
|
From: |
Nicolas Goaziou |
|
Subject: |
[elpa] externals/repology e1cc934c92 1/2: repology-utils: Add delay between queries |
|
Date: |
Mon, 8 Jan 2024 09:10:33 -0500 (EST) |
branch: externals/repology
commit e1cc934c926d01b57e0cbaeae9f39bddb1cfcad9
Author: Nicolas Goaziou <mail@nicolasgoaziou.fr>
Commit: Nicolas Goaziou <mail@nicolasgoaziou.fr>
repology-utils: Add delay between queries
* repology-utils.el (repology-request-delay):
(repology--last-request-time): New variables.
(repology-request): Wait for at least `repology-request-delay' before
sending a new request, per API's terms of use.
---
repology-utils.el | 17 +++++++++++++++++
1 file changed, 17 insertions(+)
diff --git a/repology-utils.el b/repology-utils.el
index 0d47364c1d..3e4e618af8 100644
--- a/repology-utils.el
+++ b/repology-utils.el
@@ -43,6 +43,11 @@
"incorrect" "untrusted" "ignored")
"List of known status values.")
+(defconst repology-request-delay 1.0
+ "Number of seconds between two requests to Repology API.
+The value is defined according to its terms of use. See URL
+`https://repology.org/api'.")
+
;;; Packages
(defun repology-package-p (object)
@@ -324,6 +329,10 @@ Raise an error if REPOSITORY is unknown to Repology."
;;; Requests
+(defvar repology--last-request-time nil
+ "Time for last request to the Repology API, or nil.
+It is updated each time `repology-request' is called.")
+
(defun repology-request (url &optional extra-headers)
"Perform a raw HTTP request on URL.
@@ -335,6 +344,14 @@ Return a property list with `:code', `:reason', `:header'
and
a string explaining the issue."
(let* ((url-request-method "GET")
(url-request-extra-headers extra-headers))
+ ;; Make sure to wait at least for `repology-request-delay' seconds
+ ;; between queries.
+ (when (and repology--last-request-time
+ (< (float-time (time-subtract (current-time)
+ repology--last-request-time))
+ repology-request-delay))
+ (sleep-for repology-request-delay))
+ (setq repology--last-request-time (current-time))
(pcase (condition-case err
(url-retrieve-synchronously url t)
(error (error-message-string err)))