29 lines
920 B
Python
29 lines
920 B
Python
from typing import Any, Dict, Optional, Generic, TypeVar
|
|
from pydantic import BaseModel
|
|
from datetime import datetime
|
|
|
|
InputType = TypeVar("InputType", bound=BaseModel)
|
|
|
|
class ServiceInput(Generic[InputType]):
|
|
""" Base unificada de entradas """
|
|
|
|
def __init__(self, raw_data: Any, source: str = "api"):
|
|
self.raw_data = raw_data
|
|
self.source = source
|
|
self.timestamp = datetime.utcnow()
|
|
self._validated = None
|
|
|
|
def validate(self, schema: type[InputType]) -> InputType:
|
|
"""Validacion de datos en contra de un schema"""
|
|
self._validated = schema(**self.raw_data)
|
|
return self._validated
|
|
|
|
def get_validated(self) -> Optional[InputType]:
|
|
return self._validated
|
|
|
|
def to_dict(self) -> Dict:
|
|
return {
|
|
"source": self.source,
|
|
"timestamp": self.timestamp.isoformat(),
|
|
"data": self.raw_data,
|
|
} |