-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathmodels.py
64 lines (46 loc) · 1.55 KB
/
models.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import json
from sqlite3 import Row
from typing import Optional
from fastapi.param_functions import Query
from pydantic import BaseModel
from lnbits.db import FilterModel
class CreateUserData(BaseModel):
user_name: str = Query(..., description="Name of the user")
wallet_name: str = Query(..., description="Name of the wallet")
email: str = Query("")
password: str = Query("")
extra: Optional[dict[str, str]] = Query(default=None)
class UpdateUserData(BaseModel):
user_name: Optional[str] = Query(default=None, description="Name of the user")
extra: Optional[dict[str, str]] = Query(default=None, description='Partial update for extra field')
class CreateUserWallet(BaseModel):
user_id: str = Query(..., description="Target user for this new wallet")
wallet_name: str = Query(..., description="Name of the new wallet to create")
class User(BaseModel):
id: str
name: str
admin: str
email: Optional[str] = None
password: Optional[str] = None
extra: Optional[dict[str, str]]
@classmethod
def from_row(cls, row: Row):
attrs = dict(row)
attrs["extra"] = json.loads(attrs["extra"]) if attrs["extra"] else None
return cls(**attrs)
class UserFilters(FilterModel):
id: str
name: str
email: Optional[str] = None
class Wallet(BaseModel):
id: str
admin: str
name: str
user: str
adminkey: str
inkey: str
@classmethod
def from_row(cls, row: Row) -> "Wallet":
return cls(**dict(row))
class UserDetailed(User):
wallets: list[Wallet]