Skip to content

Commit a8638bb

Browse files
committed
refactored some functions to sample.py
1 parent ddc9134 commit a8638bb

File tree

2 files changed

+113
-99
lines changed

2 files changed

+113
-99
lines changed

tests/test_application/sample.py

Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
import os
2+
3+
from starlette.exceptions import HTTPException
4+
from starlette.responses import JSONResponse, PlainTextResponse
5+
from starlette.routing import Host, Mount, Route, Router
6+
7+
from ellar.common import Controller, Module, ModuleRouter, exception_handler, get
8+
from ellar.core.guard import APIKeyQuery
9+
10+
11+
def create_tmp_template_and_static_dir(tmpdir):
12+
template_folder = os.path.join(tmpdir, "templates")
13+
os.mkdir(template_folder)
14+
static_folder = os.path.join(tmpdir, "statics")
15+
os.mkdir(static_folder)
16+
17+
path = os.path.join(static_folder, "example.txt")
18+
with open(path, "w") as file:
19+
file.write("<file content>")
20+
21+
path = os.path.join(template_folder, "example.html")
22+
with open(path, "w") as file:
23+
file.write("<html>Hello World<html/>")
24+
return template_folder, static_folder
25+
26+
27+
class AppAPIKey(APIKeyQuery):
28+
async def authenticate(self, connection, key):
29+
return key
30+
31+
32+
def custom_sub_domain(request):
33+
return PlainTextResponse("Subdomain: " + request.path_params["subdomain"])
34+
35+
36+
def all_users_page(request):
37+
return PlainTextResponse("Hello, everyone!")
38+
39+
40+
def user_page(request):
41+
username = request.path_params["username"]
42+
return PlainTextResponse(f"Hello, {username}!")
43+
44+
45+
sub_domain = Router(
46+
routes=[
47+
Route("/", custom_sub_domain),
48+
]
49+
)
50+
51+
users = Router(
52+
routes=[
53+
Route("/", endpoint=all_users_page),
54+
Route("/{username}", endpoint=user_page),
55+
]
56+
)
57+
58+
router = ModuleRouter()
59+
60+
61+
@router.get("/func")
62+
@router.head("/func")
63+
def func_homepage(request):
64+
return PlainTextResponse("Hello, world!")
65+
66+
67+
@router.get("/async")
68+
async def async_homepage(request):
69+
return PlainTextResponse("Hello, world!")
70+
71+
72+
@router.ws_route("/ws")
73+
async def websocket_endpoint(session):
74+
await session.accept()
75+
await session.send_text("Hello, world!")
76+
await session.close()
77+
78+
79+
@Controller
80+
class ClassBaseController:
81+
@get("/class")
82+
def class_function(self):
83+
return PlainTextResponse("Hello, world!")
84+
85+
@get("/500")
86+
def runtime_error(self, request):
87+
raise RuntimeError()
88+
89+
90+
@Module(
91+
routers=[
92+
Host("{subdomain}.example.org", app=sub_domain),
93+
Mount("/users", app=users),
94+
router,
95+
],
96+
controllers=[ClassBaseController],
97+
)
98+
class ApplicationModule:
99+
@exception_handler(405)
100+
async def method_not_allow_exception(self, request, exec):
101+
return JSONResponse({"detail": "Custom message"}, status_code=405)
102+
103+
@exception_handler(500)
104+
async def error_500(self, request, exec):
105+
return JSONResponse({"detail": "Server Error"}, status_code=500)
106+
107+
@exception_handler(HTTPException)
108+
async def http_exception(self, request, exc):
109+
return JSONResponse({"detail": exc.detail}, status_code=exc.status_code)

tests/test_application/test_application_functions.py

Lines changed: 4 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,8 @@
11
import os
22

3-
from starlette.exceptions import HTTPException
4-
from starlette.responses import JSONResponse, PlainTextResponse
5-
from starlette.routing import Host, Mount, Route, Router
6-
7-
from ellar.common import (
8-
Controller,
9-
Module,
10-
ModuleRouter,
11-
exception_handler,
12-
get,
13-
template_filter,
14-
template_global,
15-
)
3+
from starlette.responses import JSONResponse
4+
5+
from ellar.common import Module, get, template_filter, template_global
166
from ellar.compatible import asynccontextmanager
177
from ellar.core import (
188
App,
@@ -24,7 +14,6 @@
2414
)
2515
from ellar.core.context import IExecutionContext
2616
from ellar.core.events import EventHandler
27-
from ellar.core.guard import APIKeyQuery
2817
from ellar.core.modules import ModuleTemplateRef
2918
from ellar.core.staticfiles import StaticFiles
3019
from ellar.core.templating import Environment
@@ -33,91 +22,7 @@
3322
from ellar.openapi import OpenAPIDocumentModule
3423
from ellar.services.reflector import Reflector
3524

36-
37-
class AppAPIKey(APIKeyQuery):
38-
async def authenticate(self, connection, key):
39-
return key
40-
41-
42-
def custom_sub_domain(request):
43-
return PlainTextResponse("Subdomain: " + request.path_params["subdomain"])
44-
45-
46-
def all_users_page(request):
47-
return PlainTextResponse("Hello, everyone!")
48-
49-
50-
def user_page(request):
51-
username = request.path_params["username"]
52-
return PlainTextResponse(f"Hello, {username}!")
53-
54-
55-
sub_domain = Router(
56-
routes=[
57-
Route("/", custom_sub_domain),
58-
]
59-
)
60-
61-
users = Router(
62-
routes=[
63-
Route("/", endpoint=all_users_page),
64-
Route("/{username}", endpoint=user_page),
65-
]
66-
)
67-
68-
router = ModuleRouter()
69-
70-
71-
@router.get("/func")
72-
@router.head("/func")
73-
def func_homepage(request):
74-
return PlainTextResponse("Hello, world!")
75-
76-
77-
@router.get("/async")
78-
async def async_homepage(request):
79-
return PlainTextResponse("Hello, world!")
80-
81-
82-
@router.ws_route("/ws")
83-
async def websocket_endpoint(session):
84-
await session.accept()
85-
await session.send_text("Hello, world!")
86-
await session.close()
87-
88-
89-
@Controller
90-
class ClassBaseController:
91-
@get("/class")
92-
def class_function(self):
93-
return PlainTextResponse("Hello, world!")
94-
95-
@get("/500")
96-
def runtime_error(self, request):
97-
raise RuntimeError()
98-
99-
100-
@Module(
101-
routers=[
102-
Host("{subdomain}.example.org", app=sub_domain),
103-
Mount("/users", app=users),
104-
router,
105-
],
106-
controllers=[ClassBaseController],
107-
)
108-
class ApplicationModule:
109-
@exception_handler(405)
110-
async def method_not_allow_exception(self, request, exec):
111-
return JSONResponse({"detail": "Custom message"}, status_code=405)
112-
113-
@exception_handler(500)
114-
async def error_500(self, request, exec):
115-
return JSONResponse({"detail": "Server Error"}, status_code=500)
116-
117-
@exception_handler(HTTPException)
118-
async def http_exception(self, request, exc):
119-
return JSONResponse({"detail": exc.detail}, status_code=exc.status_code)
120-
25+
from .sample import AppAPIKey, ApplicationModule
12126

12227
test_module = TestClientFactory.create_test_module_from_module(
12328
module=ApplicationModule, config_module="tests.test_application.settings"

0 commit comments

Comments
 (0)