|
18 | 18 | import jinja2 |
19 | 19 |
|
20 | 20 | from pymongo import AsyncMongoClient |
| 21 | +from aiohttp_swagger3 import SwaggerDocs, SwaggerInfo |
21 | 22 |
|
22 | 23 | from db_wrapper import AsyncDBWrapper |
23 | 24 | from middlewares import ( |
@@ -58,7 +59,15 @@ def make_app( |
58 | 59 | simple_cookie_storage: bool = False, |
59 | 60 | anon_as_test_users: bool = False, |
60 | 61 | ) -> Application: |
| 62 | + |
61 | 63 | app = web.Application() |
| 64 | + |
| 65 | + swagger = SwaggerDocs( |
| 66 | + app, |
| 67 | + validate=False, |
| 68 | + info=SwaggerInfo(title="Pychess API", version="1.0.0"), |
| 69 | + ) |
| 70 | + |
62 | 71 | app.middlewares.append(redirect_to_https) |
63 | 72 | app[request_protection_state_key] = RequestProtectionState() |
64 | 73 | app.middlewares.append(request_protection_middleware) |
@@ -104,11 +113,27 @@ def make_app( |
104 | 113 | app.on_shutdown.append(shutdown) |
105 | 114 | app.on_cleanup.append(close_mongodb_client) |
106 | 115 |
|
| 116 | + async def openapi_json(request): |
| 117 | + return web.json_response(swagger.spec) |
| 118 | + |
| 119 | + app.router.add_get("/openapi.json", openapi_json) |
| 120 | + |
107 | 121 | # Setup routes. |
108 | 122 | for route in get_routes: |
109 | | - app.router.add_get(route[0], route[1], allow_head=False) |
| 123 | + path, handler = route |
| 124 | + if path == "/api/games/user/{profileId}/pgn": |
| 125 | + swagger.add_get( |
| 126 | + path, |
| 127 | + handler, |
| 128 | + allow_head=False, |
| 129 | + ) |
| 130 | + else: |
| 131 | + app.router.add_get(path, handler, allow_head=False) |
| 132 | + |
110 | 133 | for route in post_routes: |
111 | | - app.router.add_post(route[0], route[1]) |
| 134 | + path, handler = route |
| 135 | + app.router.add_post(path, handler) |
| 136 | + |
112 | 137 | app.router.add_static("/static", "static", append_version=True) |
113 | 138 | app.middlewares.append(handle_404) |
114 | 139 |
|
|
0 commit comments