diff options
Diffstat (limited to '')
| -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 | 
