From 255a364c34c9ea2e83607cad3ad43a90862a6e75 Mon Sep 17 00:00:00 2001 From: Egor Matveev Date: Thu, 2 Dec 2021 18:17:30 +0300 Subject: [PATCH] endpoints --- Main/views/AccountView.py | 1 + Main/views/EnterView.py | 1 + Main/views/ExitView.py | 1 + Main/views/ImageView.py | 1 + Main/views/MainView.py | 1 + Main/views/RatingView.py | 1 + Main/views/SendCodeView.py | 1 + Main/views/SetSettingsView.py | 1 + Main/views/SetsView.py | 1 + Main/views/SolutionView.py | 1 + Main/views/SolutionsTableView.py | 1 + Main/views/TaskRuntimeView.py | 1 + Main/views/TaskSettingsView.py | 1 + Main/views/TaskView.py | 1 + Main/views/TasksView.py | 1 + Sprint/urls.py | 28 ++++++++++------------------ SprintLib/BaseView.py | 1 + 17 files changed, 26 insertions(+), 18 deletions(-) diff --git a/Main/views/AccountView.py b/Main/views/AccountView.py index 2a738bb..d4556ed 100644 --- a/Main/views/AccountView.py +++ b/Main/views/AccountView.py @@ -7,6 +7,7 @@ from SprintLib.utils import delete_file, write_bytes class AccountView(BaseView): view_file = "account.html" required_login = True + endpoint = "account" def get(self): if "username" in self.request.GET.keys(): diff --git a/Main/views/EnterView.py b/Main/views/EnterView.py index 54421db..3b98037 100644 --- a/Main/views/EnterView.py +++ b/Main/views/EnterView.py @@ -4,3 +4,4 @@ from SprintLib.BaseView import BaseView class EnterView(BaseView): view_file = "enter.html" required_login = False + endpoint = "enter" diff --git a/Main/views/ExitView.py b/Main/views/ExitView.py index 881d75f..586ba1d 100644 --- a/Main/views/ExitView.py +++ b/Main/views/ExitView.py @@ -5,6 +5,7 @@ from SprintLib.BaseView import BaseView class ExitView(BaseView): required_login = True + endpoint = "exit" def get(self): logout(self.request) diff --git a/Main/views/ImageView.py b/Main/views/ImageView.py index a7b44ef..bbf9687 100644 --- a/Main/views/ImageView.py +++ b/Main/views/ImageView.py @@ -5,5 +5,6 @@ from SprintLib.utils import get_bytes class ImageView(BaseView): + endpoint = "image" def get(self): return HttpResponse(get_bytes(int(self.request.GET['id'])), content_type="image/jpg") diff --git a/Main/views/MainView.py b/Main/views/MainView.py index 47ee857..3e67636 100644 --- a/Main/views/MainView.py +++ b/Main/views/MainView.py @@ -4,3 +4,4 @@ from SprintLib.BaseView import BaseView class MainView(BaseView): view_file = "main.html" required_login = True + endpoint = "" diff --git a/Main/views/RatingView.py b/Main/views/RatingView.py index 7b3f8e2..af548c4 100644 --- a/Main/views/RatingView.py +++ b/Main/views/RatingView.py @@ -6,6 +6,7 @@ from SprintLib.BaseView import BaseView class RatingView(BaseView): view_file = "rating.html" required_login = True + endpoint = "rating" def get(self): self.context["users"] = User.objects.filter(userinfo__verified=True).order_by( diff --git a/Main/views/SendCodeView.py b/Main/views/SendCodeView.py index 9ce11c2..1cfae37 100644 --- a/Main/views/SendCodeView.py +++ b/Main/views/SendCodeView.py @@ -7,6 +7,7 @@ from random import randrange class SendCodeView(BaseView): + endpoint = "send_code" def post_create(self): username = self.request.POST["username"] user = User.objects.filter(username=username).first() diff --git a/Main/views/SetSettingsView.py b/Main/views/SetSettingsView.py index f8c582f..3e374c2 100644 --- a/Main/views/SetSettingsView.py +++ b/Main/views/SetSettingsView.py @@ -4,3 +4,4 @@ from SprintLib.BaseView import BaseView class SetSettingsView(BaseView): required_login = True view_file = 'set_settings.html' + endpoint = "admin/set" \ No newline at end of file diff --git a/Main/views/SetsView.py b/Main/views/SetsView.py index 39d90c1..6e84bfd 100644 --- a/Main/views/SetsView.py +++ b/Main/views/SetsView.py @@ -5,6 +5,7 @@ from SprintLib.BaseView import BaseView class SetsView(BaseView): view_file = "sets.html" required_login = True + endpoint = "sets" def post(self): set_name = self.request.POST["name"] diff --git a/Main/views/SolutionView.py b/Main/views/SolutionView.py index f48a890..34de84f 100644 --- a/Main/views/SolutionView.py +++ b/Main/views/SolutionView.py @@ -4,6 +4,7 @@ from SprintLib.BaseView import BaseView, AccessError class SolutionView(BaseView): view_file = 'solution.html' required_login = True + endpoint = "solution" def pre_handle(self): if self.request.user.is_superuser: diff --git a/Main/views/SolutionsTableView.py b/Main/views/SolutionsTableView.py index f929ef4..b8a9e81 100644 --- a/Main/views/SolutionsTableView.py +++ b/Main/views/SolutionsTableView.py @@ -8,6 +8,7 @@ from SprintLib.BaseView import BaseView class SolutionsTableView(BaseView): view_file = 'solutions_table.html' required_login = True + endpoint = "solutions_table" def get(self): self.context['solutions'] = Solution.objects.filter( diff --git a/Main/views/TaskRuntimeView.py b/Main/views/TaskRuntimeView.py index a852541..0f41bc4 100644 --- a/Main/views/TaskRuntimeView.py +++ b/Main/views/TaskRuntimeView.py @@ -7,6 +7,7 @@ from SprintLib.BaseView import BaseView class TaskRuntimeView(BaseView): view_file = 'task_runtime.html' required_login = True + endpoint = "task_runtime" def get(self): progress = Progress.objects.get(task=self.entities.task, user=self.request.user) diff --git a/Main/views/TaskSettingsView.py b/Main/views/TaskSettingsView.py index c32a167..313936a 100644 --- a/Main/views/TaskSettingsView.py +++ b/Main/views/TaskSettingsView.py @@ -8,6 +8,7 @@ from SprintLib.BaseView import BaseView, AccessError class TaskSettingsView(BaseView): view_file = "task_settings.html" required_login = True + endpoint = "admin/task" def pre_handle(self): if self.entities.task not in self.request.user.userinfo.available_tasks: diff --git a/Main/views/TaskView.py b/Main/views/TaskView.py index ceb6dbe..81b5dbb 100644 --- a/Main/views/TaskView.py +++ b/Main/views/TaskView.py @@ -10,6 +10,7 @@ from SprintLib.utils import write_bytes class TaskView(BaseView): required_login = True view_file = "task.html" + endpoint = "task" def get(self): progress, _ = Progress.objects.get_or_create( diff --git a/Main/views/TasksView.py b/Main/views/TasksView.py index c2f3ef1..e00e856 100644 --- a/Main/views/TasksView.py +++ b/Main/views/TasksView.py @@ -5,6 +5,7 @@ from SprintLib.BaseView import BaseView class TasksView(BaseView): view_file = "tasks.html" required_login = True + endpoint = "tasks" def post(self): task_name = self.request.POST["name"] diff --git a/Sprint/urls.py b/Sprint/urls.py index beb472d..3ecf738 100644 --- a/Sprint/urls.py +++ b/Sprint/urls.py @@ -1,23 +1,15 @@ from django.contrib import admin from django.urls import path +import Main.views from Main.views import * -urlpatterns = [ - path("enter", EnterView.as_view()), - path("rating", RatingView.as_view()), - path("tasks", TasksView.as_view()), - path("account", AccountView.as_view()), - path("exit", ExitView.as_view()), - path("admin/task", TaskSettingsView.as_view()), - path("admin/set", SetSettingsView.as_view()), - path("sets", SetsView.as_view()), - path("task", TaskView.as_view()), - path("solution", SolutionView.as_view()), - path("solutions_table", SolutionsTableView.as_view()), - path("task_runtime", TaskRuntimeView.as_view()), - path("image", ImageView.as_view()), - path("send_code", SendCodeView.as_view()), - path("", MainView.as_view()), - path("admin/", admin.site.urls), -] +urlpatterns = [path("admin/", admin.site.urls)] + +for v in dir(Main.views): + try: + view = eval(v) + except NameError: + continue + if hasattr(view, 'endpoint') and view.endpoint is not None: + urlpatterns.append(path(view.endpoint, view.as_view())) diff --git a/SprintLib/BaseView.py b/SprintLib/BaseView.py index bd05a40..6a8089e 100644 --- a/SprintLib/BaseView.py +++ b/SprintLib/BaseView.py @@ -19,6 +19,7 @@ class BaseView: entities = EntityStorage() required_login: Optional[bool] = None view_file: Optional[str] = None + endpoint: Optional[str] = None @classmethod def as_view(cls):