Skip to content
Open
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
6 changes: 6 additions & 0 deletions fixtures/gfa/connected_mixed_sn.gfa
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
H VN:Z:1.0
S A AAAA SN:Z:chr1
S B CCCC SN:Z:chr1
S C TTTT SN:Z:chr2
L A + B + *
L B + C + *
7 changes: 7 additions & 0 deletions fixtures/gfa/disjoint_graphs.gfa
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
H VN:Z:1.0
S 1 AAAA
S 2 CCCC
S 3 TTTT
S 4 GGGG
L 1 + 2 + *
L 3 + 4 + *
8 changes: 8 additions & 0 deletions fixtures/gfa/paths_no_ref.gfa
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
H VN:Z:1.0
S 1 AAAA
S 2 CCCC
S 3 TTTT
L 1 + 2 + *
L 2 + 3 + *
P short 1+,2+ *
P longer_path 1+,2+,3+ *
7 changes: 7 additions & 0 deletions fixtures/gfa/ref_tag_multi.gfa
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
H VN:Z:1.0
S 1 AAAA SN:Z:chr1 SO:i:0 SR:i:0
S 2 CCCC SN:Z:chr1 SO:i:4 SR:i:0
S 3 TTTT SN:Z:chr2 SO:i:0 SR:i:0
S 4 GGGG SN:Z:chr2 SO:i:4 SR:i:0
L 1 + 2 + *
L 3 + 4 + *
6 changes: 6 additions & 0 deletions fixtures/gfa/ref_tag_single.gfa
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
H VN:Z:1.0
S 1 AAAA SN:Z:chr1 SO:i:0 SR:i:0
S 2 CCCC SN:Z:chr1 SO:i:4 SR:i:0
S 3 TTTT SN:Z:chr1 SO:i:8 SR:i:0
L 1 + 2 + *
L 2 + 3 + *
11 changes: 8 additions & 3 deletions gen-python/src/python_api/repository/imports.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ use gen_models::{
use pyo3::{exceptions::PyRuntimeError, prelude::*};

use super::{PyRepository, run_write};
use crate::python_api::sequence_part::PySequencePart;
use crate::python_api::{block_group::PySequenceGraph, sequence_part::PySequencePart};

#[pymethods]
impl PyRepository {
Expand Down Expand Up @@ -80,12 +80,17 @@ impl PyRepository {
filename: String,
sample: Option<String>,
collection: Option<String>,
) -> PyResult<String> {
) -> PyResult<Vec<PySequenceGraph>> {
let collection = collection.unwrap_or_else(|| self.get_default_collection());
let sample = sample.unwrap_or_else(|| Sample::DEFAULT_NAME.to_string());
run_write(&self.context, !self.in_transaction, |ctx| {
import_gfa(ctx, &PathBuf::from(&filename), &collection, &sample)
.map(|_| format!("'{}' imported.", filename))
.map(|(_, block_groups)| {
block_groups
.into_iter()
.map(|bg| self.into_py_block_group(bg))
.collect()
})
.map_err(|e| match e {
GFAImportError::OperationError(OperationError::NoChanges) => {
PyRuntimeError::new_err(format!("'{}': already exists", filename))
Expand Down
10 changes: 7 additions & 3 deletions gen-r/src/rust/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1073,7 +1073,7 @@ impl Repository {
filename: String,
sample: String,
collection: Nullable<String>,
) -> std::result::Result<String, Error> {
) -> std::result::Result<List, Error> {
let collection_name = resolve_collection_name(
self.context.operations().conn(),
nullable_string_to_option(collection),
Expand All @@ -1086,9 +1086,13 @@ impl Repository {
&collection_name,
&sample,
) {
Ok(_) => {
Ok((_, block_groups)) => {
end_transactions(&self.context).map_err(Error::Other)?;
Ok("GFA imported.".to_string())
let values = block_groups
.into_iter()
.map(|bg| r!(self.into_sequence_graph(bg)))
.collect::<Vec<_>>();
Ok(List::from_values(values))
}
Err(r#gen::imports::gfa::GFAImportError::OperationError(OperationError::NoChanges)) => {
rollback_transactions(&self.context);
Expand Down
8 changes: 4 additions & 4 deletions gen-r/tests/testthat/test-basic.R
Original file line number Diff line number Diff line change
Expand Up @@ -76,10 +76,10 @@ test_that("GFA and GenBank import/export work", {
gfa_out <- tempfile(fileext = ".gfa")
gb_out <- tempfile(fileext = ".gb")

expect_match(
repo$import_gfa(fixture_path("simple.gfa"), sample = "sample-a"),
"imported", ignore.case = TRUE
)
result <- repo$import_gfa(fixture_path("simple.gfa"), sample = "sample-a")
expect_true(is.list(result))
expect_gt(length(result), 0)
expect_true(all(sapply(result, inherits, "SequenceGraph")))
expect_binding_result(try(repo$export_gfa(gfa_out, sample = "sample-a"), silent = TRUE))

expect_binding_result(try(
Expand Down
9 changes: 7 additions & 2 deletions src/commands/import/gfa.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,10 +57,15 @@ pub fn execute(cli_context: &CliContext, cmd: Command) -> Result<()> {
)?;
}
match import_gfa(context, &PathBuf::from(cmd.path.clone()), name, sample_name) {
Ok(_) => {
println!("GFA imported.");
Ok((_, block_groups)) => {
conn.execute("END TRANSACTION;", []).unwrap();
operation_conn.execute("END TRANSACTION;", []).unwrap();
let names: Vec<&str> = block_groups.iter().map(|bg| bg.name.as_str()).collect();
println!(
"Imported {} sequence graph(s): {}",
names.len(),
names.join(", ")
);
Ok(())
}
Err(GFAImportError::OperationError(OperationError::NoChanges)) => {
Expand Down
28 changes: 18 additions & 10 deletions src/diffs/gfa.rs
Original file line number Diff line number Diff line change
Expand Up @@ -911,11 +911,15 @@ mod tests {
Sample::DEFAULT_NAME,
);

let new_block_group = Collection::get_block_groups(conn, "test collection 3")
.pop()
.unwrap();
let all_sequences =
BlockGroup::get_all_sequences(conn, &new_block_group.id, false).unwrap();
let all_sequences: HashSet<String> =
Collection::get_block_groups(conn, "test collection 3")
.iter()
.flat_map(|bg| {
BlockGroup::get_all_sequences(conn, &bg.id, false)
.unwrap()
.into_iter()
})
.collect();

assert_eq!(
all_sequences,
Expand Down Expand Up @@ -1081,11 +1085,15 @@ mod tests {
Sample::DEFAULT_NAME,
);

let new_block_group = Collection::get_block_groups(conn, "test collection 3")
.pop()
.unwrap();
let all_sequences =
BlockGroup::get_all_sequences(conn, &new_block_group.id, false).unwrap();
let all_sequences: HashSet<String> =
Collection::get_block_groups(conn, "test collection 3")
.iter()
.flat_map(|bg| {
BlockGroup::get_all_sequences(conn, &bg.id, false)
.unwrap()
.into_iter()
})
.collect();

assert_eq!(
all_sequences,
Expand Down
13 changes: 10 additions & 3 deletions src/exports/gfa.rs
Original file line number Diff line number Diff line change
Expand Up @@ -609,7 +609,8 @@ mod tests {

let _ = import_gfa(&context, &gfa_path, &collection_name, Sample::DEFAULT_NAME);

let block_group_id = BlockGroup::get_id(&collection_name, Sample::DEFAULT_NAME, "", None);
let block_group_id =
BlockGroup::get_id(&collection_name, Sample::DEFAULT_NAME, "m123", None);
let all_sequences = BlockGroup::get_all_sequences(conn, &block_group_id, false).unwrap();

let temp_dir = tempdir().expect("Couldn't get handle to temp directory");
Expand Down Expand Up @@ -652,7 +653,12 @@ mod tests {

let _ = import_gfa(&context, &gfa_path, &collection_name, Sample::DEFAULT_NAME);

let block_group_id = BlockGroup::get_id(&collection_name, Sample::DEFAULT_NAME, "", None);
let block_group_id = BlockGroup::get_id(
&collection_name,
Sample::DEFAULT_NAME,
"BBa_J23119#0#BBa_J23119",
None,
);
let all_sequences = BlockGroup::get_all_sequences(conn, &block_group_id, false).unwrap();

let temp_dir = tempdir().expect("Couldn't get handle to temp directory");
Expand Down Expand Up @@ -695,7 +701,8 @@ mod tests {

let _ = import_gfa(&context, &gfa_path, &collection_name, Sample::DEFAULT_NAME);

let block_group_id = BlockGroup::get_id(&collection_name, Sample::DEFAULT_NAME, "", None);
let block_group_id =
BlockGroup::get_id(&collection_name, Sample::DEFAULT_NAME, "123", None);
let all_sequences = BlockGroup::get_all_sequences(conn, &block_group_id, false).unwrap();

let temp_dir = tempdir().expect("Couldn't get handle to temp directory");
Expand Down
Loading
Loading