Skip to content

Commit

Permalink
modified cli to export panels and created a test for it
Browse files Browse the repository at this point in the history
  • Loading branch information
northwestwitch committed Mar 25, 2019
1 parent df06b65 commit 06cb135
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 18 deletions.
2 changes: 1 addition & 1 deletion scout/commands/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,7 @@ def cli(context, mongodb, username, password, authdb, host, port, loglevel, conf
app_cli.add_command(wipe) # Done!
app_cli.add_command(setup_command) # Done!
app_cli.add_command(delete) # Done!
cli.add_command(export)
app_cli.add_command(export) # in progress
cli.add_command(convert)
cli.add_command(view_command)

Expand Down
6 changes: 3 additions & 3 deletions scout/commands/export/export_command.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@


@click.group()
@click.pass_context
def export(ctx):
def export():
"""
Export objects from the mongo database.
"""
LOG.info("Running scout export")
pass

export.add_command(panel)
export.add_command(panel) # in progress
export.add_command(genes)
export.add_command(transcripts)
export.add_command(variants)
Expand Down
32 changes: 18 additions & 14 deletions scout/commands/export/panel.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
# -*- coding: utf-8 -*-
import logging

import click
from flask.cli import with_appcontext

from scout.commands.utils import builds_option

from scout.export.panel import (export_gene_panels, export_panels)
from scout.server.extensions import store

logging.basicConfig(level=logging.DEBUG)
LOG = logging.getLogger(__name__)

@click.command('panel', short_help='Export gene panels')
Expand All @@ -14,43 +17,44 @@
metavar='<panel_name>'
)
@builds_option
@click.option('--version',
@click.option('--version',
type=float,
help="Specify panel version, only works if one panel"
help="Specify panel version, only works if one panel is provided"
)
@click.option('--bed',
help="Export genes in bed like format",
is_flag=True,
)
@click.pass_context
def panel(context, panel, build, bed, version):
@with_appcontext
def panel(panel, build, bed, version):
"""Export gene panels to .bed like format.
Specify any number of panels on the command line
"""
LOG.info("Running scout export panel")
adapter = context.obj['adapter']
adapter = store

# Save all chromosomes found in the collection if panels
chromosomes_found = set()

if not panel:
LOG.warning("Please provide at least one gene panel")
context.abort()
raise click.Abort()

LOG.info("Exporting panels: {}".format(', '.join(panel)))
if bed:
if version:
version = [version]
lines = export_panels(
adapter=adapter,
panels=panel,
versions=version,
adapter=adapter,
panels=panel,
versions=version,
build=build,
)
else:
lines = export_gene_panels(
adapter=adapter,
panels=panel,
adapter=adapter,
panels=panel,
version=version,
)
for line in lines:
Expand Down
58 changes: 58 additions & 0 deletions tests/commands/export/test_export_panel_cmd.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
# -*- coding: utf-8 -*-

from scout.commands import app_cli
from scout.server.extensions import store

def test_export_panel(mock_app):
"""Test the CLI command that exports a gene panel"""

runner = mock_app.test_cli_runner()
assert runner

panel_obj = store.panel_collection.find_one()
assert panel_obj

# Test the export panel cli without passing any data
result = runner.invoke(app_cli, ['export', 'panel'])

# The CLI command should return an error message then return abort code
assert result.exit_code == 1
assert 'Please provide at least one gene panel' in result.output

# Try to pass a non-valid panel name
result = runner.invoke(app_cli, ['export', 'panel', 'unknown_panel'])

# The CLI command should not return abort code but error message
assert result.exit_code == 0
assert 'WARNING Panel unknown_panel could not be found' in result.output

# Try to pass a valid panel name, without a valid version
result = runner.invoke(app_cli, ['export', 'panel',
panel_obj['panel_name'],
'--version', 5.0
])

# The CLI command should not return abort code but error message
assert result.exit_code == 0
assert 'WARNING Panel {} could not be found'.format(panel_obj['panel_name']) in result.output

# Pass a valid panel name, valid version
result = runner.invoke(app_cli, ['export', 'panel',
panel_obj['panel_name'],
'--version', 1.0
])

# The CLI command shoud return gene panel
assert result.exit_code == 0
assert '2397\tCRYBB1\t\t\t\t\n9394\tPICK1\t\t\t\t\n' in result.output

# Pass a valid panel name, valid version, bed file format option
result = runner.invoke(app_cli, ['export', 'panel',
panel_obj['panel_name'],
'--version', 1.0,
'--bed'
])

# The CLI command shoud return gene panel formatted in the expexted way
assert result.exit_code == 0
assert '22\t26995242\t27014052\t2397\tCRYBB1\n22\t38452318\t38471708\t9394\tPICK1\n' in result.output

0 comments on commit 06cb135

Please sign in to comment.