freeleaps-ops/venv/lib/python3.12/site-packages/beanie/odm/settings/timeseries.py

53 lines
1.7 KiB
Python

from enum import Enum
from typing import Annotated, Any, Dict, Optional
from pydantic import BaseModel, Field
class Granularity(str, Enum):
"""
Time Series Granuality
"""
seconds = "seconds"
minutes = "minutes"
hours = "hours"
class TimeSeriesConfig(BaseModel):
"""
Time Series Collection config
"""
time_field: str
meta_field: Optional[str] = None
granularity: Optional[Granularity] = None
bucket_max_span_seconds: Optional[int] = None
bucket_rounding_second: Annotated[
Optional[int],
Field(
deprecated="This field is deprecated in favor of "
"'bucket_rounding_seconds'.",
),
] = None
bucket_rounding_seconds: Optional[int] = None
expire_after_seconds: Optional[int] = None
def build_query(self, collection_name: str) -> Dict[str, Any]:
res: Dict[str, Any] = {"name": collection_name}
timeseries: Dict[str, Any] = {"timeField": self.time_field}
if self.meta_field is not None:
timeseries["metaField"] = self.meta_field
if self.granularity is not None:
timeseries["granularity"] = self.granularity
if self.bucket_max_span_seconds is not None:
timeseries["bucketMaxSpanSeconds"] = self.bucket_max_span_seconds
if self.bucket_rounding_second is not None: # Deprecated field
timeseries["bucketRoundingSeconds"] = self.bucket_rounding_second
if self.bucket_rounding_seconds is not None:
timeseries["bucketRoundingSeconds"] = self.bucket_rounding_seconds
res["timeseries"] = timeseries
if self.expire_after_seconds is not None:
res["expireAfterSeconds"] = self.expire_after_seconds
return res