浏览代码

Handle HTTP error 419

wip/coursier
父节点
当前提交
2bb8ca18d8
共有 1 个文件被更改,包括 16 次插入3 次删除
  1. +16
    -3
      update-poms.py

+ 16
- 3
update-poms.py 查看文件

@@ -31,6 +31,10 @@ done_lock = asyncio.Lock()
num_workers = 50 num_workers = 50




class TooManyRequestsException(Exception):
pass


class PackagePOM: class PackagePOM:
def __init__(self, package: 'Package', pom: str): def __init__(self, package: 'Package', pom: str):
logger.debug(f'{package}: Parsing POM') logger.debug(f'{package}: Parsing POM')
@@ -153,7 +157,7 @@ class Package:
return await response.text() return await response.text()
break break
elif response.status == 429: elif response.status == 429:
logger.error(f'{self}: HTTP error 429 (Too many requests). Retry after {response.headers["Retry-After"]}')
raise TooManyRequestsException()
else: else:
logger.error(f'{self}: HTTP error {response.status} from mirror {mirror}') logger.error(f'{self}: HTTP error {response.status} from mirror {mirror}')
else: else:
@@ -205,6 +209,8 @@ class Package:
logger.warning(f'{self}: No matching packages found') logger.warning(f'{self}: No matching packages found')


self._verified = False self._verified = False
elif response.status == 429:
raise TooManyRequestsException()
else: else:
self._verified = False self._verified = False
logger.error(f'{self}: HTTP error {response.status} downloading pom') logger.error(f'{self}: HTTP error {response.status} downloading pom')
@@ -270,8 +276,15 @@ async def download(package: Package, queue: asyncio.Queue) -> None:
async def worker(queue: asyncio.Queue) -> None: async def worker(queue: asyncio.Queue) -> None:
while True: while True:
package = await queue.get() package = await queue.get()
await download(package, queue)
await asyncio.sleep(random.random())

while True:
try:
await download(package, queue)
break
except TooManyRequestsException:
logger.debug('Too many requests. Delaying next attempt')
await asyncio.sleep(3*random.random())

queue.task_done() queue.task_done()






正在加载...
取消
保存