Rename web to api to reflect, that it's not serving the frontend, split FastAPI creation
This commit is contained in:
28 files changed
+69
-68
No files matched your search
+28
-3
@@ -2,8 +2,13 @@ from __future__ import annotations
|
||||
|
||||
import asyncio
|
||||
import logging
|
||||
import os
|
||||
from collections.abc import AsyncIterator
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
import uvicorn
|
||||
from fastapi import FastAPI
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
|
||||
from zyrarbot.audio.media_probe import MediaProbe
|
||||
from zyrarbot.audio.track_factory import TrackFactory
|
||||
@@ -17,7 +22,7 @@ from zyrarbot.storage.guild_config_repository import GuildConfigRepository
|
||||
from zyrarbot.storage.history_repository import HistoryRepository
|
||||
from zyrarbot.storage.json_file_store import JsonFileStore
|
||||
from zyrarbot.storage.uploads_repository import UploadsRepository
|
||||
from zyrarbot.ui.web.factory import create_app
|
||||
from zyrarbot.ui.api.factory import mount_api
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -50,7 +55,9 @@ class Application:
|
||||
)
|
||||
self.bot.player = self.player
|
||||
|
||||
self.api = create_app(
|
||||
self.web = FastAPI(title="ŻyrarBOT")
|
||||
broadcaster = mount_api(
|
||||
self.web,
|
||||
settings=self.settings,
|
||||
player=self.player,
|
||||
guilds=self.guilds,
|
||||
@@ -59,10 +66,28 @@ class Application:
|
||||
config=self.config,
|
||||
)
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI) -> AsyncIterator[None]:
|
||||
self.player.on_state_change = broadcaster.broadcast
|
||||
broadcaster.start()
|
||||
logger.info("Panel webowy gotowy, rozgłaszanie stanu uruchomione")
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
self.player.on_state_change = None
|
||||
await broadcaster.stop()
|
||||
|
||||
self.web.router.lifespan_context = lifespan
|
||||
|
||||
os.makedirs(self.settings.static_dir, exist_ok=True)
|
||||
self.web.mount(
|
||||
"/", StaticFiles(directory=self.settings.static_dir, html=True), name="static"
|
||||
)
|
||||
|
||||
async def run(self) -> None:
|
||||
"""Startuje serwer web, a następnie bota; panel działa też bez Discorda."""
|
||||
config = uvicorn.Config(
|
||||
self.api,
|
||||
self.web,
|
||||
host=self.settings.web_host,
|
||||
port=self.settings.web_port,
|
||||
log_level="info",
|
||||
|
||||
File renamed without changes.
File renamed without changes.
@@ -9,9 +9,9 @@ from zyrarbot.music.music_player import MusicPlayer
|
||||
from zyrarbot.settings import Settings
|
||||
from zyrarbot.storage.guild_config_repository import GuildConfigRepository
|
||||
from zyrarbot.storage.uploads_repository import UploadsRepository
|
||||
from zyrarbot.ui.web.connection_manager import ConnectionManager
|
||||
from zyrarbot.ui.web.status_broadcaster import StatusBroadcaster
|
||||
from zyrarbot.ui.web.status_service import StatusService
|
||||
from zyrarbot.ui.api.connection_manager import ConnectionManager
|
||||
from zyrarbot.ui.api.status_broadcaster import StatusBroadcaster
|
||||
from zyrarbot.ui.api.status_service import StatusService
|
||||
|
||||
NO_GUILD_DETAIL = "Bot has no active server context"
|
||||
|
||||
@@ -1,21 +1,14 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
import os
|
||||
from collections.abc import AsyncIterator
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
from fastapi import FastAPI
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
|
||||
from zyrarbot.audio.track_factory import TrackFactory
|
||||
from zyrarbot.ui.bot.guild_resolver import GuildResolver
|
||||
from zyrarbot.music.music_player import MusicPlayer
|
||||
from zyrarbot.settings import Settings
|
||||
from zyrarbot.storage.guild_config_repository import GuildConfigRepository
|
||||
from zyrarbot.storage.uploads_repository import UploadsRepository
|
||||
from zyrarbot.ui.web.connection_manager import ConnectionManager
|
||||
from zyrarbot.ui.web.routers import (
|
||||
from zyrarbot.ui.api.connection_manager import ConnectionManager
|
||||
from zyrarbot.ui.api.routers import (
|
||||
playback_router,
|
||||
queue_router,
|
||||
settings_router,
|
||||
@@ -24,10 +17,9 @@ from zyrarbot.ui.web.routers import (
|
||||
voice_router,
|
||||
websocket_router,
|
||||
)
|
||||
from zyrarbot.ui.web.status_broadcaster import StatusBroadcaster
|
||||
from zyrarbot.ui.web.status_service import StatusService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
from zyrarbot.ui.api.status_broadcaster import StatusBroadcaster
|
||||
from zyrarbot.ui.api.status_service import StatusService
|
||||
from zyrarbot.ui.bot.guild_resolver import GuildResolver
|
||||
|
||||
ROUTERS = (
|
||||
status_router.router,
|
||||
@@ -40,7 +32,8 @@ ROUTERS = (
|
||||
)
|
||||
|
||||
|
||||
def create_app(
|
||||
def mount_api(
|
||||
app: FastAPI,
|
||||
*,
|
||||
settings: Settings,
|
||||
player: MusicPlayer,
|
||||
@@ -48,25 +41,12 @@ def create_app(
|
||||
tracks: TrackFactory,
|
||||
uploads: UploadsRepository,
|
||||
config: GuildConfigRepository,
|
||||
) -> FastAPI:
|
||||
"""Buduje aplikację FastAPI i wstrzykuje zależności przez ``app.state``."""
|
||||
) -> StatusBroadcaster:
|
||||
"""Konfiguruje stan API i podmontowuje jego routery do aplikacji."""
|
||||
connections = ConnectionManager()
|
||||
status_service = StatusService(player, guilds)
|
||||
broadcaster = StatusBroadcaster(status_service, connections)
|
||||
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI) -> AsyncIterator[None]:
|
||||
player.on_state_change = broadcaster.broadcast
|
||||
broadcaster.start()
|
||||
logger.info("Panel webowy gotowy, rozgłaszanie stanu uruchomione")
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
player.on_state_change = None
|
||||
await broadcaster.stop()
|
||||
|
||||
app = FastAPI(title="ŻyrarBOT Queue Controller", lifespan=lifespan)
|
||||
|
||||
app.state.settings = settings
|
||||
app.state.player = player
|
||||
app.state.guilds = guilds
|
||||
@@ -80,8 +60,4 @@ def create_app(
|
||||
for router in ROUTERS:
|
||||
app.include_router(router)
|
||||
|
||||
# Pliki panelu montujemy na końcu, aby nie przesłoniły tras API.
|
||||
os.makedirs(settings.static_dir, exist_ok=True)
|
||||
app.mount("/", StaticFiles(directory=settings.static_dir, html=True), name="static")
|
||||
|
||||
return app
|
||||
return broadcaster
|
||||
File renamed without changes.
+6
-6
@@ -10,18 +10,18 @@ from zyrarbot.audio.track_factory import TrackFactory
|
||||
from zyrarbot.music.loop_mode import LoopMode
|
||||
from zyrarbot.music.music_player import MusicPlayer
|
||||
from zyrarbot.storage.uploads_repository import UploadsRepository
|
||||
from zyrarbot.ui.web.dependencies import (
|
||||
from zyrarbot.ui.api.dependencies import (
|
||||
get_active_guild,
|
||||
get_broadcaster,
|
||||
get_player,
|
||||
get_tracks,
|
||||
get_uploads,
|
||||
)
|
||||
from zyrarbot.ui.web.schemas.loop_request import LoopRequest
|
||||
from zyrarbot.ui.web.schemas.play_file_request import PlayFileRequest
|
||||
from zyrarbot.ui.web.schemas.play_request import PlayRequest
|
||||
from zyrarbot.ui.web.schemas.volume_request import VolumeRequest
|
||||
from zyrarbot.ui.web.status_broadcaster import StatusBroadcaster
|
||||
from zyrarbot.ui.api.schemas.loop_request import LoopRequest
|
||||
from zyrarbot.ui.api.schemas.play_file_request import PlayFileRequest
|
||||
from zyrarbot.ui.api.schemas.play_request import PlayRequest
|
||||
from zyrarbot.ui.api.schemas.volume_request import VolumeRequest
|
||||
from zyrarbot.ui.api.status_broadcaster import StatusBroadcaster
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -7,17 +7,17 @@ from fastapi import APIRouter, Depends, HTTPException
|
||||
|
||||
from zyrarbot.music.music_player import MusicPlayer
|
||||
from zyrarbot.settings import Settings
|
||||
from zyrarbot.ui.web.dependencies import (
|
||||
from zyrarbot.ui.api.dependencies import (
|
||||
get_active_guild,
|
||||
get_broadcaster,
|
||||
get_player,
|
||||
get_settings,
|
||||
)
|
||||
from zyrarbot.ui.web.schemas.jump_request import JumpRequest
|
||||
from zyrarbot.ui.web.schemas.remove_request import RemoveRequest
|
||||
from zyrarbot.ui.web.schemas.reorder_request import ReorderRequest
|
||||
from zyrarbot.ui.web.schemas.track_plays_request import TrackPlaysRequest
|
||||
from zyrarbot.ui.web.status_broadcaster import StatusBroadcaster
|
||||
from zyrarbot.ui.api.schemas.jump_request import JumpRequest
|
||||
from zyrarbot.ui.api.schemas.remove_request import RemoveRequest
|
||||
from zyrarbot.ui.api.schemas.reorder_request import ReorderRequest
|
||||
from zyrarbot.ui.api.schemas.track_plays_request import TrackPlaysRequest
|
||||
from zyrarbot.ui.api.status_broadcaster import StatusBroadcaster
|
||||
|
||||
router = APIRouter(prefix="/api", tags=["queue"])
|
||||
|
||||
+4
-4
@@ -10,16 +10,16 @@ from zyrarbot.ui.bot.guild_resolver import GuildResolver
|
||||
from zyrarbot.music.music_player import MusicPlayer
|
||||
from zyrarbot.settings import Settings
|
||||
from zyrarbot.storage.guild_config_repository import GuildConfigRepository
|
||||
from zyrarbot.ui.web.dependencies import (
|
||||
from zyrarbot.ui.api.dependencies import (
|
||||
get_broadcaster,
|
||||
get_config,
|
||||
get_guilds,
|
||||
get_player,
|
||||
get_settings,
|
||||
)
|
||||
from zyrarbot.ui.web.schemas.default_plays_request import DefaultPlaysRequest
|
||||
from zyrarbot.ui.web.schemas.text_channel_request import TextChannelRequest
|
||||
from zyrarbot.ui.web.status_broadcaster import StatusBroadcaster
|
||||
from zyrarbot.ui.api.schemas.default_plays_request import DefaultPlaysRequest
|
||||
from zyrarbot.ui.api.schemas.text_channel_request import TextChannelRequest
|
||||
from zyrarbot.ui.api.status_broadcaster import StatusBroadcaster
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -4,8 +4,8 @@ from typing import Any
|
||||
|
||||
from fastapi import APIRouter, Depends
|
||||
|
||||
from zyrarbot.ui.web.dependencies import get_status_service
|
||||
from zyrarbot.ui.web.status_service import StatusService
|
||||
from zyrarbot.ui.api.dependencies import get_status_service
|
||||
from zyrarbot.ui.api.status_service import StatusService
|
||||
|
||||
router = APIRouter(prefix="/api", tags=["status"])
|
||||
|
||||
+1
-1
@@ -5,7 +5,7 @@ from typing import Any
|
||||
from fastapi import APIRouter, Depends, File, HTTPException, UploadFile
|
||||
|
||||
from zyrarbot.storage.uploads_repository import UploadsRepository
|
||||
from zyrarbot.ui.web.dependencies import get_uploads
|
||||
from zyrarbot.ui.api.dependencies import get_uploads
|
||||
|
||||
router = APIRouter(prefix="/api", tags=["uploads"])
|
||||
|
||||
@@ -6,14 +6,14 @@ from fastapi import APIRouter, Depends, HTTPException
|
||||
from zyrarbot.ui.bot.guild_resolver import GuildResolver
|
||||
from zyrarbot.music.music_player import MusicPlayer
|
||||
from zyrarbot.music.notification_channel_resolver import NotificationChannelResolver
|
||||
from zyrarbot.ui.web.dependencies import (
|
||||
from zyrarbot.ui.api.dependencies import (
|
||||
get_active_guild,
|
||||
get_broadcaster,
|
||||
get_guilds,
|
||||
get_player,
|
||||
)
|
||||
from zyrarbot.ui.web.schemas.connect_request import ConnectRequest
|
||||
from zyrarbot.ui.web.status_broadcaster import StatusBroadcaster
|
||||
from zyrarbot.ui.api.schemas.connect_request import ConnectRequest
|
||||
from zyrarbot.ui.api.status_broadcaster import StatusBroadcaster
|
||||
|
||||
router = APIRouter(prefix="/api", tags=["voice"])
|
||||
|
||||
+3
-3
@@ -4,9 +4,9 @@ import logging
|
||||
|
||||
from fastapi import APIRouter, Depends, WebSocket, WebSocketDisconnect
|
||||
|
||||
from zyrarbot.ui.web.connection_manager import ConnectionManager
|
||||
from zyrarbot.ui.web.dependencies import get_connections, get_socket_status_service
|
||||
from zyrarbot.ui.web.status_service import StatusService
|
||||
from zyrarbot.ui.api.connection_manager import ConnectionManager
|
||||
from zyrarbot.ui.api.dependencies import get_connections, get_socket_status_service
|
||||
from zyrarbot.ui.api.status_service import StatusService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
@@ -4,8 +4,8 @@ import asyncio
|
||||
import contextlib
|
||||
import logging
|
||||
|
||||
from zyrarbot.ui.web.connection_manager import ConnectionManager
|
||||
from zyrarbot.ui.web.status_service import StatusService
|
||||
from zyrarbot.ui.api.connection_manager import ConnectionManager
|
||||
from zyrarbot.ui.api.status_service import StatusService
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
File renamed without changes.
Reference in new issue
Block a user