File size: 787 Bytes
3ef184a
 
 
87dbdac
 
 
3ef184a
 
 
87dbdac
3ef184a
 
 
 
87dbdac
3ef184a
 
 
 
87dbdac
3ef184a
 
 
87dbdac
3ef184a
 
87dbdac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
from abc import ABC, abstractmethod
from typing import TypeVar, Generic, List

T = TypeVar("T")
U = TypeVar("U")


class BaseMapper(Generic[T, U], ABC):
    """Base mapper class for mapping between model and schema objects."""

    @abstractmethod
    def to_schema(self, model: T) -> U:
        """Map from model to schema."""
        pass

    @abstractmethod
    def to_model(self, schema: U) -> T:
        """Map from schema to model."""
        pass

    def to_schema_list(self, models: List[T]) -> List[U]:
        """Map a list of models to schemas."""
        return [self.to_schema(model) for model in models]

    def to_model_list(self, schemas: List[U]) -> List[T]:
        """Map a list of schemas to models."""
        return [self.to_model(schema) for schema in schemas]