Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

testing of convert #670

Closed
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 1 addition & 23 deletions biom/cli/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,33 +13,11 @@
from .metadata_adder import add_metadata
from .table_validator import validate_table
from .table_converter import convert
from .util import write_biom_table

import biom.parse
import biom.util

__all__ = ['validate_table', 'summarize_table', 'add_metadata',
'show_install_info', 'normalize_table', 'subset_table',
'convert']


def write_biom_table(table, fmt, filepath):
"""Write table in specified format to filepath"""

if fmt not in ['hdf5', 'json', 'tsv']:
raise ValueError("Unknown file format")

if fmt == 'hdf5' and not biom.util.HAVE_H5PY:
fmt = 'json'

if fmt == 'json':
with open(filepath, 'w') as f:
f.write(table.to_json(biom.parse.generatedby()))
elif fmt == 'tsv':
with open(filepath, 'w') as f:
f.write(table)
f.write('\n')
else:
import h5py

with h5py.File(filepath, 'w') as f:
table.to_hdf5(f, biom.parse.generatedby())
30 changes: 24 additions & 6 deletions biom/cli/table_converter.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@

from __future__ import division

import biom.parse
from biom.cli.util import write_biom_table

table_types = ["OTU table",
"Pathway table",
"Function table",
Expand All @@ -30,17 +33,26 @@
}


def convert(table, sample_metadata, observation_metadata,
to_json, to_hdf5, to_tsv, collapsed_samples,
collapsed_observations, header_key, output_metadata_id, table_type,
process_obs_metadata, tsv_metadata_formatter):
def convert(table, output_filepath, sample_metadata=None,
observation_metadata=None,
to_json=False, to_hdf5=False, to_tsv=False,
collapsed_samples=False, collapsed_observations=False,
header_key=None, output_metadata_id=None, table_type=None,
process_obs_metadata=None, tsv_metadata_formatter='sc_separated'):

if sum([to_tsv, to_hdf5, to_json]) == 0:
raise ValueError("Must specify an output format")
elif sum([to_tsv, to_hdf5, to_json]) > 1:
raise ValueError("Can only specify a single output format")

table.type = table_type
if table_type is None:
if table.type in [None, "None"]:
table.type = "Table"
else:
pass
else:
table.type = table_type

if tsv_metadata_formatter is not None:
obs_md_fmt_f = observation_metadata_formatters[tsv_metadata_formatter]

Expand Down Expand Up @@ -75,9 +87,14 @@ def convert(table, sample_metadata, observation_metadata,
result = table.to_tsv(header_key=header_key,
header_value=output_metadata_id,
metadata_formatter=obs_md_fmt_f)
with open(output_filepath, 'w') as f:
f.write(result)
return
elif to_json:
fmt = 'json'
result = table
elif to_hdf5:
fmt = 'hdf5'
result = table
if collapsed_observations:
metadata = [{'collapsed_ids': md.keys()}
Expand All @@ -91,5 +108,6 @@ def convert(table, sample_metadata, observation_metadata,
# We have changed the metadata, it is safer to make sure that
# it is correct
result._cast_metadata()
write_biom_table(result, fmt, output_filepath)

return result
return
32 changes: 32 additions & 0 deletions biom/cli/util.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# ----------------------------------------------------------------------------
# Copyright (c) 2011-2015, The BIOM Format Development Team.
#
# Distributed under the terms of the Modified BSD License.
#
# The full license is in the file COPYING.txt, distributed with this software.
# ----------------------------------------------------------------------------

import biom.util
import biom.parse

def write_biom_table(table, fmt, filepath):
"""Write table in specified format to filepath"""

if fmt not in ['hdf5', 'json', 'tsv']:
raise ValueError("Unknown file format")

if fmt == 'hdf5' and not biom.util.HAVE_H5PY:
fmt = 'json'

if fmt == 'json':
with open(filepath, 'w') as f:
f.write(table.to_json(biom.parse.generatedby()))
elif fmt == 'tsv':
with open(filepath, 'w') as f:
f.write(table)
f.write('\n')
else:
import h5py

with h5py.File(filepath, 'w') as f:
table.to_hdf5(f, biom.parse.generatedby())
15 changes: 7 additions & 8 deletions scripts/biom
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ def add_metadata(input_fp, output_fp, sample_metadata_fp,
help='The name to be given to the observation metadata '
'column when creating a tsv table file if the column '
'should be renamed.')
@click.option('--table-type', required=False, default="Table",
@click.option('--table-type', required=False,
type=click.Choice(biom.cli.table_converter.table_types),
help='The type of the table.')
@click.option('--process-obs-metadata', required=False,
Expand Down Expand Up @@ -253,13 +253,12 @@ def convert(input_fp, output_fp, sample_metadata_fp, observation_metadata_fp,
else:
observation_metadata_f = None

result = biom.cli.convert(table, sample_metadata_f, observation_metadata_f,
to_json, to_hdf5, to_tsv, collapsed_samples,
collapsed_observations, header_key,
output_metadata_id, table_type,
process_obs_metadata, tsv_metadata_formatter)

biom.cli.write_biom_table(result, fmt, output_fp)
biom.cli.convert(table, output_fp, sample_metadata_f,
observation_metadata_f,
to_json, to_hdf5, to_tsv, collapsed_samples,
collapsed_observations, header_key,
output_metadata_id, table_type,
process_obs_metadata, tsv_metadata_formatter)

@cli.command(name='show-install-info')
def show_install_info():
Expand Down
Loading