示例#1
0
    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
示例#2
0
    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
示例#3
0
    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
示例#4
0
    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
示例#5
0
    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
示例#6
0
    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