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: Дополнительные параметры для инициализации модели.
date: sqlalchemy.orm.base.Mapped[datetime.date]
date_cls: Дата создания новости (по умолчанию - текущая дата).
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")
Схема валидации для модели новостей.
Эта схема используется для валидации данных, связанных с новостями.
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.