Skip to content

Commit

Permalink
Fix: raise error when failed #3
Browse files Browse the repository at this point in the history
  • Loading branch information
GCS-ZHN committed Feb 18, 2023
1 parent eef0405 commit 42ec7c8
Show file tree
Hide file tree
Showing 2 changed files with 163 additions and 160 deletions.
24 changes: 23 additions & 1 deletion src/python/libdiamond.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
#include <stdexcept>
#include "../run/main.h"
#include "../basic/const.h"
#include "../util/io/exceptions.h"

/**
* Run diamond by cmd options
Expand All @@ -27,7 +28,28 @@ static PyObject* method_main(PyObject* self, PyObject* args)
catch(const std::bad_alloc &e) {
PyErr_SetString(PyExc_MemoryError, e.what());
return NULL;
} catch(const std::exception& e) {
}
catch (const FileOpenException& e) {
PyErr_SetString(PyExc_OSError, e.what());
return NULL;
}
catch (const File_read_exception& e) {
PyErr_SetString(PyExc_OSError, e.what());
return NULL;
}
catch (const File_write_exception& e) {
PyErr_SetString(PyExc_OSError, e.what());
return NULL;
}
catch (const EndOfStream& e) {
PyErr_SetString(PyExc_EOFError, e.what());
return NULL;
}
catch (const StreamReadException& e) {
PyErr_SetString(PyExc_OSError, e.what());
return NULL;
}
catch(const std::exception& e) {
PyErr_SetString(PyExc_RuntimeError, e.what());
return NULL;
}
Expand Down
299 changes: 140 additions & 159 deletions src/run/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ DIAMOND protein aligner
Copyright (C) 2013-2022 Max Planck Society for the Advancement of Science e.V.
Benjamin Buchfink
Eberhard Karls Universitaet Tuebingen
Code developed by Benjamin Buchfink <[email protected]>
This program is free software: you can redistribute it and/or modify
Expand Down Expand Up @@ -88,171 +88,152 @@ namespace Incremental {

int main(int ac, const char* av[])
{
try {
CommandLineParser parser;
config = Config(ac, av, true, parser);
CommandLineParser parser;
config = Config(ac, av, true, parser);


switch (config.command) {
case Config::help:
break;
case Config::version:
cout << Const::program_name << " version " << Const::version_string << endl;
break;
case Config::makedb:
DatabaseFile::make_db();
break;
case Config::blastp:
case Config::blastx:
Search::run();
break;
case Config::view:
if (!config.daa_file.empty())
view_daa();
switch (config.command) {
case Config::help:
break;
case Config::version:
cout << Const::program_name << " version " << Const::version_string << endl;
break;
case Config::makedb:
DatabaseFile::make_db();
break;
case Config::blastp:
case Config::blastx:
Search::run();
break;
case Config::view:
if (!config.daa_file.empty())
view_daa();
#ifdef EXTRA
else if (!config.input_ref_file.empty())
view_tsv();
else if (!config.input_ref_file.empty())
view_tsv();
#endif
else
throw std::runtime_error("The view command requires a DAA (option -a) input file.");
break;
case Config::getseq:
get_seq();
break;
case Config::random_seqs:
random_seqs();
break;
case Config::mask:
run_masker();
break;
case Config::fastq2fasta:
fastq2fasta();
break;
case Config::dbinfo:
db_info();
break;
case Config::read_sim:
read_sim();
break;
case Config::info:
info();
break;
case Config::smith_waterman:
pairwise();
break;
case Config::cluster:
case Config::DEEPCLUST:
// Why is cluster_similarity not set at the end of the Config constructor?
if(!config.cluster_similarity.empty()){
string expression = RecursiveParser::clean_expression(&config.cluster_similarity);
RecursiveParser rp(nullptr, expression.c_str());
try{
rp.evaluate();
}
catch (const runtime_error& e){
message_stream << "Could not evaluate the expression: " << config.cluster_similarity << endl;
throw e;
}
}
Workflow::Cluster::ClusterRegistry::get(config.cluster_algo.get("cascaded"))->run();
break;
case Config::translate:
translate();
break;
case Config::filter_blasttab:
filter_blasttab();
break;
case Config::show_cbs:
show_cbs();
break;
case Config::benchmark:
Benchmark::benchmark();
break;
case Config::split:
split();
break;
case Config::regression_test:
return Test::run();
break;
case Config::reverse_seqs:
reverse();
break;
case Config::roc:
roc();
break;
case Config::rocid:
roc_id();
break;
case Config::makeidx:
makeindex();
break;
case Config::find_shapes:
find_shapes();
break;
case Config::HASH_SEQS:
hash_seqs();
break;
case Config::prep_db:
prep_db();
break;
case Config::composition:
composition();
break;
case Config::JOIN:
join();
break;
case Config::LIST_SEEDS:
list_seeds();
break;
case Config::CLUSTER_REALIGN:
Cluster::realign();
break;
case Config::GREEDY_VERTEX_COVER:
greedy_vertex_cover();
break;
case Config::CLUSTER_REASSIGN:
Cluster::reassign();
break;
case Config::RECLUSTER:
Cluster::recluster();
break;
else
throw std::runtime_error("The view command requires a DAA (option -a) input file.");
break;
case Config::getseq:
get_seq();
break;
case Config::random_seqs:
random_seqs();
break;
case Config::mask:
run_masker();
break;
case Config::fastq2fasta:
fastq2fasta();
break;
case Config::dbinfo:
db_info();
break;
case Config::read_sim:
read_sim();
break;
case Config::info:
info();
break;
case Config::smith_waterman:
pairwise();
break;
case Config::cluster:
case Config::DEEPCLUST:
// Why is cluster_similarity not set at the end of the Config constructor?
if(!config.cluster_similarity.empty()){
string expression = RecursiveParser::clean_expression(&config.cluster_similarity);
RecursiveParser rp(nullptr, expression.c_str());
try{
rp.evaluate();
}
catch (const runtime_error& e){
message_stream << "Could not evaluate the expression: " << config.cluster_similarity << endl;
throw e;
}
}
Workflow::Cluster::ClusterRegistry::get(config.cluster_algo.get("cascaded"))->run();
break;
case Config::translate:
translate();
break;
case Config::filter_blasttab:
filter_blasttab();
break;
case Config::show_cbs:
show_cbs();
break;
case Config::benchmark:
Benchmark::benchmark();
break;
case Config::split:
split();
break;
case Config::regression_test:
return Test::run();
break;
case Config::reverse_seqs:
reverse();
break;
case Config::roc:
roc();
break;
case Config::rocid:
roc_id();
break;
case Config::makeidx:
makeindex();
break;
case Config::find_shapes:
find_shapes();
break;
case Config::HASH_SEQS:
hash_seqs();
break;
case Config::prep_db:
prep_db();
break;
case Config::composition:
composition();
break;
case Config::JOIN:
join();
break;
case Config::LIST_SEEDS:
list_seeds();
break;
case Config::CLUSTER_REALIGN:
Cluster::realign();
break;
case Config::GREEDY_VERTEX_COVER:
greedy_vertex_cover();
break;
case Config::CLUSTER_REASSIGN:
Cluster::reassign();
break;
case Config::RECLUSTER:
Cluster::recluster();
break;
#ifdef EXTRA
case Config::INDEX_FASTA:
index_fasta();
break;
case Config::FETCH_SEQ:
fetch_seq();
break;
case Config::blastn:
Search::run();
break;
case Config::LENGTH_SORT:
length_sort();
break;
case Config::sort:
sort();
break;
case Config::INDEX_FASTA:
index_fasta();
break;
case Config::FETCH_SEQ:
fetch_seq();
break;
case Config::blastn:
Search::run();
break;
case Config::LENGTH_SORT:
length_sort();
break;
case Config::sort:
sort();
break;
#endif
default:
return 1;
}
}
catch (const std::bad_alloc &e) {
cerr << "Failed to allocate sufficient memory. Please refer to the manual for instructions on memory usage." << endl;
log_stream << "Error: " << e.what() << endl;
return 1;
}
catch (const FileOpenException&) {
return 1;
} catch(const std::exception& e) {
cerr << "Error: " << e.what() << endl;
log_stream << "Error: " << e.what() << endl;
default:
return 1;
}
catch(...) {
cerr << "Exception of unknown type!" << endl;
return 1;
}

return 0;
}

0 comments on commit 42ec7c8

Please sign in to comment.