Optimize/cache some things for /outofdate

This commit is contained in:
Christoph Reiter 2025-06-28 21:58:05 +02:00
parent ab422966a2
commit 82775f74ab

View File

@ -8,9 +8,9 @@ import uuid
import time import time
from datetime import datetime, timezone from datetime import datetime, timezone
from enum import Enum from enum import Enum
from functools import cmp_to_key from functools import cmp_to_key, cached_property
from urllib.parse import quote_plus, quote from urllib.parse import quote_plus, quote
from typing import NamedTuple, Any from typing import NamedTuple, Any, Iterable
from collections.abc import Sequence from collections.abc import Sequence
from pydantic import BaseModel from pydantic import BaseModel
from dataclasses import dataclass from dataclasses import dataclass
@ -84,19 +84,20 @@ def get_repositories() -> list[Repository]:
return l return l
def get_realname_variants(s: Source) -> list[str]: def get_realname_variants(s: Source) -> Iterable[str]:
"""Returns a list of potential names used by external systems, highest priority first""" """Returns a generator of potential names used by external systems, highest priority first"""
main = [s.realname, s.realname.lower()] yield s.realname
yield s.realname.lower()
package_variants = [p.realname for p in s.packages.values()] package_variants = [p.realname for p in s.packages.values()]
yield from sorted(package_variants)
# fallback to the provide names # fallback to the provide names
provides_variants: list[str] = [] provides_variants: list[str] = []
for p in s.packages.values(): for p in s.packages.values():
provides_variants.extend(p.realprovides.keys()) provides_variants.extend(p.realprovides.keys())
yield from sorted(provides_variants)
return main + sorted(package_variants) + sorted(provides_variants)
def cleanup_files(files: list[str]) -> list[str]: def cleanup_files(files: list[str]) -> list[str]:
@ -337,7 +338,10 @@ class Package:
@property @property
def pkgextra(self) -> PkgExtraEntry: def pkgextra(self) -> PkgExtraEntry:
return state.pkgextra.packages.get(self.base, PkgExtraEntry()) packages = state.pkgextra.packages
if self.base in packages:
return packages[self.base]
return PkgExtraEntry()
@property @property
def urls(self) -> list[tuple[str, str]]: def urls(self) -> list[tuple[str, str]]:
@ -359,7 +363,7 @@ class Package:
urls.append(("PGP keys", extra.pgp_keys_url)) urls.append(("PGP keys", extra.pgp_keys_url))
return urls return urls
@property @cached_property
def realprovides(self) -> dict[str, set[str]]: def realprovides(self) -> dict[str, set[str]]:
prov = {} prov = {}
for key, infos in self.provides.items(): for key, infos in self.provides.items():
@ -368,7 +372,7 @@ class Package:
prov[key] = infos prov[key] = infos
return prov return prov
@property @cached_property
def realname(self) -> str: def realname(self) -> str:
if self.name.startswith(self.package_prefix): if self.name.startswith(self.package_prefix):
return strip_vcs(self.name[len(self.package_prefix):]) return strip_vcs(self.name[len(self.package_prefix):])
@ -565,7 +569,10 @@ class Source:
@property @property
def pkgextra(self) -> PkgExtraEntry: def pkgextra(self) -> PkgExtraEntry:
return state.pkgextra.packages.get(self.name, PkgExtraEntry()) packages = state.pkgextra.packages
if self.name in packages:
return packages[self.name]
return PkgExtraEntry()
@property @property
def urls(self) -> list[tuple[str, str]]: def urls(self) -> list[tuple[str, str]]:
@ -579,7 +586,7 @@ class Source:
ext = [] ext = []
for ext_id in state.ext_info_ids: for ext_id in state.ext_info_ids:
variants = [] variants: Iterable[str] = []
ext_key = ext_id.get_key_from_references(self.pkgextra.references) ext_key = ext_id.get_key_from_references(self.pkgextra.references)
if ext_key is not None: if ext_key is not None:
@ -630,7 +637,7 @@ class Source:
msys_version = extract_upstream_version(self.git_version) msys_version = extract_upstream_version(self.git_version)
return version_is_newer_than(self.upstream_version, msys_version) return version_is_newer_than(self.upstream_version, msys_version)
@property @cached_property
def realname(self) -> str: def realname(self) -> str:
if self.name.startswith(self._package.base_prefix): if self.name.startswith(self._package.base_prefix):
return strip_vcs(self.name[len(self._package.base_prefix):]) return strip_vcs(self.name[len(self._package.base_prefix):])