mirror of
https://github.com/revanced/revanced-releases-api.git
synced 2025-04-30 06:24:27 +02:00
Merge pull request #39 from mirgb/dev
refactor: __get_release() and get_latest_releases() functions
This commit is contained in:
commit
88b767f9ae
@ -15,13 +15,14 @@ class Releases:
|
|||||||
httpx_client = HTTPXClient.create()
|
httpx_client = HTTPXClient.create()
|
||||||
|
|
||||||
async def __get_release(self, repository: str) -> list:
|
async def __get_release(self, repository: str) -> list:
|
||||||
# Get assets from latest release in a given repository.
|
"""Get assets from latest release in a given repository.
|
||||||
#
|
|
||||||
# Args:
|
Args:
|
||||||
# repository (str): Github's standard username/repository notation
|
repository (str): Github's standard username/repository notation
|
||||||
#
|
|
||||||
# Returns:
|
Returns:
|
||||||
# dict: dictionary of filename and download url
|
dict: dictionary of filename and download url
|
||||||
|
"""
|
||||||
|
|
||||||
assets: list = []
|
assets: list = []
|
||||||
response = await self.httpx_client.get(f"https://api.github.com/repos/{repository}/releases/latest")
|
response = await self.httpx_client.get(f"https://api.github.com/repos/{repository}/releases/latest")
|
||||||
@ -32,24 +33,27 @@ class Releases:
|
|||||||
release_tarball: str = response.json()['tarball_url']
|
release_tarball: str = response.json()['tarball_url']
|
||||||
release_timestamp: str = response.json()['published_at']
|
release_timestamp: str = response.json()['published_at']
|
||||||
|
|
||||||
if release_assets:
|
async def get_asset_data(asset: dict) -> dict:
|
||||||
for asset in release_assets:
|
return {'repository': repository,
|
||||||
assets.append({ 'repository': repository,
|
'version': release_version,
|
||||||
'version': release_version,
|
'timestamp': asset['updated_at'],
|
||||||
'timestamp': asset['updated_at'],
|
'name': asset['name'],
|
||||||
'name': asset['name'],
|
'size': asset['size'],
|
||||||
'size': asset['size'],
|
'browser_download_url': asset['browser_download_url'],
|
||||||
'browser_download_url': asset['browser_download_url'],
|
'content_type': asset['content_type']
|
||||||
'content_type': asset['content_type']
|
}
|
||||||
})
|
|
||||||
else:
|
no_release_assets_data: dict = {'repository': repository,
|
||||||
assets.append({ 'repository': repository,
|
'version': release_version,
|
||||||
'version': release_version,
|
'timestamp': release_timestamp,
|
||||||
'timestamp': release_timestamp,
|
'name': f"{repository.split('/')[1]}-{release_version}.tar.gz",
|
||||||
'name': f"{repository.split('/')[1]}-{release_version}.tar.gz",
|
'browser_download_url': release_tarball,
|
||||||
'browser_download_url': release_tarball,
|
'content_type': 'application/gzip'
|
||||||
'content_type': 'application/gzip'
|
}
|
||||||
})
|
|
||||||
|
assets = [map(get_asset_data, release_assets)
|
||||||
|
if release_assets else no_release_assets_data]
|
||||||
|
|
||||||
return assets
|
return assets
|
||||||
|
|
||||||
async def get_latest_releases(self, repositories: list) -> dict:
|
async def get_latest_releases(self, repositories: list) -> dict:
|
||||||
@ -67,21 +71,20 @@ class Releases:
|
|||||||
|
|
||||||
results: list = await asyncio.gather(*[self.__get_release(repository) for repository in repositories])
|
results: list = await asyncio.gather(*[self.__get_release(repository) for repository in repositories])
|
||||||
|
|
||||||
for result in results:
|
releases['tools'] = [asset for result in results for asset in result]
|
||||||
for asset in result:
|
|
||||||
releases['tools'].append(asset)
|
|
||||||
|
|
||||||
return releases
|
return releases
|
||||||
|
|
||||||
async def __get_patches_json(self) -> dict:
|
async def __get_patches_json(self) -> dict:
|
||||||
# Get revanced-patches repository's README.md.
|
"""Get revanced-patches repository's README.md.
|
||||||
#
|
|
||||||
# Returns:
|
Returns:
|
||||||
# dict: JSON content
|
dict: JSON content
|
||||||
#
|
"""
|
||||||
|
|
||||||
response = await self.httpx_client.get(f"https://api.github.com/repos/revanced/revanced-patches/contents/patches.json")
|
response = await self.httpx_client.get(f"https://api.github.com/repos/revanced/revanced-patches/contents/patches.json")
|
||||||
content = orjson.loads(b64decode(response.json()['content']).decode('utf-8'))
|
content = orjson.loads(
|
||||||
|
b64decode(response.json()['content']).decode('utf-8'))
|
||||||
|
|
||||||
return content
|
return content
|
||||||
|
|
||||||
@ -91,26 +94,29 @@ class Releases:
|
|||||||
Returns:
|
Returns:
|
||||||
dict: Patches available for a given app
|
dict: Patches available for a given app
|
||||||
"""
|
"""
|
||||||
|
|
||||||
patches: dict = await self.__get_patches_json()
|
patches: dict = await self.__get_patches_json()
|
||||||
|
|
||||||
return patches
|
return patches
|
||||||
|
|
||||||
async def __get_contributors(self, repository: str) -> list:
|
async def __get_contributors(self, repository: str) -> list:
|
||||||
# Get contributors from a given repository.
|
"""Get contributors from a given repository.
|
||||||
#
|
|
||||||
# Args:
|
Args:
|
||||||
# repository (str): Github's standard username/repository notation
|
repository (str): Github's standard username/repository notation
|
||||||
#
|
|
||||||
# Returns:
|
Returns:
|
||||||
# list: a list of dictionaries containing the repository's contributors
|
list: a list of dictionaries containing the repository's contributors
|
||||||
|
"""
|
||||||
|
|
||||||
keep: set = {'login', 'avatar_url', 'html_url'}
|
keep: set = {'login', 'avatar_url', 'html_url'}
|
||||||
|
|
||||||
response = await self.httpx_client.get(f"https://api.github.com/repos/{repository}/contributors")
|
response = await self.httpx_client.get(f"https://api.github.com/repos/{repository}/contributors")
|
||||||
|
|
||||||
|
# Looping over each contributor, filtering each contributor so that
|
||||||
|
# keyfilter() returns a dictionary with only the key-value pairs that are in the "keep" set.
|
||||||
contributors: list = [keyfilter(lambda k: k in keep, contributor) for contributor in response.json()]
|
contributors: list = [keyfilter(lambda k: k in keep, contributor) for contributor in response.json()]
|
||||||
|
|
||||||
|
|
||||||
return contributors
|
return contributors
|
||||||
|
|
||||||
async def get_contributors(self, repositories: list) -> dict:
|
async def get_contributors(self, repositories: list) -> dict:
|
||||||
@ -128,12 +134,13 @@ class Releases:
|
|||||||
contributors = {}
|
contributors = {}
|
||||||
contributors['repositories'] = []
|
contributors['repositories'] = []
|
||||||
|
|
||||||
revanced_repositories = [repository for repository in repositories if 'revanced' in repository]
|
revanced_repositories = [
|
||||||
|
repository for repository in repositories if 'revanced' in repository]
|
||||||
|
|
||||||
results: list[dict] = await asyncio.gather(*[self.__get_contributors(repository) for repository in revanced_repositories])
|
results: list[dict] = await asyncio.gather(*[self.__get_contributors(repository) for repository in revanced_repositories])
|
||||||
|
|
||||||
for key, value in zip(revanced_repositories, results):
|
for key, value in zip(revanced_repositories, results):
|
||||||
data = { 'name': key, 'contributors': value }
|
data = {'name': key, 'contributors': value}
|
||||||
contributors['repositories'].append(data)
|
contributors['repositories'].append(data)
|
||||||
|
|
||||||
return contributors
|
return contributors
|
||||||
@ -163,7 +170,7 @@ class Releases:
|
|||||||
if org == 'revanced' or org == 'vancedapp':
|
if org == 'revanced' or org == 'vancedapp':
|
||||||
_releases = await self.httpx_client.get(
|
_releases = await self.httpx_client.get(
|
||||||
f"https://api.github.com/repos/{org}/{repository}/releases?per_page=2"
|
f"https://api.github.com/repos/{org}/{repository}/releases?per_page=2"
|
||||||
)
|
)
|
||||||
|
|
||||||
releases = _releases.json()
|
releases = _releases.json()
|
||||||
|
|
||||||
@ -172,7 +179,7 @@ class Releases:
|
|||||||
|
|
||||||
_response = await self.httpx_client.get(
|
_response = await self.httpx_client.get(
|
||||||
f"https://api.github.com/repos/{org}/{repository}/commits?path={path}&since={since}&until={until}"
|
f"https://api.github.com/repos/{org}/{repository}/commits?path={path}&since={since}&until={until}"
|
||||||
)
|
)
|
||||||
|
|
||||||
response = _response.json()
|
response = _response.json()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user