def delete_sobject(my, sobject): search_type = sobject.get_base_search_type() # this is used by API method delete_sobject auto_discover = my.kwargs.get("auto_discover") values = my.kwargs.get("values") if values: related_types = values.get("related_types") elif auto_discover: related_types = SearchType.get_related_types(search_type, direction="children") else: related_types = None # always delete notes and task and snapshot #if not related_types: # related_types = ['sthpw/note', 'sthpw/task', 'sthpw/snapshot'] #related_types = my.schema.get_related_search_types(search_type) if related_types: for related_type in related_types: if not related_type or related_type == search_type: continue # snapshots take care of sthpw/file in the proper manner, so # skip them here if related_type == 'sthpw/file': continue related_sobjects = sobject.get_related_sobjects(related_type) for related_sobject in related_sobjects: if related_type == 'sthpw/snapshot': my.delete_snapshot(related_sobject) else: related_sobject.delete() # implicitly remove "directory" files associated with the sobject search = Search("sthpw/file") search.add_op("begin") search.add_filter("file_name", "") search.add_null_filter("file_name") search.add_op("or") search.add_parent_filter(sobject) file_objects = search.get_sobjects() for file_object in file_objects: base_dir = Environment.get_asset_dir() relative_dir = file_object.get("relative_dir") lib_dir = "%s/%s" % (base_dir, relative_dir) print "removing: ", lib_dir FileUndo.rmdir(lib_dir) file_object.delete() # finally delete the sobject print "deleting: ", sobject.get_search_key() if search_type == 'sthpw/snapshot': my.delete_snapshot(sobject) else: sobject.delete()
def do_delete(self, sobject, related_types=None): search_type = sobject.get_base_search_type() # always delete notes and task and snapshot if not related_types: related_types = ['sthpw/note', 'sthpw/task', 'sthpw/snapshot'] #related_types = self.schema.get_related_search_types(search_type) if related_types: for related_type in related_types: if not related_type or related_type == search_type: continue # snapshots take care of sthpw/file in the proper manner, so # skip them here if related_type == 'sthpw/file': continue related_sobjects = sobject.get_related_sobjects(related_type) for related_sobject in related_sobjects: if related_type == 'sthpw/snapshot': self.delete_snapshot(related_sobject) else: related_sobject.delete() #self.do_delete(related_sobject) # implicitly remove "directory" files associated with the sobject search = Search("sthpw/file") search.add_op("begin") search.add_filter("file_name", "") search.add_null_filter("file_name") search.add_op("or") search.add_parent_filter(sobject) file_objects = search.get_sobjects() #if file_objects: # print("Removing [%s] file objects" % len(file_objects)) for file_object in file_objects: base_dir = Environment.get_asset_dir() relative_dir = file_object.get("relative_dir") lib_dir = "%s/%s" % (base_dir, relative_dir) FileUndo.rmdir(lib_dir) file_object.delete() # finally delete the sobject print("Deleting: ", sobject.get_search_key()) if search_type == 'sthpw/snapshot': self.delete_snapshot(sobject) else: sobject.delete()