New Addon

Google BK
This commit is contained in:
2023-04-23 18:17:03 +07:00
parent 1c7fd2b476
commit 702d080a1e
248 changed files with 72745 additions and 0 deletions
@@ -0,0 +1,87 @@
import socket
import sys
import aiohttp
import os
from aiohttp import ClientSession
from injector import Module, provider, singleton, multiprovider
from typing import List
from backup.config import Config, Startable, Setting
from backup.drive import DriveSource
from backup.ha import HaSource, HaUpdater, AddonStopper
from backup.model import BackupDestination, BackupSource, Scyncer
from backup.util import Resolver
from backup.model import Coordinator, Precache, DestinationPrecache
from backup.worker import Trigger
from backup.watcher import Watcher
from backup.ui import UiServer, Restarter
from backup.logger import getLogger
from backup.debug import DebugServer
from .debugworker import DebugWorker
from .tracing_session import TracingSession
logger = getLogger(__name__)
class BaseModule(Module):
'''
A module shared between tests and main
'''
def __init__(self, override_dns=True):
self._override_dns = override_dns
@multiprovider
@singleton
def getTriggers(self, coord: Coordinator, ha: HaSource, drive: DriveSource, watcher: Watcher, server: UiServer) -> List[Trigger]:
return [coord, ha, drive, watcher, server]
@provider
@singleton
def getDrive(self, drive: DriveSource) -> BackupDestination:
return drive
@provider
@singleton
def getHa(self, ha: HaSource) -> BackupSource:
return ha
@provider
@singleton
def getPrecache(self, cache: DestinationPrecache) -> Precache:
return cache
@multiprovider
@singleton
def getStartables(self, debug_server: DebugServer, ha_updater: HaUpdater, debugger: DebugWorker, ha_source: HaSource,
server: UiServer, restarter: Restarter, syncer: Scyncer, watcher: Watcher, stopper: AddonStopper, precache: Precache) -> List[Startable]:
# Order here matters, since its the order in which components of the addon are initialized.
return [debug_server, ha_updater, debugger, ha_source, server, restarter, syncer, watcher, stopper, precache]
@provider
@singleton
def getSession(self, resolver: Resolver, config: Config) -> ClientSession:
conn = None
if self._override_dns:
conn = aiohttp.TCPConnector(resolver=resolver, family=socket.AF_INET)
return TracingSession(config, connector=conn)
class MainModule(Module):
@provider
@singleton
def getConfig(self) -> Config:
alt_config = None
index = 1
for arg in sys.argv[1:]:
if arg == "--config":
alt_config = sys.argv[index + 1]
break
index += 1
if alt_config:
config = Config.withFileOverrides(alt_config)
elif "PYTEST_CURRENT_TEST" in os.environ:
config = Config()
else:
config = Config.fromFile(Setting.CONFIG_FILE_PATH.default())
logger.overrideLevel(config.get(Setting.CONSOLE_LOG_LEVEL), config.get(Setting.LOG_LEVEL))
return config