@@ -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