From 9e4c12f408e12c3d4d404933c8073d978d1d8eb4 Mon Sep 17 00:00:00 2001 From: Anthony Laibe Date: Mon, 20 Sep 2021 16:07:22 +0200 Subject: [PATCH] feat: gif retry query (#33) Retry up to 3 times the query to tenor --- status/gif.nim | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/status/gif.nim b/status/gif.nim index fe948fb..02a5811 100644 --- a/status/gif.nim +++ b/status/gif.nim @@ -3,9 +3,12 @@ import json import strformat import os import sequtils +import chronicles from statusgo_backend/gif import getRecentGifs, getFavoriteGifs, setFavoriteGifs, setRecentGifs +logScope: + topics = "gif" const MAX_RECENT = 50 # set via `nim c` param `-d:TENOR_API_KEY:[api_key]`; should be set in CI/release builds @@ -73,9 +76,24 @@ proc newGifClient*(): GifClient = result.favorites = @[] result.recents = @[] -proc tenorQuery(self: GifClient, path: string): seq[GifItem] = +proc getContentWithRetry(self: GifClient, path: string, maxRetry: int = 3): string = + var currentRetry = 0 + while true: + try: + let content = self.client.getContent(fmt("{baseUrl}{path}{defaultParams}")) + return content + except Exception as e: + currentRetry += 1 + error "could not query tenor API", msg=e.msg + + if currentRetry >= maxRetry: + raise + + sleep(100 * currentRetry) + +proc tenorQuery(self: GifClient, path: string): seq[GifItem] = try: - let content = self.client.getContent(fmt("{baseUrl}{path}{defaultParams}")) + let content = self.getContentWithRetry(path) let doc = content.parseJson() var items: seq[GifItem] = @[] @@ -84,7 +102,6 @@ proc tenorQuery(self: GifClient, path: string): seq[GifItem] = return items except: - echo getCurrentExceptionMsg() return @[] proc search*(self: GifClient, query: string): seq[GifItem] = @@ -146,6 +163,6 @@ proc addToRecents*(self: GifClient, gifItem: GifItem) = newRecents.add(recents[idx]) idx += 1 - + self.recents = newRecents setRecentGifs(%*{"items": map(newRecents, toJsonNode)}) \ No newline at end of file