0.6.9
This commit is contained in:
@@ -16,6 +16,17 @@ _LOGGER = logging.getLogger(__name__)
|
||||
UA = "BahmcloudStore (Home Assistant)"
|
||||
|
||||
|
||||
def _github_headers(github_token: str | None = None) -> dict[str, str]:
|
||||
headers = {
|
||||
"Accept": "application/vnd.github+json",
|
||||
"User-Agent": UA,
|
||||
}
|
||||
token = (github_token or "").strip()
|
||||
if token:
|
||||
headers["Authorization"] = f"Bearer {token}"
|
||||
return headers
|
||||
|
||||
|
||||
@dataclass
|
||||
class RepoInfo:
|
||||
owner: str | None = None
|
||||
@@ -189,9 +200,11 @@ async def _github_latest_version_redirect(hass: HomeAssistant, owner: str, repo:
|
||||
return None, None
|
||||
|
||||
|
||||
async def _github_latest_version_api(hass: HomeAssistant, owner: str, repo: str) -> tuple[str | None, str | None]:
|
||||
async def _github_latest_version_api(
|
||||
hass: HomeAssistant, owner: str, repo: str, *, github_token: str | None = None
|
||||
) -> tuple[str | None, str | None]:
|
||||
session = async_get_clientsession(hass)
|
||||
headers = {"Accept": "application/vnd.github+json", "User-Agent": UA}
|
||||
headers = _github_headers(github_token)
|
||||
|
||||
data, status = await _safe_json(session, f"https://api.github.com/repos/{owner}/{repo}/releases/latest", headers=headers)
|
||||
if isinstance(data, dict) and data.get("tag_name"):
|
||||
@@ -217,12 +230,14 @@ async def _github_latest_version_api(hass: HomeAssistant, owner: str, repo: str)
|
||||
return None, None
|
||||
|
||||
|
||||
async def _github_latest_version(hass: HomeAssistant, owner: str, repo: str) -> tuple[str | None, str | None]:
|
||||
async def _github_latest_version(
|
||||
hass: HomeAssistant, owner: str, repo: str, *, github_token: str | None = None
|
||||
) -> tuple[str | None, str | None]:
|
||||
tag, src = await _github_latest_version_redirect(hass, owner, repo)
|
||||
if tag:
|
||||
return tag, src
|
||||
|
||||
tag, src = await _github_latest_version_api(hass, owner, repo)
|
||||
tag, src = await _github_latest_version_api(hass, owner, repo, github_token=github_token)
|
||||
if tag:
|
||||
return tag, src
|
||||
|
||||
@@ -316,7 +331,7 @@ async def _gitlab_latest_version(
|
||||
return None, None
|
||||
|
||||
|
||||
async def fetch_repo_info(hass: HomeAssistant, repo_url: str) -> RepoInfo:
|
||||
async def fetch_repo_info(hass: HomeAssistant, repo_url: str, *, github_token: str | None = None) -> RepoInfo:
|
||||
provider = detect_provider(repo_url)
|
||||
owner, repo = _split_owner_repo(repo_url)
|
||||
|
||||
@@ -337,7 +352,7 @@ async def fetch_repo_info(hass: HomeAssistant, repo_url: str) -> RepoInfo:
|
||||
|
||||
try:
|
||||
if provider == "github":
|
||||
headers = {"Accept": "application/vnd.github+json", "User-Agent": UA}
|
||||
headers = _github_headers(github_token)
|
||||
data, status = await _safe_json(session, f"https://api.github.com/repos/{owner}/{repo}", headers=headers)
|
||||
|
||||
if isinstance(data, dict):
|
||||
@@ -356,7 +371,7 @@ async def fetch_repo_info(hass: HomeAssistant, repo_url: str) -> RepoInfo:
|
||||
if desc:
|
||||
info.description = desc
|
||||
|
||||
ver, src = await _github_latest_version(hass, owner, repo)
|
||||
ver, src = await _github_latest_version(hass, owner, repo, github_token=github_token)
|
||||
info.latest_version = ver
|
||||
info.latest_version_source = src
|
||||
return info
|
||||
@@ -514,6 +529,7 @@ async def fetch_repo_versions(
|
||||
provider: str | None = None,
|
||||
default_branch: str | None = None,
|
||||
limit: int = 20,
|
||||
github_token: str | None = None,
|
||||
) -> list[dict[str, str]]:
|
||||
"""List available versions/refs for a repository.
|
||||
|
||||
@@ -560,7 +576,7 @@ async def fetch_repo_versions(
|
||||
try:
|
||||
if prov == "github":
|
||||
# Releases
|
||||
gh_headers = {"Accept": "application/vnd.github+json", "User-Agent": UA}
|
||||
gh_headers = _github_headers(github_token)
|
||||
data, _ = await _safe_json(
|
||||
session,
|
||||
f"https://api.github.com/repos/{owner}/{repo}/releases?per_page={int(limit)}",
|
||||
|
||||
Reference in New Issue
Block a user