mypyfication and format

This commit is contained in:
Tiago Vasconcelos 2023-01-04 11:16:20 +00:00
parent 87933d1f8b
commit 9291b54ef7
4 changed files with 84 additions and 64 deletions

View file

@ -209,7 +209,7 @@ async def delete_shop_stall(stall_id: str) -> None:
###Orders
async def create_shop_order(data: createOrder, invoiceid: str) -> Orders:
async def create_shop_order(data: createOrder, invoiceid: str):
returning = "" if db.type == SQLITE else "RETURNING ID"
method = db.execute if db.type == SQLITE else db.fetchone
@ -234,9 +234,6 @@ async def create_shop_order(data: createOrder, invoiceid: str) -> Orders:
return result._result_proxy.lastrowid
else:
return result[0]
# link = await get_shop_order(link.id)
# assert link, "Newly created link couldn't be retrieved"
# return link
async def create_shop_order_details(order_id: str, data: List[createOrderDetails]):
@ -278,7 +275,7 @@ async def get_shop_order_invoiceid(invoice_id: str) -> Optional[Orders]:
return Orders(**row) if row else None
async def set_shop_order_paid(payment_hash: str) -> Orders:
async def set_shop_order_paid(payment_hash: str):
await db.execute(
"""
UPDATE shop.orders
@ -380,7 +377,7 @@ async def create_shop_market(data: CreateMarket):
return market
async def create_shop_market_stalls(market_id: str, data: List[CreateMarketStalls]):
async def create_shop_market_stalls(market_id: str, data: List[str]):
for stallid in data:
id = urlsafe_short_hash()

View file

@ -23,7 +23,7 @@ async def wait_for_paid_invoices():
async def on_invoice_paid(payment: Payment) -> None:
if payment.extra.get("tag") != "shop":
if payment.extra and payment.extra.get("tag") != "shop":
return
order = await get_shop_order_invoiceid(payment.payment_hash)

View file

@ -2,8 +2,14 @@ import json
from http import HTTPStatus
from typing import List
from fastapi import BackgroundTasks, Query, Request, WebSocket, WebSocketDisconnect
from fastapi.params import Depends
from fastapi import (
BackgroundTasks,
Depends,
Query,
Request,
WebSocket,
WebSocketDisconnect,
)
from fastapi.templating import Jinja2Templates
from loguru import logger
from starlette.exceptions import HTTPException
@ -42,6 +48,7 @@ async def index(request: Request, user: User = Depends(check_user_exists)):
user=user.id, data=SetSettings(currency="sat", fiat_base_multiplier=1)
)
settings = await get_shop_settings(user.id)
assert settings
return shop_renderer().TemplateResponse(
"shop/index.html",
{"request": request, "user": user.dict(), "currency": settings.currency},
@ -52,26 +59,28 @@ async def index(request: Request, user: User = Depends(check_user_exists)):
async def stall(request: Request, stall_id):
stall = await get_shop_stall(stall_id)
products = await get_shop_products(stall_id)
zones = []
for id in stall.shippingzones.split(","):
z = await get_shop_zone(id)
z = z.dict()
zones.append({"label": z["countries"], "cost": z["cost"], "value": z["id"]})
if not stall:
raise HTTPException(
status_code=HTTPStatus.NOT_FOUND, detail="Stall does not exist."
)
stall = stall.dict()
zones = []
for id in stall.shippingzones.split(","):
zone = await get_shop_zone(id)
assert zone
z = zone.dict()
zones.append({"label": z["countries"], "cost": z["cost"], "value": z["id"]})
stall["zones"] = zones
_stall = stall.dict()
_stall["zones"] = zones
return shop_renderer().TemplateResponse(
"shop/stall.html",
{
"request": request,
"stall": stall,
"stall": _stall,
"products": [product.dict() for product in products],
},
)
@ -109,9 +118,12 @@ async def order_chat(
keys: str = Query(None),
):
stall = await get_shop_stall(merch)
assert stall
order = await get_shop_order_invoiceid(invoice_id)
assert order
_order = await get_shop_order_details(order.id)
products = await get_shop_products(stall.id)
assert products
return shop_renderer().TemplateResponse(
"shop/order.html",

View file

@ -3,11 +3,8 @@ from http import HTTPStatus
from typing import List, Union
from uuid import uuid4
from fastapi import Request
from fastapi.param_functions import Body, Query
from fastapi.params import Depends
from fastapi import Body, Depends, Query, Request
from loguru import logger
from secp256k1 import PrivateKey, PublicKey
from starlette.exceptions import HTTPException
from lnbits.core.crud import get_user
@ -63,6 +60,7 @@ from .crud import (
)
from .models import (
CreateMarket,
CreateMarketStalls,
Orders,
Products,
SetSettings,
@ -86,7 +84,8 @@ async def api_shop_products(
wallet_ids = [wallet.wallet.id]
if all_stalls:
wallet_ids = (await get_user(wallet.wallet.user)).wallet_ids
user = await get_user(wallet.wallet.user)
wallet_ids = user.wallet_ids if user else []
stalls = [stall.id for stall in await get_shop_stalls(wallet_ids)]
@ -106,7 +105,11 @@ async def api_shop_product_create(
# For fiat currencies,
# we multiply by data.fiat_base_multiplier (usually 100) to save the value in cents.
settings = await get_shop_settings(user=wallet.wallet.user)
assert settings
stall = await get_shop_stall(stall_id=data.stall)
assert stall
if stall.currency != "sat":
data.price *= settings.fiat_base_multiplier
@ -122,7 +125,7 @@ async def api_shop_product_create(
product = await update_shop_product(product_id, **data.dict())
else:
product = await create_shop_product(data=data)
assert product
return product.dict()
@ -136,6 +139,8 @@ async def api_shop_products_delete(
return {"message": "Product does not exist."}
stall = await get_shop_stall(product.stall)
assert stall
if stall.wallet != wallet.wallet.id:
return {"message": "Not your Shop."}
@ -201,7 +206,8 @@ async def api_shop_stalls(
wallet_ids = [wallet.wallet.id]
if all_wallets:
wallet_ids = (await get_user(wallet.wallet.user)).wallet_ids
user = await get_user(wallet.wallet.user)
wallet_ids = user.wallet_ids if user else []
return [stall.dict() for stall in await get_shop_stalls(wallet_ids)]
@ -225,7 +231,7 @@ async def api_shop_stall_create(
stall = await update_shop_stall(stall_id, **data.dict())
else:
stall = await create_shop_stall(data=data)
assert stall
return stall.dict()
@ -254,16 +260,17 @@ async def api_shop_orders(
):
wallet_ids = [wallet.wallet.id]
if all_wallets:
wallet_ids = (await get_user(wallet.wallet.user)).wallet_ids
user = await get_user(wallet.wallet.user)
wallet_ids = user.wallet_ids if user else []
orders = await get_shop_orders(wallet_ids)
if not orders:
return
orders_with_details = []
for order in orders:
order = order.dict()
order["details"] = await get_shop_order_details(order["id"])
orders_with_details.append(order)
_order = order.dict()
_order["details"] = await get_shop_order_details(_order["id"])
orders_with_details.append(_order)
try:
return orders_with_details # [order for order in orders]
# return [order.dict() for order in await get_shop_orders(wallet_ids)]
@ -273,10 +280,12 @@ async def api_shop_orders(
@shop_ext.get("/api/v1/orders/{order_id}")
async def api_shop_order_by_id(order_id: str):
order = (await get_shop_order(order_id)).dict()
order["details"] = await get_shop_order_details(order_id)
order = await get_shop_order(order_id)
assert order
_order = order.dict()
_order["details"] = await get_shop_order_details(order_id)
return order
return _order
@shop_ext.post("/api/v1/orders")
@ -336,18 +345,18 @@ async def api_shop_order_delete(
raise HTTPException(status_code=HTTPStatus.NO_CONTENT)
@shop_ext.get("/api/v1/orders/paid/{order_id}")
async def api_shop_order_paid(
order_id, wallet: WalletTypeInfo = Depends(require_admin_key)
):
await db.execute(
"UPDATE shop.orders SET paid = ? WHERE id = ?",
(
True,
order_id,
),
)
return "", HTTPStatus.OK
# @shop_ext.get("/api/v1/orders/paid/{order_id}")
# async def api_shop_order_paid(
# order_id, wallet: WalletTypeInfo = Depends(require_admin_key)
# ):
# await db.execute(
# "UPDATE shop.orders SET paid = ? WHERE id = ?",
# (
# True,
# order_id,
# ),
# )
# return "", HTTPStatus.OK
@shop_ext.get("/api/v1/order/pubkey/{payment_hash}/{pubkey}")
@ -375,33 +384,33 @@ async def api_shop_order_shipped(
###List products based on stall id
@shop_ext.get("/api/v1/stall/products/{stall_id}")
async def api_shop_stall_products(
stall_id, wallet: WalletTypeInfo = Depends(get_key_type)
):
# @shop_ext.get("/api/v1/stall/products/{stall_id}")
# async def api_shop_stall_products(
# stall_id, wallet: WalletTypeInfo = Depends(get_key_type)
# ):
rows = await db.fetchone("SELECT * FROM shop.stalls WHERE id = ?", (stall_id,))
if not rows:
return {"message": "Stall does not exist."}
# rows = await db.fetchone("SELECT * FROM shop.stalls WHERE id = ?", (stall_id,))
# if not rows:
# return {"message": "Stall does not exist."}
products = db.fetchone("SELECT * FROM shop.products WHERE wallet = ?", (rows[1],))
if not products:
return {"message": "No products"}
# products = db.fetchone("SELECT * FROM shop.products WHERE wallet = ?", (rows[1],))
# if not products:
# return {"message": "No products"}
return [products.dict() for products in await get_shop_products(rows[1])]
# return [products.dict() for products in await get_shop_products(rows[1])]
###Check a product has been shipped
@shop_ext.get("/api/v1/stall/checkshipped/{checking_id}")
async def api_shop_stall_checkshipped(
checking_id, wallet: WalletTypeInfo = Depends(get_key_type)
):
rows = await db.fetchone(
"SELECT * FROM shop.orders WHERE invoiceid = ?", (checking_id,)
)
return {"shipped": rows["shipped"]}
# @shop_ext.get("/api/v1/stall/checkshipped/{checking_id}")
# async def api_shop_stall_checkshipped(
# checking_id, wallet: WalletTypeInfo = Depends(get_key_type)
# ):
# rows = await db.fetchone(
# "SELECT * FROM shop.orders WHERE invoiceid = ?", (checking_id,)
# )
# return {"shipped": rows["shipped"]}
##
@ -426,7 +435,7 @@ async def api_shop_market_stalls(market_id: str):
@shop_ext.post("/api/v1/markets")
@shop_ext.put("/api/v1/markets/{market_id}")
async def api_shop_stall_create(
async def api_shop_market_create(
data: CreateMarket,
market_id: str = None,
wallet: WalletTypeInfo = Depends(require_invoice_key),
@ -443,6 +452,7 @@ async def api_shop_stall_create(
else:
market = await create_shop_market(data=data)
assert market
await create_shop_market_stalls(market_id=market.id, data=data.stalls)
return market.dict()
@ -494,6 +504,7 @@ async def api_set_settings(
return {"message": "Not your Shop."}
settings = await get_shop_settings(user=usr)
assert settings
if settings.user != wallet.wallet.user:
return {"message": "Not your Shop."}