From 1b890492d043a25308d48b93628336778af4b8a5 Mon Sep 17 00:00:00 2001 From: Daniel Girtler Date: Tue, 25 Mar 2025 19:49:18 +1100 Subject: [PATCH] Refactor code (#3247) --- archinstall/lib/args.py | 2 +- archinstall/lib/general.py | 42 ------------------- archinstall/lib/installer.py | 2 +- archinstall/lib/interactions/general_conf.py | 4 +- archinstall/lib/mirrors.py | 2 +- archinstall/lib/models/__init__.py | 2 +- archinstall/lib/models/mirrors.py | 2 +- .../lib/models/{gen.py => packages.py} | 0 archinstall/lib/packages/packages.py | 2 +- archinstall/lib/pacman/config.py | 2 +- tests/test_args.py | 2 +- 11 files changed, 10 insertions(+), 52 deletions(-) rename archinstall/lib/models/{gen.py => packages.py} (100%) diff --git a/archinstall/lib/args.py b/archinstall/lib/args.py index 32968ed8..d4337141 100644 --- a/archinstall/lib/args.py +++ b/archinstall/lib/args.py @@ -14,10 +14,10 @@ from pydantic.dataclasses import dataclass as p_dataclass from archinstall.lib.models.audio_configuration import AudioConfiguration from archinstall.lib.models.bootloader import Bootloader from archinstall.lib.models.device_model import DiskEncryption, DiskLayoutConfiguration -from archinstall.lib.models.gen import Repository from archinstall.lib.models.locale import LocaleConfiguration from archinstall.lib.models.mirrors import MirrorConfiguration from archinstall.lib.models.network_configuration import NetworkConfiguration +from archinstall.lib.models.packages import Repository from archinstall.lib.models.profile_model import ProfileConfiguration from archinstall.lib.models.users import User from archinstall.lib.output import error, warn diff --git a/archinstall/lib/general.py b/archinstall/lib/general.py index fee522ee..11e8e1a8 100644 --- a/archinstall/lib/general.py +++ b/archinstall/lib/general.py @@ -10,8 +10,6 @@ import string import subprocess import sys import time -import urllib.error -import urllib.parse from collections.abc import Callable, Iterator from datetime import date, datetime from enum import Enum @@ -19,7 +17,6 @@ from pathlib import Path from select import EPOLLHUP, EPOLLIN, epoll from shutil import which from typing import TYPE_CHECKING, Any, override -from urllib.request import Request, urlopen from .exceptions import RequirementError, SysCallError from .output import debug, error, info @@ -496,45 +493,6 @@ def run_custom_user_commands(commands: list[str], installation: Installer) -> No os.unlink(chroot_path) -def json_stream_to_structure(configuration_identifier: str, stream: str, target: dict[str, Any]) -> bool: - """ - Load a JSON encoded dictionary from a stream and merge it into an existing dictionary. - A stream can be a filepath, a URL or a raw JSON string. - Returns True if the operation succeeded, False otherwise. - +configuration_identifier is just a parameter to get meaningful, but not so long messages - """ - - raw: str | None = None - # Try using the stream as a URL that should be grabbed - if urllib.parse.urlparse(stream).scheme: - try: - with urlopen(Request(stream, headers={'User-Agent': 'ArchInstall'})) as response: - raw = response.read() - except urllib.error.HTTPError as err: - error(f"Could not fetch JSON from {stream} as {configuration_identifier}: {err}") - return False - - # Try using the stream as a filepath that should be read - if raw is None and (path := Path(stream)).exists(): - try: - raw = path.read_text() - except Exception as err: - error(f"Could not read file {stream} as {configuration_identifier}: {err}") - return False - - try: - # We use `or` to try the stream as raw JSON to be parsed - structure = json.loads(raw or stream) - except Exception as err: - error(f"{configuration_identifier} contains an invalid JSON format: {err}") - return False - if not isinstance(structure, dict): - error(f"{stream} passed as {configuration_identifier} is not a JSON encoded dictionary") - return False - target.update(structure) - return True - - def secret(x: str) -> str: """ return * with len equal to to the input string """ return '*' * len(x) diff --git a/archinstall/lib/installer.py b/archinstall/lib/installer.py index 993bab0e..137353c7 100644 --- a/archinstall/lib/installer.py +++ b/archinstall/lib/installer.py @@ -27,7 +27,7 @@ from archinstall.lib.models.device_model import ( SubvolumeModification, Unit, ) -from archinstall.lib.models.gen import Repository +from archinstall.lib.models.packages import Repository from archinstall.tui.curses_menu import Tui from .args import arch_config_handler diff --git a/archinstall/lib/interactions/general_conf.py b/archinstall/lib/interactions/general_conf.py index 3acc8877..cfda677f 100644 --- a/archinstall/lib/interactions/general_conf.py +++ b/archinstall/lib/interactions/general_conf.py @@ -3,7 +3,7 @@ from __future__ import annotations from pathlib import Path from typing import TYPE_CHECKING -from archinstall.lib.models.gen import Repository +from archinstall.lib.models.packages import Repository from archinstall.lib.packages.packages import list_available_packages from archinstall.tui.curses_menu import EditMenu, SelectMenu, Tui from archinstall.tui.menu_item import MenuItem, MenuItemGroup @@ -11,7 +11,7 @@ from archinstall.tui.types import Alignment, FrameProperties, Orientation, Previ from ..locale.utils import list_timezones from ..models.audio_configuration import Audio, AudioConfiguration -from ..models.gen import AvailablePackage +from ..models.packages import AvailablePackage from ..output import warn from ..translationhandler import Language diff --git a/archinstall/lib/mirrors.py b/archinstall/lib/mirrors.py index 7c93f1cf..c81c32b8 100644 --- a/archinstall/lib/mirrors.py +++ b/archinstall/lib/mirrors.py @@ -9,7 +9,6 @@ from archinstall.tui.types import Alignment, FrameProperties, ResultType from .menu.abstract_menu import AbstractSubMenu from .menu.list_manager import ListManager -from .models.gen import Repository from .models.mirrors import ( CustomRepository, CustomServer, @@ -20,6 +19,7 @@ from .models.mirrors import ( SignCheck, SignOption, ) +from .models.packages import Repository from .networking import fetch_data_from_url from .output import FormattedOutput, debug diff --git a/archinstall/lib/models/__init__.py b/archinstall/lib/models/__init__.py index 8e5669b6..00c74890 100644 --- a/archinstall/lib/models/__init__.py +++ b/archinstall/lib/models/__init__.py @@ -27,10 +27,10 @@ from .device_model import ( Unit, _DeviceInfo, ) -from .gen import LocalPackage, PackageSearch, PackageSearchResult, Repository from .locale import LocaleConfiguration from .mirrors import CustomRepository, MirrorConfiguration, MirrorRegion from .network_configuration import NetworkConfiguration, Nic, NicType +from .packages import LocalPackage, PackageSearch, PackageSearchResult, Repository from .profile_model import ProfileConfiguration from .users import PasswordStrength, User diff --git a/archinstall/lib/models/mirrors.py b/archinstall/lib/models/mirrors.py index e3e36f2a..f3695f76 100644 --- a/archinstall/lib/models/mirrors.py +++ b/archinstall/lib/models/mirrors.py @@ -9,7 +9,7 @@ from typing import TYPE_CHECKING, Any, override from pydantic import BaseModel, field_validator, model_validator -from ..models.gen import Repository +from ..models.packages import Repository from ..networking import DownloadTimer, ping from ..output import debug diff --git a/archinstall/lib/models/gen.py b/archinstall/lib/models/packages.py similarity index 100% rename from archinstall/lib/models/gen.py rename to archinstall/lib/models/packages.py diff --git a/archinstall/lib/packages/packages.py b/archinstall/lib/packages/packages.py index 27d834ac..06eb3d29 100644 --- a/archinstall/lib/packages/packages.py +++ b/archinstall/lib/packages/packages.py @@ -7,7 +7,7 @@ from urllib.request import urlopen from urllib.response import addinfourl from ..exceptions import PackageError, SysCallError -from ..models.gen import AvailablePackage, LocalPackage, PackageSearch, PackageSearchResult, Repository +from ..models.packages import AvailablePackage, LocalPackage, PackageSearch, PackageSearchResult, Repository from ..pacman import Pacman BASE_URL_PKG_SEARCH = 'https://archlinux.org/packages/search/json/' diff --git a/archinstall/lib/pacman/config.py b/archinstall/lib/pacman/config.py index a90e7f9e..1f3e6d88 100644 --- a/archinstall/lib/pacman/config.py +++ b/archinstall/lib/pacman/config.py @@ -2,7 +2,7 @@ import re from pathlib import Path from shutil import copy2 -from ..models.gen import Repository +from ..models.packages import Repository class Config: diff --git a/tests/test_args.py b/tests/test_args.py index 56b8db24..0a21413c 100644 --- a/tests/test_args.py +++ b/tests/test_args.py @@ -8,10 +8,10 @@ from archinstall.lib.hardware import GfxDriver from archinstall.lib.models.audio_configuration import Audio, AudioConfiguration from archinstall.lib.models.bootloader import Bootloader from archinstall.lib.models.device_model import DiskLayoutConfiguration, DiskLayoutType -from archinstall.lib.models.gen import Repository from archinstall.lib.models.locale import LocaleConfiguration from archinstall.lib.models.mirrors import CustomRepository, CustomServer, MirrorConfiguration, MirrorRegion, SignCheck, SignOption from archinstall.lib.models.network_configuration import NetworkConfiguration, Nic, NicType +from archinstall.lib.models.packages import Repository from archinstall.lib.models.profile_model import ProfileConfiguration from archinstall.lib.models.users import User from archinstall.lib.profile.profiles_handler import profile_handler