Skip to content

Commit 116d4a4

Browse files
committed
Database file
1 parent ba1f917 commit 116d4a4

File tree

1 file changed

+59
-0
lines changed

1 file changed

+59
-0
lines changed

ch06/planner/database/database.py

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
from beanie import init_beanie, PydanticObjectId
2+
from motor.motor_asyncio import AsyncIOMotorClient
3+
from typing import Optional
4+
from pydantic import BaseSettings, BaseModel
5+
6+
from models.users import User
7+
from models.events import Event
8+
9+
class Settings(BaseSettings):
10+
DATABASE_URL: Optional[str] = None
11+
12+
async def initialize_database(self):
13+
client = AsyncIOMotorClient(self.DATABASE_URL)
14+
await init_beanie(database=client.get_default_database(),
15+
document_models=[Event, User])
16+
17+
class Config:
18+
env_file = ".env"
19+
20+
21+
class Database:
22+
def __init__(self, model):
23+
self.model = model
24+
25+
async def save(self, document):
26+
await document.create()
27+
return
28+
29+
async def get(self, id: PydanticObjectId):
30+
doc = await self.model.get(id)
31+
if doc:
32+
return doc
33+
return False
34+
35+
async def get_all(self):
36+
docs = await self.model.find_all().to_list()
37+
return docs
38+
39+
async def update(self, id: PydanticObjectId, body: BaseModel):
40+
doc_id = id
41+
des_body = body.dict()
42+
43+
des_body = {k:v for k,v in des_body.items() if v is not None}
44+
update_query = {"$set": {
45+
field: value for field, value in des_body.items()
46+
}}
47+
48+
doc = await self.get(doc_id)
49+
if not doc:
50+
return False
51+
await doc.update(update_query)
52+
return doc
53+
54+
async def delete(self, id: PydanticObjectId):
55+
doc = await self.get(id)
56+
if not doc:
57+
return False
58+
await doc.delete()
59+
return True

0 commit comments

Comments
 (0)