From 5d9d6eec3159a9c87ca45dc5b294534daf8495fa Mon Sep 17 00:00:00 2001 From: Leon Sandøy Date: Fri, 19 Apr 2019 15:29:27 +0200 Subject: Addressing all comments in volcyy's second review. The tests now mock the API calls so we don't have to actually call the API every time we run tests. --- pydis_site/apps/home/models/__init__.py | 3 +++ pydis_site/apps/home/models/repo_data.py | 33 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 pydis_site/apps/home/models/__init__.py create mode 100644 pydis_site/apps/home/models/repo_data.py (limited to 'pydis_site/apps/home/models') diff --git a/pydis_site/apps/home/models/__init__.py b/pydis_site/apps/home/models/__init__.py new file mode 100644 index 00000000..f327795a --- /dev/null +++ b/pydis_site/apps/home/models/__init__.py @@ -0,0 +1,3 @@ +from .repo_data import RepositoryMetadata + +__all__ = ["RepositoryMetadata"] diff --git a/pydis_site/apps/home/models/repo_data.py b/pydis_site/apps/home/models/repo_data.py new file mode 100644 index 00000000..c975c904 --- /dev/null +++ b/pydis_site/apps/home/models/repo_data.py @@ -0,0 +1,33 @@ +from django.db import models +from django.utils import timezone + + +class RepositoryMetadata(models.Model): + """Information about one of our repos fetched from the GitHub API.""" + + last_updated = models.DateTimeField( + default=timezone.now, + help_text="The date and time this data was last fetched." + ) + repo_name = models.CharField( + primary_key=True, + max_length=40, + help_text="The full name of the repo, e.g. python-discord/site" + ) + description = models.CharField( + max_length=400, + help_text="The description of the repo." + ) + forks = models.IntegerField( + help_text="The number of forks of this repo" + ) + stargazers = models.IntegerField( + help_text="The number of stargazers for this repo" + ) + language = models.CharField( + max_length=20, + help_text="The primary programming language used for this repo." + ) + + def __str__(self): + return self.repo_name -- cgit v1.2.3 From 57056c9db8cdb14204702dbb18c5ff02344abe71 Mon Sep 17 00:00:00 2001 From: Leon Sandøy Date: Sat, 20 Apr 2019 00:56:18 +0200 Subject: Addressing volcyys third review. --- docker/app/migrate_and_serve.sh | 4 +-- pydis_site/apps/home/models/repo_data.py | 33 ---------------------- pydis_site/apps/home/models/repository_metadata.py | 33 ++++++++++++++++++++++ pydis_site/apps/home/views/home.py | 7 +++-- pydis_site/templates/home/index.html | 2 +- 5 files changed, 40 insertions(+), 39 deletions(-) delete mode 100644 pydis_site/apps/home/models/repo_data.py create mode 100644 pydis_site/apps/home/models/repository_metadata.py (limited to 'pydis_site/apps/home/models') diff --git a/docker/app/migrate_and_serve.sh b/docker/app/migrate_and_serve.sh index 7e60a796..42bf67a3 100755 --- a/docker/app/migrate_and_serve.sh +++ b/docker/app/migrate_and_serve.sh @@ -13,8 +13,8 @@ python manage.py migrate --verbosity 1 echo [i] Collecting static files. python manage.py collectstatic --no-input --clear --verbosity 0 -echo [i] Creating a superuser -echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin', 'admin') if not User.objects.filter(username='admin').exists() else print('Username already exists')" | python manage.py shell +echo [i] Creating a superuser. +echo "from django.contrib.auth import get_user_model; User = get_user_model(); User.objects.create_superuser('admin', 'admin', 'admin') if not User.objects.filter(username='admin').exists() else print('Admin user already exists')" | python manage.py shell echo [i] Starting server. python manage.py runserver 0.0.0.0:8000 diff --git a/pydis_site/apps/home/models/repo_data.py b/pydis_site/apps/home/models/repo_data.py deleted file mode 100644 index c975c904..00000000 --- a/pydis_site/apps/home/models/repo_data.py +++ /dev/null @@ -1,33 +0,0 @@ -from django.db import models -from django.utils import timezone - - -class RepositoryMetadata(models.Model): - """Information about one of our repos fetched from the GitHub API.""" - - last_updated = models.DateTimeField( - default=timezone.now, - help_text="The date and time this data was last fetched." - ) - repo_name = models.CharField( - primary_key=True, - max_length=40, - help_text="The full name of the repo, e.g. python-discord/site" - ) - description = models.CharField( - max_length=400, - help_text="The description of the repo." - ) - forks = models.IntegerField( - help_text="The number of forks of this repo" - ) - stargazers = models.IntegerField( - help_text="The number of stargazers for this repo" - ) - language = models.CharField( - max_length=20, - help_text="The primary programming language used for this repo." - ) - - def __str__(self): - return self.repo_name diff --git a/pydis_site/apps/home/models/repository_metadata.py b/pydis_site/apps/home/models/repository_metadata.py new file mode 100644 index 00000000..c975c904 --- /dev/null +++ b/pydis_site/apps/home/models/repository_metadata.py @@ -0,0 +1,33 @@ +from django.db import models +from django.utils import timezone + + +class RepositoryMetadata(models.Model): + """Information about one of our repos fetched from the GitHub API.""" + + last_updated = models.DateTimeField( + default=timezone.now, + help_text="The date and time this data was last fetched." + ) + repo_name = models.CharField( + primary_key=True, + max_length=40, + help_text="The full name of the repo, e.g. python-discord/site" + ) + description = models.CharField( + max_length=400, + help_text="The description of the repo." + ) + forks = models.IntegerField( + help_text="The number of forks of this repo" + ) + stargazers = models.IntegerField( + help_text="The number of stargazers for this repo" + ) + language = models.CharField( + max_length=20, + help_text="The primary programming language used for this repo." + ) + + def __str__(self): + return self.repo_name diff --git a/pydis_site/apps/home/views/home.py b/pydis_site/apps/home/views/home.py index c91d13e2..dbd65faf 100644 --- a/pydis_site/apps/home/views/home.py +++ b/pydis_site/apps/home/views/home.py @@ -7,9 +7,10 @@ from pydis_site.apps.home.models import RepositoryMetadata class HomeView(View): - """The view""" + """The main landing page for the website.""" github_api = "https://api.github.com/users/python-discord/repos" + repository_cache_ttl = 600 # Which of our GitHub repos should be displayed on the front page, and in which order? repos = [ @@ -51,8 +52,8 @@ class HomeView(View): try: repo_data = RepositoryMetadata.objects.get(repo_name="python-discord/site") - # If the data is older than 2 minutes, we should refresh it. - if (timezone.now() - repo_data.last_updated).seconds > 120: + # 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() diff --git a/pydis_site/templates/home/index.html b/pydis_site/templates/home/index.html index dfb74f96..205e92ff 100644 --- a/pydis_site/templates/home/index.html +++ b/pydis_site/templates/home/index.html @@ -52,7 +52,7 @@
- {# Display projects from settings.HOMEPAGE_REPOS #} + {# Display projects from HomeView.repos #} {% for repo in repo_data %}
-- cgit v1.2.3 From a27b3a313c64a264e0b52043f41fd28b684cc654 Mon Sep 17 00:00:00 2001 From: Leon Sandøy Date: Sat, 20 Apr 2019 01:16:13 +0200 Subject: Adding a Discord menu item to the hamburger, and upping test coverage back to 100% --- pydis_site/apps/home/models/__init__.py | 2 +- pydis_site/apps/home/tests/test_repodata_helpers.py | 15 ++++++++++++++- pydis_site/templates/base/navbar.html | 9 ++++++++- 3 files changed, 23 insertions(+), 3 deletions(-) (limited to 'pydis_site/apps/home/models') diff --git a/pydis_site/apps/home/models/__init__.py b/pydis_site/apps/home/models/__init__.py index f327795a..6c68df9c 100644 --- a/pydis_site/apps/home/models/__init__.py +++ b/pydis_site/apps/home/models/__init__.py @@ -1,3 +1,3 @@ -from .repo_data import RepositoryMetadata +from .repository_metadata import RepositoryMetadata __all__ = ["RepositoryMetadata"] diff --git a/pydis_site/apps/home/tests/test_repodata_helpers.py b/pydis_site/apps/home/tests/test_repodata_helpers.py index 8ab2a467..be51dce4 100644 --- a/pydis_site/apps/home/tests/test_repodata_helpers.py +++ b/pydis_site/apps/home/tests/test_repodata_helpers.py @@ -72,7 +72,7 @@ class TestRepositoryMetadataHelpers(TestCase): forks=42, stargazers=42, language="English", - last_updated=timezone.now() - timedelta(seconds=121), # Make the data 2 minutes old. + last_updated=timezone.now() - timedelta(seconds=HomeView.repository_cache_ttl + 1), ) repo_data.save() metadata = self.home_view._get_repo_data() @@ -90,3 +90,16 @@ class TestRepositoryMetadataHelpers(TestCase): self.assertEquals(len(api_data), len(self.home_view.repos)) self.assertIn(repo, api_data.keys()) self.assertIn("stargazers_count", api_data[repo]) + + @mock.patch('requests.get', side_effect=mocked_requests_get) + def test_mocked_requests_get(self, mock_get): + """Tests if our mocked_requests_get is returning what it should.""" + + success_data = mock_get(HomeView.github_api) + fail_data = mock_get("failtest") + + self.assertEqual(success_data.status_code, 200) + self.assertEqual(fail_data.status_code, 404) + + self.assertIsNotNone(success_data.json_data) + self.assertIsNone(fail_data.json_data) diff --git a/pydis_site/templates/base/navbar.html b/pydis_site/templates/base/navbar.html index ed6ae118..5e76b3a6 100644 --- a/pydis_site/templates/base/navbar.html +++ b/pydis_site/templates/base/navbar.html @@ -19,6 +19,13 @@ {# Content on the right side of the navbar #}