from flask_restful import Resource, reqparse from app.main.service.meters_service import ( get_meters, create_or_update_meters, delete_meter) from app.main.common.decorators import standardize_api_response from app.main.common.utils import is_a_valid_object_id def post_put_parser(): """Request parser for HTTP POST or PUT. :returns: flask.ext.restful.reqparse.RequestParser object """ parse = reqparse.RequestParser() parse.add_argument( 'serialNumber', type=str, location='json', required=True) parse.add_argument( 'name', type=str, location='json', required=True) parse.add_argument( 'brand', type=str, location='json', required=True) parse.add_argument( 'model', type=str, location='json', required=True) parse.add_argument( 'phases', type=int, location='json') parse.add_argument( 'active', type=bool, location='json') parse.add_argument( 'address', type=str, location='json') parse.add_argument( 'gpsLat', type=float, location='json') parse.add_argument( 'gpsLong', type=float, location='json') parse.add_argument( 'installedDate', type=str, location='json') return parse class MetersApi(Resource): @standardize_api_response def get(self): return get_meters() @standardize_api_response def post(self): parse = post_put_parser() args = parse.parse_args() serialNumber = args['serialNumber'] name = args['name'] brand = args['brand'] model = args['model'] phases = args['phases'] active = args['active'] address = args['address'] gpsLat = args['gpsLat'] gpsLong = args['gpsLong'] installedDate = args['installedDate'] return create_or_update_meters( serialNumber, name, brand, model, phases, active, address, gpsLat, gpsLong, installedDate) class MeterApi(Resource): @standardize_api_response def put(self): parse = post_put_parser() args = parse.parse_args() serialNumber = args['serialNumber'] name = args['name'] brand = args['brand'] model = args['model'] phases = args['phases'] active = args['active'] address = args['address'] gpsLat = args['gpsLat'] gpsLong = args['gpsLong'] installedDate = args['installedDate'] return create_or_update_meters( serialNumber, name, brand, model, phases, active, address, gpsLat, gpsLong, installedDate) @standardize_api_response def delete(self, meter_id): if not is_a_valid_object_id(meter_id): return {'error': 'Invalid meter id.'} return delete_meter(meter_id)