-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmodels.py
More file actions
70 lines (51 loc) · 1.66 KB
/
models.py
File metadata and controls
70 lines (51 loc) · 1.66 KB
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
65
66
67
68
69
70
import os
from typing import Annotated, Optional
from fastapi import Depends
from pydantic import BaseModel
from sqlmodel import Field, Session, SQLModel, create_engine
import asyncio
from sqlalchemy import text
from dotenv import load_dotenv
from urllib.parse import urlparse
from sqlalchemy.ext.asyncio import create_async_engine
from dotenv import load_dotenv
load_dotenv()
NEON_CONN_STR = os.getenv("DATABASE_URL")
engine = create_engine(NEON_CONN_STR, echo=True)
def get_session():
with Session(engine) as session:
yield session
SessionDep = Annotated[Session, Depends(get_session)]
class BookBase(SQLModel):
title: str
author: Optional[str] = None
cover: Optional[str] = None
num_pages: Optional[int] = None
year_published: Optional[int] = None
isbn13: Optional[str] = None
isbn10: Optional[str] = None
is_awesome: bool = True
have_read: bool = False
class Book(BookBase, table=True):
id: int | None = Field(default=None, primary_key=True)
class BookCreate(BookBase):
title: str
author: Optional[str] = None
cover: Optional[str] = None
num_pages: Optional[int] = None
year_published: Optional[int] = None
isbn13: Optional[str] = None
isbn10: Optional[str] = None
is_awesome: bool = True
class BookUpdate(BookBase):
title: Optional[str] = None # type: ignore
author: Optional[str] = None
cover: Optional[str] = None
num_pages: Optional[int] = None
year_published: Optional[int] = None
isbn13: Optional[str] = None
isbn10: Optional[str] = None
is_awesome: Optional[bool] = None # type: ignore
class Books(BaseModel):
books: list[Book]
count: int