@@ -8,6 +8,7 @@ export CfApiError
8
8
9
9
const
10
10
chunkSize = 10 # # how many ids a request should be chunked to.
11
+ retries = 10 # # how often batch requests are retried until they succeed
11
12
12
13
proc sortTo [T, X](s: seq [T], x: seq [X], pred: proc (x: T): X): seq [T] =
13
14
# # sort `s` so that the order of its items matches `x`.
@@ -112,7 +113,7 @@ proc fetchAddonFiles*(projectId: int): Future[seq[CfAddonFile]] {.async.} =
112
113
cfcache.putAddonFiles (data)
113
114
return data
114
115
115
- proc fetchAddonFilesChunks (fileIds: seq [int ], fallback = true ): Future [seq [CfAddonFile ]] {.async .} =
116
+ proc fetchAddonFilesChunks (fileIds: seq [int ], tries = 1 ): Future [seq [CfAddonFile ]] {.async .} =
116
117
# # get all addons with their given `fileIds`.
117
118
if fileIds.len == 0 :
118
119
return @ []
@@ -122,8 +123,8 @@ proc fetchAddonFilesChunks(fileIds: seq[int], fallback = true): Future[seq[CfAdd
122
123
return data
123
124
except CfApiError as e:
124
125
# fallback to looking up the ids individually
125
- if fallback :
126
- return all (fileIds.map ((x) => fetchAddonFilesChunks (@ [x], fallback = true ))).await.flatten ()
126
+ if tries < retries :
127
+ return all (fileIds.map ((x) => fetchAddonFilesChunks (@ [x], tries = tries + 1 ))).await.flatten ()
127
128
raise newException (CfApiError , e.msg)
128
129
129
130
proc fetchAddonFiles * (fileIds: seq [int ], chunk = true ): Future [seq [CfAddonFile ]] {.async .} =
@@ -154,7 +155,7 @@ proc fetchAddonFiles*(fileIds: seq[int], chunk = true): Future[seq[CfAddonFile]]
154
155
if fileIds.len != result .len:
155
156
let currentIds = result .map ((x) => x.fileId)
156
157
let missingIds = fileIds.filter ((x) => x notin currentIds)
157
- result = result .concat (all (missingIds.map ((x) => fetchAddonFilesChunks (@ [x], fallback = false ))).await.flatten ())
158
+ result = result .concat (all (missingIds.map ((x) => fetchAddonFilesChunks (@ [x]))).await.flatten ())
158
159
# sort so the output is deterministic
159
160
result = result .sortTo (fileIds, (x) => x.fileId)
160
161
0 commit comments