Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from flask import Flask, request, jsonify, send_from_directory
- from flask_sqlalchemy import SQLAlchemy
- from flask_marshmallow import Marshmallow
- import uuid
- from werkzeug.utils import secure_filename
- import os
- app = Flask(__name__)
- basedir = os.path.abspath(os.path.dirname(__file__))
- UPLOAD_FOLDER = os.path.join(basedir,'uploads')
- ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif', 'csv'}
- app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'db.sqlite')
- app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
- app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER
- db = SQLAlchemy(app)
- ma= Marshmallow(app)
- # @app.route('/', methods=['GET'])
- # def get():
- # return jsonify({'msg': 'hello world!'})
- class Product(db.Model):
- id = db.Column(db.Integer, primary_key=True)
- name = db.Column(db.String(100), unique=True)
- description = db.Column(db.String(200))
- price = db.Column(db.Float)
- qty = db.Column(db.Integer)
- def __init__(self, name, description, price, qty):
- self.name = name
- self.description = description
- self.price = price
- self.qty = qty
- def __repr__(self):
- return "Product, Name: %s and desc: %s" % (self.name, self.description)
- class ProductSchema(ma.Schema):
- class Meta:
- fields = ('id','name','description','price','qty')
- product_schema = ProductSchema()
- products_schema = ProductSchema(many=True)
- @app.route('/product', methods=['POST'])
- def add_product():
- name=request.json.get('name')
- description = request.json.get('description')
- price=request.json.get('price')
- qty=request.json.get('qty')
- new_product = Product(name=name, description=description, price=price, qty=qty)
- db.session.add(new_product)
- db.session.commit()
- return product_schema.jsonify(new_product)
- @app.route('/product', methods=['GET'])
- def get_products():
- all_products = Product.query.all()
- result = products_schema.dump(all_products)
- print(result)
- return jsonify(result)
- @app.route('/product/<string:id>', methods=['GET'])
- def get_product(id):
- print(UPLOAD_FOLDER)
- product = Product.query.get(id)
- return product_schema.jsonify(product)
- @app.route('/product/<string:id>', methods=['PUT'])
- def update_product(id):
- product = Product.query.get(id)
- name=request.json.get('name')
- description = request.json.get('description')
- price=request.json.get('price')
- qty=request.json.get('qty')
- product.name = name
- product.description = description
- product.price = price
- product.qty = qty
- db.session.commit()
- return product_schema.jsonify(product)
- @app.route('/product/<string:id>', methods=['DELETE'])
- def delete_product(id):
- product = Product.query.get(id)
- db.session.delete(product)
- db.session.commit()
- product = Product.query.get(id)
- return product_schema.jsonify(product)
- def allowed_file(filename):
- return '.' in filename and \
- filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS
- @app.route('/upload', methods=['POST'])
- def upload_file():
- status = "ok"
- random_id = uuid.uuid1()
- if request.method == 'POST':
- if 'file' not in request.files:
- return jsonify({"status": "no file attached!"})
- file = request.files['file']
- if file.filename == '':
- return jsonify({"status": "no file name found!"})
- if not allowed_file(file.filename):
- return jsonify({"status": "file format not supported!"})
- if file and allowed_file(file.filename):
- filename = secure_filename(file.filename)
- file.save(os.path.join(app.config['UPLOAD_FOLDER'], str(random_id)+filename))
- return jsonify({"status": "file uploaded!"})
- return jsonify({"status": status})
- @app.route('/download', methods=['GET'])
- def download_file():
- filename = 'target_data_bulk.csv'
- return send_from_directory(directory=app.config['UPLOAD_FOLDER'], filename=filename)
- if __name__ == '__main__':
- app.run(debug=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement