feat: use uv instead of poetry for CI, docker and development (#3325)

Co-authored-by: arcbtc <ben@arc.wales>
This commit is contained in:
dni ⚡
2025-08-21 16:17:19 +02:00
committed by GitHub
co-authored by arcbtc
parent 15984fa49b
commit 5ba06d42d0
88 changed files with 4265 additions and 1303 deletions
+9 -13
View File
@@ -3,7 +3,7 @@ import json
import re
from datetime import datetime, timedelta, timezone
from pathlib import Path
from typing import Any, Optional
from typing import Any
from urllib import request
from urllib.parse import urlparse
@@ -39,7 +39,7 @@ def urlsafe_short_hash() -> str:
return shortuuid.uuid()
def url_for(endpoint: str, external: Optional[bool] = False, **params: Any) -> str:
def url_for(endpoint: str, external: bool | None = False, **params: Any) -> str:
base = f"http://{settings.host}:{settings.port}" if external else ""
url_params = "?"
for key, value in params.items():
@@ -52,7 +52,7 @@ def static_url_for(static: str, path: str) -> str:
return f"/{static}/{path}?v={settings.server_startup_time}"
def template_renderer(additional_folders: Optional[list] = None) -> Jinja2Templates:
def template_renderer(additional_folders: list | None = None) -> Jinja2Templates:
folders = ["lnbits/templates", "lnbits/core/templates"]
if additional_folders:
additional_folders += [
@@ -211,7 +211,7 @@ def is_valid_pubkey(pubkey: str) -> bool:
return False
def create_access_token(data: dict, token_expire_minutes: Optional[int] = None) -> str:
def create_access_token(data: dict, token_expire_minutes: int | None = None) -> str:
minutes = token_expire_minutes or settings.auth_token_expire_minutes
expire = datetime.now(timezone.utc) + timedelta(minutes=minutes)
to_encode = {k: v for k, v in data.items() if v is not None}
@@ -219,9 +219,7 @@ def create_access_token(data: dict, token_expire_minutes: Optional[int] = None)
return jwt.encode(to_encode, settings.auth_secret_key, "HS256")
def encrypt_internal_message(
m: Optional[str] = None, urlsafe: bool = False
) -> Optional[str]:
def encrypt_internal_message(m: str | None = None, urlsafe: bool = False) -> str | None:
"""
Encrypt message with the internal secret key
@@ -234,9 +232,7 @@ def encrypt_internal_message(
return AESCipher(key=settings.auth_secret_key).encrypt(m.encode(), urlsafe=urlsafe)
def decrypt_internal_message(
m: Optional[str] = None, urlsafe: bool = False
) -> Optional[str]:
def decrypt_internal_message(m: str | None = None, urlsafe: bool = False) -> str | None:
"""
Decrypt message with the internal secret key
@@ -249,7 +245,7 @@ def decrypt_internal_message(
return AESCipher(key=settings.auth_secret_key).decrypt(m, urlsafe=urlsafe)
def filter_dict_keys(data: dict, filter_keys: Optional[list[str]]) -> dict:
def filter_dict_keys(data: dict, filter_keys: list[str] | None) -> dict:
if not filter_keys:
# return shallow clone of the dict even if there are no filters
return {**data}
@@ -270,7 +266,7 @@ def version_parse(v: str):
def is_lnbits_version_ok(
min_lnbits_version: Optional[str], max_lnbits_version: Optional[str]
min_lnbits_version: str | None, max_lnbits_version: str | None
) -> bool:
if min_lnbits_version and (
version_parse(min_lnbits_version) > version_parse(settings.version)
@@ -347,7 +343,7 @@ def path_segments(path: str) -> list[str]:
return segments[0:]
def normalize_path(path: Optional[str]) -> str:
def normalize_path(path: str | None) -> str:
path = path or ""
return "/" + "/".join(path_segments(path))