Files
Remote-Terminal-for-MeshCore/app/routers/settings.py
Jack Kingsman 557cb12879 Initial commit
2026-01-06 20:02:48 -08:00

49 lines
1.6 KiB
Python

import logging
from fastapi import APIRouter
from pydantic import BaseModel, Field
from app.config import settings
logger = logging.getLogger(__name__)
router = APIRouter(prefix="/settings", tags=["settings"])
class AppSettingsResponse(BaseModel):
max_radio_contacts: int = Field(description="Maximum non-repeater contacts to keep on radio for DM ACKs")
class AppSettingsUpdate(BaseModel):
max_radio_contacts: int | None = Field(
default=None,
ge=1,
le=1000,
description="Maximum non-repeater contacts to keep on radio (1-1000)"
)
@router.get("", response_model=AppSettingsResponse)
async def get_settings() -> AppSettingsResponse:
"""Get current application settings."""
return AppSettingsResponse(
max_radio_contacts=settings.max_radio_contacts,
)
@router.patch("", response_model=AppSettingsResponse)
async def update_settings(update: AppSettingsUpdate) -> AppSettingsResponse:
"""Update application settings.
Note: Changes are applied immediately but not persisted across restarts.
Set MESHCORE_MAX_RADIO_CONTACTS environment variable for persistent changes.
"""
if update.max_radio_contacts is not None:
logger.info("Updating max_radio_contacts from %d to %d",
settings.max_radio_contacts, update.max_radio_contacts)
# Pydantic settings are mutable, we can update them directly
object.__setattr__(settings, 'max_radio_contacts', update.max_radio_contacts)
return AppSettingsResponse(
max_radio_contacts=settings.max_radio_contacts,
)