move folders and templates to other folders

new endpoints:
/services/<service_id>/move-to-folder
/services/<service_id>/move-to-folder/<target_template_folder_id>

* takes in a dict containing lists of `templates` and `folders` uuids.
* sets parent of templates and folders to the folder specified in the
  URL. Or None, if there was no id specified.
* if any template or folder has a differen service id, then the whole
  update fails
* if any folder is an ancestor of the target folder, then the whole
  update fails (as that would cause a cyclical folder structure).
* the whole function is wrapped in a single `transactional` decorator,
  so in case of error nothing will be saved.
This commit is contained in:
Leo Hemsted
2018-11-08 16:44:57 +00:00
parent e4476b9869
commit d9aa220aa6
6 changed files with 257 additions and 8 deletions

View File

@@ -725,6 +725,13 @@ class TemplateFolder(db.Model):
'service_id': self.service_id
}
def is_parent_of(self, other):
while other.parent is not None:
if other.parent == self:
return True
other = other.parent
return False
template_folder_map = db.Table(
'template_folder_map',