DataBridge

DataBridge — это сущность, предоставляющая временное хранилище данных, которое существует в рамках одной сессии приложения (от запуска до выхода). Она предназначена для обмена данными между обработчиками.

Основной способ получения доступа к DataBridge — через DI.

1from argenta.di import FromDishka
2from argenta import DataBridge, Response
3
4# ... setting up router and other
5
6def my_handler(response: Response, data_bridge: FromDishka[DataBridge]):
7    # ... your code

Практический пример: Аутентификация

Рассмотрим пример, где команда login сохраняет токен аутентификации, а команда get-profile использует его.

 1from argenta import Router, Response, Command, DataBridge
 2from argenta.command import Flag
 3from argenta.di import FromDishka
 4
 5router = Router(title="Authentication")
 6
 7
 8def authenticate_user(username: str) -> str:
 9    return f"token_for_{username}"
10
11
12@router.command(Command("login", flags=Flag("username")))
13def login_handler(response: Response, data_bridge: FromDishka[DataBridge]):
14    username_flag = response.input_flags.get_flag_by_name("username")
15    if not username_flag or not username_flag.input_value:
16        print("Error: username must be specified using the --username flag.")
17        return
18
19    username = username_flag.input_value
20    token = authenticate_user(username)
21
22    data_bridge.update({"auth_token": token})
23    print(f"Login successful! User '{username}' authenticated.")
24
25
26@router.command("get-profile")
27def get_profile_handler(response: Response, data_bridge: FromDishka[DataBridge]):
28    token = data_bridge.get_by_key("auth_token")
29
30    if not token:
31        print("Error: you are not authenticated. Please run the 'login' command first.")
32        return
33
34    print(f"Loading profile using token: [yellow]{token}[/yellow]")
35
36
37@router.command("logout")
38def logout_handler(response: Response, data_bridge: FromDishka[DataBridge]):
39    try:
40        data_bridge.delete_by_key("auth_token")
41        print("Logout successful. Session data cleared.")
42    except KeyError:
43        print("You were not authenticated anyway.")

Как это работает:

  1. При вызове обработчика dishka автоматически внедряет экземпляр DataBridge.

  2. Команда login --username <имя> вызывает login_handler, который через внедрённый data_bridge сохраняет токен.

  3. Команда get-profile вызывает get_profile_handler, который так же получает data_bridge и извлекает из него токен.


class DataBridge
__init__(self, initial_data: dict | None = None)

Инициализирует хранилище. При использовании через DI вызывается автоматически.

update(self, data: dict) None

Обновляет хранилище данными из словаря.

get_all(self) dict

Возвращает все данные из хранилища.

get_by_key(self, key: str) Any

Возвращает значение по ключу или None, если ключ не найден.

delete_by_key(self, key: str) None

Удаляет значение по ключу. Вызывает KeyError, если ключ не найден.

clear_all(self) None

Полностью очищает хранилище.