Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- from flask import request, jsonify
- from flask.views import MethodView
- from models import Section, Item, SubItem, db, ParameterValue
- from api.password import loadPassword
- from helper import Helper
- from sqlalchemy import or_
- helper = Helper()
- class SectionsAPI(MethodView):
- def get(self, _id):
- account_id = request.args.get('account')
- if account_id is '': account_id = None
- if _id:
- if account_id:
- section = Section.query.filter(Section.id == _id).filter(or_(Section.account_id == None,
- Section.account_id == account_id)).first()
- else: section = Section.query.filter(Section.id == _id).filter(Section.account_id == None).first()
- if section: return jsonify(section.as_dict())
- return '', 404
- else: return jsonify({'sections': [sections.as_dict() for sections in Section.query.filter(
- or_(Section.account_id == None, Section.account_id == account_id))]})
- @helper.require_json_keys('title', 'parameterValues', 'items')
- def post(self):
- username, password = None, None
- if request.authorization:
- username = request.authorization['username']
- password = request.authorization['password']
- data = request.json
- def create_items():
- for i in data['items']:
- if 'description' in i and 'title' in i:
- item = Item(i['title'], i['description'], section.id)
- db.session.add(item)
- db.session.commit()
- for sub in i['subItems']:
- if 'title' in sub:
- sub_item = SubItem(sub['title'], item.id)
- db.session.add(sub_item)
- if 'accountId' in data and data['accountId']:
- section = Section(data['title'], data['parameterValues'], data['accountId'])
- db.session.add(section)
- db.session.commit()
- create_items()
- db.session.commit()
- return jsonify(section.as_dict()), 201
- else:
- passwords = loadPassword()
- if username in passwords and password == passwords[username]:
- section = Section(data['title'], data['parameterValues'])
- db.session.add(section)
- db.session.commit()
- create_items()
- db.session.commit()
- return jsonify(section.as_dict()), 201
- else: return '', 401
- @helper.require_json_keys()
- def put(self, _id):
- username, password = None, None
- if request.authorization:
- username = request.authorization['username']
- password = request.authorization['password']
- data = request.json
- def create_items():
- for i in data['items']:
- if 'description' in i and 'title' in i:
- item = Item(i['title'], i['description'], section.id)
- db.session.add(item)
- db.session.commit()
- for sub in i['subItems']:
- if 'title' in sub:
- sub_item = SubItem(sub['title'], item.id)
- db.session.add(sub_item)
- section = Section.query.filter(Section.id == _id).filter(
- or_(Section.id == _id, Section.account_id == None)).first()
- if section:
- passwords = loadPassword()
- if section.account_id and not data['accountId'] and (not username or username not in passwords or
- password != passwords[username]):
- return '', 401
- for it in section.items:
- db.session.delete(it)
- db.session.commit()
- create_items()
- if 'title' in data: section.title = data['title']
- db.session.commit()
- if 'parameterValues' in data:
- parameter_values = ParameterValue.query.filter_by(section_id=section.id).all()
- for value in parameter_values:
- db.session.delete(value)
- db.session.commit()
- section.set_parameter_values(data['parameterValues'])
- return jsonify(section.as_dict())
- else: return '', 404
- def delete(self, _id):
- username, password = None, None
- if request.authorization:
- username = request.authorization['username']
- password = request.authorization['password']
- section = Section.query.filter_by(id=_id).first()
- if section:
- passwords = loadPassword()
- if not section.account_id:
- if username and password and username in passwords and password == passwords[username]:
- db.session.delete(section)
- db.session.commit()
- return '', 204
- else: return '', 401
- else:
- db.session.delete(section)
- db.session.commit()
- return '', 204
- else: return '', 404
Add Comment
Please, Sign In to add comment