Gracefully catch IntegrityError when a database constraint is violated

This commit is contained in:
BBaoVanC 2020-10-08 10:10:11 -05:00
parent 91c2017759
commit ba9bef5c8f
No known key found for this signature in database
GPG Key ID: 6D74C8B0E7D791C2
1 changed files with 44 additions and 25 deletions

View File

@ -10,6 +10,7 @@ from flask import Flask, jsonify, request
from flask_api import status from flask_api import status
from sqlalchemy.orm.exc import NoResultFound from sqlalchemy.orm.exc import NoResultFound
from sqlalchemy.exc import IntegrityError
from libdb import Session, Location, ProductQuantity, Product, Brand, Unit, Purchase, Use from libdb import Session, Location, ProductQuantity, Product, Brand, Unit, Purchase, Use
@ -258,10 +259,13 @@ def api_create_location():
newlocation = Location(name=locname, description=locdesc) newlocation = Location(name=locname, description=locdesc)
session.add(newlocation) session.add(newlocation)
print("added newlocation") print("added newlocation")
session.commit() try:
print("committed") session.commit()
print("committed")
return jsonify({'api_endpoints': f'/api/v1/location/name/{locname}'}) return jsonify({'api_endpoints': f'/api/v1/location/name/{locname}'})
except IntegrityError:
session.rollback()
return jsonify({'error': 'INTEGRITY_ERROR'})
@app.route("/api/v1/create_brand", methods=["POST"]) @app.route("/api/v1/create_brand", methods=["POST"])
@ -280,10 +284,13 @@ def api_create_brand():
newbrand = Brand(name=brandname, description=branddesc) newbrand = Brand(name=brandname, description=branddesc)
session.add(newbrand) session.add(newbrand)
print("added newbrand") print("added newbrand")
session.commit() try:
print("committed") session.commit()
print("committed")
return jsonify({'api_endpoints': [f'/api/v1/brand/name/{brandname}']}) return jsonify({'api_endpoints': [f'/api/v1/brand/name/{brandname}']})
except IntegrityError:
session.rollback()
return jsonify({'error': 'INTEGRITY_ERROR'})
@app.route("/api/v1/create_product", methods=["POST"]) @app.route("/api/v1/create_product", methods=["POST"])
@ -305,11 +312,14 @@ def api_create_product():
description=desc) description=desc)
session.add(newproduct) session.add(newproduct)
print("added newproduct") print("added newproduct")
session.commit() try:
print("committed") session.commit()
print("committed")
return jsonify({'api_endpoints': [f'/api/v1/product/upc/{request.form["upc"]}', return jsonify({'api_endpoints': [f'/api/v1/product/upc/{request.form["upc"]}',
f'/api/v1/product/name/{request.form["name"]}']}) f'/api/v1/product/name/{request.form["name"]}']})
except IntegrityError:
session.rollback()
return jsonify({'error': 'INTEGRITY_ERROR'})
@app.route("/api/v1/create_unit", methods=["POST"]) @app.route("/api/v1/create_unit", methods=["POST"])
@ -328,10 +338,13 @@ def api_create_unit():
newunit = Unit(name=unitname, description=unitdesc) newunit = Unit(name=unitname, description=unitdesc)
session.add(newunit) session.add(newunit)
print("added newunit") print("added newunit")
session.commit() try:
print("committed") session.commit()
print("committed")
return jsonify({'api_endpoints': [f'/api/v1/unit/name/{unitname}']}) return jsonify({'api_endpoints': [f'/api/v1/unit/name/{unitname}']})
except IntegrityError:
session.rollback()
return jsonify({'error': 'INTEGRITY_ERROR'})
@app.route("/api/v1/create_purchase", methods=["POST"]) @app.route("/api/v1/create_purchase", methods=["POST"])
@ -347,10 +360,13 @@ def api_create_purchase():
date=request.form['date'], location=request.form['location']) date=request.form['date'], location=request.form['location'])
session.add(newpurchase) session.add(newpurchase)
print("added newpurchase") print("added newpurchase")
session.commit() try:
print("committed") session.commit()
print("committed")
return jsonify({'api_endpoints': [f'/api/v1/purchase/id/{newpurchase.id}']}) return jsonify({'api_endpoints': [f'/api/v1/purchase/id/{newpurchase.id}']})
except IntegrityError:
session.rollback()
return jsonify({'error': 'INTEGRITY_ERROR'})
@app.route("/api/v1/create_use", methods=["POST"]) @app.route("/api/v1/create_use", methods=["POST"])
@ -366,10 +382,13 @@ def api_create_use():
date=request.form['date'], location=request.form['location']) date=request.form['date'], location=request.form['location'])
session.add(newuse) session.add(newuse)
print("added newuse") print("added newuse")
session.commit() try:
print("committed") session.commit()
print("committed")
return jsonify({'api_endpoints': [f'/api/v1/use/id/{newuse.id}']}) return jsonify({'api_endpoints': [f'/api/v1/use/id/{newuse.id}']})
except IntegrityError:
session.rollback()
return jsonify({'error': 'INTEGRITY_ERROR'})
if __name__ == "__main__": if __name__ == "__main__":