Cache the main github api instances
this leads to a shared session, and a bit fewer requests
This commit is contained in:
parent
099438dc3f
commit
133ce88284
19
autobuild.py
19
autobuild.py
@ -28,6 +28,7 @@ import tempfile
|
|||||||
import shutil
|
import shutil
|
||||||
import json
|
import json
|
||||||
import io
|
import io
|
||||||
|
from functools import cache
|
||||||
from datetime import datetime, timezone
|
from datetime import datetime, timezone
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
from hashlib import sha256
|
from hashlib import sha256
|
||||||
@ -109,6 +110,7 @@ REQUESTS_TIMEOUT = (15, 30)
|
|||||||
REQUESTS_RETRY = Retry(total=3, backoff_factor=1)
|
REQUESTS_RETRY = Retry(total=3, backoff_factor=1)
|
||||||
|
|
||||||
|
|
||||||
|
@cache
|
||||||
def get_requests_session() -> requests.Session:
|
def get_requests_session() -> requests.Session:
|
||||||
adapter = HTTPAdapter(max_retries=REQUESTS_RETRY)
|
adapter = HTTPAdapter(max_retries=REQUESTS_RETRY)
|
||||||
http = requests.Session()
|
http = requests.Session()
|
||||||
@ -117,9 +119,6 @@ def get_requests_session() -> requests.Session:
|
|||||||
return http
|
return http
|
||||||
|
|
||||||
|
|
||||||
REQUESTS_SESSION = get_requests_session()
|
|
||||||
|
|
||||||
|
|
||||||
class PackageStatus(Enum):
|
class PackageStatus(Enum):
|
||||||
FINISHED = 'finished'
|
FINISHED = 'finished'
|
||||||
FINISHED_BUT_BLOCKED = 'finished-but-blocked'
|
FINISHED_BUT_BLOCKED = 'finished-but-blocked'
|
||||||
@ -328,7 +327,8 @@ def get_asset_mtime_ns(asset: GitReleaseAsset) -> int:
|
|||||||
|
|
||||||
def download_asset(asset: GitReleaseAsset, target_path: str) -> None:
|
def download_asset(asset: GitReleaseAsset, target_path: str) -> None:
|
||||||
assert asset_is_complete(asset)
|
assert asset_is_complete(asset)
|
||||||
with REQUESTS_SESSION.get(asset.browser_download_url, stream=True, timeout=REQUESTS_TIMEOUT) as r:
|
session = get_requests_session()
|
||||||
|
with session.get(asset.browser_download_url, stream=True, timeout=REQUESTS_TIMEOUT) as r:
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
fd, temppath = tempfile.mkstemp()
|
fd, temppath = tempfile.mkstemp()
|
||||||
try:
|
try:
|
||||||
@ -348,7 +348,8 @@ def download_asset(asset: GitReleaseAsset, target_path: str) -> None:
|
|||||||
|
|
||||||
def download_text_asset(asset: GitReleaseAsset) -> str:
|
def download_text_asset(asset: GitReleaseAsset) -> str:
|
||||||
assert asset_is_complete(asset)
|
assert asset_is_complete(asset)
|
||||||
with REQUESTS_SESSION.get(asset.browser_download_url, timeout=REQUESTS_TIMEOUT) as r:
|
session = get_requests_session()
|
||||||
|
with session.get(asset.browser_download_url, timeout=REQUESTS_TIMEOUT) as r:
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
return r.text
|
return r.text
|
||||||
|
|
||||||
@ -654,7 +655,8 @@ def run_build(args: Any) -> None:
|
|||||||
|
|
||||||
def get_buildqueue() -> List[Package]:
|
def get_buildqueue() -> List[Package]:
|
||||||
pkgs = []
|
pkgs = []
|
||||||
r = REQUESTS_SESSION.get("https://packages.msys2.org/api/buildqueue2", timeout=REQUESTS_TIMEOUT)
|
session = get_requests_session()
|
||||||
|
r = session.get("https://packages.msys2.org/api/buildqueue2", timeout=REQUESTS_TIMEOUT)
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
|
|
||||||
for received in r.json():
|
for received in r.json():
|
||||||
@ -1157,7 +1159,8 @@ def write_build_plan(args: Any) -> None:
|
|||||||
|
|
||||||
|
|
||||||
def queue_website_update() -> None:
|
def queue_website_update() -> None:
|
||||||
r = REQUESTS_SESSION.post('https://packages.msys2.org/api/trigger_update', timeout=REQUESTS_TIMEOUT)
|
session = get_requests_session()
|
||||||
|
r = session.post('https://packages.msys2.org/api/trigger_update', timeout=REQUESTS_TIMEOUT)
|
||||||
try:
|
try:
|
||||||
# it's not worth stopping the build if this fails, so just log it
|
# it's not worth stopping the build if this fails, so just log it
|
||||||
r.raise_for_status()
|
r.raise_for_status()
|
||||||
@ -1535,6 +1538,7 @@ def get_credentials(readonly: bool = True) -> Dict[str, Any]:
|
|||||||
raise Exception("'GITHUB_TOKEN' env var not set")
|
raise Exception("'GITHUB_TOKEN' env var not set")
|
||||||
|
|
||||||
|
|
||||||
|
@cache
|
||||||
def get_github(readonly: bool = True) -> Github:
|
def get_github(readonly: bool = True) -> Github:
|
||||||
kwargs = get_credentials(readonly=readonly)
|
kwargs = get_credentials(readonly=readonly)
|
||||||
has_creds = bool(kwargs)
|
has_creds = bool(kwargs)
|
||||||
@ -1548,6 +1552,7 @@ def get_github(readonly: bool = True) -> Github:
|
|||||||
return gh
|
return gh
|
||||||
|
|
||||||
|
|
||||||
|
@cache
|
||||||
def get_main_repo(readonly: bool = True) -> Repository:
|
def get_main_repo(readonly: bool = True) -> Repository:
|
||||||
gh = get_github(readonly=readonly)
|
gh = get_github(readonly=readonly)
|
||||||
return gh.get_repo(Config.MAIN_REPO, lazy=True)
|
return gh.get_repo(Config.MAIN_REPO, lazy=True)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user