feat(charting): unify configurable time windows
This commit is contained in:
@@ -9,7 +9,7 @@ from __future__ import annotations
|
||||
|
||||
from typing import TYPE_CHECKING, Any, Literal
|
||||
|
||||
from pydantic import Field
|
||||
from pydantic import Field, field_validator
|
||||
|
||||
from media_library_viewer_api.clients.qbittorrent import QbittorrentClient
|
||||
from media_library_viewer_api.integrations.base import (
|
||||
@@ -83,7 +83,7 @@ class QbittorrentWidgetConfig(WidgetConfigBase):
|
||||
class QbittorrentSpeedWidgetConfig(WidgetConfigBase):
|
||||
"""Speed chart config. The source returns raw bytes/sec; the frontend scales."""
|
||||
|
||||
window_seconds: int = Field(default=1_800, ge=60, le=86_400)
|
||||
window_seconds: int | Literal["all"] = 1_800
|
||||
unit: Literal[
|
||||
"none",
|
||||
"bytes",
|
||||
@@ -95,6 +95,16 @@ class QbittorrentSpeedWidgetConfig(WidgetConfigBase):
|
||||
] = "bytes_per_sec"
|
||||
scale: Literal["auto", "k", "m", "g", "t"] = "auto"
|
||||
|
||||
@field_validator("window_seconds")
|
||||
@classmethod
|
||||
def validate_window_seconds(cls, value: int | str) -> int | str:
|
||||
"""Allow all retained samples while bounding explicit numeric windows."""
|
||||
if value == "all":
|
||||
return value
|
||||
if not isinstance(value, int) or not 60 <= value <= 86_400:
|
||||
raise ValueError("window_seconds must be between 60 and 86400, or 'all'")
|
||||
return value
|
||||
|
||||
|
||||
DEFINITION = ServiceDefinition(
|
||||
service_type="qbittorrent",
|
||||
|
||||
Reference in New Issue
Block a user