api/base.py

110 lines
3.0 KiB
Python
Raw Normal View History

2024-08-10 22:49:00 -04:00
#!/usr/bin/env python3.12
import importlib
import logging
2024-10-02 20:54:34 -04:00
import asyncio
2024-08-11 13:55:11 -04:00
from typing import Any
from fastapi import FastAPI, Request
2024-08-10 22:49:00 -04:00
from fastapi.middleware.cors import CORSMiddleware
from lyric_search.sources import redis_cache
2024-10-02 20:54:34 -04:00
2024-08-10 22:49:00 -04:00
logger = logging.getLogger()
2025-01-12 08:08:06 -05:00
logger.setLevel(logging.INFO)
2024-08-10 22:49:00 -04:00
2024-10-02 20:54:34 -04:00
loop = asyncio.get_event_loop()
2024-08-15 20:29:41 -04:00
app = FastAPI(title="codey.lol API",
version="0.1a",
contact={
'name': 'codey'
2024-10-02 20:54:34 -04:00
},
loop=loop)
app.loop = loop
2024-08-10 22:49:00 -04:00
constants = importlib.import_module("constants").Constants()
2024-08-14 22:43:20 -04:00
util = importlib.import_module("util").Utilities(app, constants)
2024-08-13 19:21:48 -04:00
glob_state = importlib.import_module("state").State(app, util, constants)
2024-08-10 22:49:00 -04:00
2024-08-14 22:43:20 -04:00
2024-08-10 22:49:00 -04:00
origins = [
"https://codey.lol",
2024-11-29 15:33:12 -05:00
"https://api.codey.lol"
2024-08-10 22:49:00 -04:00
]
app.add_middleware(CORSMiddleware,
allow_origins=origins,
allow_credentials=True,
allow_methods=["POST", "GET", "HEAD"],
2024-08-10 22:49:00 -04:00
allow_headers=["*"])
2024-08-13 19:21:48 -04:00
2025-01-11 20:59:10 -05:00
# pylint: disable=missing-function-docstring
2024-08-10 22:49:00 -04:00
"""
Blacklisted routes
"""
@app.get("/")
def disallow_get():
return util.get_blocked_response()
2025-01-23 13:02:03 -05:00
@app.head("/")
def base_head():
return
@app.get("/{path}")
def disallow_get_any(request: Request, var: Any = None): # pylint: disable=unused-argument
path = request.path_params['path']
if not (
isinstance(path, str)
and
path.split("/", maxsplit=1) == "widget"
):
return util.get_blocked_response()
else:
logging.info("OK, %s",
path)
2024-08-10 22:49:00 -04:00
@app.post("/")
def disallow_base_post():
return util.get_blocked_response()
"""
End Blacklisted Routes
"""
2025-01-11 20:59:10 -05:00
# pylint: enable=missing-function-docstring
2024-08-10 22:49:00 -04:00
"""
Actionable Routes
"""
2024-08-13 19:21:48 -04:00
counter_endpoints = importlib.import_module("endpoints.counters").Counters(app, util, constants, glob_state)
randmsg_endpoint = importlib.import_module("endpoints.rand_msg").RandMsg(app, util, constants, glob_state)
transcription_endpoints = importlib.import_module("endpoints.transcriptions").Transcriptions(app, util, constants, glob_state)
2024-08-14 22:43:20 -04:00
ai_endpoints = importlib.import_module("endpoints.ai").AI(app, util, constants, glob_state)
2024-08-11 17:04:06 -04:00
# Below also provides: /lyric_cache_list/ (in addition to /lyric_search/)
2024-08-13 19:21:48 -04:00
lyric_search_endpoint = importlib.import_module("endpoints.lyric_search").LyricSearch(app, util, constants, glob_state)
2024-08-11 17:28:43 -04:00
# Below provides numerous LastFM-fed endpoints
2024-08-13 19:21:48 -04:00
lastfm_endpoints = importlib.import_module("endpoints.lastfm").LastFM(app, util, constants, glob_state)
2024-08-13 10:50:11 -04:00
# Below: YT endpoint(s)
2024-08-13 19:21:48 -04:00
yt_endpoints = importlib.import_module("endpoints.yt").YT(app, util, constants, glob_state)
2024-08-19 11:42:23 -04:00
# Below: XC endpoint(s)
xc_endpoints = importlib.import_module("endpoints.xc").XC(app, util, constants, glob_state)
2024-11-14 14:37:32 -05:00
# Below: Karma endpoint(s)
karma_endpoints = importlib.import_module("endpoints.karma").Karma(app, util, constants, glob_state)
# Below: Misc endpoints
misc_endpoints = importlib.import_module("endpoints.misc").Misc(app, util, constants, glob_state)
2024-08-13 19:21:48 -04:00
2025-01-19 07:01:07 -05:00
"""
End Actionable Routes
"""
2024-08-10 22:49:00 -04:00
2024-08-11 12:46:24 -04:00
2024-08-10 22:49:00 -04:00
"""
2025-01-19 07:01:07 -05:00
Startup
"""
redis_cache = redis_cache.RedisCache()
asyncio.get_event_loop().create_task(
redis_cache.create_index())