Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import logging
import requests
from typing import List
from ..entry import Entry
from .project_fetcher import ProjectFetcher
logger = logging.getLogger(__name__)
class GithubFetcher(ProjectFetcher):
def __init__(self, feed_id: int, name: str, repository: str):
super().__init__(feed_id, name)
self.repository = repository
def _get_releases_url(self) -> str:
return f"https://api.github.com/repos/{self.repository}/releases"
def fetch_entries(self) -> List[Entry]:
req = requests.get(self._get_releases_url())
if req.status_code != requests.codes.ok:
logger.error(
"Failed to get %s at %s, server returned %s.",
self.name,
self.repository,
req.status_code,
)
return []
entries: List[Entry] = []
try:
for remote_entry in req.json():
tag_id = remote_entry["id"]
tag_name = remote_entry["tag_name"]
url = remote_entry["html_url"]
entries.append(Entry(self.feed_id, tag_id, self.name, tag_name, url))
except requests.exceptions.JSONDecodeError as err:
logger.error(
"Failed to parse entries of project %s: %s", self.name, str(err)
)
return entries