Erster Stand der Hintergrundprozesse, die auf der Synology unter /volume1/homes/wagner/SolarManager laufen: der Manager selbst, die Sammler je Geraet, die MQTT-Bruecke, der Wecker und - neu hinzugezogen - der AutoAction-Runner, der als Hintergrundprozess hierher gehoert und nicht ins Web-Verzeichnis. Zugangsdaten stehen nicht mehr im Quelltext, sondern in config.ini, die nicht mit eingecheckt wird. Vorlage ist config.ini.example, gelesen wird sie von konfig.py. Betroffen waren solarManager.py (Datenbank und Wattpilot), zeit.py, gatherWaterData.py, wecker.py und skoda_testdaten.py, das sich das Passwort bisher aus dem Quelltext eines anderen Moduls herausgesucht hat. Die Kia-Anbindung ist mit dem Fahrzeug entfallen: kiaTest.py, gatherCarData.py und hyundai_kia_connect_api sind nicht mehr dabei, ebenso gatherInverterData.py, auf das nur noch eine auskommentierte Zeile zeigte. Die mitgelieferten Bibliotheken bleiben im Repository - die NAS hat kein pip, sie muessen neben den Skripten liegen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
122 lines
3.9 KiB
Python
122 lines
3.9 KiB
Python
import sys
|
|
from functools import _CacheInfo
|
|
from typing import Any, Mapping, Optional, Sequence, Tuple, Type, Union, overload
|
|
|
|
import multidict
|
|
|
|
if sys.version_info >= (3, 8):
|
|
from typing import Final, TypedDict, final
|
|
else:
|
|
from typing_extensions import Final, TypedDict, final
|
|
|
|
_SimpleQuery = Union[str, int, float]
|
|
_QueryVariable = Union[_SimpleQuery, Sequence[_SimpleQuery]]
|
|
_Query = Union[
|
|
None, str, Mapping[str, _QueryVariable], Sequence[Tuple[str, _QueryVariable]]
|
|
]
|
|
|
|
@final
|
|
class URL:
|
|
scheme: Final[str]
|
|
raw_user: Final[str]
|
|
user: Final[Optional[str]]
|
|
raw_password: Final[Optional[str]]
|
|
password: Final[Optional[str]]
|
|
raw_host: Final[Optional[str]]
|
|
host: Final[Optional[str]]
|
|
port: Final[Optional[int]]
|
|
explicit_port: Final[Optional[int]]
|
|
raw_authority: Final[str]
|
|
authority: Final[str]
|
|
raw_path: Final[str]
|
|
path: Final[str]
|
|
raw_query_string: Final[str]
|
|
query_string: Final[str]
|
|
path_qs: Final[str]
|
|
raw_path_qs: Final[str]
|
|
raw_fragment: Final[str]
|
|
fragment: Final[str]
|
|
query: Final[multidict.MultiDict[str]]
|
|
raw_name: Final[str]
|
|
name: Final[str]
|
|
raw_suffix: Final[str]
|
|
suffix: Final[str]
|
|
raw_suffixes: Final[Tuple[str, ...]]
|
|
suffixes: Final[Tuple[str, ...]]
|
|
raw_parts: Final[Tuple[str, ...]]
|
|
parts: Final[Tuple[str, ...]]
|
|
parent: Final[URL]
|
|
def __init__(
|
|
self, val: Union[str, "URL"] = ..., *, encoded: bool = ...
|
|
) -> None: ...
|
|
@classmethod
|
|
def build(
|
|
cls,
|
|
*,
|
|
scheme: str = ...,
|
|
authority: str = ...,
|
|
user: Optional[str] = ...,
|
|
password: Optional[str] = ...,
|
|
host: str = ...,
|
|
port: Optional[int] = ...,
|
|
path: str = ...,
|
|
query: Optional[_Query] = ...,
|
|
query_string: str = ...,
|
|
fragment: str = ...,
|
|
encoded: bool = ...
|
|
) -> URL: ...
|
|
def __str__(self) -> str: ...
|
|
def __repr__(self) -> str: ...
|
|
def __bytes__(self) -> bytes: ...
|
|
def __eq__(self, other: Any) -> bool: ...
|
|
def __le__(self, other: Any) -> bool: ...
|
|
def __lt__(self, other: Any) -> bool: ...
|
|
def __ge__(self, other: Any) -> bool: ...
|
|
def __gt__(self, other: Any) -> bool: ...
|
|
def __hash__(self) -> int: ...
|
|
def __truediv__(self, name: str) -> URL: ...
|
|
def __mod__(self, query: _Query) -> URL: ...
|
|
def is_absolute(self) -> bool: ...
|
|
def is_default_port(self) -> bool: ...
|
|
def origin(self) -> URL: ...
|
|
def relative(self) -> URL: ...
|
|
def with_scheme(self, scheme: str) -> URL: ...
|
|
def with_user(self, user: Optional[str]) -> URL: ...
|
|
def with_password(self, password: Optional[str]) -> URL: ...
|
|
def with_host(self, host: str) -> URL: ...
|
|
def with_port(self, port: Optional[int]) -> URL: ...
|
|
def with_path(self, path: str, *, encoded: bool = ...) -> URL: ...
|
|
@overload
|
|
def with_query(self, query: _Query) -> URL: ...
|
|
@overload
|
|
def with_query(self, **kwargs: _QueryVariable) -> URL: ...
|
|
@overload
|
|
def update_query(self, query: _Query) -> URL: ...
|
|
@overload
|
|
def update_query(self, **kwargs: _QueryVariable) -> URL: ...
|
|
def with_fragment(self, fragment: Optional[str]) -> URL: ...
|
|
def with_name(self, name: str) -> URL: ...
|
|
def with_suffix(self, suffix: str) -> URL: ...
|
|
def join(self, url: URL) -> URL: ...
|
|
def joinpath(self, *url: str, encoded: bool = ...) -> URL: ...
|
|
def human_repr(self) -> str: ...
|
|
# private API
|
|
@classmethod
|
|
def _normalize_path(cls, path: str) -> str: ...
|
|
|
|
@final
|
|
class cached_property:
|
|
def __init__(self, wrapped: Any) -> None: ...
|
|
def __get__(self, inst: URL, owner: Type[URL]) -> Any: ...
|
|
def __set__(self, inst: URL, value: Any) -> None: ...
|
|
|
|
class CacheInfo(TypedDict):
|
|
idna_encode: _CacheInfo
|
|
idna_decode: _CacheInfo
|
|
|
|
def cache_clear() -> None: ...
|
|
def cache_info() -> CacheInfo: ...
|
|
def cache_configure(
|
|
*, idna_encode_size: Optional[int] = ..., idna_decode_size: Optional[int] = ...
|
|
) -> None: ...
|