6
0

CreateLabel.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. from flask import abort
  2. from flask import make_response
  3. from flask import request
  4. from flask.views import View
  5. from pycs import db
  6. from pycs.database.Project import Project
  7. from pycs.frontend.notifications.NotificationManager import NotificationManager
  8. class CreateLabel(View):
  9. """
  10. create a new label
  11. """
  12. # pylint: disable=arguments-differ
  13. methods = ['POST']
  14. def __init__(self, nm: NotificationManager):
  15. # pylint: disable=invalid-name
  16. self.nm = nm
  17. def dispatch_request(self, user: str, project_id):
  18. # pylint: disable=unused-argument
  19. # extract request data
  20. data = request.get_json(force=True)
  21. name = data.get('name')
  22. if name is None:
  23. abort(400)
  24. name = data['name']
  25. reference = data.get('reference')
  26. parent = data.get('parent')
  27. # find project
  28. project = Project.get_or_404(project_id)
  29. # insert label
  30. with db.session.begin_nested():
  31. label, is_new = project.create_label(
  32. name=name,
  33. reference=reference,
  34. parent=parent,
  35. commit=False)
  36. if not is_new:
  37. abort(400, f"Label already exists: {label}")
  38. # send notification
  39. self.nm.create_label(label)
  40. # return success response
  41. return make_response()