69 lines
1.6 KiB
Python
69 lines
1.6 KiB
Python
import os
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
|
|
def add_item(db: Session, cls, item):
|
|
db_item = cls(**item.dict())
|
|
db.add(db_item)
|
|
db.commit()
|
|
db.refresh(db_item)
|
|
return db_item
|
|
|
|
|
|
def view_item(db: Session, cls, item_id: int):
|
|
return db.query(cls).filter(cls.id == item_id).first()
|
|
|
|
|
|
def edit_item(db: Session, cls, item_id: int, item):
|
|
db_item = db.query(cls).filter(cls.id == item_id).first()
|
|
for key, value in item.dict().items():
|
|
setattr(db_item, key, value)
|
|
db.commit()
|
|
db.refresh(db_item)
|
|
return db_item
|
|
|
|
|
|
def remove_item(db: Session, cls, item_id: int):
|
|
db_item = db.query(cls).filter(cls.id == item_id).first()
|
|
db.delete(db_item)
|
|
db.commit()
|
|
return db_item
|
|
|
|
|
|
def view_items(db: Session, cls, skip: int = 0, limit: int = 100):
|
|
return db.query(cls).offset(skip).limit(limit).all()
|
|
|
|
|
|
def add_file(db: Session, cls, item_id: int, field: str, file):
|
|
content = file.file.read()
|
|
|
|
if content:
|
|
file_path = os.path.join("media", file.filename)
|
|
else:
|
|
file_path = None
|
|
|
|
if file_path:
|
|
with open(file_path, "wb") as f:
|
|
f.write(content)
|
|
|
|
db_item = db.query(cls).filter(cls.id == item_id).first()
|
|
setattr(db_item, field, file_path)
|
|
db.commit()
|
|
db.refresh(db_item)
|
|
|
|
return db_item
|
|
|
|
|
|
def remove_file(db: Session, cls, item_id: int, field: str):
|
|
db_item = db.query(cls).filter(cls.id == item_id).first()
|
|
file_path = getattr(db_item, field)
|
|
if file_path:
|
|
os.remove(file_path)
|
|
|
|
setattr(db_item, field, None)
|
|
db.commit()
|
|
db.refresh(db_item)
|
|
|
|
return db_item
|