diff options
| author | AAGaming <aagaming@riseup.net> | 2023-09-25 13:06:46 -0400 |
|---|---|---|
| committer | marios8543 <marios8543@gmail.com> | 2023-10-17 17:08:23 +0300 |
| commit | bf83eabe6b19e560bc3e5fd5ae961edf7aea6839 (patch) | |
| tree | 3ae98ed5761e9a329a422fe43ee3317784b0c26e | |
| parent | a7c358844c96b7fb52f4a7e8d16a5cd928a1ca12 (diff) | |
| download | decky-loader-bf83eabe6b19e560bc3e5fd5ae961edf7aea6839.tar.gz decky-loader-bf83eabe6b19e560bc3e5fd5ae961edf7aea6839.zip | |
move to module imports
| -rw-r--r-- | .github/workflows/build-win.yml | 4 | ||||
| -rw-r--r-- | .github/workflows/build.yml | 2 | ||||
| -rw-r--r-- | backend/browser.py | 2 | ||||
| -rw-r--r-- | backend/helpers.py | 4 | ||||
| -rw-r--r-- | backend/loader.py | 6 | ||||
| -rw-r--r-- | backend/localplatform.py | 8 | ||||
| -rw-r--r-- | backend/localplatformlinux.py | 2 | ||||
| -rw-r--r-- | backend/localplatformwin.py | 2 | ||||
| -rw-r--r-- | backend/localsocket.py | 2 | ||||
| -rw-r--r-- | backend/main.py | 20 | ||||
| -rw-r--r-- | backend/plugin.py | 8 | ||||
| -rw-r--r-- | backend/settings.py | 6 | ||||
| -rw-r--r-- | backend/updater.py | 22 | ||||
| -rw-r--r-- | backend/utilities.py | 20 | ||||
| -rw-r--r-- | main.py | 4 |
15 files changed, 63 insertions, 49 deletions
diff --git a/.github/workflows/build-win.yml b/.github/workflows/build-win.yml index 4b54bc12..16577da3 100644 --- a/.github/workflows/build-win.yml +++ b/.github/workflows/build-win.yml @@ -43,10 +43,10 @@ jobs: run: pnpm run build - name: Build Python Backend 🛠️ - run: pyinstaller --noconfirm --onefile --name "PluginLoader" --add-data "./backend/static;/static" --add-data "./backend/locales;/locales" --add-data "./backend/legacy;/legacy" --add-data "./plugin;/plugin" --hidden-import=sqlite3 ./backend/main.py + run: pyinstaller --noconfirm --onefile --name "PluginLoader" --add-data "./backend/static;/backend/static" --add-data "./backend/locales;/backend/locales" --add-data "./backend/legacy;/backend/legacy" --add-data "./plugin;/plugin" --hidden-import=sqlite3 ./main.py - name: Build Python Backend (noconsole) 🛠️ - run: pyinstaller --noconfirm --noconsole --onefile --name "PluginLoader_noconsole" --add-data "./backend/static;/static" --add-data "./backend/locales;/locales" --add-data "./backend/legacy;/legacy" --add-data "./plugin;/plugin" --hidden-import=sqlite3 ./backend/main.py + run: pyinstaller --noconfirm --noconsole --onefile --name "PluginLoader_noconsole" --add-data "./backend/static;/backend/static" --add-data "./backend/locales;/backend/locales" --add-data "./backend/legacy;/backend/legacy" --add-data "./plugin;/plugin" --hidden-import=sqlite3 ./main.py - name: Upload package artifact ⬆️ uses: actions/upload-artifact@v3 diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index fe58eecb..04e932cd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -86,7 +86,7 @@ jobs: run: pnpm run build - name: Build Python Backend 🛠️ - run: pyinstaller --noconfirm --onefile --name "PluginLoader" --add-data ./backend/static:/static --add-data ./backend/locales:/locales --add-data ./backend/legacy:/legacy --add-data ./plugin:/plugin --hidden-import=sqlite3 ./backend/*.py + run: pyinstaller --noconfirm --onefile --name "PluginLoader" --add-data ./backend/static:/backend/static --add-data ./backend/locales:/backend/locales --add-data ./backend/legacy:/backend/legacy --add-data ./plugin:/plugin --hidden-import=sqlite3 ./main.py - name: Upload package artifact ⬆️ if: ${{ !env.ACT }} diff --git a/backend/browser.py b/backend/browser.py index 358c05f9..08560749 100644 --- a/backend/browser.py +++ b/backend/browser.py @@ -13,11 +13,11 @@ from os import R_OK, W_OK, path, listdir, access, mkdir from shutil import rmtree from time import time from zipfile import ZipFile -from localplatform import chown, chmod from enum import IntEnum from typing import Dict, List, TypedDict # Local modules +from .localplatform import chown, chmod from .loader import Loader, Plugins from .helpers import get_ssl_context, download_remote_binary_to_path from .settings import SettingsManager diff --git a/backend/helpers.py b/backend/helpers.py index 4036db85..f8796bd8 100644 --- a/backend/helpers.py +++ b/backend/helpers.py @@ -10,8 +10,8 @@ import certifi from aiohttp.web import Request, Response, middleware from aiohttp.typedefs import Handler from aiohttp import ClientSession -import localplatform -from customtypes import UserType +from . import localplatform +from .customtypes import UserType from logging import getLogger REMOTE_DEBUGGER_UNIT = "steam-web-debug-portforward.service" diff --git a/backend/loader.py b/backend/loader.py index 89bb0457..dc7a5633 100644 --- a/backend/loader.py +++ b/backend/loader.py @@ -11,7 +11,9 @@ from os.path import exists from watchdog.events import RegexMatchingEventHandler, DirCreatedEvent, DirModifiedEvent, FileCreatedEvent, FileModifiedEvent # type: ignore from watchdog.observers import Observer # type: ignore -from backend.main import PluginManager # type: ignore +from typing import TYPE_CHECKING +if TYPE_CHECKING: + from .main import PluginManager from .injector import get_tab, get_gamepadui_tab from .plugin import PluginWrapper @@ -63,7 +65,7 @@ class FileChangeHandler(RegexMatchingEventHandler): self.maybe_reload(src_path) class Loader: - def __init__(self, server_instance: PluginManager, plugin_path: str, loop: AbstractEventLoop, live_reload: bool =False) -> None: + def __init__(self, server_instance: 'PluginManager', plugin_path: str, loop: AbstractEventLoop, live_reload: bool = False) -> None: self.loop = loop self.logger = getLogger("Loader") self.plugin_path = plugin_path diff --git a/backend/localplatform.py b/backend/localplatform.py index 43043ad0..028eff8f 100644 --- a/backend/localplatform.py +++ b/backend/localplatform.py @@ -4,11 +4,11 @@ ON_WINDOWS = platform.system() == "Windows" ON_LINUX = not ON_WINDOWS if ON_WINDOWS: - from localplatformwin import * - import localplatformwin as localplatform + from .localplatformwin import * + from . import localplatformwin as localplatform else: - from localplatformlinux import * - import localplatformlinux as localplatform + from .localplatformlinux import * + from . import localplatformlinux as localplatform def get_privileged_path() -> str: '''Get path accessible by elevated user. Holds plugins, decky loader and decky loader configs''' diff --git a/backend/localplatformlinux.py b/backend/localplatformlinux.py index 58b9dbc2..bde2caac 100644 --- a/backend/localplatformlinux.py +++ b/backend/localplatformlinux.py @@ -1,6 +1,6 @@ import os, pwd, grp, sys, logging from subprocess import call, run, DEVNULL, PIPE, STDOUT -from customtypes import UserType +from .customtypes import UserType logger = logging.getLogger("localplatform") diff --git a/backend/localplatformwin.py b/backend/localplatformwin.py index b6bee330..4c4e9439 100644 --- a/backend/localplatformwin.py +++ b/backend/localplatformwin.py @@ -1,4 +1,4 @@ -from customtypes import UserType +from .customtypes import UserType import os, sys def chown(path : str, user : UserType = UserType.HOST_USER, recursive : bool = True) -> bool: diff --git a/backend/localsocket.py b/backend/localsocket.py index 3659da03..f38fe5e7 100644 --- a/backend/localsocket.py +++ b/backend/localsocket.py @@ -2,7 +2,7 @@ import asyncio, time from typing import Awaitable, Callable import random -from localplatform import ON_WINDOWS +from .localplatform import ON_WINDOWS BUFFER_LIMIT = 2 ** 20 # 1 MiB diff --git a/backend/main.py b/backend/main.py index 8857fb22..793d000c 100644 --- a/backend/main.py +++ b/backend/main.py @@ -1,7 +1,7 @@ # Change PyInstaller files permissions import sys from typing import Dict -from localplatform import (chmod, chown, service_stop, service_start, +from .localplatform import (chmod, chown, service_stop, service_start, ON_WINDOWS, get_log_level, get_live_reload, get_server_port, get_server_host, get_chown_plugin_path, get_privileged_path) @@ -21,16 +21,16 @@ from aiohttp.web import Application, Response, Request, get, run_app, static # t from aiohttp_jinja2 import setup as jinja_setup # local modules -from browser import PluginBrowser -from helpers import (REMOTE_DEBUGGER_UNIT, csrf_middleware, get_csrf_token, +from .browser import PluginBrowser +from .helpers import (REMOTE_DEBUGGER_UNIT, csrf_middleware, get_csrf_token, mkdir_as_user, get_system_pythonpaths, get_effective_user_id) -from injector import get_gamepadui_tab, Tab, close_old_tabs -from loader import Loader -from settings import SettingsManager -from updater import Updater -from utilities import Utilities -from customtypes import UserType +from .injector import get_gamepadui_tab, Tab, close_old_tabs +from .loader import Loader +from .settings import SettingsManager +from .updater import Updater +from .utilities import Utilities +from .customtypes import UserType basicConfig( @@ -169,7 +169,7 @@ class PluginManager: def run(self): return run_app(self.web_app, host=get_server_host(), port=get_server_port(), loop=self.loop, access_log=None) -if __name__ == "__main__": +def main(): if ON_WINDOWS: # Fix windows/flask not recognising that .js means 'application/javascript' import mimetypes diff --git a/backend/plugin.py b/backend/plugin.py index 5c1e099f..163bb9b6 100644 --- a/backend/plugin.py +++ b/backend/plugin.py @@ -9,10 +9,10 @@ from os import path, environ from signal import SIGINT, signal from sys import exit, path as syspath from typing import Any, Dict -from localsocket import LocalSocket -from localplatform import setgid, setuid, get_username, get_home_path -from customtypes import UserType -import helpers +from .localsocket import LocalSocket +from .localplatform import setgid, setuid, get_username, get_home_path +from .customtypes import UserType +from . import helpers class PluginWrapper: def __init__(self, file: str, plugin_directory: str, plugin_path: str) -> None: diff --git a/backend/settings.py b/backend/settings.py index 26dfc97f..a9ab3daa 100644 --- a/backend/settings.py +++ b/backend/settings.py @@ -1,10 +1,10 @@ from json import dump, load from os import mkdir, path, listdir, rename from typing import Any, Dict -from localplatform import chown, folder_owner, get_chown_plugin_path -from customtypes import UserType +from .localplatform import chown, folder_owner, get_chown_plugin_path +from .customtypes import UserType -from helpers import get_homebrew_path +from .helpers import get_homebrew_path class SettingsManager: diff --git a/backend/updater.py b/backend/updater.py index d7a3d712..0bd7218a 100644 --- a/backend/updater.py +++ b/backend/updater.py @@ -4,15 +4,16 @@ from asyncio import sleep from json.decoder import JSONDecodeError from logging import getLogger from os import getcwd, path, remove -from typing import List, TypedDict -from backend.main import PluginManager -from localplatform import chmod, service_restart, ON_LINUX, get_keep_systemd_service, get_selinux +from typing import TYPE_CHECKING, List, TypedDict +if TYPE_CHECKING: + from .main import PluginManager +from .localplatform import chmod, service_restart, ON_LINUX, get_keep_systemd_service, get_selinux from aiohttp import ClientSession, web -import helpers -from injector import get_gamepadui_tab -from settings import SettingsManager +from .import helpers +from .injector import get_gamepadui_tab +from .settings import SettingsManager logger = getLogger("Updater") @@ -25,7 +26,7 @@ class RemoteVer(TypedDict): assets: List[RemoteVerAsset] class Updater: - def __init__(self, context: PluginManager) -> None: + def __init__(self, context: 'PluginManager') -> None: self.context = context self.settings = self.context.settings # Exposes updater methods to frontend @@ -150,7 +151,12 @@ class Updater: async def do_update(self): logger.debug("Starting update.") - assert self.remoteVer + try: + assert self.remoteVer + except AssertionError: + logger.error("Unable to update as remoteVer is missing") + return + version = self.remoteVer["tag_name"] download_url = None download_filename = "PluginLoader" if ON_LINUX else "PluginLoader.exe" diff --git a/backend/utilities.py b/backend/utilities.py index d45bec9b..1e4110cf 100644 --- a/backend/utilities.py +++ b/backend/utilities.py @@ -8,16 +8,18 @@ from stat import FILE_ATTRIBUTE_HIDDEN # type: ignore from asyncio import StreamReader, StreamWriter, start_server, gather, open_connection from aiohttp import ClientSession, web -from typing import Callable, Coroutine, Dict, Any, List, TypedDict +from typing import TYPE_CHECKING, Callable, Coroutine, Dict, Any, List, TypedDict from logging import getLogger -from backend.browser import PluginInstallRequest, PluginInstallType -from backend.main import PluginManager -from injector import inject_to_tab, get_gamepadui_tab, close_old_tabs, get_tab from pathlib import Path -from localplatform import ON_WINDOWS -import helpers -from localplatform import service_stop, service_start, get_home_path, get_username + +from .browser import PluginInstallRequest, PluginInstallType +if TYPE_CHECKING: + from .main import PluginManager +from .injector import inject_to_tab, get_gamepadui_tab, close_old_tabs, get_tab +from .localplatform import ON_WINDOWS +from .import helpers +from .localplatform import service_stop, service_start, get_home_path, get_username class FilePickerObj(TypedDict): file: Path @@ -25,7 +27,7 @@ class FilePickerObj(TypedDict): is_dir: bool class Utilities: - def __init__(self, context: PluginManager) -> None: + def __init__(self, context: 'PluginManager') -> None: self.context = context self.util_methods: Dict[str, Callable[..., Coroutine[Any, Any, Any]]] = { "ping": self.ping, @@ -307,7 +309,7 @@ class Utilities: self.rdt_proxy_task = self.context.loop.create_task(self.rdt_proxy_server) def stop_rdt_proxy(self): - if self.rdt_proxy_server: + if self.rdt_proxy_server != None: self.rdt_proxy_server.close() if self.rdt_proxy_task: self.rdt_proxy_task.cancel() diff --git a/main.py b/main.py new file mode 100644 index 00000000..c2b99089 --- /dev/null +++ b/main.py @@ -0,0 +1,4 @@ +# This file is needed to make the relative imports in backend/ work properly. +if __name__ == "__main__": + from backend.main import main + main() |
