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
+21 -21
View File
@@ -1,5 +1,5 @@
from http import HTTPStatus
from typing import Annotated, Literal, Optional, Union
from typing import Annotated, Literal
import jwt
from fastapi import Cookie, Depends, Query, Request, Security
@@ -55,8 +55,8 @@ api_key_query = APIKeyQuery(
class KeyChecker(SecurityBase):
def __init__(
self,
api_key: Optional[str] = None,
expected_key_type: Optional[KeyType] = None,
api_key: str | None = None,
expected_key_type: KeyType | None = None,
):
self.auto_error: bool = True
self.expected_key_type = expected_key_type
@@ -137,17 +137,17 @@ async def require_invoice_key(
async def check_access_token(
header_access_token: Annotated[Union[str, None], Depends(oauth2_scheme)],
cookie_access_token: Annotated[Union[str, None], Cookie()] = None,
bearer_access_token: Annotated[Union[str, None], Depends(http_bearer)] = None,
) -> Optional[str]:
header_access_token: Annotated[str | None, Depends(oauth2_scheme)],
cookie_access_token: Annotated[str | None, Cookie()] = None,
bearer_access_token: Annotated[str | None, Depends(http_bearer)] = None,
) -> str | None:
return header_access_token or cookie_access_token or bearer_access_token
async def check_user_exists(
r: Request,
access_token: Annotated[Optional[str], Depends(check_access_token)],
usr: Optional[UUID4] = None,
access_token: Annotated[str | None, Depends(check_access_token)],
usr: UUID4 | None = None,
) -> User:
if access_token:
account = await _get_account_from_token(access_token, r["path"], r["method"])
@@ -176,9 +176,9 @@ async def check_user_exists(
async def optional_user_id(
r: Request,
access_token: Annotated[Optional[str], Depends(check_access_token)],
usr: Optional[UUID4] = None,
) -> Optional[str]:
access_token: Annotated[str | None, Depends(check_access_token)],
usr: UUID4 | None = None,
) -> str | None:
if usr and settings.is_auth_method_allowed(AuthMethods.user_id_only):
return usr.hex
if access_token:
@@ -189,7 +189,7 @@ async def optional_user_id(
async def access_token_payload(
access_token: Annotated[Optional[str], Depends(check_access_token)],
access_token: Annotated[str | None, Depends(check_access_token)],
) -> AccessTokenPayload:
if not access_token:
raise HTTPException(HTTPStatus.UNAUTHORIZED, "Missing access token.")
@@ -231,11 +231,11 @@ def parse_filters(model: type[TFilterModel]):
def dependency(
request: Request,
limit: Optional[int] = None,
offset: Optional[int] = None,
sortby: Optional[str] = None,
direction: Optional[Literal["asc", "desc"]] = None,
search: Optional[str] = Query(None, description="Text based search"),
limit: int | None = None,
offset: int | None = None,
sortby: str | None = None,
direction: Literal["asc", "desc"] | None = None,
search: str | None = Query(None, description="Text based search"),
):
params = request.query_params
filters = []
@@ -259,7 +259,7 @@ def parse_filters(model: type[TFilterModel]):
async def check_user_extension_access(
user_id: str, ext_id: str, conn: Optional[Connection] = None
user_id: str, ext_id: str, conn: Connection | None = None
) -> SimpleStatus:
"""
Check if the user has access to a particular extension.
@@ -292,7 +292,7 @@ async def _check_user_extension_access(user_id: str, path: str):
async def _get_account_from_token(
access_token: str, path: str, method: str
) -> Optional[Account]:
) -> Account | None:
try:
payload: dict = jwt.decode(access_token, settings.auth_secret_key, ["HS256"])
return await _get_account_from_jwt_payload(
@@ -310,7 +310,7 @@ async def _get_account_from_token(
async def _get_account_from_jwt_payload(
payload: AccessTokenPayload, path: str, method: str
) -> Optional[Account]:
) -> Account | None:
account = None
if payload.sub:
account = await get_account_by_username(payload.sub)