From 6a6a6f6f2cbbc24690f79e99b329adfd2e10956f Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Mon, 16 Oct 2023 15:34:06 +0200 Subject: [PATCH] Correctly handle empty files Former-commit-id: d166aa352ce4bf32739ddc2f7d1c9967918822fd --- pkg/obiformats/embl_read.go | 19 +++++++------------ pkg/obiformats/fastaseq_read.go | 11 ----------- pkg/obiformats/genbank_read.go | 19 +++++++------------ pkg/obiformats/universal_read.go | 5 +++++ 4 files changed, 19 insertions(+), 35 deletions(-) diff --git a/pkg/obiformats/embl_read.go b/pkg/obiformats/embl_read.go index 947a3fe..a29136b 100644 --- a/pkg/obiformats/embl_read.go +++ b/pkg/obiformats/embl_read.go @@ -4,13 +4,10 @@ import ( "bufio" "bytes" "io" - "os" "path" "strconv" "strings" - gzip "github.com/klauspost/pgzip" - log "github.com/sirupsen/logrus" "git.metabarcoding.org/lecasofts/go/obitools/pkg/obiiter" @@ -276,23 +273,21 @@ func ReadEMBL(reader io.Reader, options ...WithOption) obiiter.IBioSequence { func ReadEMBLFromFile(filename string, options ...WithOption) (obiiter.IBioSequence, error) { var reader io.Reader - var greader io.Reader var err error options = append(options, OptionsSource(obiutils.RemoveAllExt((path.Base(filename))))) - reader, err = os.Open(filename) + reader, err = Ropen(filename) + + if err == ErrNoContent { + log.Infof("file %s is empty", filename) + return ReadEmptyFile(options...) + } + if err != nil { log.Printf("open file error: %+v", err) return obiiter.NilIBioSequence, err } - // Test if the flux is compressed by gzip - //greader, err = gzip.NewReader(reader) - greader, err = gzip.NewReaderN(reader, 1<<24, 2) - if err == nil { - reader = greader - } - return ReadEMBL(reader, options...), nil } diff --git a/pkg/obiformats/fastaseq_read.go b/pkg/obiformats/fastaseq_read.go index 34b439e..9774970 100644 --- a/pkg/obiformats/fastaseq_read.go +++ b/pkg/obiformats/fastaseq_read.go @@ -114,19 +114,8 @@ func FastaChunkReader(r io.Reader, size int, cutHead bool) (chan FastxChunk, err end := []byte{} for err == nil && n > 0 { - // fmt.Println("============end=========================") - // fmt.Println(string(end)) - // fmt.Println("------------buff------------------------") - // fmt.Println(string(buff)) buff = Concatenate(end, buff) - // fmt.Println("------------buff--pasted----------------") - // fmt.Println(string(buff)) buff, end = lastFastaCut(buff) - // fmt.Println("----------------buff--cutted------------") - // fmt.Println(string(buff)) - // fmt.Println("------------------end-------------------") - // fmt.Println(string(end)) - // fmt.Println("========================================") if len(buff) > 0 { out <- FastxChunk{ Bytes: bytes.Clone(buff), diff --git a/pkg/obiformats/genbank_read.go b/pkg/obiformats/genbank_read.go index 40b3b1c..7e54874 100644 --- a/pkg/obiformats/genbank_read.go +++ b/pkg/obiformats/genbank_read.go @@ -4,14 +4,11 @@ import ( "bufio" "bytes" "io" - "os" "path" "regexp" "strconv" "strings" - gzip "github.com/klauspost/pgzip" - log "github.com/sirupsen/logrus" "git.metabarcoding.org/lecasofts/go/obitools/pkg/obiiter" @@ -173,23 +170,21 @@ func ReadGenbank(reader io.Reader, options ...WithOption) obiiter.IBioSequence { func ReadGenbankFromFile(filename string, options ...WithOption) (obiiter.IBioSequence, error) { var reader io.Reader - var greader io.Reader var err error options = append(options, OptionsSource(obiutils.RemoveAllExt((path.Base(filename))))) - reader, err = os.Open(filename) + reader, err = Ropen(filename) + + if err == ErrNoContent { + log.Infof("file %s is empty", filename) + return ReadEmptyFile(options...) + } + if err != nil { log.Printf("open file error: %+v", err) return obiiter.NilIBioSequence, err } - // Test if the flux is compressed by gzip - //greader, err = gzip.NewReader(reader) - greader, err = gzip.NewReaderN(reader, 1<<24, 2) - if err == nil { - reader = greader - } - return ReadGenbank(reader, options...), nil } diff --git a/pkg/obiformats/universal_read.go b/pkg/obiformats/universal_read.go index e2d2f5f..d0f75bf 100644 --- a/pkg/obiformats/universal_read.go +++ b/pkg/obiformats/universal_read.go @@ -148,6 +148,11 @@ func ReadSequencesFromFile(filename string, file, err = Ropen(filename) + if err == ErrNoContent { + log.Infof("file %s is empty", filename) + return ReadEmptyFile(options...) + } + if err != nil { log.Fatalf("open file error: %v", err) return obiiter.NilIBioSequence, err