From 9dbd198dee8f5d10185ef8ddc96eade96d70c026 Mon Sep 17 00:00:00 2001 From: Jace Manshadi Date: Sun, 17 Mar 2024 10:44:25 -0700 Subject: [PATCH 1/8] adding API support --- csss-site/src/csss/settings.py | 8 +++++++- csss-site/src/csss/urls.py | 8 +++++++- requirements.txt | 6 +++++- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/csss-site/src/csss/settings.py b/csss-site/src/csss/settings.py index 1c057b234..67896efe8 100755 --- a/csss-site/src/csss/settings.py +++ b/csss-site/src/csss/settings.py @@ -205,7 +205,8 @@ def env_getter(key) -> Optional[str]: 'bootstrap3', 'elections', 'django.contrib.sites', - 'django_cas_ng' + 'django_cas_ng', + 'rest_framework' ] MIDDLEWARE = [ @@ -216,6 +217,11 @@ def env_getter(key) -> Optional[str]: 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', + 'corsheaders.middleware.CorsMiddleware' +] + +CORS_ORIGIN_WHITELIST = [ + 'https://walle.sfucsss.org' ] if not DEBUG: diff --git a/csss-site/src/csss/urls.py b/csss-site/src/csss/urls.py index 9293de169..322ac8ce2 100755 --- a/csss-site/src/csss/urls.py +++ b/csss-site/src/csss/urls.py @@ -2,7 +2,9 @@ from django.conf.urls import url, include from django.conf.urls.static import static from django.contrib import admin +from rest_framework import routers +from about.views.rest_framework_views.term_view_set import TermViewSet from .views import views from .views.crons.Constants import CRON_LOGS_BASE_URL_KEY, CRON_JOBS_BASE_URL_KEY from .views.crons.cron import cron @@ -10,6 +12,10 @@ from .views.errors import errors from .views.login import LoginView, LogoutView +router = routers.DefaultRouter() + +router.register('about', TermViewSet) + urlpatterns = [ url(r'^' + settings.URL_PATTERN + 'admin/', admin.site.urls), url(r'^' + settings.URL_PATTERN + 'about/', include('about.urls')), @@ -24,7 +30,7 @@ url(r'^errors', errors.index, name='errors'), url(r'^' + settings.URL_PATTERN + 'login', LoginView.as_view(), name='login'), url(r'^' + settings.URL_PATTERN + 'logout', LogoutView.as_view(), name='logout'), + url(r'^' + settings.URL_PATTERN + "api/", include((router.urls, 'api_app'), namespace='api')) ] - if settings.ENVIRONMENT == "LOCALHOST": urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) diff --git a/requirements.txt b/requirements.txt index 1e4238423..b5368bae8 100644 --- a/requirements.txt +++ b/requirements.txt @@ -69,4 +69,8 @@ git+https://github.com/gregbaker/django-cas-ng.git@4f4a82e07eb624ffa53446a4f6806 APScheduler==3.9.1.post1 # for election graphing -matplotlib==3.7.4 \ No newline at end of file +matplotlib==3.7.4 + +# for the openAPI that https://github.com/CSSS/csss-site-frontend needs +djangorestframework==3.13.0 +django-cors-headers==3.11.0 \ No newline at end of file From 40eb01d667be9dcfa53ec3ab4ce8e8b6679c2936 Mon Sep 17 00:00:00 2001 From: Jace Manshadi Date: Sun, 17 Mar 2024 10:54:19 -0700 Subject: [PATCH 2/8] fix --- .../views/rest_framework_views/__init__.py | 0 .../rest_framework_views/term_view_set.py | 24 +++++++++++++++++++ csss-site/src/csss/urls.py | 2 +- 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 csss-site/src/about/views/rest_framework_views/__init__.py create mode 100644 csss-site/src/about/views/rest_framework_views/term_view_set.py diff --git a/csss-site/src/about/views/rest_framework_views/__init__.py b/csss-site/src/about/views/rest_framework_views/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/csss-site/src/about/views/rest_framework_views/term_view_set.py b/csss-site/src/about/views/rest_framework_views/term_view_set.py new file mode 100644 index 000000000..f3e37e854 --- /dev/null +++ b/csss-site/src/about/views/rest_framework_views/term_view_set.py @@ -0,0 +1,24 @@ +from rest_framework import serializers, viewsets +from rest_framework.response import Response + +from about.models import Term +from csss.views.rest_framework_views.pagination import StandardResultsSetPagination + + +class TermSerializer(serializers.ModelSerializer): + + class Meta: + model = Term + fields = '__all__' + + +class TermViewSet(viewsets.ModelViewSet): + serializer_class = TermSerializer + queryset = Term.objects.all().order_by('-term_number') + pagination_class = StandardResultsSetPagination + + def create(self, request, *args, **kwargs): + return Response("not yet implemented") + + def update(self, request, *args, **kwargs): + return Response("not yet implemented") \ No newline at end of file diff --git a/csss-site/src/csss/urls.py b/csss-site/src/csss/urls.py index 322ac8ce2..00e12ad4e 100755 --- a/csss-site/src/csss/urls.py +++ b/csss-site/src/csss/urls.py @@ -30,7 +30,7 @@ url(r'^errors', errors.index, name='errors'), url(r'^' + settings.URL_PATTERN + 'login', LoginView.as_view(), name='login'), url(r'^' + settings.URL_PATTERN + 'logout', LogoutView.as_view(), name='logout'), - url(r'^' + settings.URL_PATTERN + "api/", include((router.urls, 'api_app'), namespace='api')) + url(r'^' + settings.URL_PATTERN + "api/", include((router.urls, 'api_app'))) ] if settings.ENVIRONMENT == "LOCALHOST": urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) From cfd3f4a2f6b4c7f0de61fe3b07d031ae0e9c94d8 Mon Sep 17 00:00:00 2001 From: Jace Manshadi Date: Sun, 17 Mar 2024 11:05:56 -0700 Subject: [PATCH 3/8] fix --- csss-site/src/about/views/rest_framework_views/term_view_set.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csss-site/src/about/views/rest_framework_views/term_view_set.py b/csss-site/src/about/views/rest_framework_views/term_view_set.py index f3e37e854..c9f1a4e28 100644 --- a/csss-site/src/about/views/rest_framework_views/term_view_set.py +++ b/csss-site/src/about/views/rest_framework_views/term_view_set.py @@ -21,4 +21,4 @@ def create(self, request, *args, **kwargs): return Response("not yet implemented") def update(self, request, *args, **kwargs): - return Response("not yet implemented") \ No newline at end of file + return Response("not yet implemented") From f97cc8d553b10dc2666fc0c288774b49b83ae132 Mon Sep 17 00:00:00 2001 From: Jace Manshadi Date: Sun, 17 Mar 2024 11:13:59 -0700 Subject: [PATCH 4/8] fix --- .../views/rest_framework_views/__init__.py | 0 .../views/rest_framework_views/pagination.py | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 csss-site/src/csss/views/rest_framework_views/__init__.py create mode 100644 csss-site/src/csss/views/rest_framework_views/pagination.py diff --git a/csss-site/src/csss/views/rest_framework_views/__init__.py b/csss-site/src/csss/views/rest_framework_views/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/csss-site/src/csss/views/rest_framework_views/pagination.py b/csss-site/src/csss/views/rest_framework_views/pagination.py new file mode 100644 index 000000000..d7fa790c5 --- /dev/null +++ b/csss-site/src/csss/views/rest_framework_views/pagination.py @@ -0,0 +1,19 @@ +from rest_framework.pagination import PageNumberPagination +from rest_framework.response import Response + + +class StandardResultsSetPagination(PageNumberPagination): + page_size = 25 + page_size_query_param = 'page_size' + max_page_size = 1000 + + def get_paginated_response(self, data): + return Response({ + 'links': { + 'next': self.get_next_link(), + 'previous': self.get_previous_link() + }, + 'count': self.page.paginator.count, + 'total_number_of_pages': self.page.paginator.num_pages, + 'results': data + }) \ No newline at end of file From 3a44e4ce45f53b593ec8342e55adf1fc55a458f1 Mon Sep 17 00:00:00 2001 From: Jace Manshadi Date: Sun, 17 Mar 2024 11:17:14 -0700 Subject: [PATCH 5/8] fix --- csss-site/src/csss/urls.py | 2 +- csss-site/src/csss/views/rest_framework_views/pagination.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/csss-site/src/csss/urls.py b/csss-site/src/csss/urls.py index 00e12ad4e..2c73fd4bb 100755 --- a/csss-site/src/csss/urls.py +++ b/csss-site/src/csss/urls.py @@ -14,7 +14,7 @@ router = routers.DefaultRouter() -router.register('about', TermViewSet) +router.register('terms', TermViewSet) urlpatterns = [ url(r'^' + settings.URL_PATTERN + 'admin/', admin.site.urls), diff --git a/csss-site/src/csss/views/rest_framework_views/pagination.py b/csss-site/src/csss/views/rest_framework_views/pagination.py index d7fa790c5..d7d031c1b 100644 --- a/csss-site/src/csss/views/rest_framework_views/pagination.py +++ b/csss-site/src/csss/views/rest_framework_views/pagination.py @@ -16,4 +16,4 @@ def get_paginated_response(self, data): 'count': self.page.paginator.count, 'total_number_of_pages': self.page.paginator.num_pages, 'results': data - }) \ No newline at end of file + }) From 0e8afe2837099354cbef819dacce6f2018724390 Mon Sep 17 00:00:00 2001 From: Jace Manshadi Date: Sun, 17 Mar 2024 11:27:18 -0700 Subject: [PATCH 6/8] adding base election API --- csss-site/src/csss/urls.py | 2 ++ .../views/rest_framework_views/__init__.py | 0 .../rest_framework_views/election_view_set.py | 25 +++++++++++++++++++ 3 files changed, 27 insertions(+) create mode 100644 csss-site/src/elections/views/rest_framework_views/__init__.py create mode 100644 csss-site/src/elections/views/rest_framework_views/election_view_set.py diff --git a/csss-site/src/csss/urls.py b/csss-site/src/csss/urls.py index 2c73fd4bb..ebc2258e9 100755 --- a/csss-site/src/csss/urls.py +++ b/csss-site/src/csss/urls.py @@ -5,6 +5,7 @@ from rest_framework import routers from about.views.rest_framework_views.term_view_set import TermViewSet +from elections.views.rest_framework_views.election_view_set import ElectionViewSet from .views import views from .views.crons.Constants import CRON_LOGS_BASE_URL_KEY, CRON_JOBS_BASE_URL_KEY from .views.crons.cron import cron @@ -15,6 +16,7 @@ router = routers.DefaultRouter() router.register('terms', TermViewSet) +router.register('elections', ElectionViewSet) urlpatterns = [ url(r'^' + settings.URL_PATTERN + 'admin/', admin.site.urls), diff --git a/csss-site/src/elections/views/rest_framework_views/__init__.py b/csss-site/src/elections/views/rest_framework_views/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/csss-site/src/elections/views/rest_framework_views/election_view_set.py b/csss-site/src/elections/views/rest_framework_views/election_view_set.py new file mode 100644 index 000000000..e0245c55c --- /dev/null +++ b/csss-site/src/elections/views/rest_framework_views/election_view_set.py @@ -0,0 +1,25 @@ +from rest_framework import serializers, viewsets +from rest_framework.response import Response + +from about.models import Term +from csss.views.rest_framework_views.pagination import StandardResultsSetPagination +from elections.models import Election + + +class ElectionSerializer(serializers.ModelSerializer): + + class Meta: + model = Election + fields = '__all__' + + +class ElectionViewSet(viewsets.ModelViewSet): + serializer_class = ElectionSerializer + queryset = Election.objects.all().order_by('-date') + pagination_class = StandardResultsSetPagination + + def create(self, request, *args, **kwargs): + return Response("not yet implemented") + + def update(self, request, *args, **kwargs): + return Response("not yet implemented") From eb51ee224aa65966728c292983d1e987c808e6bd Mon Sep 17 00:00:00 2001 From: Jace Manshadi Date: Sun, 17 Mar 2024 11:28:24 -0700 Subject: [PATCH 7/8] fix --- csss-site/src/csss/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/csss-site/src/csss/settings.py b/csss-site/src/csss/settings.py index 67896efe8..43266f918 100755 --- a/csss-site/src/csss/settings.py +++ b/csss-site/src/csss/settings.py @@ -221,7 +221,7 @@ def env_getter(key) -> Optional[str]: ] CORS_ORIGIN_WHITELIST = [ - 'https://walle.sfucsss.org' + 'https://sfucsss.org' ] if not DEBUG: From 7d40bb1cb734aa14d096c3b4aeb9f09b8d374fe3 Mon Sep 17 00:00:00 2001 From: Jace Manshadi Date: Sun, 17 Mar 2024 11:33:58 -0700 Subject: [PATCH 8/8] fix --- .../elections/views/rest_framework_views/election_view_set.py | 1 - 1 file changed, 1 deletion(-) diff --git a/csss-site/src/elections/views/rest_framework_views/election_view_set.py b/csss-site/src/elections/views/rest_framework_views/election_view_set.py index e0245c55c..b6e44170c 100644 --- a/csss-site/src/elections/views/rest_framework_views/election_view_set.py +++ b/csss-site/src/elections/views/rest_framework_views/election_view_set.py @@ -1,7 +1,6 @@ from rest_framework import serializers, viewsets from rest_framework.response import Response -from about.models import Term from csss.views.rest_framework_views.pagination import StandardResultsSetPagination from elections.models import Election