service.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. from flask import Blueprint, request
  2. from libs.tools import json_response, JsonParser
  3. from apps.configuration.models import Service, ConfigKey, AppConfigRel
  4. from apps.deploy.models import App
  5. from libs.decorators import require_permission
  6. from public import db
  7. blueprint = Blueprint(__name__, __name__)
  8. @blueprint.route('/', methods=['GET'])
  9. @require_permission('config_service_view')
  10. def get():
  11. group = request.args.get('group')
  12. server_query = Service.query
  13. if group:
  14. services = server_query.filter_by(group=group).all()
  15. else:
  16. services = server_query.all()
  17. return json_response(services)
  18. @blueprint.route('/', methods=['POST'])
  19. @require_permission('config_service_add')
  20. def post():
  21. form, error = JsonParser('name', 'identify', 'desc', 'group').parse()
  22. if error is None:
  23. Service(**form).save()
  24. return json_response()
  25. return json_response(message=error)
  26. @blueprint.route('/<int:ser_id>', methods=['PUT'])
  27. @require_permission('config_service_edit')
  28. def put(ser_id):
  29. form, error = JsonParser('name', 'identify', 'desc', 'group').parse()
  30. if error is None:
  31. Service.query.get_or_404(ser_id).update(**form)
  32. return json_response()
  33. return json_response(message=error)
  34. @blueprint.route('/<int:ser_id>', methods=['DELETE'])
  35. @require_permission('config_service_del')
  36. def delete(ser_id):
  37. service = Service.query.get_or_404(ser_id)
  38. rel = AppConfigRel.query.filter_by(d_id=ser_id, d_type='ser').first()
  39. if rel:
  40. rel_app = App.query.get_or_404(rel.s_id)
  41. return json_response(message='应用 <%s> 引用了该服务,请解除关联后再尝试删除该服务!' % rel_app.name)
  42. if ConfigKey.query.filter_by(owner_id=ser_id, owner_type='ser').count():
  43. return json_response(message='为了安全,请删除该服务下的所有配置后再尝试删除该服务!')
  44. service.delete()
  45. return json_response()
  46. @blueprint.route('/groups/', methods=['GET'])
  47. @require_permission('config_service_view | config_service_add | config_service_edit')
  48. def fetch_groups():
  49. service_group = db.session.query(Service.group.distinct().label('group')).all()
  50. return json_response([x.group for x in service_group])