meters.py 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. from flask_restful import Resource, reqparse
  2. from app.main.service.meters_service import (
  3. get_meters, create_or_update_meters, delete_meter)
  4. from app.main.common.decorators import standardize_api_response
  5. from app.main.common.utils import is_a_valid_object_id
  6. def post_put_parser():
  7. """Request parser for HTTP POST or PUT.
  8. :returns: flask.ext.restful.reqparse.RequestParser object
  9. """
  10. parse = reqparse.RequestParser()
  11. parse.add_argument(
  12. 'serialNumber', type=str, location='json', required=True)
  13. parse.add_argument(
  14. 'name', type=str, location='json', required=True)
  15. parse.add_argument(
  16. 'brand', type=str, location='json', required=True)
  17. parse.add_argument(
  18. 'model', type=str, location='json', required=True)
  19. parse.add_argument(
  20. 'phases', type=int, location='json')
  21. parse.add_argument(
  22. 'active', type=bool, location='json')
  23. parse.add_argument(
  24. 'address', type=str, location='json')
  25. parse.add_argument(
  26. 'gpsLat', type=float, location='json')
  27. parse.add_argument(
  28. 'gpsLong', type=float, location='json')
  29. parse.add_argument(
  30. 'installedDate', type=str, location='json')
  31. return parse
  32. class MetersApi(Resource):
  33. @standardize_api_response
  34. def get(self):
  35. return get_meters()
  36. @standardize_api_response
  37. def post(self):
  38. parse = post_put_parser()
  39. args = parse.parse_args()
  40. serialNumber = args['serialNumber']
  41. name = args['name']
  42. brand = args['brand']
  43. model = args['model']
  44. phases = args['phases']
  45. active = args['active']
  46. address = args['address']
  47. gpsLat = args['gpsLat']
  48. gpsLong = args['gpsLong']
  49. installedDate = args['installedDate']
  50. return create_or_update_meters(
  51. serialNumber, name, brand, model, phases,
  52. active, address, gpsLat, gpsLong, installedDate)
  53. class MeterApi(Resource):
  54. @standardize_api_response
  55. def put(self):
  56. parse = post_put_parser()
  57. args = parse.parse_args()
  58. serialNumber = args['serialNumber']
  59. name = args['name']
  60. brand = args['brand']
  61. model = args['model']
  62. phases = args['phases']
  63. active = args['active']
  64. address = args['address']
  65. gpsLat = args['gpsLat']
  66. gpsLong = args['gpsLong']
  67. installedDate = args['installedDate']
  68. return create_or_update_meters(
  69. serialNumber, name, brand, model, phases,
  70. active, address, gpsLat, gpsLong, installedDate)
  71. @standardize_api_response
  72. def delete(self, meter_id):
  73. if not is_a_valid_object_id(meter_id):
  74. return {'error': 'Invalid meter id.'}
  75. return delete_meter(meter_id)