Skip to content

Commit

Permalink
Fix PR and Issues rate limit exceed bug (#51)
Browse files Browse the repository at this point in the history
  • Loading branch information
R055A committed Oct 24, 2023
1 parent 2ced806 commit 8ddffd0
Show file tree
Hide file tree
Showing 4 changed files with 70 additions and 16 deletions.
6 changes: 4 additions & 2 deletions src/db/db.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,7 @@
"count": "0",
"to": "0000-00-00",
"from": "0000-00-00"
}
}
},
"pull_requests": "0",
"issues": "0"
}
14 changes: 12 additions & 2 deletions src/db/db.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ def __init__(self):
self.views = int(self.__db["views"]["count"])
self.views_from_date = self.__db["views"]["from"]
self.views_to_date = self.__db["views"]["to"]
self.pull_requests = int(self.__db["pull_requests"]["count"])
self.issues = int(self.__db["issues"]["count"])

def __update_db(self) -> None:
try:
Expand All @@ -34,8 +36,8 @@ def __update_db(self) -> None:
with open("../src/db/db.json", "w") as db:
db.write(dumps(self.__db, indent=2))

def set_views_count(self, count: any) -> None:
self.views = int(count)
def set_views_count(self, views_count: any) -> None:
self.views = int(views_count)
self.__db["views"]["count"] = str(self.views)
self.__update_db()

Expand All @@ -48,3 +50,11 @@ def set_views_to_date(self, date: str) -> None:
self.views_to_date = date
self.__db["views"]["to"] = self.views_to_date
self.__update_db()

def set_pull_requests(self, pull_requests_count: int) -> None:
self.__db["pull_requests"]["count"] = str(pull_requests_count)
self.__update_db()

def set_issues(self, issues_count: int) -> None:
self.__db["issues"]["count"] = str(issues_count)
self.__update_db()
9 changes: 9 additions & 0 deletions src/env_vars.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,9 @@ def __init__(
else:
self.more_collab_repos = {x.strip() for x in more_collab_repos.split(",")}

self.pull_requests_count = self.__db.pull_requests
self.issues_count = self.__db.issues

def set_views(self, views: any) -> None:
self.repo_views += int(views)
environ["REPO_VIEWS"] = str(self.repo_views)
Expand All @@ -167,3 +170,9 @@ def set_first_viewed(self, new_first_viewed_date: str) -> None:
self.repo_first_viewed = new_first_viewed_date
environ["FIRST_VIEWED"] = self.repo_first_viewed
self.__db.set_views_from_date(self.repo_first_viewed)

def set_pull_requests(self, pull_requests_count: int) -> None:
self.__db.pull_requests = pull_requests_count

def set_issues(self, issues_count: int) -> None:
self.__db.issues = issues_count
57 changes: 45 additions & 12 deletions src/github_repo_stats.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ def __init__(self, environment_vars: EnvironmentVariables, session: ClientSessio
self._issues: Optional[int] = None
self._empty_repos: Optional[Set[str]] = None
self._collab_repos: Optional[Set[str]] = None
self._is_fetch_rate_limit_exceeded: Optional[bool] = False

async def to_str(self) -> str:
"""
Expand Down Expand Up @@ -617,12 +618,28 @@ async def pull_requests(self) -> int:

pull_requests = set()

for repo in await self.repos:
end_point = f"/repos/{repo}/pulls?state=all&involved={self.environment_vars.username}"
for pr_data in await self.queries.query_rest(end_point):
pull_requests.add(pr_data["url"]) if "url" in pr_data.keys() else None

self._pull_requests = len(pull_requests)
if not self._is_fetch_rate_limit_exceeded:
for repo in await self.repos:
end_point = f"/repos/{repo}/pulls?state=all&involved={self.environment_vars.username}"

for pr_data in await self.queries.query_rest(end_point):
try:
pull_requests.add(
pr_data["url"]
) if "url" in pr_data.keys() else None
except AttributeError:
self._is_fetch_rate_limit_exceeded = True
break

if self._is_fetch_rate_limit_exceeded:
break

self._pull_requests = (
len(pull_requests)
if len(pull_requests) > self.environment_vars.pull_requests_count
else self.environment_vars.pull_requests_count
)
self.environment_vars.set_pull_requests(self._pull_requests)
return self._pull_requests

@property
Expand All @@ -635,10 +652,26 @@ async def issues(self) -> int:

issues = set()

for repo in await self.repos:
end_point = f"/repos/{repo}/issues?state=all&involved={self.environment_vars.username}"
for issue_data in await self.queries.query_rest(end_point):
issues.add(issue_data["url"]) if "url" in issue_data.keys() else None

self._issues = len(issues)
if not self._is_fetch_rate_limit_exceeded:
for repo in await self.repos:
end_point = f"/repos/{repo}/issues?state=all&involved={self.environment_vars.username}"

for issue_data in await self.queries.query_rest(end_point):
try:
issues.add(
issue_data["url"]
) if "url" in issue_data.keys() else None
except AttributeError:
self._is_fetch_rate_limit_exceeded = True
break

if self._is_fetch_rate_limit_exceeded:
break

self._issues = (
len(issues)
if len(issues) > self.environment_vars.issues_count
else self.environment_vars.issues_count
)
self.environment_vars.set_issues(self._issues)
return self._issues

0 comments on commit 8ddffd0

Please sign in to comment.