6
0

RemoveProject.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import shutil
  2. from flask import make_response, request, abort
  3. from flask.views import View
  4. from pycs import db
  5. from pycs.database.Database import Database
  6. from pycs.frontend.notifications.NotificationManager import NotificationManager
  7. class RemoveProject(View):
  8. """
  9. remove a project from database and remove its directory
  10. """
  11. # pylint: disable=arguments-differ
  12. methods = ['POST']
  13. def __init__(self, db: Database, nm: NotificationManager):
  14. # pylint: disable=invalid-name
  15. self.db = db
  16. self.nm = nm
  17. def dispatch_request(self, identifier):
  18. # extract request data
  19. data = request.get_json(force=True)
  20. if not data.get('remove', False):
  21. abort(400)
  22. # start transaction
  23. with self.db:
  24. # find project
  25. project = self.db.project(identifier)
  26. if project is None:
  27. abort(404, "Project not found")
  28. # remove model from database
  29. model = project.model
  30. model.remove(commit=False)
  31. # remove project from database
  32. project.remove(commit=False)
  33. # send update
  34. self.nm.remove_model(model.serialize())
  35. self.nm.remove_project(project.serialize())
  36. # remove from file system
  37. shutil.rmtree(project.root_folder)
  38. return make_response()