diff options
Diffstat (limited to 'pydis_site/apps/home/views/home.py')
-rw-r--r-- | pydis_site/apps/home/views/home.py | 51 |
1 files changed, 34 insertions, 17 deletions
diff --git a/pydis_site/apps/home/views/home.py b/pydis_site/apps/home/views/home.py index 63f25c15..4cf22594 100644 --- a/pydis_site/apps/home/views/home.py +++ b/pydis_site/apps/home/views/home.py @@ -1,3 +1,4 @@ +import datetime from typing import Dict, List import requests @@ -14,7 +15,7 @@ class HomeView(View): """The main landing page for the website.""" github_api = "https://api.github.com/users/python-discord/repos" - repository_cache_ttl = 600 + repository_cache_ttl = 3600 # Which of our GitHub repos should be displayed on the front page, and in which order? repos = [ @@ -45,6 +46,7 @@ class HomeView(View): "forks_count": repo["forks_count"], "stargazers_count": repo["stargazers_count"], } + return repo_dict def _get_repo_data(self) -> List[RepositoryMetadata]: @@ -56,8 +58,11 @@ class HomeView(View): # If the data is stale, we should refresh it. if (timezone.now() - repo_data.last_updated).seconds > self.repository_cache_ttl: - # Get new data from API - api_repositories = self._get_api_data() + # Try to get new data from the API. If it fails, return the cached data. + try: + api_repositories = self._get_api_data() + except TypeError: + return RepositoryMetadata.objects.all() database_repositories = [] # Update or create all RepoData objects in self.repos @@ -86,22 +91,34 @@ class HomeView(View): # If this is raised, the database has no repodata at all, we will create them all. except RepositoryMetadata.DoesNotExist: - - # Get new data from API - api_repositories = self._get_api_data() database_repositories = [] + try: + # Get new data from API + api_repositories = self._get_api_data() - # Create all the repodata records in the database. - for api_data in api_repositories.values(): - repo_data = RepositoryMetadata( - repo_name=api_data["full_name"], - description=api_data["description"], - forks=api_data["forks_count"], - stargazers=api_data["stargazers_count"], - language=api_data["language"], - ) - repo_data.save() - database_repositories.append(repo_data) + # Create all the repodata records in the database. + for api_data in api_repositories.values(): + repo_data = RepositoryMetadata( + repo_name=api_data["full_name"], + description=api_data["description"], + forks=api_data["forks_count"], + stargazers=api_data["stargazers_count"], + language=api_data["language"], + ) + repo_data.save() + database_repositories.append(repo_data) + except TypeError: + for repo_name in self.repos: + repo_data = RepositoryMetadata( + last_updated=timezone.now() - datetime.timedelta(minutes=50), + repo_name=repo_name, + description="Not available.", + forks=999, + stargazers=999, + language="Python", + ) + repo_data.save() + database_repositories.append(repo_data) return database_repositories |