Skip to content

Commit 8bf3213

Browse files
joaomariolagopatrickelectric
authored andcommitted
core: services: kraken: Allow fetch versions
* Allow fetch all versions from a given manifest and extension
1 parent 5721587 commit 8bf3213

File tree

1 file changed

+29
-14
lines changed

1 file changed

+29
-14
lines changed

core/services/kraken/manifest/manifest.py

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -247,17 +247,22 @@ async def order_sources(self, identifiers: List[str]) -> None:
247247
self._settings.manifests = ordered_manifests
248248
self._manager.save()
249249

250-
async def fetch_extension(self, identifier: str) -> Optional[RepositoryEntry]:
251-
# Only fetch enabled sources already sorted by priority
252-
manifest = await self.fetch_consolidated()
253-
return next((ext for ext in manifest if ext.identifier == identifier), None)
254-
255-
async def fetch_latest_extension_version(self, identifier: str, stable: bool) -> Optional[ExtensionVersion]:
256-
manifest = await self.fetch_consolidated()
257-
ext = next((ext for ext in manifest if ext.identifier == identifier), None)
258-
250+
async def fetch_extension(self, extension_id: str, manifest_id: Optional[str] = None) -> Optional[RepositoryEntry]:
251+
manifest = []
252+
if manifest_id is None:
253+
# Only fetch enabled sources already sorted by priority
254+
manifest = await self.fetch_consolidated()
255+
else:
256+
manifest = (await self.fetch_by_identifier(manifest_id, fetch_data=True)).data or []
257+
258+
return next((ext for ext in manifest if ext.identifier == extension_id), None)
259+
260+
async def fetch_extension_versions(
261+
self, extension_id: str, stable: bool, manifest_id: Optional[str] = None
262+
) -> List[semver.VersionInfo]:
263+
ext = await self.fetch_extension(extension_id, manifest_id)
259264
if not ext or not ext.versions:
260-
return None
265+
return []
261266

262267
def valid_semver(string: str) -> Optional[semver.VersionInfo]:
263268
# We want to allow versions to be prefixed with a 'v'.
@@ -266,17 +271,27 @@ def valid_semver(string: str) -> Optional[semver.VersionInfo]:
266271
try:
267272
return semver.VersionInfo.parse(string)
268273
except ValueError:
269-
return None
274+
return []
270275

271276
versions: List[semver.VersionInfo] = sorted([valid_semver(tag) for tag in ext.versions], reverse=True)
272-
273277
if stable:
274278
versions = [v for v in versions if not v.prerelease and not v.patch]
275279

280+
return versions
281+
282+
async def fetch_latest_extension_version(
283+
self, extension_id: str, stable: bool, manifest_id: Optional[str] = None
284+
) -> Optional[ExtensionVersion]:
285+
ext = await self.fetch_extension(extension_id, manifest_id)
286+
if not ext or not ext.versions:
287+
return None
288+
289+
versions = await self.fetch_extension_versions(extension_id, stable, manifest_id)
290+
276291
return ext.versions.get(str(versions[0])) if versions else None
277292

278-
async def fetch_extension_version(self, identifier: str, tag: str) -> Optional[ExtensionVersion]:
279-
ext = await self.fetch_extension(identifier)
293+
async def fetch_extension_version(self, extension_id: str, tag: str) -> Optional[ExtensionVersion]:
294+
ext = await self.fetch_extension(extension_id)
280295
if not ext:
281296
return None
282297

0 commit comments

Comments
 (0)