Skip to content

Commit

Permalink
remove disable_web_page_preview usage, move example to mega bot
Browse files Browse the repository at this point in the history
  • Loading branch information
Tishka17 committed Dec 16, 2024
1 parent 71b3088 commit 74d0d6e
Show file tree
Hide file tree
Showing 10 changed files with 124 additions and 106 deletions.
95 changes: 0 additions & 95 deletions example/link_preview.py

This file was deleted.

2 changes: 2 additions & 0 deletions example/loading.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
setup_dialogs,
)
from aiogram_dialog.widgets.kbd import Button
from aiogram_dialog.widgets.link_preview import LinkPreview
from aiogram_dialog.widgets.text import Const, Multi, Progress

API_TOKEN = os.getenv("BOT_TOKEN")
Expand Down Expand Up @@ -75,6 +76,7 @@ async def background(callback: CallbackQuery, manager: BaseDialogManager):
Window(
Const("Press button to start processing"),
Button(Const("Start"), id="start", on_click=start_bg),
LinkPreview(url=Const("http://ya.ru")),
state=MainSG.main,
),
)
Expand Down
2 changes: 2 additions & 0 deletions example/mega/bot.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
from bot_dialogs.calendar import calendar_dialog
from bot_dialogs.counter import counter_dialog
from bot_dialogs.layouts import layouts_dialog
from bot_dialogs.link_preview import link_preview_dialog
from bot_dialogs.main import main_dialog
from bot_dialogs.mutltiwidget import multiwidget_dialog
from bot_dialogs.reply_buttons import reply_kbd_dialog
Expand Down Expand Up @@ -68,6 +69,7 @@ async def on_unknown_intent(event: ErrorEvent, dialog_manager: DialogManager):
multiwidget_dialog,
switch_dialog,
reply_kbd_dialog,
link_preview_dialog,
)


Expand Down
82 changes: 82 additions & 0 deletions example/mega/bot_dialogs/link_preview.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
from aiogram_dialog import (
Dialog,
Window,
)
from aiogram_dialog.widgets.kbd import SwitchTo
from aiogram_dialog.widgets.link_preview import LinkPreview
from aiogram_dialog.widgets.text import Const, Format
from . import states
from .common import MAIN_MENU_BUTTON


async def links_getter(**_):
return {
"main": "https://en.wikipedia.org/wiki/HTML_element",
"photo": "https://en.wikipedia.org/wiki/Hyperlink",
}


LinkPreview_MAIN_MENU_BUTTON = SwitchTo(
text=Const("Back"), id="back", state=states.LinkPreview.MAIN,
)
COMMON_TEXT = Format(
"This is demo of different link preview options.\n"
"Link in text: {main}\n"
"Link in preview can be different\n\n"
"Current mode is:",
)

BACK = SwitchTo(Const("back"), "_back", states.LinkPreview.MAIN)

link_preview_dialog = Dialog(
Window(
COMMON_TEXT,
Format("Default"),
SwitchTo(
Const("disable"), "_disable", states.LinkPreview.IS_DISABLED,
),
SwitchTo(
Const("prefer small media"), "_prefer_small_media",
states.LinkPreview.SMALL_MEDIA,
),
SwitchTo(
Const("prefer large media"), "_prefer_large_media",
states.LinkPreview.LARGE_MEDIA,
),
SwitchTo(
Const("show above text"), "_show_above_text",
states.LinkPreview.SHOW_ABOVE_TEXT,
),
MAIN_MENU_BUTTON,
state=states.LinkPreview.MAIN,
),
Window(
COMMON_TEXT,
Const("is_disabled=True"),
LinkPreview(is_disabled=True),
LinkPreview_MAIN_MENU_BUTTON,
state=states.LinkPreview.IS_DISABLED,
),
Window(
COMMON_TEXT,
Const("prefer_small_media=True"),
LinkPreview(Format("{photo}"), prefer_small_media=True),
LinkPreview_MAIN_MENU_BUTTON,
state=states.LinkPreview.SMALL_MEDIA,
),
Window(
COMMON_TEXT,
Const("prefer_large_media=True"),
LinkPreview(Format("{photo}"), prefer_large_media=True),
LinkPreview_MAIN_MENU_BUTTON,
state=states.LinkPreview.LARGE_MEDIA,
),
Window(
COMMON_TEXT,
Const("show_above_text=True"),
LinkPreview(Format("{photo}"), show_above_text=True),
LinkPreview_MAIN_MENU_BUTTON,
state=states.LinkPreview.SHOW_ABOVE_TEXT,
),
getter=links_getter,
)
5 changes: 5 additions & 0 deletions example/mega/bot_dialogs/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@
id="switch",
state=states.Switch.MAIN,
),
Start(
text=Const("🔗 Link Preview"),
id="linkpreview",
state=states.LinkPreview.MAIN,
),
Start(
text=Const("⌨️ Reply keyboard"),
id="reply",
Expand Down
8 changes: 8 additions & 0 deletions example/mega/bot_dialogs/states.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,11 @@ class Switch(StatesGroup):
MAIN = State()
INPUT = State()
LAST = State()


class LinkPreview(StatesGroup):
MAIN = State()
IS_DISABLED = State()
SMALL_MEDIA = State()
LARGE_MEDIA = State()
SHOW_ABOVE_TEXT = State()
1 change: 0 additions & 1 deletion src/aiogram_dialog/api/entities/new_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,5 @@ class NewMessage:
reply_markup: Optional[MarkupVariant] = None
parse_mode: Optional[str] = None
show_mode: ShowMode = ShowMode.AUTO
disable_web_page_preview: Optional[bool] = None
media: Optional[MediaAttachment] = None
link_preview_options: Optional[LinkPreviewOptions] = None
3 changes: 0 additions & 3 deletions src/aiogram_dialog/manager/message_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,6 @@ async def edit_text(
text=new_message.text,
reply_markup=new_message.reply_markup,
parse_mode=new_message.parse_mode,
disable_web_page_preview=new_message.disable_web_page_preview,
link_preview_options=new_message.link_preview_options,
)

Expand All @@ -367,7 +366,6 @@ async def edit_media(
caption=new_message.text,
reply_markup=new_message.reply_markup,
parse_mode=new_message.parse_mode,
disable_web_page_preview=new_message.disable_web_page_preview,
media=await self.get_media_source(new_message.media, bot),
**new_message.media.kwargs,
)
Expand Down Expand Up @@ -396,7 +394,6 @@ async def send_text(self, bot: Bot, new_message: NewMessage) -> Message:
text=new_message.text,
message_thread_id=new_message.thread_id,
business_connection_id=new_message.business_connection_id,
disable_web_page_preview=new_message.disable_web_page_preview,
reply_markup=new_message.reply_markup,
parse_mode=new_message.parse_mode,
link_preview_options=new_message.link_preview_options,
Expand Down
14 changes: 10 additions & 4 deletions src/aiogram_dialog/widgets/utils.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from collections.abc import Callable, Sequence
from typing import Union
from typing import Union, Optional

from aiogram_dialog.api.exceptions import InvalidWidgetType
from aiogram_dialog.api.internal import DataGetter, LinkPreviewWidget
Expand Down Expand Up @@ -76,19 +76,25 @@ def ensure_media(widget: Union[Media, Sequence[Media]]) -> Media:

def ensure_link_preview(
widget: Union[LinkPreviewWidget, Sequence[LinkPreviewWidget]],
) -> LinkPreviewWidget:
) -> Optional[LinkPreviewWidget]:
if isinstance(widget, LinkPreviewWidget):
return widget
if len(widget) > 1:
raise ValueError("Only one link preview widget is supported")
if len(widget) == 1:
return widget[0]
return LinkPreviewBase()
return None


def ensure_widgets(
widgets: Sequence[WidgetSrc],
) -> tuple[Text, Keyboard, Union[BaseInput, None], Media, LinkPreviewWidget]:
) -> tuple[
Text,
Keyboard,
Optional[BaseInput],
Media,
Optional[LinkPreviewWidget],
]:
texts = []
keyboards = []
inputs = []
Expand Down
18 changes: 15 additions & 3 deletions src/aiogram_dialog/window.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import warnings
from logging import getLogger
from typing import Any, Optional, cast

Expand Down Expand Up @@ -25,6 +26,7 @@
from .dialog import OnResultEvent
from .widgets.data import PreviewAwareGetter
from .widgets.kbd import Keyboard
from .widgets.link_preview import LinkPreview
from .widgets.markup.inline_keyboard import InlineKeyboardFactory
from .widgets.utils import (
GetterVariant,
Expand All @@ -47,7 +49,7 @@ def __init__(
on_process_result: Optional[OnResultEvent] = None,
markup_factory: MarkupFactory = _DEFAULT_MARKUP_FACTORY,
parse_mode: Optional[str] = UNSET_PARSE_MODE,
disable_web_page_preview: Optional[bool] = UNSET_DISABLE_WEB_PAGE_PREVIEW, # noqa: E501
disable_web_page_preview: Optional[bool] = None, # noqa: E501
preview_add_transitions: Optional[list[Keyboard]] = None,
preview_data: GetterVariant = None,
):
Expand All @@ -66,8 +68,19 @@ def __init__(
self.on_process_result = on_process_result
self.markup_factory = markup_factory
self.parse_mode = parse_mode
self.disable_web_page_preview = disable_web_page_preview
self.preview_add_transitions = preview_add_transitions
if disable_web_page_preview is not None:
if self.link_preview:
raise ValueError(
"Cannot use LinkPreview widget "
"together with disable_web_page_preview",
)
warnings.warn(
"disable_web_page_preview is deprecated, "
"use `LinkPreview` widget instead",
category=DeprecationWarning,
)
self.link_preview = LinkPreview(is_disabled=True)

async def render_text(
self, data: dict, manager: DialogManager,
Expand Down Expand Up @@ -152,7 +165,6 @@ async def render(
text=await self.render_text(current_data, manager),
reply_markup=await self.render_kbd(current_data, manager),
parse_mode=self.parse_mode,
disable_web_page_preview=self.disable_web_page_preview,
media=await self.render_media(current_data, manager),
link_preview_options=await self.render_link_preview(
current_data, manager,
Expand Down

0 comments on commit 74d0d6e

Please sign in to comment.