import shutil from flask import make_response, request, abort from flask.views import View from pycs import db from pycs.database.Database import Database from pycs.frontend.notifications.NotificationManager import NotificationManager class RemoveProject(View): """ remove a project from database and remove its directory """ # pylint: disable=arguments-differ methods = ['POST'] def __init__(self, db: Database, nm: NotificationManager): # pylint: disable=invalid-name self.db = db self.nm = nm def dispatch_request(self, identifier): # extract request data data = request.get_json(force=True) if not data.get('remove', False): abort(400) # start transaction with self.db: # find project project = self.db.project(identifier) if project is None: abort(404, "Project not found") # remove model from database model = project.model model.remove(commit=False) # remove project from database project.remove(commit=False) # send update self.nm.remove_model(model.serialize()) self.nm.remove_project(project.serialize()) # remove from file system shutil.rmtree(project.root_folder) return make_response()