Save file and upload file functions in vouchers de duplicated

This commit is contained in:
Amritanshu Agrawal 2020-05-30 11:09:19 +05:30
parent d49be23056
commit 9a1844100f
6 changed files with 46 additions and 130 deletions

@ -1,5 +1,6 @@
import uuid import uuid
from io import BytesIO from io import BytesIO
from typing import List
from fastapi import APIRouter, Depends, Security from fastapi import APIRouter, Depends, Security
from fastapi.responses import StreamingResponse from fastapi.responses import StreamingResponse
@ -9,6 +10,7 @@ from ..core.security import get_user
from ..models.voucher import DbImage from ..models.voucher import DbImage
from ..db.session import SessionLocal from ..db.session import SessionLocal
from ..schemas.auth import UserToken from ..schemas.auth import UserToken
import brewman.schemas.voucher as output
router = APIRouter() router = APIRouter()
@ -34,3 +36,17 @@ def db_image(
else: else:
item = BytesIO(item.image) item = BytesIO(item.image)
return StreamingResponse(item, media_type="image/jpeg") return StreamingResponse(item, media_type="image/jpeg")
def save_files(voucher_id: uuid.UUID, i: List[bytes], t: List[bytes], db: Session):
for index, value in enumerate(i):
db.add(DbImage(voucher_id, "voucher", i[index], t[index]))
def update_files(voucher_id: uuid.UUID, data: List[output.ImageUpload], i: List[bytes], t: List[bytes], db: Session):
old = [f.id_ for f in data if f.id_]
images = db.query(DbImage).filter(DbImage.resource_id == voucher_id).all()
for image in [i for i in images if i.id not in old]:
db.delete(image)
for index, value in enumerate(i):
db.add(DbImage(voucher_id, "voucher", i[index], t[index]))

@ -9,13 +9,13 @@ from fastapi import (
status, status,
Depends, Depends,
Security, Security,
UploadFile,
File, File,
Request, Request,
) )
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from .db_image import save_files, update_files
from .voucher import ( from .voucher import (
voucher_info, voucher_info,
check_voucher_lock_info, check_voucher_lock_info,
@ -53,13 +53,11 @@ def save_route(
request: Request, request: Request,
data: schema_in.EmployeeBenefitIn = Depends(schema_in.EmployeeBenefitIn.load_form), data: schema_in.EmployeeBenefitIn = Depends(schema_in.EmployeeBenefitIn.load_form),
db: Session = Depends(get_db), db: Session = Depends(get_db),
i: List[UploadFile] = File(None), i: List[bytes] = File(None),
t: List[UploadFile] = File(None), t: List[bytes] = File(None),
user: UserToken = Security(get_user, scopes=["employee-benefit"]), user: UserToken = Security(get_user, scopes=["employee-benefit"]),
): ):
try: try:
i = i or []
t = t or []
dt = get_last_day(data.date_) dt = get_last_day(data.date_)
days_in_month = dt.day days_in_month = dt.day
item: Voucher = save(data, dt, user, db) item: Voucher = save(data, dt, user, db)
@ -67,7 +65,7 @@ def save_route(
item, data.employee_benefits, days_in_month, db item, data.employee_benefits, days_in_month, db
) )
save_journals(item, exp, total, db) save_journals(item, exp, total, db)
save_files(i + t, db) save_files(item.id, i, t, db)
db.commit() db.commit()
set_date(data.date_.strftime("%d-%b-%Y"), request.session) set_date(data.date_.strftime("%d-%b-%Y"), request.session)
info = voucher_info(item, db) info = voucher_info(item, db)
@ -170,25 +168,17 @@ def save_journals(voucher: Voucher, exp: int, total: int, db: Session):
voucher.journals.append(journal) voucher.journals.append(journal)
def save_files(files: List[UploadFile], db: Session):
# for key, value in files.items():
# db.add(DbImage(voucher.id, "voucher", value["f"], value["t"]))
pass
@router.put("/{id_}", response_model=output.Voucher) @router.put("/{id_}", response_model=output.Voucher)
def update_route( def update_route(
id_: uuid.UUID, id_: uuid.UUID,
request: Request, request: Request,
data: schema_in.EmployeeBenefitIn = Depends(schema_in.EmployeeBenefitIn.load_form), data: schema_in.EmployeeBenefitIn = Depends(schema_in.EmployeeBenefitIn.load_form),
db: Session = Depends(get_db), db: Session = Depends(get_db),
i: List[UploadFile] = File(None), i: List[bytes] = File(None),
t: List[UploadFile] = File(None), t: List[bytes] = File(None),
user: UserToken = Security(get_user, scopes=["employee-benefit"]), user: UserToken = Security(get_user, scopes=["employee-benefit"]),
): ):
try: try:
i = i or []
t = t or []
dt = get_last_day(data.date_) dt = get_last_day(data.date_)
days_in_month = dt.day days_in_month = dt.day
item: Voucher = update(id_, data, user, db) item: Voucher = update(id_, data, user, db)
@ -199,7 +189,7 @@ def update_route(
) )
update_journals(item, exp, total) update_journals(item, exp, total)
# journals_valid(voucher) # journals_valid(voucher)
update_files(data, i + t, db) update_files(item.id, data.files, i, t, db)
db.commit() db.commit()
set_date(data.date_.strftime("%d-%b-%Y"), request.session) set_date(data.date_.strftime("%d-%b-%Y"), request.session)
return voucher_info(item, db) return voucher_info(item, db)
@ -267,18 +257,6 @@ def update_journals(voucher: Voucher, exp: int, total: int):
journal.amount = total journal.amount = total
def update_files(data: schema_in.VoucherIn, files: List[UploadFile], db: Session):
pass
# old_files = [
# uuid.UUID(f["id"]) for f in json["files"] if "id" in f and f["id"] is not None
# ]
# images = db.query(DbImage).filter(DbImage.resource_id == voucher.id).all()
# for image in [i for i in images if i.id not in old_files]:
# db.delete(image)
# for key, value in files.items():
# db.add(DbImage(voucher.id, "voucher", value["f"], value["t"]))
@router.get("/{id_}", response_model=output.Voucher) @router.get("/{id_}", response_model=output.Voucher)
def get_id( def get_id(
id_: uuid.UUID, id_: uuid.UUID,

@ -10,13 +10,13 @@ from fastapi import (
status, status,
Depends, Depends,
Security, Security,
UploadFile,
File, File,
Request, Request,
) )
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from .db_image import save_files, update_files
from .voucher import ( from .voucher import (
voucher_info, voucher_info,
check_voucher_lock_info, check_voucher_lock_info,
@ -49,17 +49,15 @@ def save_route(
request: Request, request: Request,
data: schema_in.IssueIn = Depends(schema_in.IssueIn.load_form), data: schema_in.IssueIn = Depends(schema_in.IssueIn.load_form),
db: Session = Depends(get_db), db: Session = Depends(get_db),
i: List[UploadFile] = File(None), i: List[bytes] = File(None),
t: List[UploadFile] = File(None), t: List[bytes] = File(None),
user: UserToken = Security(get_user, scopes=["issue"]), user: UserToken = Security(get_user, scopes=["issue"]),
): ):
try: try:
i = i or []
t = t or []
item, batch_consumed = save(data, user, db) item, batch_consumed = save(data, user, db)
amount = save_inventories(item, data.inventories, batch_consumed, db) amount = save_inventories(item, data.inventories, batch_consumed, db)
save_journals(item, data.source, data.destination, amount, db) save_journals(item, data.source, data.destination, amount, db)
save_files(i + t, db) save_files(item.id, i, t, db)
db.commit() db.commit()
set_date(data.date_.strftime("%d-%b-%Y"), request.session) set_date(data.date_.strftime("%d-%b-%Y"), request.session)
info = voucher_info(item, db) info = voucher_info(item, db)
@ -169,29 +167,21 @@ def save_journals(
db.add(d) db.add(d)
def save_files(files: List[UploadFile], db: Session):
# for key, value in files.items():
# db.add(DbImage(voucher.id, "voucher", value["f"], value["t"]))
pass
@router.put("/{id_}", response_model=output.Voucher) @router.put("/{id_}", response_model=output.Voucher)
def update_route( def update_route(
id_: uuid.UUID, id_: uuid.UUID,
request: Request, request: Request,
data: schema_in.IssueIn = Depends(schema_in.IssueIn.load_form), data: schema_in.IssueIn = Depends(schema_in.IssueIn.load_form),
db: Session = Depends(get_db), db: Session = Depends(get_db),
i: List[UploadFile] = File(None), i: List[bytes] = File(None),
t: List[UploadFile] = File(None), t: List[bytes] = File(None),
user: UserToken = Security(get_user, scopes=["issue"]), user: UserToken = Security(get_user, scopes=["issue"]),
): ):
try: try:
i = i or []
t = t or []
item, batch_consumed = update(id_, data, user, db) item, batch_consumed = update(id_, data, user, db)
amount = update_inventories(item, data.inventories, batch_consumed, db) amount = update_inventories(item, data.inventories, batch_consumed, db)
update_journals(item, data.source, data.destination, amount) update_journals(item, data.source, data.destination, amount)
update_files(data, i + t, db) update_files(item.id, data.files, i, t, db)
db.commit() db.commit()
set_date(data.date_.strftime("%d-%b-%Y"), request.session) set_date(data.date_.strftime("%d-%b-%Y"), request.session)
# item: Voucher = db.query(Voucher).filter(Voucher.id == item.id).first() # item: Voucher = db.query(Voucher).filter(Voucher.id == item.id).first()
@ -333,18 +323,6 @@ def update_journals(
item.amount = amount item.amount = amount
def update_files(data: schema_in.IssueIn, files: List[UploadFile], db: Session):
pass
# old_files = [
# uuid.UUID(f["id"]) for f in json["files"] if "id" in f and f["id"] is not None
# ]
# images = db.query(DbImage).filter(DbImage.resource_id == voucher.id).all()
# for image in [i for i in images if i.id not in old_files]:
# db.delete(image)
# for key, value in files.items():
# db.add(DbImage(voucher.id, "voucher", value["f"], value["t"]))
@router.get("/{id_}", response_model=output.Voucher) @router.get("/{id_}", response_model=output.Voucher)
def get_id( def get_id(
id_: uuid.UUID, id_: uuid.UUID,

@ -8,13 +8,13 @@ from fastapi import (
status, status,
Depends, Depends,
Security, Security,
UploadFile,
File, File,
Request, Request,
) )
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from .db_image import save_files, update_files
from .voucher import ( from .voucher import (
voucher_info, voucher_info,
check_voucher_lock_info, check_voucher_lock_info,
@ -26,7 +26,7 @@ from ..models import AccountBase
from ..schemas.auth import UserToken from ..schemas.auth import UserToken
from ..core.security import get_current_active_user as get_user from ..core.security import get_current_active_user as get_user
from ..db.session import SessionLocal from ..db.session import SessionLocal
from ..models.voucher import Voucher, VoucherType, Journal, DbImage from ..models.voucher import Voucher, VoucherType, Journal
import brewman.schemas.voucher as output import brewman.schemas.voucher as output
import brewman.schemas.input as schema_in import brewman.schemas.input as schema_in
@ -93,11 +93,6 @@ def save(data: schema_in.JournalIn, user: UserToken, db: Session) -> Voucher:
return voucher return voucher
def save_files(voucher_id: uuid.UUID, i: List[bytes], t: List[bytes], db: Session):
for index, value in enumerate(i):
db.add(DbImage(voucher_id, "voucher", i[index], t[index]))
@router.put("/{id_}", response_model=output.Voucher) @router.put("/{id_}", response_model=output.Voucher)
def update_route( def update_route(
id_: uuid.UUID, id_: uuid.UUID,
@ -175,15 +170,6 @@ def update(
return voucher return voucher
def update_files(voucher_id: uuid.UUID, data: List[output.ImageUpload], i: List[bytes], t: List[bytes], db: Session):
old = [f.id_ for f in data if f.id_]
images = db.query(DbImage).filter(DbImage.resource_id == voucher_id).all()
for image in [i for i in images if i.id not in old]:
db.delete(image)
for index, value in enumerate(i):
db.add(DbImage(voucher_id, "voucher", i[index], t[index]))
@router.get("/{id_}", response_model=output.Voucher) @router.get("/{id_}", response_model=output.Voucher)
def get_id( def get_id(
id_: uuid.UUID, id_: uuid.UUID,

@ -9,7 +9,6 @@ from fastapi import (
status, status,
Depends, Depends,
Security, Security,
UploadFile,
File, File,
Request, Request,
) )
@ -17,6 +16,7 @@ from sqlalchemy import func
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from .db_image import save_files, update_files
from .voucher import ( from .voucher import (
voucher_info, voucher_info,
check_voucher_lock_info, check_voucher_lock_info,
@ -49,17 +49,15 @@ def save_route(
request: Request, request: Request,
data: schema_in.PurchaseIn = Depends(schema_in.PurchaseIn.load_form), data: schema_in.PurchaseIn = Depends(schema_in.PurchaseIn.load_form),
db: Session = Depends(get_db), db: Session = Depends(get_db),
i: List[UploadFile] = File(None), i: List[bytes] = File(None),
t: List[UploadFile] = File(None), t: List[bytes] = File(None),
user: UserToken = Security(get_user, scopes=["purchase"]), user: UserToken = Security(get_user, scopes=["purchase"]),
): ):
try: try:
i = i or []
t = t or []
item: Voucher = save(data, user, db) item: Voucher = save(data, user, db)
save_inventories(item, data.inventories, db) save_inventories(item, data.inventories, db)
save_journals(item, data.vendor, db) save_journals(item, data.vendor, db)
save_files(i + t, db) save_files(item.id, i, t, db)
db.commit() db.commit()
set_date(data.date_.strftime("%d-%b-%Y"), request.session) set_date(data.date_.strftime("%d-%b-%Y"), request.session)
info = voucher_info(item, db) info = voucher_info(item, db)
@ -147,30 +145,22 @@ def save_journals(voucher: Voucher, ven: schema_in.AccountLink, db: Session):
db.add(item) db.add(item)
def save_files(files: List[UploadFile], db: Session):
# for key, value in files.items():
# db.add(DbImage(voucher.id, "voucher", value["f"], value["t"]))
pass
@router.put("/{id_}", response_model=output.Voucher) @router.put("/{id_}", response_model=output.Voucher)
def update_route( def update_route(
id_: uuid.UUID, id_: uuid.UUID,
request: Request, request: Request,
data: schema_in.PurchaseIn = Depends(schema_in.PurchaseIn.load_form), data: schema_in.PurchaseIn = Depends(schema_in.PurchaseIn.load_form),
db: Session = Depends(get_db), db: Session = Depends(get_db),
i: List[UploadFile] = File(None), i: List[bytes] = File(None),
t: List[UploadFile] = File(None), t: List[bytes] = File(None),
user: UserToken = Security(get_user, scopes=["purchase"]), user: UserToken = Security(get_user, scopes=["purchase"]),
): ):
try: try:
i = i or []
t = t or []
item: Voucher = update(id_, data, user, db) item: Voucher = update(id_, data, user, db)
update_inventory(item, data.inventories, db) update_inventory(item, data.inventories, db)
update_journals(item, data.vendor, db) update_journals(item, data.vendor, db)
# journals_valid(voucher) # journals_valid(voucher)
update_files(data, i + t, db) update_files(item.id, data.files, i, t, db)
db.commit() db.commit()
set_date(data.date_.strftime("%d-%b-%Y"), request.session) set_date(data.date_.strftime("%d-%b-%Y"), request.session)
return voucher_info(item, db) return voucher_info(item, db)
@ -330,18 +320,6 @@ def update_journals(voucher: Voucher, ven: schema_in.AccountLink, db):
db.add(item) db.add(item)
def update_files(data: schema_in.PurchaseIn, files: List[UploadFile], db: Session):
pass
# old_files = [
# uuid.UUID(f["id"]) for f in json["files"] if "id" in f and f["id"] is not None
# ]
# images = db.query(DbImage).filter(DbImage.resource_id == voucher.id).all()
# for image in [i for i in images if i.id not in old_files]:
# db.delete(image)
# for key, value in files.items():
# db.add(DbImage(voucher.id, "voucher", value["f"], value["t"]))
@router.get("/{id_}", response_model=output.Voucher) @router.get("/{id_}", response_model=output.Voucher)
def get_id( def get_id(
id_: uuid.UUID, id_: uuid.UUID,

@ -9,13 +9,13 @@ from fastapi import (
status, status,
Depends, Depends,
Security, Security,
UploadFile,
File, File,
Request, Request,
) )
from sqlalchemy.exc import SQLAlchemyError from sqlalchemy.exc import SQLAlchemyError
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from .db_image import save_files, update_files
from .voucher import ( from .voucher import (
voucher_info, voucher_info,
check_voucher_lock_info, check_voucher_lock_info,
@ -48,8 +48,8 @@ def save_route(
request: Request, request: Request,
data: schema_in.PurchaseIn = Depends(schema_in.PurchaseIn.load_form), data: schema_in.PurchaseIn = Depends(schema_in.PurchaseIn.load_form),
db: Session = Depends(get_db), db: Session = Depends(get_db),
i: List[UploadFile] = File(None), i: List[bytes] = File(None),
t: List[UploadFile] = File(None), t: List[bytes] = File(None),
user: UserToken = Security(get_user, scopes=["purchase-return"]), user: UserToken = Security(get_user, scopes=["purchase-return"]),
): ):
try: try:
@ -58,7 +58,7 @@ def save_route(
item: Voucher = save(data, user, db) item: Voucher = save(data, user, db)
save_inventories(item, data.inventories, db) save_inventories(item, data.inventories, db)
save_journals(item, data.vendor, db) save_journals(item, data.vendor, db)
save_files(i + t, db) save_files(item.id, i, t, db)
db.commit() db.commit()
set_date(data.date_.strftime("%d-%b-%Y"), request.session) set_date(data.date_.strftime("%d-%b-%Y"), request.session)
info = voucher_info(item, db) info = voucher_info(item, db)
@ -143,30 +143,22 @@ def save_journals(voucher: Voucher, ven: schema_in.AccountLink, db: Session):
db.add(item) db.add(item)
def save_files(files: List[UploadFile], db: Session):
# for key, value in files.items():
# db.add(DbImage(voucher.id, "voucher", value["f"], value["t"]))
pass
@router.put("/{id_}", response_model=output.Voucher) @router.put("/{id_}", response_model=output.Voucher)
def update_route( def update_route(
id_: uuid.UUID, id_: uuid.UUID,
request: Request, request: Request,
data: schema_in.PurchaseIn = Depends(schema_in.PurchaseIn.load_form), data: schema_in.PurchaseIn = Depends(schema_in.PurchaseIn.load_form),
db: Session = Depends(get_db), db: Session = Depends(get_db),
i: List[UploadFile] = File(None), i: List[bytes] = File(None),
t: List[UploadFile] = File(None), t: List[bytes] = File(None),
user: UserToken = Security(get_user, scopes=["purchase-return"]), user: UserToken = Security(get_user, scopes=["purchase-return"]),
): ):
try: try:
i = i or []
t = t or []
item: Voucher = update(id_, data, user, db) item: Voucher = update(id_, data, user, db)
update_inventory(item, data.inventories, db) update_inventory(item, data.inventories, db)
update_journals(item, data.vendor, db) update_journals(item, data.vendor, db)
# journals_valid(voucher) # journals_valid(voucher)
update_files(data, i + t, db) update_files(item.id, data.files, i, t, db)
db.commit() db.commit()
set_date(data.date_.strftime("%d-%b-%Y"), request.session) set_date(data.date_.strftime("%d-%b-%Y"), request.session)
return voucher_info(item, db) return voucher_info(item, db)
@ -273,18 +265,6 @@ def update_journals(voucher: Voucher, ven: schema_in.AccountLink, db):
db.add(item) db.add(item)
def update_files(data: schema_in.PurchaseIn, files: List[UploadFile], db: Session):
pass
# old_files = [
# uuid.UUID(f["id"]) for f in json["files"] if "id" in f and f["id"] is not None
# ]
# images = db.query(DbImage).filter(DbImage.resource_id == voucher.id).all()
# for image in [i for i in images if i.id not in old_files]:
# db.delete(image)
# for key, value in files.items():
# db.add(DbImage(voucher.id, "voucher", value["f"], value["t"]))
@router.get("/{id_}", response_model=output.Voucher) @router.get("/{id_}", response_model=output.Voucher)
def get_id( def get_id(
id_: uuid.UUID, id_: uuid.UUID,