# retoor from __future__ import annotations from typing import Any, Optional from devplacepy.schemas.base import _Out from devplacepy.schemas.content import UserOut class AuthPageOut(_Out): page: str = "" next_url: Optional[str] = None registration_closed: Optional[bool] = None sent: Optional[bool] = None token: Optional[str] = None errors: list = [] class LandingArticleOut(_Out): uid: str = "" slug: str = "" title: Optional[str] = None description: Optional[str] = None url: Optional[str] = None source_name: Optional[str] = None grade: int = 0 featured: int = 0 synced_at: Optional[str] = None time_ago: Optional[str] = None image_url: Optional[str] = None class LandingPostOut(_Out): post: Optional[Any] = None author: Optional[UserOut] = None time_ago: Optional[str] = None comment_count: int = 0 stars: int = 0 slug: str = "" class TrendingTopicOut(_Out): topic: str = "" count: int = 0 class LandingOut(_Out): is_authenticated: bool = False user_post_count: int = 0 user_stars: int = 0 user_xp: int = 0 user_level: int = 1 xp_progress_pct: int = 0 unread_count: int = 0 landing_articles: list[LandingArticleOut] = [] landing_posts: list[LandingPostOut] = [] top_contributors: list = [] trending_topics: list[TrendingTopicOut] = [] class DeviiPageOut(_Out): page_title: Optional[str] = None meta_description: Optional[str] = None meta_robots: Optional[str] = None canonical_url: Optional[str] = None og_title: Optional[str] = None og_description: Optional[str] = None og_image: Optional[str] = None og_type: Optional[str] = None breadcrumbs: list = [] page_schema: Optional[Any] = None prev_url: Optional[str] = None next_url: Optional[str] = None user: Optional[Any] = None