def deleteGenomeList(self, genome_list_ids): """Delete genome list and associated genomes. Parameters ---------- genome_list_ids : iterable Unique identifier of genome lists in database. Returns ------- bool True if successful. """ for genome_list_id in genome_list_ids: try: edit_permission = self.permissionToModify(genome_list_id) if edit_permission is False: raise GenomeDatabaseError( "Insufficient permissions to delete genome list. Offending list id: {0}" .format(genome_list_id)) if not confirm( "Are you sure you want to delete {0} lists (this action cannot be undone)" .format(len(genome_list_ids))): raise GenomeDatabaseError("User aborted database action.") list_genomes_ids = self.getGenomeIdsFromGenomeListIds( [genome_list_id]) self.editGenomeList(genome_list_id, list_genomes_ids, 'remove') except GenomeDatabaseError as e: raise e return True
def deleteMarkerSets(self, marker_set_ids): """Delete marker set and associated markers. Parameters ---------- marker_set_ids : iterable Unique identifier of marker sets in database. Returns ------- bool True if successful. """ for marker_set_id in marker_set_ids: try: edit_permission = self.permissionToModify(marker_set_id) if edit_permission is False: raise GenomeDatabaseError( "Insufficient permissions to delete marker set. Offending marker set id: {0}" .format(marker_set_id)) if not confirm( "Are you sure you want to delete {0} set(s) (this action cannot be undone)" .format(len(marker_set_ids))): raise GenomeDatabaseError("User aborted database action.") list_marker_ids = self.getMarkerIdsFromMarkerSetIds( [marker_set_id]) self.editMarkerSet(marker_set_id, list_marker_ids, 'remove') except GenomeDatabaseError as e: raise e return True
def deleteGenomeList(self, genome_list_ids): """Delete genome list and associated genomes. Parameters ---------- genome_list_ids : iterable Unique identifier of genome lists in database. Returns ------- bool True if successful. """ for genome_list_id in genome_list_ids: try: edit_permission = self.permissionToModify(genome_list_id) if edit_permission is False: raise GenomeDatabaseError( "Insufficient permissions to delete genome list. Offending list id: {0}".format(genome_list_id)) if not confirm("Are you sure you want to delete {0} lists (this action cannot be undone)".format(len(genome_list_ids))): raise GenomeDatabaseError("User aborted database action.") list_genomes_ids = self.getGenomeIdsFromGenomeListIds( [genome_list_id]) self.editGenomeList(genome_list_id, list_genomes_ids, 'remove') except GenomeDatabaseError as e: raise e return True
def deleteMarkerSets(self, marker_set_ids): """Delete marker set and associated markers. Parameters ---------- marker_set_ids : iterable Unique identifier of marker sets in database. Returns ------- bool True if successful. """ for marker_set_id in marker_set_ids: try: edit_permission = self.permissionToModify(marker_set_id) if edit_permission is False: raise GenomeDatabaseError( "Insufficient permissions to delete marker set. Offending marker set id: {0}".format(marker_set_id)) if not confirm("Are you sure you want to delete {0} set(s) (this action cannot be undone)".format(len(marker_set_ids))): raise GenomeDatabaseError("User aborted database action.") list_marker_ids = self.getMarkerIdsFromMarkerSetIds( [marker_set_id]) self.editMarkerSet(marker_set_id, list_marker_ids, 'remove') except GenomeDatabaseError as e: raise e return True
def deleteGenomes(self, batchfile=None, db_genome_ids=None, reason=None): """ Delete Genomes Returns True for success or False for fail Parameters: :param batchfile: text file listing a range of ids to delete :param db_genome_ids: a list of ids can be written directly in the command line """ self._loggerSetup() try: if db_genome_ids is False: raise GenomeDatabaseError("Unable to delete genomes. Unable to retrieve genome ids.") # restrict deletion to genomes owned by user has_permission, username, genomes_owners = self._hasPermissionToEditGenomes(db_genome_ids) if has_permission is None: raise GenomeDatabaseError("Unable to delete genomes. Unable to retrieve permissions for genomes.") if has_permission is False: raise GenomeDatabaseError("Unable to delete genomes. Insufficient permissions.") if db_genome_ids: if not confirm( "Are you sure you want to delete %i genomes (this action cannot be undone)" % len(db_genome_ids) ): raise GenomeDatabaseError("User aborted database action.") self.cur.execute("DELETE FROM aligned_markers " + "WHERE genome_id IN %s ", (tuple(db_genome_ids),)) self.cur.execute("DELETE FROM genome_list_contents " + "WHERE genome_id IN %s", (tuple(db_genome_ids),)) # Deletion of metadata self.cur.execute("DELETE FROM metadata_genes " + "WHERE id IN %s", (tuple(db_genome_ids),)) self.cur.execute("DELETE FROM metadata_ncbi " + "WHERE id IN %s", (tuple(db_genome_ids),)) self.cur.execute("DELETE FROM metadata_nucleotide " + "WHERE id IN %s", (tuple(db_genome_ids),)) self.cur.execute("DELETE FROM metadata_taxonomy " + "WHERE id IN %s", (tuple(db_genome_ids),)) self.cur.execute("DELETE FROM metadata_rna " + "WHERE id IN %s", (tuple(db_genome_ids),)) self.cur.execute("DELETE FROM metadata_sequence " + "WHERE id IN %s", (tuple(db_genome_ids),)) self.cur.execute("DELETE FROM genomes " + "WHERE id IN %s", (tuple(db_genome_ids),)) self.cur.execute( "UPDATE metadata_taxonomy set gtdb_genome_representative = NULL where " + "gtdb_genome_representative in %s", (tuple(genomes_owners.keys()),), ) for genome, info in genomes_owners.iteritems(): if str(username) != str(info.get("owner")): logging.info( """Genome {0} has been deleted by {1} for the following reason '{2}' WARNING: {1} is not the owner of this {0} (real owner {3} ) {0} needs to be moved manually to the deprecated folder""".format( genome, username, reason, info.get("owner") ) ) else: if info.get("prefix") is "U": target = os.path.dirname(os.path.join(self.deprecatedUserDir, info.get("relative_path"))) elif info.get("prefix") is "GB": target = os.path.join(self.deprecatedGBKDir, info.get("relative_path")) elif info.get("prefix") is "RS": target = os.path.join(self.deprecatedRSQDir, info.get("relative_path")) make_sure_path_exists(target) os.rename( os.path.dirname(Tools.fastaPathGenerator(info.get("relative_path"), info.get("prefix"))), target, ) logging.info( "Genome {0} has been deleted by {1} for the following reason '{2}'".format( genome, username, reason ) ) except GenomeDatabaseError as e: raise e return True
def deleteGenomes(self, batchfile=None, db_genome_ids=None, reason=None): ''' Delete Genomes Returns True for success or False for fail Parameters: :param batchfile: text file listing a range of ids to delete :param db_genome_ids: a list of ids can be written directly in the command line ''' self._loggerSetup() try: if db_genome_ids is False: raise GenomeDatabaseError( "Unable to delete genomes. Unable to retrieve genome ids.") # restrict deletion to genomes owned by user has_permission, username, genomes_owners = self._hasPermissionToEditGenomes( db_genome_ids) if has_permission is None: raise GenomeDatabaseError( "Unable to delete genomes. Unable to retrieve permissions for genomes." ) if has_permission is False: raise GenomeDatabaseError( "Unable to delete genomes. Insufficient permissions.") if db_genome_ids: if not confirm( "Are you sure you want to delete %i genomes (this action cannot be undone)" % len(db_genome_ids)): raise GenomeDatabaseError("User aborted database action.") self.cur.execute( "DELETE FROM aligned_markers " + "WHERE genome_id IN %s ", (tuple(db_genome_ids), )) self.cur.execute( "DELETE FROM genome_list_contents " + "WHERE genome_id IN %s", (tuple(db_genome_ids), )) # Deletion of metadata self.cur.execute( "DELETE FROM metadata_genes " + "WHERE id IN %s", (tuple(db_genome_ids), )) self.cur.execute( "DELETE FROM metadata_ncbi " + "WHERE id IN %s", (tuple(db_genome_ids), )) self.cur.execute( "DELETE FROM metadata_nucleotide " + "WHERE id IN %s", (tuple(db_genome_ids), )) self.cur.execute( "DELETE FROM metadata_taxonomy " + "WHERE id IN %s", (tuple(db_genome_ids), )) self.cur.execute( "DELETE FROM metadata_rna " + "WHERE id IN %s", (tuple(db_genome_ids), )) self.cur.execute( "DELETE FROM metadata_sequence " + "WHERE id IN %s", (tuple(db_genome_ids), )) self.cur.execute("DELETE FROM genomes " + "WHERE id IN %s", (tuple(db_genome_ids), )) self.cur.execute( "UPDATE metadata_taxonomy set gtdb_genome_representative = NULL where " + "gtdb_genome_representative in %s", (tuple(genomes_owners.keys()), )) for genome, info in genomes_owners.iteritems(): if str(username) != str(info.get("owner")): logging.info( '''Genome {0} has been deleted by {1} for the following reason '{2}' WARNING: {1} is not the owner of this {0} (real owner {3} ) {0} needs to be moved manually to the deprecated folder''' .format(genome, username, reason, info.get("owner"))) else: if info.get("prefix") is "U": target = os.path.dirname( os.path.join(self.deprecatedUserDir, info.get("relative_path"))) elif info.get("prefix") is "GB": target = os.path.join(self.deprecatedGBKDir, info.get("relative_path")) elif info.get("prefix") is "RS": target = os.path.join(self.deprecatedRSQDir, info.get("relative_path")) make_sure_path_exists(target) os.rename( os.path.dirname( Tools.fastaPathGenerator( info.get("relative_path"), info.get("prefix"))), target) logging.info( "Genome {0} has been deleted by {1} for the following reason '{2}'" .format(genome, username, reason)) except GenomeDatabaseError as e: raise e return True