aboutsummaryrefslogtreecommitdiffstats
path: root/pydis_site/apps
diff options
context:
space:
mode:
Diffstat (limited to 'pydis_site/apps')
-rw-r--r--pydis_site/apps/home/__init__.py (renamed from pydis_site/apps/main/__init__.py)0
-rw-r--r--pydis_site/apps/home/apps.py (renamed from pydis_site/apps/main/apps.py)0
-rw-r--r--pydis_site/apps/home/migrations/0001_initial.py (renamed from pydis_site/apps/main/migrations/0001_initial.py)0
-rw-r--r--pydis_site/apps/home/migrations/__init__.py (renamed from pydis_site/apps/main/migrations/__init__.py)0
-rw-r--r--pydis_site/apps/home/models/__init__.py (renamed from pydis_site/apps/main/models/__init__.py)0
-rw-r--r--pydis_site/apps/home/models/repo_data.py (renamed from pydis_site/apps/main/models/repo_data.py)0
-rw-r--r--pydis_site/apps/home/templatetags/__init__.py (renamed from pydis_site/apps/main/templatetags/__init__.py)0
-rw-r--r--pydis_site/apps/home/templatetags/extra_filters.py (renamed from pydis_site/apps/main/templatetags/extra_filters.py)0
-rw-r--r--pydis_site/apps/home/tests/__init__.py (renamed from pydis_site/apps/main/tests/__init__.py)0
-rw-r--r--pydis_site/apps/home/tests/mock_github_api_response.json44
-rw-r--r--pydis_site/apps/home/tests/test_repodata_helpers.py92
-rw-r--r--pydis_site/apps/home/tests/test_templatetags.py (renamed from pydis_site/apps/main/tests/test_templatetags.py)2
-rw-r--r--pydis_site/apps/home/tests/test_views.py (renamed from pydis_site/apps/main/tests/test_views.py)0
-rw-r--r--pydis_site/apps/home/urls.py (renamed from pydis_site/apps/main/urls.py)3
-rw-r--r--pydis_site/apps/home/views/__init__.py (renamed from pydis_site/apps/main/views/__init__.py)0
-rw-r--r--pydis_site/apps/home/views/home.py (renamed from pydis_site/apps/main/views/home.py)49
-rw-r--r--pydis_site/apps/main/tests/test_repodata_helpers.py66
17 files changed, 167 insertions, 89 deletions
diff --git a/pydis_site/apps/main/__init__.py b/pydis_site/apps/home/__init__.py
index e69de29b..e69de29b 100644
--- a/pydis_site/apps/main/__init__.py
+++ b/pydis_site/apps/home/__init__.py
diff --git a/pydis_site/apps/main/apps.py b/pydis_site/apps/home/apps.py
index 90dc7137..90dc7137 100644
--- a/pydis_site/apps/main/apps.py
+++ b/pydis_site/apps/home/apps.py
diff --git a/pydis_site/apps/main/migrations/0001_initial.py b/pydis_site/apps/home/migrations/0001_initial.py
index a2bf9f3e..a2bf9f3e 100644
--- a/pydis_site/apps/main/migrations/0001_initial.py
+++ b/pydis_site/apps/home/migrations/0001_initial.py
diff --git a/pydis_site/apps/main/migrations/__init__.py b/pydis_site/apps/home/migrations/__init__.py
index e69de29b..e69de29b 100644
--- a/pydis_site/apps/main/migrations/__init__.py
+++ b/pydis_site/apps/home/migrations/__init__.py
diff --git a/pydis_site/apps/main/models/__init__.py b/pydis_site/apps/home/models/__init__.py
index f327795a..f327795a 100644
--- a/pydis_site/apps/main/models/__init__.py
+++ b/pydis_site/apps/home/models/__init__.py
diff --git a/pydis_site/apps/main/models/repo_data.py b/pydis_site/apps/home/models/repo_data.py
index c975c904..c975c904 100644
--- a/pydis_site/apps/main/models/repo_data.py
+++ b/pydis_site/apps/home/models/repo_data.py
diff --git a/pydis_site/apps/main/templatetags/__init__.py b/pydis_site/apps/home/templatetags/__init__.py
index 70aca169..70aca169 100644
--- a/pydis_site/apps/main/templatetags/__init__.py
+++ b/pydis_site/apps/home/templatetags/__init__.py
diff --git a/pydis_site/apps/main/templatetags/extra_filters.py b/pydis_site/apps/home/templatetags/extra_filters.py
index edffe9ac..edffe9ac 100644
--- a/pydis_site/apps/main/templatetags/extra_filters.py
+++ b/pydis_site/apps/home/templatetags/extra_filters.py
diff --git a/pydis_site/apps/main/tests/__init__.py b/pydis_site/apps/home/tests/__init__.py
index e69de29b..e69de29b 100644
--- a/pydis_site/apps/main/tests/__init__.py
+++ b/pydis_site/apps/home/tests/__init__.py
diff --git a/pydis_site/apps/home/tests/mock_github_api_response.json b/pydis_site/apps/home/tests/mock_github_api_response.json
new file mode 100644
index 00000000..37dc672e
--- /dev/null
+++ b/pydis_site/apps/home/tests/mock_github_api_response.json
@@ -0,0 +1,44 @@
+[
+ {
+ "full_name": "python-discord/bot",
+ "description": "test",
+ "stargazers_count": 97,
+ "language": "Python",
+ "forks_count": 31
+ },
+ {
+ "full_name": "python-discord/site",
+ "description": "test",
+ "stargazers_count": 97,
+ "language": "Python",
+ "forks_count": 31
+ },
+ {
+ "full_name": "python-discord/snekbox",
+ "description": "test",
+ "stargazers_count": 97,
+ "language": "Python",
+ "forks_count": 31
+ },
+ {
+ "full_name": "python-discord/django-simple-bulma",
+ "description": "test",
+ "stargazers_count": 97,
+ "language": "Python",
+ "forks_count": 31
+ },
+ {
+ "full_name": "python-discord/django-crispy-bulma",
+ "description": "test",
+ "stargazers_count": 97,
+ "language": "Python",
+ "forks_count": 31
+ },
+ {
+ "full_name": "python-discord/seasonalbot",
+ "description": "test",
+ "stargazers_count": 97,
+ "language": "Python",
+ "forks_count": 31
+ }
+]
diff --git a/pydis_site/apps/home/tests/test_repodata_helpers.py b/pydis_site/apps/home/tests/test_repodata_helpers.py
new file mode 100644
index 00000000..8ab2a467
--- /dev/null
+++ b/pydis_site/apps/home/tests/test_repodata_helpers.py
@@ -0,0 +1,92 @@
+import json
+from datetime import timedelta
+from pathlib import Path
+from unittest import mock
+
+from django.test import TestCase
+from django.utils import timezone
+
+from pydis_site.apps.home.models import RepositoryMetadata
+from pydis_site.apps.home.views import HomeView
+
+
+def mocked_requests_get(*args, **kwargs):
+ """A mock version of requests.get, so we don't need to call the API every time we run a test"""
+ class MockResponse:
+ def __init__(self, json_data, status_code):
+ self.json_data = json_data
+ self.status_code = status_code
+
+ def json(self):
+ return self.json_data
+
+ if args[0] == HomeView.github_api:
+ json_path = Path(__file__).resolve().parent / "mock_github_api_response.json"
+ with open(json_path, 'r') as json_file:
+ mock_data = json.load(json_file)
+
+ return MockResponse(mock_data, 200)
+
+ return MockResponse(None, 404)
+
+
+class TestRepositoryMetadataHelpers(TestCase):
+
+ def setUp(self):
+ """Executed before each test method."""
+
+ self.home_view = HomeView()
+
+ @mock.patch('requests.get', side_effect=mocked_requests_get)
+ def test_returns_metadata(self, _):
+ """Test if the _get_repo_data helper actually returns what it should."""
+
+ metadata = self.home_view._get_repo_data()
+
+ self.assertIsInstance(metadata[0], RepositoryMetadata)
+ self.assertEquals(len(metadata), len(self.home_view.repos))
+
+ def test_returns_cached_metadata(self):
+ """Test if the _get_repo_data helper returns cached data when available."""
+
+ repo_data = RepositoryMetadata(
+ repo_name="python-discord/site",
+ description="testrepo",
+ forks=42,
+ stargazers=42,
+ language="English",
+ )
+ repo_data.save()
+ metadata = self.home_view._get_repo_data()
+
+ self.assertIsInstance(metadata[0], RepositoryMetadata)
+ self.assertIsInstance(str(metadata[0]), str)
+
+ @mock.patch('requests.get', side_effect=mocked_requests_get)
+ def test_refresh_stale_metadata(self, _):
+ """Test if the _get_repo_data helper will refresh when the data is stale"""
+
+ repo_data = RepositoryMetadata(
+ repo_name="python-discord/site",
+ description="testrepo",
+ forks=42,
+ stargazers=42,
+ language="English",
+ last_updated=timezone.now() - timedelta(seconds=121), # Make the data 2 minutes old.
+ )
+ repo_data.save()
+ metadata = self.home_view._get_repo_data()
+
+ self.assertIsInstance(metadata[0], RepositoryMetadata)
+
+ @mock.patch('requests.get', side_effect=mocked_requests_get)
+ def test_returns_api_data(self, _):
+ """Tests if the _get_api_data helper returns what it should."""
+
+ api_data = self.home_view._get_api_data()
+ repo = self.home_view.repos[0]
+
+ self.assertIsInstance(api_data, dict)
+ self.assertEquals(len(api_data), len(self.home_view.repos))
+ self.assertIn(repo, api_data.keys())
+ self.assertIn("stargazers_count", api_data[repo])
diff --git a/pydis_site/apps/main/tests/test_templatetags.py b/pydis_site/apps/home/tests/test_templatetags.py
index 44a5c491..813588c8 100644
--- a/pydis_site/apps/main/tests/test_templatetags.py
+++ b/pydis_site/apps/home/tests/test_templatetags.py
@@ -1,6 +1,6 @@
from django.test import TestCase
-from pydis_site.apps.main.templatetags import starts_with
+from pydis_site.apps.home.templatetags import starts_with
class TestTemplateTags(TestCase):
diff --git a/pydis_site/apps/main/tests/test_views.py b/pydis_site/apps/home/tests/test_views.py
index 73678b0a..73678b0a 100644
--- a/pydis_site/apps/main/tests/test_views.py
+++ b/pydis_site/apps/home/tests/test_views.py
diff --git a/pydis_site/apps/main/urls.py b/pydis_site/apps/home/urls.py
index edef9873..d8dba2f6 100644
--- a/pydis_site/apps/main/urls.py
+++ b/pydis_site/apps/home/urls.py
@@ -3,8 +3,7 @@ from django.urls import path
from .views import HomeView
-
-app_name = 'main'
+app_name = 'home'
urlpatterns = [
path('', HomeView.as_view(), name='home'),
path('admin/', admin.site.urls)
diff --git a/pydis_site/apps/main/views/__init__.py b/pydis_site/apps/home/views/__init__.py
index 971d73a3..971d73a3 100644
--- a/pydis_site/apps/main/views/__init__.py
+++ b/pydis_site/apps/home/views/__init__.py
diff --git a/pydis_site/apps/main/views/home.py b/pydis_site/apps/home/views/home.py
index d9255ed2..c91d13e2 100644
--- a/pydis_site/apps/main/views/home.py
+++ b/pydis_site/apps/home/views/home.py
@@ -1,31 +1,40 @@
import requests
-from django.conf import settings
from django.shortcuts import render
from django.utils import timezone
from django.views import View
-from pydis_site.apps.main.models import RepositoryMetadata
-
-GITHUB_API = "https://api.github.com/users/python-discord/repos"
+from pydis_site.apps.home.models import RepositoryMetadata
class HomeView(View):
+ """The view"""
+
+ github_api = "https://api.github.com/users/python-discord/repos"
+
+ # Which of our GitHub repos should be displayed on the front page, and in which order?
+ repos = [
+ "python-discord/site",
+ "python-discord/bot",
+ "python-discord/snekbox",
+ "python-discord/seasonalbot",
+ "python-discord/django-simple-bulma",
+ "python-discord/django-crispy-bulma",
+ ]
- @staticmethod
- def _get_api_data():
+ def _get_api_data(self):
"""Call the GitHub API and get information about our repos."""
- repo_dict = {repo_name: {} for repo_name in settings.HOMEPAGE_REPOS}
+ repo_dict = {repo_name: {} for repo_name in self.repos}
# Fetch the data from the GitHub API
- api_data = requests.get(GITHUB_API)
+ api_data = requests.get(self.github_api)
api_data = api_data.json()
# Process the API data into our dict
for repo in api_data:
full_name = repo["full_name"]
- if full_name in settings.HOMEPAGE_REPOS:
+ if full_name in self.repos:
repo_dict[full_name] = {
"full_name": repo["full_name"],
"description": repo["description"],
@@ -46,11 +55,11 @@ class HomeView(View):
if (timezone.now() - repo_data.last_updated).seconds > 120:
# Get new data from API
- api_data_container = self._get_api_data()
- repo_data_container = []
+ api_repositories = self._get_api_data()
+ database_repositories = []
- # Update or create all RepoData objects in settings.HOMEPAGE_REPOS
- for repo_name, api_data in api_data_container.items():
+ # Update or create all RepoData objects in self.repos
+ for repo_name, api_data in api_repositories.items():
try:
repo_data = RepositoryMetadata.objects.get(repo_name=repo_name)
repo_data.description = api_data["description"]
@@ -66,8 +75,8 @@ class HomeView(View):
language=api_data["language"],
)
repo_data.save()
- repo_data_container.append(repo_data)
- return repo_data_container
+ database_repositories.append(repo_data)
+ return database_repositories
# Otherwise, if the data is fresher than 2 minutes old, we should just return it.
else:
@@ -77,11 +86,11 @@ class HomeView(View):
except RepositoryMetadata.DoesNotExist:
# Get new data from API
- api_data_container = self._get_api_data()
- repo_data_container = []
+ api_repositories = self._get_api_data()
+ database_repositories = []
# Create all the repodata records in the database.
- for api_data in api_data_container.values():
+ for api_data in api_repositories.values():
repo_data = RepositoryMetadata(
repo_name=api_data["full_name"],
description=api_data["description"],
@@ -90,9 +99,9 @@ class HomeView(View):
language=api_data["language"],
)
repo_data.save()
- repo_data_container.append(repo_data)
+ database_repositories.append(repo_data)
- return repo_data_container
+ return database_repositories
def get(self, request):
"""Collect repo data and render the homepage view"""
diff --git a/pydis_site/apps/main/tests/test_repodata_helpers.py b/pydis_site/apps/main/tests/test_repodata_helpers.py
deleted file mode 100644
index 040acb21..00000000
--- a/pydis_site/apps/main/tests/test_repodata_helpers.py
+++ /dev/null
@@ -1,66 +0,0 @@
-from datetime import timedelta
-
-from django.conf import settings
-from django.test import TestCase
-from django.utils import timezone
-
-from pydis_site.apps.main.models import RepositoryMetadata
-from pydis_site.apps.main.views import HomeView
-
-
-class TestRepositoryMetadataHelpers(TestCase):
-
- def test_returns_metadata(self):
- """Test if the _get_repo_data helper actually returns what it should."""
-
- home_view = HomeView()
- metadata = home_view._get_repo_data()
-
- self.assertIsInstance(metadata[0], RepositoryMetadata)
- self.assertEquals(len(metadata), len(settings.HOMEPAGE_REPOS))
-
- def test_returns_cached_metadata(self):
- """Test if the _get_repo_data helper returns cached data when available."""
-
- home_view = HomeView()
- repo_data = RepositoryMetadata(
- repo_name="python-discord/site",
- description="testrepo",
- forks=42,
- stargazers=42,
- language="English",
- )
- repo_data.save()
- metadata = home_view._get_repo_data()
-
- self.assertIsInstance(metadata[0], RepositoryMetadata)
- print(metadata[0]) # Tests the __str__ in the model
-
- def test_refresh_stale_metadata(self):
- """Test if the _get_repo_data helper will refresh when the data is stale"""
-
- home_view = HomeView()
- repo_data = RepositoryMetadata(
- repo_name="python-discord/site",
- description="testrepo",
- forks=42,
- stargazers=42,
- language="English",
- last_updated=timezone.now() - timedelta(seconds=121), # Make the data 2 minutes old.
- )
- repo_data.save()
- metadata = home_view._get_repo_data()
-
- self.assertIsInstance(metadata[0], RepositoryMetadata)
-
- def test_returns_api_data(self):
- """Tests if the _get_api_data helper returns what it should."""
-
- home_view = HomeView()
- api_data = home_view._get_api_data()
- repo = settings.HOMEPAGE_REPOS[0]
-
- self.assertIsInstance(api_data, dict)
- self.assertEquals(len(api_data), len(settings.HOMEPAGE_REPOS))
- self.assertIn(repo, api_data.keys())
- self.assertIn("stargazers_count", api_data[repo])