Edit on GitHub

src.db.models.news

 1from datetime import date as date_cls
 2
 3from fastui.components.display import DisplayLookup, DisplayMode
 4from fastui.events import GoToEvent
 5from pydantic import BaseModel, ConfigDict, Field
 6from sqlalchemy import Date, func
 7from sqlalchemy.orm import Mapped, mapped_column
 8
 9from core.config import Base
10
11
12class News(Base):
13    """Модель новостей.
14
15    Эта модель представляет собой структуру данных для хранения новостей,
16    включая заголовок, содержание и другие атрибуты.
17    """
18
19    __tablename__ = "news"
20    __table_args__ = {"extend_existing": True}
21
22    id: Mapped[int] = mapped_column(primary_key=True)
23    """int: Уникальный идентификатор новости."""
24
25    date: Mapped[date_cls] = mapped_column(type_=Date, server_default=func.now())
26    """date_cls: Дата создания новости (по умолчанию - текущая дата)."""
27
28    title: Mapped[str]
29    """str: Заголовок новости."""
30
31    excerpt: Mapped[str]
32    """str: Краткое содержание новости."""
33
34    content_title: Mapped[str]
35    """str: Заголовок содержания новости."""
36
37    content: Mapped[str]
38    """str: Полное содержание новости."""
39
40    class ValidationSchema(BaseModel):
41        """Схема валидации для модели новостей.
42
43        Эта схема используется для валидации данных, связанных с новостями.
44        """
45
46        id: int | None = Field(default=None, title="ID")
47        """Уникальный идентификатор новости."""
48
49        date: date_cls = Field(title="Create date")
50        """Дата создания новости."""
51
52        title: str = Field(title="Title")
53        """Заголовок новости."""
54
55        excerpt: str = Field(title="Excerpt")
56        """Краткое содержание новости."""
57
58        content_title: str = Field(title="Content Title")
59        """Заголовок содержания новости."""
60
61        content: str = Field(title="Content")
62        """Полное содержание новости."""
63
64        model_config = ConfigDict(extra="ignore")
65
66    # INTERFACE (fastui)
67    site_display = [
68        DisplayLookup(
69            field="id",
70            on_click=GoToEvent(url="/bot/tables/news/?news_id={id}"),
71        ),
72        DisplayLookup(field="title"),
73        DisplayLookup(field="date", mode=DisplayMode.date),
74    ]
75    """list[DisplayLookup]: Отображение новостей на сайте."""
76
77    site_display_all = site_display + [
78        DisplayLookup(field="excerpt"),
79        DisplayLookup(field="content_title"),
80        DisplayLookup(field="content", mode=DisplayMode.markdown),
81    ]
82    """list[DisplayLookup]: Полное отображение новостей на сайте."""
83
84    def __init__(self, **kwargs):
85        """Инициализирует модель новостей.
86
87        Args:
88            **kwargs: Дополнительные параметры для инициализации модели.
89        """
90        if kwargs:
91            validated_data = self.ValidationSchema(**kwargs).model_dump(
92                exclude={"site_date"}
93            )
94            super().__init__(**(validated_data))
95        else:
96            super().__init__(**(kwargs))
class News(sqlalchemy.inspection.Inspectable[sqlalchemy.orm.state.InstanceState[typing.Any]]):
13class News(Base):
14    """Модель новостей.
15
16    Эта модель представляет собой структуру данных для хранения новостей,
17    включая заголовок, содержание и другие атрибуты.
18    """
19
20    __tablename__ = "news"
21    __table_args__ = {"extend_existing": True}
22
23    id: Mapped[int] = mapped_column(primary_key=True)
24    """int: Уникальный идентификатор новости."""
25
26    date: Mapped[date_cls] = mapped_column(type_=Date, server_default=func.now())
27    """date_cls: Дата создания новости (по умолчанию - текущая дата)."""
28
29    title: Mapped[str]
30    """str: Заголовок новости."""
31
32    excerpt: Mapped[str]
33    """str: Краткое содержание новости."""
34
35    content_title: Mapped[str]
36    """str: Заголовок содержания новости."""
37
38    content: Mapped[str]
39    """str: Полное содержание новости."""
40
41    class ValidationSchema(BaseModel):
42        """Схема валидации для модели новостей.
43
44        Эта схема используется для валидации данных, связанных с новостями.
45        """
46
47        id: int | None = Field(default=None, title="ID")
48        """Уникальный идентификатор новости."""
49
50        date: date_cls = Field(title="Create date")
51        """Дата создания новости."""
52
53        title: str = Field(title="Title")
54        """Заголовок новости."""
55
56        excerpt: str = Field(title="Excerpt")
57        """Краткое содержание новости."""
58
59        content_title: str = Field(title="Content Title")
60        """Заголовок содержания новости."""
61
62        content: str = Field(title="Content")
63        """Полное содержание новости."""
64
65        model_config = ConfigDict(extra="ignore")
66
67    # INTERFACE (fastui)
68    site_display = [
69        DisplayLookup(
70            field="id",
71            on_click=GoToEvent(url="/bot/tables/news/?news_id={id}"),
72        ),
73        DisplayLookup(field="title"),
74        DisplayLookup(field="date", mode=DisplayMode.date),
75    ]
76    """list[DisplayLookup]: Отображение новостей на сайте."""
77
78    site_display_all = site_display + [
79        DisplayLookup(field="excerpt"),
80        DisplayLookup(field="content_title"),
81        DisplayLookup(field="content", mode=DisplayMode.markdown),
82    ]
83    """list[DisplayLookup]: Полное отображение новостей на сайте."""
84
85    def __init__(self, **kwargs):
86        """Инициализирует модель новостей.
87
88        Args:
89            **kwargs: Дополнительные параметры для инициализации модели.
90        """
91        if kwargs:
92            validated_data = self.ValidationSchema(**kwargs).model_dump(
93                exclude={"site_date"}
94            )
95            super().__init__(**(validated_data))
96        else:
97            super().__init__(**(kwargs))

Модель новостей.

Эта модель представляет собой структуру данных для хранения новостей, включая заголовок, содержание и другие атрибуты.

News(**kwargs)

Инициализирует модель новостей.

Arguments:
  • **kwargs: Дополнительные параметры для инициализации модели.
id: sqlalchemy.orm.base.Mapped[int]

int: Уникальный идентификатор новости.

date: sqlalchemy.orm.base.Mapped[datetime.date]

date_cls: Дата создания новости (по умолчанию - текущая дата).

title: sqlalchemy.orm.base.Mapped[str]

str: Заголовок новости.

excerpt: sqlalchemy.orm.base.Mapped[str]

str: Краткое содержание новости.

content_title: sqlalchemy.orm.base.Mapped[str]

str: Заголовок содержания новости.

content: sqlalchemy.orm.base.Mapped[str]

str: Полное содержание новости.

site_display = [DisplayLookup(mode=None, title=None, on_click=GoToEvent(url='/bot/tables/news/?news_id={id}', query=None, target=None, type='go-to'), field='id', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='title', table_width_percent=None), DisplayLookup(mode=<DisplayMode.date: 'date'>, title=None, on_click=None, field='date', table_width_percent=None)]

list[DisplayLookup]: Отображение новостей на сайте.

site_display_all = [DisplayLookup(mode=None, title=None, on_click=GoToEvent(url='/bot/tables/news/?news_id={id}', query=None, target=None, type='go-to'), field='id', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='title', table_width_percent=None), DisplayLookup(mode=<DisplayMode.date: 'date'>, title=None, on_click=None, field='date', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='excerpt', table_width_percent=None), DisplayLookup(mode=None, title=None, on_click=None, field='content_title', table_width_percent=None), DisplayLookup(mode=<DisplayMode.markdown: 'markdown'>, title=None, on_click=None, field='content', table_width_percent=None)]

list[DisplayLookup]: Полное отображение новостей на сайте.

class News.ValidationSchema(pydantic.main.BaseModel):
41    class ValidationSchema(BaseModel):
42        """Схема валидации для модели новостей.
43
44        Эта схема используется для валидации данных, связанных с новостями.
45        """
46
47        id: int | None = Field(default=None, title="ID")
48        """Уникальный идентификатор новости."""
49
50        date: date_cls = Field(title="Create date")
51        """Дата создания новости."""
52
53        title: str = Field(title="Title")
54        """Заголовок новости."""
55
56        excerpt: str = Field(title="Excerpt")
57        """Краткое содержание новости."""
58
59        content_title: str = Field(title="Content Title")
60        """Заголовок содержания новости."""
61
62        content: str = Field(title="Content")
63        """Полное содержание новости."""
64
65        model_config = ConfigDict(extra="ignore")

Схема валидации для модели новостей.

Эта схема используется для валидации данных, связанных с новостями.

id: int | None

Уникальный идентификатор новости.

date: datetime.date

Дата создания новости.

title: str

Заголовок новости.

excerpt: str

Краткое содержание новости.

content_title: str

Заголовок содержания новости.

content: str

Полное содержание новости.

model_config = {'extra': 'ignore'}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

model_fields: ClassVar[Dict[str, pydantic.fields.FieldInfo]] = {'id': FieldInfo(annotation=Union[int, NoneType], required=False, default=None, title='ID'), 'date': FieldInfo(annotation=date, required=True, title='Create date'), 'title': FieldInfo(annotation=str, required=True, title='Title'), 'excerpt': FieldInfo(annotation=str, required=True, title='Excerpt'), 'content_title': FieldInfo(annotation=str, required=True, title='Content Title'), 'content': FieldInfo(annotation=str, required=True, title='Content')}

Metadata about the fields defined on the model, mapping of field names to [FieldInfo][pydantic.fields.FieldInfo] objects.

This replaces Model.__fields__ from Pydantic V1.

model_computed_fields: ClassVar[Dict[str, pydantic.fields.ComputedFieldInfo]] = {}

A dictionary of computed field names and their corresponding ComputedFieldInfo objects.