view seq_form_db.xml @ 2:11a3752feb0a draft default tip

planemo upload for repository https://github.com/brsynth/galaxytools/tree/main/tools commit 7f5d8b62d749a0c41110cd9c04e0254e4fd44893-dirty
author tduigou
date Wed, 15 Oct 2025 12:33:41 +0000
parents 7680420caf9f
children
line wrap: on
line source

<tool id="seq_form_db" name="Get sequences Data From DB" version="@TOOL_VERSION@+galaxy@VERSION_SUFFIX@" profile="21.09">
    <description>Import fragment's data from an accessible DB and export it as .gb files</description>
    <macros>
        <token name="@VERSION_SUFFIX@">2</token>
        <token name="@TOOL_VERSION@">0.3.0</token>
    </macros>
    <requirements>
        <requirement type="package" version="2.2.3">pandas</requirement>
        <requirement type="package" version="2.0.40">sqlalchemy</requirement>
        <requirement type="package" version="2.9.9">psycopg2</requirement>
        <requirement type="package" version="1.85">biopython</requirement>
    </requirements>
    <command detect_errors="exit_code"><![CDATA[
        mkdir 'outdir' &&
        python '$__tool_directory__/get_db_info.py'
            --input '$input'
            --use_json_paramers '$json_use.use_json_paramers'
            #if not $json_use.use_json_paramers:
                --sequence_column '$json_use.sequence_column'
                --annotation_columns '$json_use.annotation_columns'
                --db_uri '$json_use.db_uri' 
                --table '$json_use.table' 
                --fragment_column '$json_use.fragment_column'
            #else:
                --json_conf '$json_use.json_conf'
            #end if
            --output 'outdir'
            --report '$report'
    ]]></command>
    <inputs> 
        <param name="input" type="data" format="csv" label="Input CSV File" />
        <conditional name="json_use">
            <param name="use_json_paramers" type="boolean" checked='false' label="Use parameters from JSON" help="extract parameters from json file" />
            <when value="false">
                <param name="table" type="text" label="DB Table Name" optional="false" />
                <param name="sequence_column" type="text" label="DB Column Contains Sequence For ganbank File" optional="false" />
                <param name="annotation_columns" type="text" label="DB Column Contains Annotation For Ganbank File" optional="false" />
                <param name="fragment_column" type="text" label="DB IDs Column Name" optional="false" />
                <param name="db_uri" type="text" label="DB Connection URI" help="postgresql://user_name:password@host:port/path/to/database" optional="false" />
            </when>
            <when value="true">
                <param name="json_conf" type="data" format='json' label="DB config as a json file" help="JSON file specifying the database URI, table name and the column names for annotation and sequence data" optional="false" />
            </when>
        </conditional>
    </inputs>    
    <outputs>
        <collection name="output_gb" type="list" label="GenBank Files collection" >
            <discover_datasets pattern="(?P&lt;name&gt;.*).gb" format="genbank" directory="outdir" />
        </collection>
        <data name='report' format='txt' label='missing fragments' />
    </outputs>
    <tests>
    <!--manual parameters-->
        <test> 
            <param name="input" value="2-step-golden_gate_plan.csv" />
            <conditional name="json_use">
                <param name='use_json_paramers' value='false' />
                <param name="table" value="sample" />
                <param name="sequence_column" value="sequence" />
                <param name="annotation_columns" value="annotation" />
                <param name="fragment_column" value="fragment" />
                <param name="db_uri" value="postgresql://postgres:RK17@localhost:5432/test_fragments_db" />
            </conditional>
            <output_collection name="output_gb" type="list" count="12">
                <element name="part_A">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_B">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_C">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_D">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_E">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_F">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_G">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_H">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_I">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_J">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_K">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_L">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
            </output_collection>
            <output name='report'>
                <assert_contents>
                    <has_n_lines n="0" />
                </assert_contents>
            </output>
        </test>
        <!--JSON parameters-->
        <test> 
            <param name="input" value="2-step-golden_gate_plan.csv" />
            <conditional name="json_use">
                <param name="use_json_paramers" value='true'/>
                <param name="json_conf" value="test-JSON.json" />
            </conditional>
            <output_collection name="output_gb" type="list" count="12">
                <element name="part_A">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_B">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_C">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_D">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_E">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_F">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_G">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_H">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_I">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_J">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_K">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_L">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
            </output_collection>
            <output name='report'>
                <assert_contents>
                    <has_n_lines n="0" />
                </assert_contents>
            </output>
        </test>
        <!--test missing fragments-->
        <test> 
            <param name="input" value="test_missing_input.csv" />
            <conditional name="json_use">
                <param name='use_json_paramers' value='false' />
                <param name="table" value="sample" />
                <param name="sequence_column" value="sequence" />
                <param name="annotation_columns" value="annotation" />
                <param name="fragment_column" value="fragment" />
                <param name="db_uri" value="postgresql://postgres:RK17@localhost:5432/test_fragments_db" />
            </conditional>
            <output_collection name="output_gb" type="list" count="12">
                <element name="part_A">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_B">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_C">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_D">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_E">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_F">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_G">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_H">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_I">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_J">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_K">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
                <element name="part_L">
                    <assert_contents>
                     <has_n_lines min="10" />
                    </assert_contents>
                </element>
            </output_collection>
            <output name='report'>
                <assert_contents>
                    <has_n_lines n="6" />
                    <has_line_matching expression="ACP10001AaCbbBS" />
                    <has_line_matching expression="NEW20001BbDccKT" />
                    <has_line_matching expression="XYZ10003AaCbbBS" />
                    <has_line_matching expression="CFP10002AaCbbBS" />
                    <has_line_matching expression="ALT30005CcEddLM" />
                    <has_line_matching expression="QWE10004AaCbbBS" />
                </assert_contents>
            </output>
        </test>
    </tests>
    
    <help><![CDATA[
Get sequences Data From DB
==========================

Implemented a system to generate GenBank (.gb) files for ADN fragments in CSV input, based on data retrieved from an accessible database via URI requests.

**Parameters**:
---------------
* **Use parameters from JSON**: Yes/No parameter to ask user if he wants to set parameters manually or using JSON file.
* **Input CSV File**: Assembly CSV contains construct IDs in the first column and their corresponding fragments in the following columns. (Without Header)
* **DB Table Name**: Name of the target table in the database.
* **DB Column Contains Sequence For ganbank File**: Column storing sequence data, expected to start with "ORIGIN". 
* **DB Column Contains Annotation For Ganbank File**: Column containing annotation data, starting with "FEATURES" and including "LOCUS" information. Other metadata is optional.
* **DB IDs Column Name**: Column holding the unique fragment IDs.
* **DB Connection URI**: URI used to connect to the database (e.g., postgresql://user_name:pass@localhost:5432/test_fragments_db).
    ]]></help>
    <citations>
        <citation type="bibtex">
            @unpublished{seq_form_db
                author = {Ramiz Khaled},
                title = {{seq_form_db}},
                url = {https://github.com/brsynth/},
            }
        </citation>
    </citations>
</tool>