123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- from typing import Type
- from psqlextra.models import PostgresViewModel
- from .model import PostgresModelState
- class PostgresViewModelState(PostgresModelState):
- """Represents the state of a :see:PostgresViewModel in the migrations."""
- def __init__(self, *args, view_options={}, **kwargs):
- """Initializes a new instance of :see:PostgresViewModelState.
- Arguments:
- view_options:
- Dictionary of options for views.
- See: PostgresViewModelMeta for a list.
- """
- super().__init__(*args, **kwargs)
- self.view_options = dict(view_options)
- @classmethod
- def _pre_new( # type: ignore[override]
- cls,
- model: Type[PostgresViewModel],
- model_state: "PostgresViewModelState",
- ) -> "PostgresViewModelState":
- """Called when a new model state is created from the specified
- model."""
- model_state.view_options = dict(model._view_meta.original_attrs)
- return model_state
- def _pre_clone( # type: ignore[override]
- self, model_state: "PostgresViewModelState"
- ) -> "PostgresViewModelState":
- """Called when this model state is cloned."""
- model_state.view_options = dict(self.view_options)
- return model_state
- def _pre_render(self, name: str, bases, attributes):
- """Called when this model state is rendered into a model."""
- view_meta = type("ViewMeta", (), dict(self.view_options))
- return name, bases, {**attributes, "ViewMeta": view_meta}
- @classmethod
- def _get_base_model_class(self) -> Type[PostgresViewModel]:
- """Gets the class to use as a base class for rendered models."""
- return PostgresViewModel
|