From 46dcae6b7a07daf8f69a092a87cbaf5718eb8124 Mon Sep 17 00:00:00 2001 From: jbieler Date: Mon, 3 Mar 2025 16:13:08 +0000 Subject: [PATCH 1/3] added FileIO interface --- Project.toml | 9 ++++++++- ext/FileIOExt.jl | 34 ++++++++++++++++++++++++++++++++++ src/BED.jl | 4 ++++ test/runtests.jl | 25 +++++++++++++++++++++++-- 4 files changed, 69 insertions(+), 3 deletions(-) create mode 100644 ext/FileIOExt.jl diff --git a/Project.toml b/Project.toml index 40d26c2..1a43e7b 100644 --- a/Project.toml +++ b/Project.toml @@ -8,11 +8,18 @@ Automa = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" BGZFStreams = "28d598bf-9b8f-59f1-b38c-5a06b4a0f5e6" BioGenerics = "47718e42-2ac5-11e9-14af-e5595289c2ea" ColorTypes = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" +FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" FixedPointNumbers = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" GenomicFeatures = "899a7d2d-5c61-547b-bef9-6698a8d05446" Indexes = "4ffb77ac-cb80-11e8-1b35-4b78cc642f6d" TranscodingStreams = "3bb67fe8-82b1-5028-8e26-92a6c54297fa" +[weakdeps] +FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" + +[extensions] +FileIOExt = "FileIO" + [compat] Automa = "1" BGZFStreams = "0.3" @@ -32,4 +39,4 @@ Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" [targets] -test = ["Distributions", "Documenter", "FormatSpecimens", "Random", "Test"] +test = ["Distributions", "Documenter", "FormatSpecimens", "Random", "Test", "FileIO"] diff --git a/ext/FileIOExt.jl b/ext/FileIOExt.jl new file mode 100644 index 0000000..1010f15 --- /dev/null +++ b/ext/FileIOExt.jl @@ -0,0 +1,34 @@ +module FileIOExt + +using BED, FileIO + +function BED.fileio_load(filepath::File{format"BED"}) + + reader = open(BED.Reader, FileIO.filename(filepath)) + records = try + records = [record for record in reader] + catch err + close(reader) + rethrow(err) + end + close(reader) + + records +end + +function BED.fileio_save(filepath::File{format"BED"}, records) + + writer = open(BED.Writer, FileIO.filename(filepath)) + try + for record in records + write(writer, record) + end + catch err + close(writer) + rethrow(err) + end + close(writer) + filepath +end + +end \ No newline at end of file diff --git a/src/BED.jl b/src/BED.jl index ebdaf4a..e274d80 100644 --- a/src/BED.jl +++ b/src/BED.jl @@ -15,4 +15,8 @@ include("record.jl") include("reader.jl") include("writer.jl") +# placeholder for FileIO interface +fileio_load() = nothing +fileio_save() = nothing + end # module diff --git a/test/runtests.jl b/test/runtests.jl index c63a354..57de073 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -6,6 +6,7 @@ using Distributions using Documenter using FormatSpecimens using GenomicFeatures +using FileIO import Random import ColorTypes: RGB @@ -130,7 +131,7 @@ end continue end - filepath = joinpath(dir_bed, filename(specimen)) + filepath = joinpath(dir_bed, FormatSpecimens.filename(specimen)) @test check_bed_parse(filepath) @@ -143,7 +144,7 @@ end continue end - filepath = joinpath(dir_bed, filename(specimen)) + filepath = joinpath(dir_bed, FormatSpecimens.filename(specimen)) @test_throws Exception check_bed_parse(filepath) end @@ -285,6 +286,26 @@ end @test isa(BED.Reader(path), BED.Reader) end + @testset "FileIO" begin + + dir_bed = path_of_format("BED") + + for specimen in list_valid_specimens("BED") + if hastag(specimen, "gzip") + # skip compressed files + continue + end + + mktempdir() do dir + filepath = joinpath(dir_bed, FormatSpecimens.filename(specimen)) + records = FileIO.load(filepath) + + FileIO.save(joinpath(dir, "tmp.bed"), records) + @test [record for record in open(BED.Reader, filepath)] == records + end + end + end + # Include doctests. DocMeta.setdocmeta!(BED, :DocTestSetup, :(using BED); recursive=true) doctest(BED; manual = false) From 03fef13c6483262109d1405e8309ac5e3f069254 Mon Sep 17 00:00:00 2001 From: jbieler Date: Fri, 13 Jun 2025 13:19:07 +0000 Subject: [PATCH 2/3] removed FileIO from deps --- Project.toml | 1 - 1 file changed, 1 deletion(-) diff --git a/Project.toml b/Project.toml index 1a43e7b..2eade2e 100644 --- a/Project.toml +++ b/Project.toml @@ -8,7 +8,6 @@ Automa = "67c07d97-cdcb-5c2c-af73-a7f9c32a568b" BGZFStreams = "28d598bf-9b8f-59f1-b38c-5a06b4a0f5e6" BioGenerics = "47718e42-2ac5-11e9-14af-e5595289c2ea" ColorTypes = "3da002f7-5984-5a60-b8a6-cbb66c0b333f" -FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" FixedPointNumbers = "53c48c17-4a7d-5ca2-90c5-79b7896eea93" GenomicFeatures = "899a7d2d-5c61-547b-bef9-6698a8d05446" Indexes = "4ffb77ac-cb80-11e8-1b35-4b78cc642f6d" From f40e678589ca039efce8893f9a23793923995973 Mon Sep 17 00:00:00 2001 From: jbieler Date: Fri, 13 Jun 2025 13:21:23 +0000 Subject: [PATCH 3/3] added FileIO to extras --- Project.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Project.toml b/Project.toml index 2eade2e..d765bbb 100644 --- a/Project.toml +++ b/Project.toml @@ -36,6 +36,7 @@ Documenter = "e30172f5-a6a5-5a46-863b-614d45cd2de4" FormatSpecimens = "3372ea36-2a1a-11e9-3eb7-996970b6ffbd" Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" +FileIO = "5789e2e9-d7fb-5bc7-8068-2c6fae9b9549" [targets] test = ["Distributions", "Documenter", "FormatSpecimens", "Random", "Test", "FileIO"]