fix(DLPilot): publish_gitea 请求自动重试(实例 TLS 间歇性 SSL EOF)
This commit is contained in:
@@ -23,6 +23,7 @@ import re
|
|||||||
import ssl
|
import ssl
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
import time
|
||||||
import urllib.error
|
import urllib.error
|
||||||
import urllib.request
|
import urllib.request
|
||||||
import uuid
|
import uuid
|
||||||
@@ -59,7 +60,10 @@ class Api:
|
|||||||
self.headers = {'Authorization': f'token {token}'}
|
self.headers = {'Authorization': f'token {token}'}
|
||||||
self.ctx = ssl._create_unverified_context() if insecure else None
|
self.ctx = ssl._create_unverified_context() if insecure else None
|
||||||
|
|
||||||
def request(self, method, path, data=None, headers=None):
|
def request(self, method, path, data=None, headers=None, retries=4):
|
||||||
|
"""发请求; 实例 TLS 间歇性抽风(SSL UNEXPECTED_EOF), 连接级错误自动重试"""
|
||||||
|
last = None
|
||||||
|
for attempt in range(retries):
|
||||||
req = urllib.request.Request(self.api + path, data=data, method=method,
|
req = urllib.request.Request(self.api + path, data=data, method=method,
|
||||||
headers={**self.headers, **(headers or {})})
|
headers={**self.headers, **(headers or {})})
|
||||||
try:
|
try:
|
||||||
@@ -68,6 +72,10 @@ class Api:
|
|||||||
return resp.status, json.loads(body) if body else None
|
return resp.status, json.loads(body) if body else None
|
||||||
except urllib.error.HTTPError as e:
|
except urllib.error.HTTPError as e:
|
||||||
return e.code, json.loads(e.read() or b'{}')
|
return e.code, json.loads(e.read() or b'{}')
|
||||||
|
except (urllib.error.URLError, ssl.SSLError, OSError) as e:
|
||||||
|
last = e
|
||||||
|
time.sleep(1.0 + attempt)
|
||||||
|
raise RuntimeError(f'Gitea 请求连续 {retries} 次失败: {last}')
|
||||||
|
|
||||||
def get_json(self, path):
|
def get_json(self, path):
|
||||||
status, data = self.request('GET', path)
|
status, data = self.request('GET', path)
|
||||||
|
|||||||
Reference in New Issue
Block a user