diff --git a/.github/workflows/kb_sdk_test.yaml b/.github/workflows/kb_sdk_test.yaml index a31e626..99f0b2f 100644 --- a/.github/workflows/kb_sdk_test.yaml +++ b/.github/workflows/kb_sdk_test.yaml @@ -14,33 +14,20 @@ on: jobs: sdk_tests: - runs-on: ubuntu-latest + runs-on: ubuntu-24.04 steps: - name: Check out GitHub repo if: "!contains(github.event.head_commit.message, 'skip ci')" uses: actions/checkout@v2 - - name: Check out Actions CI files - if: "!contains(github.event.head_commit.message, 'skip ci')" - uses: actions/checkout@v2 - with: - repository: 'kbaseapps/kb_sdk_actions' - path: 'kb_sdk_actions' - - - name: Set up test environment if: "!contains(github.event.head_commit.message, 'skip ci')" shell: bash env: KBASE_TEST_TOKEN: ${{ secrets.KBASE_TEST_TOKEN }} run: | - # Verify kb_sdk_actions clone worked - test -f "$HOME/kb_sdk_actions/bin/kb-sdk" && echo "CI files cloned" - # Pull kb-sdk & create startup script - docker pull kbase/kb-sdk - - sh $GITHUB_WORKSPACE/kb_sdk_actions/bin/make_testdir && echo "Created test_local" + sh GHA_scripts/make_testdir && echo "Created test_local" test -f "test_local/test.cfg" && echo "Confirmed config exists" - name: Configure authentication @@ -55,8 +42,12 @@ jobs: - name: Run tests if: "!contains(github.event.head_commit.message, 'skip ci')" shell: bash - env: - CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} run: | - sh $GITHUB_WORKSPACE/kb_sdk_actions/bin/kb-sdk test - bash <(curl -s https://codecov.io/bash) + sh GHA_scripts/kb-sdk test --verbose + +# TODO COVERAGE alter the Makefile to generate coverage info and uncomment +# - name: Upload coverage to Codecov +# uses: codecov/codecov-action@v3 +# with: +# token: ${{ secrets.CODECOV_TOKEN }} +# fail_ci_if_error: true diff --git a/.gitignore b/.gitignore index cd09cf2..0d05dba 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,5 @@ test_local sdk.cfg +/.project +/.pydevproject +/.settings/ diff --git a/Dockerfile b/Dockerfile index d7cb00b..761b107 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,35 +1,22 @@ -FROM kbase/sdkbase2:python +FROM kbase/sdkpython:3.8.10 MAINTAINER KBase Developer # ----------------------------------------- # Insert apt-get instructions here to install # any required dependencies for your module. -# RUN apt-get update - - -RUN apt-get update \ - && apt-get -y install libboost-all-dev \ - && apt-get -y install wget \ - && apt-get -y install g++ +RUN apt update && apt install -y g++ nano tree RUN python -m pip install --upgrade pip \ - && pip install psutil \ - && pip install matplotlib - -# DO NOT use install_full - downloads the Silva database, which has a non open source license -# As a result cannot use MetaQUAST -# deletes genemark executables, also non open source license -RUN cd /opt \ - && wget https://github.com/ablab/quast/releases/download/quast_5.0.2/quast-5.0.2.tar.gz \ - && tar -xzf quast-5.0.2.tar.gz \ - && cd quast-5.0.2 \ - && ./setup.py install \ - && rm -r quast_libs/genemark\ - && rm -r quast_libs/genemark-es - -RUN apt-get install nano \ - && apt-get install tree + && pip install \ + psutil==6.0.0 \ + matplotlib==3.7.5 \ + quast==5.2.0 \ + biopython==1.83 \ + && rm -r /opt/conda3/lib/python3.8/site-packages/quast_libs/genemark \ + && rm -r /opt/conda3/lib/python3.8/site-packages/quast_libs/genemark-es + +# Genemark is not open source for non-academic use, and so can't be used in KBase # ----------------------------------------- diff --git a/GHA_scripts/kb-sdk b/GHA_scripts/kb-sdk new file mode 100644 index 0000000..bcb89a5 --- /dev/null +++ b/GHA_scripts/kb-sdk @@ -0,0 +1,12 @@ +#!/bin/sh + +# TODO may want to make the image an env var or argument + +# See https://github.com/kbaseapps/kb_sdk_actions/blob/master/bin/kb-sdk for source + +# Cache the group for the docker file +if [ ! -e $HOME/.kbsdk.cache ] ; then + docker run -i -v /var/run/docker.sock:/var/run/docker.sock --entrypoint ls ghcr.io/kbase/kb_sdk_patch-develop:br-0.0.4 -l /var/run/docker.sock|awk '{print $4}' > $HOME/.kbsdk.cache +fi + +exec docker run -i --rm -v $HOME:$HOME -w $(pwd) -v /var/run/docker.sock:/var/run/docker.sock -e DSHELL=$SHELL --group-add $(cat $HOME/.kbsdk.cache) ghcr.io/kbase/kb_sdk_patch-develop:br-0.0.4 $@ diff --git a/GHA_scripts/make_testdir b/GHA_scripts/make_testdir new file mode 100644 index 0000000..b7626c8 --- /dev/null +++ b/GHA_scripts/make_testdir @@ -0,0 +1,16 @@ +#!/bin/sh + +# TODO may want to make the image an env var or argument + +# See https://github.com/kbaseapps/kb_sdk_actions/blob/master/bin/make_testdir for source + +# Disable the default `return 1` when creating `test_local` +set +e + +# Cache the group for the docker file +if [ ! -e $HOME/.kbsdk.cache ] ; then + docker run -i -v /var/run/docker.sock:/var/run/docker.sock --entrypoint ls ghcr.io/kbase/kb_sdk_patch-develop:br-0.0.4 -l /var/run/docker.sock|awk '{print $4}' > $HOME/.kbsdk.cache +fi + +exec docker run -i --rm -v $HOME:$HOME -u $(id -u) -w $(pwd) -v /var/run/docker.sock:/var/run/docker.sock -e DUSER=$USER -e DSHELL=$SHELL --group-add $(cat $HOME/.kbsdk.cache) ghcr.io/kbase/kb_sdk_patch-develop:br-0.0.4 test +exit diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index 8a7e988..f029526 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,8 @@ +### 1.1.0 + +- Updated base image to `kbase/sdkpython:3.8.10` to fix build +- Updated QUAST to 5.2.0 + ### 1.0.0 - Version bump to meet release requirements. No other changes. diff --git a/kb_quast.html b/kb_quast.html index 97c24b1..b78f664 100644 --- a/kb_quast.html +++ b/kb_quast.html @@ -1 +1 @@ -kb_quast
/*
*Wrapper for the QUAST tool. Takes one or more assemblies as input and produces a QUAST report
*stored in a zip file in Shock.
*/
modulekb_quast{

/*
*A boolean - 0 for false, 1 for true.
*@range(0, 1)
*/
typedefintboolean;

/*
*An X/Y/Z style reference to a workspace object containing an assembly, either a
*KBaseGenomes.ContigSet or KBaseGenomeAnnotations.Assembly.
*/
typedefstringassembly_ref;

/*
*A handle for a file stored in Shock.
*hid - the id of the handle in the Handle Service that references this shock node
*id - the id for the shock node
*url - the url of the shock server
*type - the type of the handle. This should always be shock.
*file_name - the name of the file
*remote_md5 - the md5 digest of the file.
*/
typedefstructure{
stringhid;
stringfile_name;
stringid;
stringurl;
stringtype;
stringremote_md5;
}
Handle;

/*
*A local FASTA file.
*path - the path to the FASTA file.
*label - the label to use for the file in the QUAST output. If missing, the file name will
*be used.
*/
typedefstructure{
stringpath;
stringlabel;
}
FASTAFile;

/*
*Input for running QUAST as a Narrative application.
*workspace_name - the name of the workspace where the KBaseReport object will be saved.
*assemblies - the list of assemblies upon which QUAST will be run.
*force_glimmer - running '--glimmer' option regardless of assembly object size
*/
typedefstructure{
stringworkspace_name;
list<assembly_ref>assemblies;
booleanforce_glimmer;
}
QUASTAppParams;

/*
*Output of the run_quast_app function.
*report_name - the name of the KBaseReport.Report workspace object.
*report_ref - the workspace reference of the report.
*/
typedefstructure{
stringreport_name;
stringreport_ref;
}
QUASTAppOutput;

/*
*Run QUAST and save a KBaseReport with the output.
*/
funcdefrun_QUAST_app(QUASTAppParamsparams)returns(QUASTAppOutputoutput)authenticationrequired;

/*
*Input for running QUAST.
*assemblies - the list of assemblies upon which QUAST will be run.
*-OR-
*files - the list of FASTA files upon which QUAST will be run.
*
*Optional arguments:
*make_handle - create a handle for the new shock node for the report.
*force_glimmer - running '--glimmer' option regardless of file/assembly object size
*/
typedefstructure{
list<assembly_ref>assemblies;
list<FASTAFile>files;
booleanmake_handle;
booleanforce_glimmer;
}
QUASTParams;

/*
*Ouput of the run_quast function.
*shock_id - the id of the shock node where the zipped QUAST output is stored.
*handle - the new handle for the shock node, if created.
*node_file_name - the name of the file stored in Shock.
*size - the size of the file stored in shock.
*quast_path - the directory containing the quast output and the zipfile of the directory.
*/
typedefstructure{
stringshock_id;
Handlehandle;
stringnode_file_name;
stringsize;
stringquast_path;
}
QUASTOutput;

/*
*Run QUAST and return a shock node containing the zipped QUAST output.
*/
funcdefrun_QUAST(QUASTParamsparams)returns(QUASTOutputoutput)authenticationrequired;
};

Function Index

run_QUAST
run_QUAST_app

Type Index

assembly_ref
boolean
FASTAFile
Handle
QUASTAppOutput
QUASTAppParams
QUASTOutput
QUASTParams
\ No newline at end of file +kb_quast
/*
*Wrapper for the QUAST tool. Takes one or more assemblies as input and produces a QUAST report
*stored in a zip file in Shock.
*/
modulekb_quast{

/*
*A boolean - 0 for false, 1 for true.
*@range(0, 1)
*/
typedefintboolean;

/*
*An X/Y/Z style reference to a workspace object containing an assembly, either a
*KBaseGenomes.ContigSet or KBaseGenomeAnnotations.Assembly.
*/
typedefstringassembly_ref;

/*
*A handle for a file stored in Shock.
*hid - the id of the handle in the Handle Service that references this shock node
*id - the id for the shock node
*url - the url of the shock server
*type - the type of the handle. This should always be shock.
*file_name - the name of the file
*remote_md5 - the md5 digest of the file.
*/
typedefstructure{
stringhid;
stringfile_name;
stringid;
stringurl;
stringtype;
stringremote_md5;
}
Handle;

/*
*A local FASTA file.
*path - the path to the FASTA file.
*label - the label to use for the file in the QUAST output. If missing, the file name will
*be used.
*/
typedefstructure{
stringpath;
stringlabel;
}
FASTAFile;

/*
*Input for running QUAST as a Narrative application.
*workspace_name - the name of the workspace where the KBaseReport object will be saved.
*assemblies - the list of assemblies upon which QUAST will be run.
*force_glimmer - running '--glimmer' option regardless of assembly object size
*min_contig_length - set the minimum size of contigs to process. Defaults to 500,
*minimum allowed is 50.
*/
typedefstructure{
stringworkspace_name;
list<assembly_ref>assemblies;
booleanforce_glimmer;
intmin_contig_length;
}
QUASTAppParams;

/*
*Output of the run_quast_app function.
*report_name - the name of the KBaseReport.Report workspace object.
*report_ref - the workspace reference of the report.
*/
typedefstructure{
stringreport_name;
stringreport_ref;
}
QUASTAppOutput;

/*
*Run QUAST and save a KBaseReport with the output.
*/
funcdefrun_QUAST_app(QUASTAppParamsparams)returns(QUASTAppOutputoutput)authenticationrequired;

/*
*Input for running QUAST.
*assemblies - the list of assemblies upon which QUAST will be run.
*-OR-
*files - the list of FASTA files upon which QUAST will be run.
*
*Optional arguments:
*make_handle - create a handle for the new shock node for the report.
*force_glimmer - running '--glimmer' option regardless of file/assembly object size
*min_contig_length - set the minimum size of contigs to process. Defaults to 500,
*minimum allowed is 50.
*/
typedefstructure{
list<assembly_ref>assemblies;
list<FASTAFile>files;
booleanmake_handle;
booleanforce_glimmer;
intmin_contig_length;
}
QUASTParams;

/*
*Ouput of the run_quast function.
*shock_id - the id of the shock node where the zipped QUAST output is stored.
*handle - the new handle for the shock node, if created.
*node_file_name - the name of the file stored in Shock.
*size - the size of the file stored in shock.
*quast_path - the directory containing the quast output and the zipfile of the directory.
*/
typedefstructure{
stringshock_id;
Handlehandle;
stringnode_file_name;
stringsize;
stringquast_path;
}
QUASTOutput;

/*
*Run QUAST and return a shock node containing the zipped QUAST output.
*/
funcdefrun_QUAST(QUASTParamsparams)returns(QUASTOutputoutput)authenticationrequired;
};

Function Index

run_QUAST
run_QUAST_app

Type Index

assembly_ref
boolean
FASTAFile
Handle
QUASTAppOutput
QUASTAppParams
QUASTOutput
QUASTParams
\ No newline at end of file diff --git a/kbase.yml b/kbase.yml index 0976c20..89b2934 100644 --- a/kbase.yml +++ b/kbase.yml @@ -11,7 +11,7 @@ service-language: python module-version: - 1.0.0 + 1.1.0 owners: [gaprice] diff --git a/lib/kb_quast/authclient.py b/lib/kb_quast/authclient.py new file mode 100644 index 0000000..844f9b0 --- /dev/null +++ b/lib/kb_quast/authclient.py @@ -0,0 +1,94 @@ +''' +Created on Aug 1, 2016 + +A very basic KBase auth client for the Python server. + +@author: gaprice@lbl.gov +''' +import time as _time +import requests as _requests +import threading as _threading +import hashlib + + +class TokenCache(object): + ''' A basic cache for tokens. ''' + + _MAX_TIME_SEC = 5 * 60 # 5 min + + _lock = _threading.RLock() + + def __init__(self, maxsize=2000): + self._cache = {} + self._maxsize = maxsize + self._halfmax = maxsize / 2 # int division to round down + + def get_user(self, token): + token = hashlib.sha256(token.encode('utf-8')).hexdigest() + with self._lock: + usertime = self._cache.get(token) + if not usertime: + return None + + user, intime = usertime + if _time.time() - intime > self._MAX_TIME_SEC: + return None + return user + + def add_valid_token(self, token, user): + if not token: + raise ValueError('Must supply token') + if not user: + raise ValueError('Must supply user') + token = hashlib.sha256(token.encode('utf-8')).hexdigest() + with self._lock: + self._cache[token] = [user, _time.time()] + if len(self._cache) > self._maxsize: + sorted_items = sorted( + list(self._cache.items()), + key=(lambda v: v[1][1]) + ) + for i, (t, _) in enumerate(sorted_items): + if i <= self._halfmax: + del self._cache[t] + else: + break + + +class KBaseAuth(object): + ''' + A very basic KBase auth client for the Python server. + ''' + + _LOGIN_URL = 'https://kbase.us/services/auth/api/legacy/KBase/Sessions/Login' + + def __init__(self, auth_url=None): + ''' + Constructor + ''' + self._authurl = auth_url + if not self._authurl: + self._authurl = self._LOGIN_URL + self._cache = TokenCache() + + def get_user(self, token): + if not token: + raise ValueError('Must supply token') + user = self._cache.get_user(token) + if user: + return user + + d = {'token': token, 'fields': 'user_id'} + ret = _requests.post(self._authurl, data=d) + if not ret.ok: + try: + err = ret.json() + except Exception as e: + ret.raise_for_status() + raise ValueError('Error connecting to auth service: {} {}\n{}' + .format(ret.status_code, ret.reason, + err['error']['message'])) + + user = ret.json()['user_id'] + self._cache.add_valid_token(token, user) + return user diff --git a/lib/kb_quast/kb_quastImpl.py b/lib/kb_quast/kb_quastImpl.py index 9db34db..81d444e 100644 --- a/lib/kb_quast/kb_quastImpl.py +++ b/lib/kb_quast/kb_quastImpl.py @@ -53,9 +53,9 @@ class kb_quast: # state. A method could easily clobber the state set by another while # the latter method is running. ######################################### noqa - VERSION = "0.0.6" - GIT_URL = "https://github.com/kbaseapps/kb_quast.git" - GIT_COMMIT_HASH = "8d29af55af662fa41442c0134dd90c45decd8cf4" + VERSION = "1.1.0" + GIT_URL = "https://github.com/kbaseapps/kb_quast" + GIT_COMMIT_HASH = "f6be7c27bbf44a0d65b0250dbdb8079b5df9d7ae" #BEGIN_CLASS_HEADER @@ -195,13 +195,15 @@ def run_QUAST_app(self, ctx, params): QUAST as a Narrative application. workspace_name - the name of the workspace where the KBaseReport object will be saved. assemblies - the list of assemblies upon which QUAST will be run. force_glimmer - - running '--glimmer' option regardless of assembly object size) - -> structure: parameter "workspace_name" of String, parameter - "assemblies" of list of type "assembly_ref" (An X/Y/Z style - reference to a workspace object containing an assembly, either a - KBaseGenomes.ContigSet or KBaseGenomeAnnotations.Assembly.), - parameter "force_glimmer" of type "boolean" (A boolean - 0 for - false, 1 for true. @range (0, 1)) + - running '--glimmer' option regardless of assembly object size + min_contig_length - set the minimum size of contigs to process. + Defaults to 500, minimum allowed is 50.) -> structure: parameter + "workspace_name" of String, parameter "assemblies" of list of type + "assembly_ref" (An X/Y/Z style reference to a workspace object + containing an assembly, either a KBaseGenomes.ContigSet or + KBaseGenomeAnnotations.Assembly.), parameter "force_glimmer" of + type "boolean" (A boolean - 0 for false, 1 for true. @range (0, + 1)), parameter "min_contig_length" of Long :returns: instance of type "QUASTAppOutput" (Output of the run_quast_app function. report_name - the name of the KBaseReport.Report workspace object. report_ref - the workspace @@ -256,18 +258,20 @@ def run_QUAST(self, ctx, params): be run. -OR- files - the list of FASTA files upon which QUAST will be run. Optional arguments: make_handle - create a handle for the new shock node for the report. force_glimmer - running '--glimmer' - option regardless of file/assembly object size) -> structure: - parameter "assemblies" of list of type "assembly_ref" (An X/Y/Z - style reference to a workspace object containing an assembly, - either a KBaseGenomes.ContigSet or - KBaseGenomeAnnotations.Assembly.), parameter "files" of list of - type "FASTAFile" (A local FASTA file. path - the path to the FASTA - file. label - the label to use for the file in the QUAST output. - If missing, the file name will be used.) -> structure: parameter - "path" of String, parameter "label" of String, parameter - "make_handle" of type "boolean" (A boolean - 0 for false, 1 for - true. @range (0, 1)), parameter "force_glimmer" of type "boolean" - (A boolean - 0 for false, 1 for true. @range (0, 1)) + option regardless of file/assembly object size min_contig_length - + set the minimum size of contigs to process. Defaults to 500, + minimum allowed is 50.) -> structure: parameter "assemblies" of + list of type "assembly_ref" (An X/Y/Z style reference to a + workspace object containing an assembly, either a + KBaseGenomes.ContigSet or KBaseGenomeAnnotations.Assembly.), + parameter "files" of list of type "FASTAFile" (A local FASTA file. + path - the path to the FASTA file. label - the label to use for + the file in the QUAST output. If missing, the file name will be + used.) -> structure: parameter "path" of String, parameter "label" + of String, parameter "make_handle" of type "boolean" (A boolean - + 0 for false, 1 for true. @range (0, 1)), parameter "force_glimmer" + of type "boolean" (A boolean - 0 for false, 1 for true. @range (0, + 1)), parameter "min_contig_length" of Long :returns: instance of type "QUASTOutput" (Ouput of the run_quast function. shock_id - the id of the shock node where the zipped QUAST output is stored. handle - the new handle for the shock diff --git a/test/kb_quast_server_test.py b/test/kb_quast_server_test.py index fd8ffd9..cbf3ce2 100644 --- a/test/kb_quast_server_test.py +++ b/test/kb_quast_server_test.py @@ -138,7 +138,7 @@ def test_quast_from_1_file(self): ret = self.impl.run_QUAST(self.ctx, {'files': [ {'path': 'data/greengenes_UnAligSeq24606.fa', 'label': 'foobar'}], 'make_handle': 1})[0] - self.check_quast_output(ret, 328982, 'a8ee2a3d96a3857105987c960185f307', + self.check_quast_output(ret, 329729, 'a64692fe665ba0174ca4992caa00ea77', '6522bf4c7a54f96b99f7097c1a6afb01') def test_quast_min_contig_length(self): @@ -147,20 +147,20 @@ def test_quast_min_contig_length(self): test_params = [ { 'min_contig_length': 50, - 'expected_size': 329830, - 'expected_report_md5': 'dbb67e35b015c4fbc41f0b2d06472de7', + 'expected_size': 330599, + 'expected_report_md5': '741b2d1dec8dbb81fe9a877c4bc1e329', 'expected_icarus_md5': '6522bf4c7a54f96b99f7097c1a6afb01' }, { 'min_contig_length': 100, - 'expected_size': 329868, - 'expected_report_md5': '1ea996fa0d42cb950e7c59d7fa0207c2', + 'expected_size': 330656, + 'expected_report_md5': '354573cf4b70a013abb20e568aeae7f6', 'expected_icarus_md5': '6522bf4c7a54f96b99f7097c1a6afb01' }, { 'min_contig_length': None, - 'expected_size': 329068, - 'expected_report_md5': '40a90e7a8a2f7cd527ddb9d46e6918d7', + 'expected_size': 329785, + 'expected_report_md5': '0812e658c08374fa26a1a93dd6b4402d', 'expected_icarus_md5': '6522bf4c7a54f96b99f7097c1a6afb01' } ] @@ -185,12 +185,12 @@ def test_quast_no_handle(self): ret = self.impl.run_QUAST(self.ctx, {'files': [ {'path': 'data/greengenes_UnAligSeq24606.fa', 'label': 'foobar'}], 'make_handle': 0})[0] - self.check_quast_output(ret, 328982, 'a8ee2a3d96a3857105987c960185f307', + self.check_quast_output(ret, 329726, 'a64692fe665ba0174ca4992caa00ea77', '6522bf4c7a54f96b99f7097c1a6afb01', no_handle=True) ret = self.impl.run_QUAST(self.ctx, {'files': [ {'path': 'data/greengenes_UnAligSeq24606.fa', 'label': 'foobar'}]})[0] - self.check_quast_output(ret, 328982, 'a8ee2a3d96a3857105987c960185f307', + self.check_quast_output(ret, 329727, 'a64692fe665ba0174ca4992caa00ea77', '6522bf4c7a54f96b99f7097c1a6afb01', no_handle=True) def test_quast_from_2_files(self): @@ -199,7 +199,7 @@ def test_quast_from_2_files(self): {'path': 'data/greengenes_UnAligSeq24606.fa', 'label': 'foo'}, {'path': 'data/greengenes_UnAligSeq24606_edit1.fa'}], 'make_handle': 1})[0] - self.check_quast_output(ret, 349008, '365aa50eda257a514b7fbae4edfba0a7', + self.check_quast_output(ret, 350263, 'd993842bcd881592aad50a8df8925499', '2d10706f4ecfdbbe6d5d86e8578adbfa') @patch.object(kb_quast, "TWENTY_MB", new=10) @@ -211,7 +211,7 @@ def test_quast_large_file(self): {'path': 'data/greengenes_UnAligSeq24606_edit1.fa'}], 'make_handle': 1})[0] - self.check_quast_output(ret, 345047, 'e8c7d24f35a8c3feb1da4c58623ad277', + self.check_quast_output(ret, 346400, '6aebc5fd90156d8ce31c64f30e19fa19', '2d10706f4ecfdbbe6d5d86e8578adbfa', skip_glimmer=True) @patch.object(kb_quast, "TWENTY_MB", new=10) @@ -222,7 +222,7 @@ def test_quast_large_file_force_glimmer(self): {'path': 'data/greengenes_UnAligSeq24606_edit1.fa'}], 'make_handle': 1, 'force_glimmer': True})[0] - self.check_quast_output(ret, 349007, '365aa50eda257a514b7fbae4edfba0a7', + self.check_quast_output(ret, 350266, 'd993842bcd881592aad50a8df8925499', '2d10706f4ecfdbbe6d5d86e8578adbfa', skip_glimmer=False) def test_quast_from_1_wsobj(self): @@ -235,7 +235,7 @@ def test_quast_from_1_wsobj(self): 'workspace_name': self.ws_info[1], 'assembly_name': 'assy1'}) ret = self.impl.run_QUAST(self.ctx, {'assemblies': [ref], 'make_handle': 1})[0] - self.check_quast_output(ret, 328484, 'f8a8b01c9939614b50381d9a760c3ee4', + self.check_quast_output(ret, 329244, '3e22e7ae2b33559a4f9bb18dc4f2b06c', '140133e21ce35277cb7adc2eed2b1fd5') def test_quast_from_2_wsobj(self): @@ -263,7 +263,7 @@ def test_quast_from_2_wsobj(self): ret = self.impl.run_QUAST(self.ctx, {'assemblies': [wsref1, wsref2], 'make_handle': 1})[0] self.check_quast_output( - ret, 343977, 'a44837b572fd48e6cd4179399b9aacd7', '3e2d94fb1d29d48c3058f8cbb68674ae', + ret, 345199, '8f9c1e7536cc3f94e4b00c2dd543e56f', '3e2d94fb1d29d48c3058f8cbb68674ae', tolerance=30) @patch.object(kb_quast, "TWENTY_MB", new=10) @@ -277,7 +277,7 @@ def test_quast_from_1_large_wsobj(self): 'workspace_name': self.ws_info[1], 'assembly_name': 'assy1'}) ret = self.impl.run_QUAST(self.ctx, {'assemblies': [ref], 'make_handle': 1})[0] - self.check_quast_output(ret, 326214, '26876f8e773af163cf0e2518bbd28ab7', + self.check_quast_output(ret, 327029, '215bb5b5ae200c680e36d32813246b99', '140133e21ce35277cb7adc2eed2b1fd5', skip_glimmer=True) @patch.object(kb_quast, "TWENTY_MB", new=10) @@ -292,7 +292,7 @@ def test_quast_from_1_large_wsobj_force_glimmer(self): 'assembly_name': 'assy1'}) ret = self.impl.run_QUAST(self.ctx, {'assemblies': [ref], 'make_handle': 1, 'force_glimmer': True})[0] - self.check_quast_output(ret, 328482, 'f8a8b01c9939614b50381d9a760c3ee4', + self.check_quast_output(ret, 329245, '3e22e7ae2b33559a4f9bb18dc4f2b06c', '140133e21ce35277cb7adc2eed2b1fd5', skip_glimmer=False) def test_fail_no_input(self): @@ -404,7 +404,7 @@ def test_quast_app(self): 'assembly_name': 'assy1'}) ret = self.impl.run_QUAST_app(self.ctx, {'assemblies': [ref], 'workspace_name': self.ws_info[1]})[0] - self.check_quast_app_output(ret, 328483, 'f8a8b01c9939614b50381d9a760c3ee4', + self.check_quast_app_output(ret, 329245, '3e22e7ae2b33559a4f9bb18dc4f2b06c', '140133e21ce35277cb7adc2eed2b1fd5') @patch.object(kb_quast, "TWENTY_MB", new=10) @@ -419,7 +419,7 @@ def test_quast_app_large_object(self): 'assembly_name': 'assy1'}) ret = self.impl.run_QUAST_app(self.ctx, {'assemblies': [ref], 'workspace_name': self.ws_info[1]})[0] - self.check_quast_app_output(ret, 326214, '26876f8e773af163cf0e2518bbd28ab7', + self.check_quast_app_output(ret, 327027, '215bb5b5ae200c680e36d32813246b99', '140133e21ce35277cb7adc2eed2b1fd5', skip_glimmer=True) @patch.object(kb_quast, "TWENTY_MB", new=10) @@ -435,7 +435,7 @@ def test_quast_app_large_object_force_glimmer(self): ret = self.impl.run_QUAST_app(self.ctx, {'assemblies': [ref], 'workspace_name': self.ws_info[1], 'force_glimmer': True})[0] - self.check_quast_app_output(ret, 328482, 'f8a8b01c9939614b50381d9a760c3ee4', + self.check_quast_app_output(ret, 329246, '3e22e7ae2b33559a4f9bb18dc4f2b06c', '140133e21ce35277cb7adc2eed2b1fd5', skip_glimmer=False) def test_fail_app_no_workspace(self): diff --git a/ui/narrative/methods/run_QUAST_app/display.yaml b/ui/narrative/methods/run_QUAST_app/display.yaml index 208e5af..adbfa66 100644 --- a/ui/narrative/methods/run_QUAST_app/display.yaml +++ b/ui/narrative/methods/run_QUAST_app/display.yaml @@ -1,4 +1,4 @@ -name : Assess Quality of Assemblies with QUAST - v4.4 +name : Assess Quality of Assemblies with QUAST - v5.2.0 tooltip : Run QUAST (QUality ASsessment Tool) on a set of Assemblies to assess their quality. @@ -34,7 +34,7 @@ parameters : Set the minimum size of contigs to process. Defaults to 500, minimum allowed is 50. description : | -

This is the KBase wrapper for version 4.4 of the QUAST assembly quality assessment tool. QUAST evaluates assemblies by computing various metrics, including number of contigs, N50/75, L50/75, GC content, number of uncalled bases (N’s), and predicted genes. It takes one or more Assembly objects as input and then generates an output report with statistics for all of the input assemblies.

+

This is the KBase wrapper for version 5.2.0 of the QUAST assembly quality assessment tool. QUAST evaluates assemblies by computing various metrics, including number of contigs, N50/75, L50/75, GC content, number of uncalled bases (N’s), and predicted genes. It takes one or more Assembly objects as input and then generates an output report with statistics for all of the input assemblies.

Use QUAST to assess the output assemblies from different configurations of the same assembler, or compare assemblies from multiple assemblers to determine which one is optimal for downstream analysis. The QUAST report color codes "worst, median, best" for each of the statistics generated, but pay attention to the degree of difference between the lengths and values to better understand how the parameters of your assembler relate to the resulting Assembly.