#!/usr/bin/env python3 # -*- coding: utf-8 -*- """DashboardController facade. Тонкий слой между UI и ApiClient; доменная логика вынесена в `controllers/*` mixin-модули. """ from __future__ import annotations import os from typing import Optional from api_client import ApiClient from controllers import ( ActionView, ControllerCoreMixin, DNSControllerMixin, DomainsControllerMixin, LoginAction, LoginFlowView, LoginView, RoutesControllerMixin, RoutesNftProgressView, RoutesResolveSummaryView, ServiceAction, StatusControllerMixin, StatusOverviewView, TraceControllerMixin, TraceMode, TrafficControllerMixin, TrafficModeView, TransportClientAction, TransportControllerMixin, TransportFlowPhase, TransportPolicyFlowView, VpnAutoconnectView, VpnControllerMixin, VpnStatusView, ) class DashboardController( StatusControllerMixin, VpnControllerMixin, RoutesControllerMixin, TrafficControllerMixin, TransportControllerMixin, DNSControllerMixin, DomainsControllerMixin, TraceControllerMixin, ControllerCoreMixin, ): def __init__( self, client: ApiClient, *, routes_unit: Optional[str] = None, smartdns_unit: Optional[str] = None, ) -> None: self.client = client self.routes_unit = ( routes_unit or os.environ.get("SELECTIVE_VPN_ROUTES_UNIT") or "" ) self.smartdns_unit = ( smartdns_unit or os.environ.get("SELECTIVE_VPN_SMARTDNS_UNIT") or "smartdns-local.service" ) __all__ = [ "DashboardController", "TraceMode", "ServiceAction", "LoginAction", "TransportClientAction", "TransportFlowPhase", "LoginView", "StatusOverviewView", "VpnStatusView", "ActionView", "LoginFlowView", "VpnAutoconnectView", "RoutesNftProgressView", "TrafficModeView", "RoutesResolveSummaryView", "TransportPolicyFlowView", ]