Files
elmprodvpn/selective-vpn-gui/dashboard_controller.py

92 lines
2.1 KiB
Python

#!/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",
]