|
import pathlib
|
|
|
|
from aiohttp import web
|
|
from app.app import Application as BaseApplication
|
|
from app.cache import time_cache_async
|
|
from jinja_markdown2 import MarkdownExtension
|
|
from snek.system import http
|
|
from snek.system.middleware import cors_middleware
|
|
from snek.view.about import AboutHTMLView, AboutMDView
|
|
from snek.view.index import IndexView
|
|
from snek.view.login import LoginView
|
|
from snek.view.login_form import LoginFormView
|
|
from snek.view.register import RegisterView
|
|
from snek.view.register_form import RegisterFormView
|
|
from snek.view.web import WebView
|
|
|
|
|
|
class Application(BaseApplication):
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
middlewares = [
|
|
cors_middleware,
|
|
web.normalize_path_middleware(merge_slashes=True),
|
|
]
|
|
self.template_path = pathlib.Path(__file__).parent.joinpath("templates")
|
|
super().__init__(
|
|
middlewares=middlewares, template_path=self.template_path, *args, **kwargs
|
|
)
|
|
self.jinja2_env.add_extension(MarkdownExtension)
|
|
self.setup_router()
|
|
|
|
def setup_router(self):
|
|
self.router.add_get("/", IndexView)
|
|
self.router.add_static(
|
|
"/",
|
|
pathlib.Path(__file__).parent.joinpath("static"),
|
|
name="static",
|
|
show_index=True,
|
|
)
|
|
self.router.add_view("/about.html", AboutHTMLView)
|
|
self.router.add_view("/about.md", AboutMDView)
|
|
self.router.add_view("/web.html", WebView)
|
|
self.router.add_view("/login.html", LoginView)
|
|
self.router.add_view("/login.json", LoginFormView)
|
|
self.router.add_view("/register.html", RegisterView)
|
|
self.router.add_view("/register.json", RegisterFormView)
|
|
self.router.add_get("/http-get", self.handle_http_get)
|
|
self.router.add_get("/http-photo", self.handle_http_photo)
|
|
|
|
async def handle_test(self, request):
|
|
|
|
return await self.render_template(
|
|
"test.html", request, context={"name": "retoor"}
|
|
)
|
|
|
|
async def handle_http_get(self, request: web.Request):
|
|
url = request.query.get("url")
|
|
content = await http.get(url)
|
|
return web.Response(body=content)
|
|
|
|
async def handle_http_photo(self, request):
|
|
url = request.query.get("url")
|
|
path = await http.create_site_photo(url)
|
|
return web.Response(
|
|
body=path.read_bytes(), headers={"Content-Type": "image/png"}
|
|
)
|
|
|
|
|
|
@time_cache_async(60)
|
|
async def render_template(self, template, request, context=None):
|
|
return await super().render_template(template, request, context)
|
|
|
|
|
|
app = Application()
|
|
|
|
if __name__ == "__main__":
|
|
|
|
web.run_app(app, port=8081, host="0.0.0.0")
|