feat: load http views dynamically (#113)

This commit is contained in:
2023-09-30 01:24:04 +03:00
committed by GitHub
parent bc9682373d
commit 9fe760efdf
45 changed files with 352 additions and 74 deletions

View File

@@ -34,6 +34,7 @@ class DocsView(BaseView):
"""
GET_PERMISSION = UserAccess.Unauthorized
ROUTES = ["/api-docs"]
@aiohttp_jinja2.template("api.jinja2")
async def get(self) -> dict[str, Any]:

View File

@@ -34,6 +34,7 @@ class SwaggerView(BaseView):
"""
GET_PERMISSION = UserAccess.Unauthorized
ROUTES = ["/api-docs/swagger.json"]
async def get(self) -> Response:
"""

View File

@@ -38,9 +38,11 @@ class BaseView(View, CorsViewMixin):
Attributes:
OPTIONS_PERMISSION(UserAccess): (class attribute) options permissions of self
ROUTES(list[str]): (class attribute) list of supported routes
"""
OPTIONS_PERMISSION = UserAccess.Unauthorized
ROUTES: list[str] = []
@property
def configuration(self) -> Configuration:

View File

@@ -44,6 +44,7 @@ class IndexView(BaseView):
"""
GET_PERMISSION = UserAccess.Unauthorized
ROUTES = ["/", "/index.html"]
@aiohttp_jinja2.template("build-status.jinja2")
async def get(self) -> dict[str, Any]:

View File

@@ -17,20 +17,3 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
from ahriman.web.views.v1.service.add import AddView
from ahriman.web.views.v1.service.pgp import PGPView
from ahriman.web.views.v1.service.process import ProcessView
from ahriman.web.views.v1.service.rebuild import RebuildView
from ahriman.web.views.v1.service.remove import RemoveView
from ahriman.web.views.v1.service.request import RequestView
from ahriman.web.views.v1.service.search import SearchView
from ahriman.web.views.v1.service.update import UpdateView
from ahriman.web.views.v1.service.upload import UploadView
from ahriman.web.views.v1.status.logs import LogsView
from ahriman.web.views.v1.status.package import PackageView
from ahriman.web.views.v1.status.packages import PackagesView
from ahriman.web.views.v1.status.status import StatusView
from ahriman.web.views.v1.user.login import LoginView
from ahriman.web.views.v1.user.logout import LogoutView

View File

@@ -35,6 +35,7 @@ class AddView(BaseView):
"""
POST_PERMISSION = UserAccess.Full
ROUTES = ["/api/v1/service/add"]
@aiohttp_apispec.docs(
tags=["Actions"],

View File

@@ -35,8 +35,9 @@ class PGPView(BaseView):
POST_PERMISSION(UserAccess): (class attribute) post permissions of self
"""
POST_PERMISSION = UserAccess.Full
GET_PERMISSION = UserAccess.Reporter
POST_PERMISSION = UserAccess.Full
ROUTES = ["/api/v1/service/pgp"]
@aiohttp_apispec.docs(
tags=["Actions"],

View File

@@ -35,6 +35,7 @@ class ProcessView(BaseView):
"""
GET_PERMISSION = UserAccess.Reporter
ROUTES = ["/api/v1/service/process/{process_id}"]
@aiohttp_apispec.docs(
tags=["Actions"],

View File

@@ -35,6 +35,7 @@ class RebuildView(BaseView):
"""
POST_PERMISSION = UserAccess.Full
ROUTES = ["/api/v1/service/rebuild"]
@aiohttp_apispec.docs(
tags=["Actions"],

View File

@@ -35,6 +35,7 @@ class RemoveView(BaseView):
"""
POST_PERMISSION = UserAccess.Full
ROUTES = ["/api/v1/service/remove"]
@aiohttp_apispec.docs(
tags=["Actions"],

View File

@@ -35,6 +35,7 @@ class RequestView(BaseView):
"""
POST_PERMISSION = UserAccess.Reporter
ROUTES = ["/api/v1/service/request"]
@aiohttp_apispec.docs(
tags=["Actions"],

View File

@@ -38,6 +38,7 @@ class SearchView(BaseView):
"""
GET_PERMISSION = UserAccess.Reporter
ROUTES = ["/api/v1/service/search"]
@aiohttp_apispec.docs(
tags=["Actions"],

View File

@@ -35,6 +35,7 @@ class UpdateView(BaseView):
"""
POST_PERMISSION = UserAccess.Full
ROUTES = ["/api/v1/service/update"]
@aiohttp_apispec.docs(
tags=["Actions"],

View File

@@ -39,6 +39,7 @@ class UploadView(BaseView):
"""
POST_PERMISSION = UserAccess.Full
ROUTES = ["/api/v1/service/upload"]
@staticmethod
async def save_file(part: BodyPartReader, target: Path, *, max_body_size: int | None = None) -> tuple[str, Path]:

View File

@@ -41,6 +41,7 @@ class LogsView(BaseView):
DELETE_PERMISSION = POST_PERMISSION = UserAccess.Full
GET_PERMISSION = UserAccess.Reporter
ROUTES = ["/api/v1/packages/{package}/logs"]
@aiohttp_apispec.docs(
tags=["Packages"],

View File

@@ -41,6 +41,7 @@ class PackageView(BaseView):
DELETE_PERMISSION = POST_PERMISSION = UserAccess.Full
GET_PERMISSION = UserAccess.Read
ROUTES = ["/api/v1/packages/{package}"]
@aiohttp_apispec.docs(
tags=["Packages"],

View File

@@ -41,6 +41,7 @@ class PackagesView(BaseView):
GET_PERMISSION = UserAccess.Read
POST_PERMISSION = UserAccess.Full
ROUTES = ["/api/v1/packages"]
@aiohttp_apispec.docs(
tags=["Packages"],

View File

@@ -41,6 +41,7 @@ class StatusView(BaseView):
GET_PERMISSION = UserAccess.Read
POST_PERMISSION = UserAccess.Full
ROUTES = ["/api/v1/status"]
@aiohttp_apispec.docs(
tags=["Status"],

View File

@@ -37,6 +37,7 @@ class LoginView(BaseView):
"""
GET_PERMISSION = POST_PERMISSION = UserAccess.Unauthorized
ROUTES = ["/api/v1/login"]
@aiohttp_apispec.docs(
tags=["Login"],

View File

@@ -36,6 +36,7 @@ class LogoutView(BaseView):
"""
POST_PERMISSION = UserAccess.Unauthorized
ROUTES = ["/api/v1/logout"]
@aiohttp_apispec.docs(
tags=["Login"],

View File

@@ -17,4 +17,3 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
from ahriman.web.views.v2.status.logs import LogsView

View File

@@ -37,6 +37,7 @@ class LogsView(BaseView):
"""
GET_PERMISSION = UserAccess.Reporter
ROUTES = ["/api/v2/packages/{package}/logs"]
@aiohttp_apispec.docs(
tags=["Packages"],