[REFACTOR] core/__init__ to not have circular import issues (#1876)

* F541 fix

remove unused workflow and combine linters into one

add lnbits/static to ruff ignore
remote setupnode

ignore upgrades for mypy

ignore F401 for __init__ files

unused noqa

ignore upgrades for black

F821: undefine name

disabled and logged webhook_listener for opennode and lnpay because they are obvisouly not working

E402: module level import not at top of file

fixup

revert breaking changes wait for PR #1876

https://github.com/lnbits/lnbits/pull/1876

E721 fixes, only popped up for python3.9 not 3.10

[REFACTOR] core/__init__ to not have circular import issues

WIP

add db for backwards compat

fix pyright

make mypy happy again

pyright did not catch those, i think mypy got confused with relative imports. maybe we should use absolute ones everywhere

E402: module level import not at top of file

dont forget to add core_app

rebase on ruff pr

f

remo

format

* fix clnrest

* ignore E402 in conftest

* refactoring issues

---------

Co-authored-by: jacksn <jkranawetter05@gmail.com>
This commit is contained in:
dni ⚡
2023-09-12 11:25:05 +01:00
committed by GitHub
co-authored by jacksn
parent f19d59d429
commit fee40d7321
16 changed files with 110 additions and 103 deletions
+34 -37
View File
@@ -11,6 +11,7 @@ from urllib.parse import ParseResult, parse_qs, unquote, urlencode, urlparse, ur
import httpx
import pyqrcode
from fastapi import (
APIRouter,
Body,
Depends,
Header,
@@ -25,6 +26,7 @@ from sse_starlette.sse import EventSourceResponse
from starlette.responses import RedirectResponse, StreamingResponse
from lnbits import bolt11, lnurl
from lnbits.core.db import core_app_extra, db
from lnbits.core.helpers import (
migrate_extension_database,
stop_extension_background_work,
@@ -68,7 +70,6 @@ from lnbits.utils.exchange_rates import (
satoshis_amount_as_fiat,
)
from .. import core_app, core_app_extra, db
from ..crud import (
add_installed_extension,
create_tinyurl,
@@ -101,13 +102,15 @@ from ..services import (
)
from ..tasks import api_invoice_listeners
api_router = APIRouter()
@core_app.get("/api/v1/health", status_code=HTTPStatus.OK)
@api_router.get("/api/v1/health", status_code=HTTPStatus.OK)
async def health():
return
@core_app.get("/api/v1/wallet")
@api_router.get("/api/v1/wallet")
async def api_wallet(wallet: WalletTypeInfo = Depends(get_key_type)):
if wallet.wallet_type == WalletType.admin:
return {
@@ -119,7 +122,7 @@ async def api_wallet(wallet: WalletTypeInfo = Depends(get_key_type)):
return {"name": wallet.wallet.name, "balance": wallet.wallet.balance_msat}
@core_app.put("/api/v1/wallet/{new_name}")
@api_router.put("/api/v1/wallet/{new_name}")
async def api_update_wallet_name(
new_name: str, wallet: WalletTypeInfo = Depends(require_admin_key)
):
@@ -131,7 +134,7 @@ async def api_update_wallet_name(
}
@core_app.patch("/api/v1/wallet", response_model=Wallet)
@api_router.patch("/api/v1/wallet", response_model=Wallet)
async def api_update_wallet(
name: Optional[str] = Body(None),
currency: Optional[str] = Body(None),
@@ -140,7 +143,7 @@ async def api_update_wallet(
return await update_wallet(wallet.wallet.id, name, currency)
@core_app.get(
@api_router.get(
"/api/v1/payments",
name="Payment List",
summary="get list of payments",
@@ -170,7 +173,7 @@ async def api_payments(
)
@core_app.get(
@api_router.get(
"/api/v1/payments/paginated",
name="Payment List",
summary="get paginated list of payments",
@@ -312,7 +315,7 @@ async def api_payments_pay_invoice(bolt11: str, wallet: Wallet):
}
@core_app.post(
@api_router.post(
"/api/v1/payments",
summary="Create or pay an invoice",
description="""
@@ -348,7 +351,7 @@ async def api_payments_create(
)
@core_app.post("/api/v1/payments/lnurl")
@api_router.post("/api/v1/payments/lnurl")
async def api_payments_pay_lnurl(
data: CreateLnurl, wallet: WalletTypeInfo = Depends(require_admin_key)
):
@@ -455,7 +458,7 @@ async def subscribe_wallet_invoices(request: Request, wallet: Wallet):
return
@core_app.get("/api/v1/payments/sse")
@api_router.get("/api/v1/payments/sse")
async def api_payments_sse(
request: Request, wallet: WalletTypeInfo = Depends(get_key_type)
):
@@ -467,7 +470,7 @@ async def api_payments_sse(
# TODO: refactor this route into a public and admin one
@core_app.get("/api/v1/payments/{payment_hash}")
@api_router.get("/api/v1/payments/{payment_hash}")
async def api_payment(payment_hash, X_Api_Key: Optional[str] = Header(None)):
# We use X_Api_Key here because we want this call to work with and without keys
# If a valid key is given, we also return the field "details", otherwise not
@@ -512,7 +515,7 @@ async def api_payment(payment_hash, X_Api_Key: Optional[str] = Header(None)):
return {"paid": not payment.pending, "preimage": payment.preimage}
@core_app.get("/api/v1/lnurlscan/{code}")
@api_router.get("/api/v1/lnurlscan/{code}")
async def api_lnurlscan(code: str, wallet: WalletTypeInfo = Depends(get_key_type)):
try:
url = lnurl.decode(code)
@@ -627,7 +630,7 @@ async def api_lnurlscan(code: str, wallet: WalletTypeInfo = Depends(get_key_type
return params
@core_app.post("/api/v1/payments/decode", status_code=HTTPStatus.OK)
@api_router.post("/api/v1/payments/decode", status_code=HTTPStatus.OK)
async def api_payments_decode(data: DecodePayment, response: Response):
payment_str = data.data
try:
@@ -653,7 +656,7 @@ async def api_payments_decode(data: DecodePayment, response: Response):
return {"message": "Failed to decode"}
@core_app.post("/api/v1/lnurlauth")
@api_router.post("/api/v1/lnurlauth")
async def api_perform_lnurlauth(
data: CreateLnurlAuth, wallet: WalletTypeInfo = Depends(require_admin_key)
):
@@ -665,7 +668,7 @@ async def api_perform_lnurlauth(
return ""
@core_app.get("/api/v1/currencies")
@api_router.get("/api/v1/currencies")
async def api_list_currencies_available():
if len(settings.lnbits_allowed_currencies) > 0:
return [
@@ -676,7 +679,7 @@ async def api_list_currencies_available():
return list(currencies.keys())
@core_app.post("/api/v1/conversion")
@api_router.post("/api/v1/conversion")
async def api_fiat_as_sats(data: ConversionData):
output = {}
if data.from_ == "sat":
@@ -694,7 +697,7 @@ async def api_fiat_as_sats(data: ConversionData):
return output
@core_app.get("/api/v1/qrcode/{data}", response_class=StreamingResponse)
@api_router.get("/api/v1/qrcode/{data}", response_class=StreamingResponse)
async def img(data):
qr = pyqrcode.create(data)
stream = BytesIO()
@@ -715,7 +718,7 @@ async def img(data):
)
@core_app.websocket("/api/v1/ws/{item_id}")
@api_router.websocket("/api/v1/ws/{item_id}")
async def websocket_connect(websocket: WebSocket, item_id: str):
await websocketManager.connect(websocket, item_id)
try:
@@ -725,7 +728,7 @@ async def websocket_connect(websocket: WebSocket, item_id: str):
websocketManager.disconnect(websocket)
@core_app.post("/api/v1/ws/{item_id}")
@api_router.post("/api/v1/ws/{item_id}")
async def websocket_update_post(item_id: str, data: str):
try:
await websocketUpdater(item_id, data)
@@ -734,7 +737,7 @@ async def websocket_update_post(item_id: str, data: str):
return {"sent": False, "data": data}
@core_app.get("/api/v1/ws/{item_id}/{data}")
@api_router.get("/api/v1/ws/{item_id}/{data}")
async def websocket_update_get(item_id: str, data: str):
try:
await websocketUpdater(item_id, data)
@@ -743,7 +746,7 @@ async def websocket_update_get(item_id: str, data: str):
return {"sent": False, "data": data}
@core_app.post("/api/v1/extension")
@api_router.post("/api/v1/extension")
async def api_install_extension(
data: CreateExtension, user: User = Depends(check_admin)
):
@@ -802,7 +805,7 @@ async def api_install_extension(
)
@core_app.delete("/api/v1/extension/{ext_id}")
@api_router.delete("/api/v1/extension/{ext_id}")
async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin)):
installable_extensions = await InstallableExtension.get_installable_extensions()
@@ -845,7 +848,7 @@ async def api_uninstall_extension(ext_id: str, user: User = Depends(check_admin)
)
@core_app.get(
@api_router.get(
"/api/v1/extension/{ext_id}/releases", dependencies=[Depends(check_admin)]
)
async def get_extension_releases(ext_id: str):
@@ -862,7 +865,7 @@ async def get_extension_releases(ext_id: str):
)
@core_app.get(
@api_router.get(
"/api/v1/extension/release/{org}/{repo}/{tag_name}",
dependencies=[Depends(check_admin)],
)
@@ -883,7 +886,7 @@ async def get_extension_release(org: str, repo: str, tag_name: str):
)
@core_app.delete(
@api_router.delete(
"/api/v1/extension/{ext_id}/db",
dependencies=[Depends(check_admin)],
)
@@ -909,10 +912,7 @@ async def delete_extension_db(ext_id: str):
)
# TINYURL
@core_app.post(
@api_router.post(
"/api/v1/tinyurl",
name="Tinyurl",
description="creates a tinyurl",
@@ -933,7 +933,7 @@ async def api_create_tinyurl(
)
@core_app.get(
@api_router.get(
"/api/v1/tinyurl/{tinyurl_id}",
name="Tinyurl",
description="get a tinyurl by id",
@@ -955,7 +955,7 @@ async def api_get_tinyurl(
)
@core_app.delete(
@api_router.delete(
"/api/v1/tinyurl/{tinyurl_id}",
name="Tinyurl",
description="delete a tinyurl by id",
@@ -978,7 +978,7 @@ async def api_delete_tinyurl(
)
@core_app.get(
@api_router.get(
"/t/{tinyurl_id}",
name="Tinyurl",
description="redirects a tinyurl by id",
@@ -994,10 +994,7 @@ async def api_tinyurl(tinyurl_id: str):
)
############################WEBPUSH##################################
@core_app.post("/api/v1/webpush", status_code=HTTPStatus.CREATED)
@api_router.post("/api/v1/webpush", status_code=HTTPStatus.CREATED)
async def api_create_webpush_subscription(
request: Request,
data: CreateWebPushSubscription,
@@ -1019,7 +1016,7 @@ async def api_create_webpush_subscription(
)
@core_app.delete("/api/v1/webpush", status_code=HTTPStatus.OK)
@api_router.delete("/api/v1/webpush", status_code=HTTPStatus.OK)
async def api_delete_webpush_subscription(
request: Request,
wallet: WalletTypeInfo = Depends(require_admin_key),