Skip to content

Commit 2230f92

Browse files
committed
Finished all API endpoints for io
1 parent 6260b27 commit 2230f92

File tree

5 files changed

+252
-83
lines changed

5 files changed

+252
-83
lines changed

api/api/api.go

Lines changed: 71 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import (
44
"bytes"
55
"context"
66
"embed"
7+
"encoding/base64"
78
"encoding/json"
89
"fmt"
910
"html/template"
@@ -358,12 +359,27 @@ func (app *App) LuaIoGenbankParse(L *lua.LState) int {
358359
}
359360

360361
func (app *App) PostIoGenbankWrite(ctx context.Context, request gen.PostIoGenbankWriteRequestObject) (gen.PostIoGenbankWriteResponseObject, error) {
361-
return nil, nil
362+
var w bytes.Buffer
363+
for _, genbankRecord := range *request.Body {
364+
genbankStruct := ConvertGenbankRecordToGenbank(genbankRecord)
365+
_, _ = genbankStruct.WriteTo(&w)
366+
}
367+
return gen.PostIoGenbankWrite200TextResponse(w.String()), nil
362368
}
363369
func (app *App) LuaIoGenbankWrite(L *lua.LState) int { return 0 }
364370

365371
func (app *App) PostIoFastqParse(ctx context.Context, request gen.PostIoFastqParseRequestObject) (gen.PostIoFastqParseResponseObject, error) {
366-
return nil, nil
372+
fastqString := *request.Body
373+
parser := bio.NewFastqParser(strings.NewReader(fastqString + "\n"))
374+
fastqs, err := parser.Parse()
375+
if err != nil {
376+
return gen.PostIoFastqParse500TextResponse(fmt.Sprintf("Got error: %s", err)), nil
377+
}
378+
data := make([]gen.FastqRead, len(fastqs))
379+
for i, fastqRead := range fastqs {
380+
data[i] = gen.FastqRead{Identifier: fastqRead.Identifier, Optionals: &fastqRead.Optionals, Sequence: fastqRead.Sequence, Quality: fastqRead.Quality}
381+
}
382+
return gen.PostIoFastqParse200JSONResponse(data), nil
367383
}
368384
func (app *App) LuaIoFastqParse(L *lua.LState) int { return 0 }
369385

@@ -378,7 +394,20 @@ func (app *App) PostIoFastqWrite(ctx context.Context, request gen.PostIoFastqWri
378394
func (app *App) LuaIoFastqWrite(L *lua.LState) int { return 0 }
379395

380396
func (app *App) PostIoSlow5Parse(ctx context.Context, request gen.PostIoSlow5ParseRequestObject) (gen.PostIoSlow5ParseResponseObject, error) {
381-
return nil, nil
397+
slow5String := *request.Body
398+
parser, err := bio.NewSlow5Parser(strings.NewReader(slow5String))
399+
if err != nil {
400+
return gen.PostIoSlow5Parse500TextResponse(fmt.Sprintf("Got error: %s", err)), nil
401+
}
402+
reads, header, err := parser.ParseWithHeader()
403+
if err != nil {
404+
return gen.PostIoSlow5Parse500TextResponse(fmt.Sprintf("Got error: %s", err)), nil
405+
}
406+
data := make([]gen.Slow5Read, len(reads))
407+
for i, read := range reads {
408+
data[i] = ConvertReadToSlow5Read(read)
409+
}
410+
return gen.PostIoSlow5Parse200JSONResponse(gen.PostIoSlow5WriteJSONBody{Header: ConvertToGenSlow5Header(header), Reads: data}), nil
382411
}
383412
func (app *App) LuaIoSlow5Parse(L *lua.LState) int { return 0 }
384413

@@ -392,7 +421,7 @@ func (app *App) PostIoSlow5Write(ctx context.Context, request gen.PostIoSlow5Wri
392421
header := slow5.Header{HeaderValues: headerValues}
393422
reads := request.Body.Reads
394423
_, _ = header.WriteTo(&w)
395-
for _, read := range *reads {
424+
for _, read := range reads {
396425
slow5Struct := ConvertSlow5ReadToRead(read)
397426
_, _ = slow5Struct.WriteTo(&w)
398427
}
@@ -401,17 +430,52 @@ func (app *App) PostIoSlow5Write(ctx context.Context, request gen.PostIoSlow5Wri
401430
func (app *App) LuaIoSlow5Write(L *lua.LState) int { return 0 }
402431

403432
func (app *App) PostIoSlow5SvbCompress(ctx context.Context, request gen.PostIoSlow5SvbCompressRequestObject) (gen.PostIoSlow5SvbCompressResponseObject, error) {
404-
return nil, nil
433+
input := *request.Body
434+
rawSignal := make([]int16, len(input.RawSignal))
435+
for i, integer := range input.RawSignal {
436+
rawSignal[i] = int16(integer)
437+
}
438+
mask, data := slow5.SvbCompressRawSignal(rawSignal)
439+
encodedMask := base64.StdEncoding.EncodeToString(mask)
440+
encodedData := base64.StdEncoding.EncodeToString(data)
441+
442+
return gen.PostIoSlow5SvbCompress200JSONResponse{Mask: encodedMask, Data: encodedData, LenRawSignal: len(rawSignal)}, nil
405443
}
406444
func (app *App) LuaIoSlow5SvbCompress(L *lua.LState) int { return 0 }
407445

408446
func (app *App) PostIoSlow5SvbDecompress(ctx context.Context, request gen.PostIoSlow5SvbDecompressRequestObject) (gen.PostIoSlow5SvbDecompressResponseObject, error) {
409-
return nil, nil
447+
input := *request.Body
448+
decodedMask, err := base64.StdEncoding.DecodeString(input.Mask)
449+
if err != nil {
450+
return gen.PostIoSlow5SvbDecompress500TextResponse(fmt.Sprintf("Failed to base64 decode mask. Got err: %s", err)), nil
451+
}
452+
453+
decodedData, err := base64.StdEncoding.DecodeString(input.Data)
454+
if err != nil {
455+
return gen.PostIoSlow5SvbDecompress500TextResponse(fmt.Sprintf("Failed to base64 decode data. Got err: %s", err)), nil
456+
}
457+
458+
rawSignal := slow5.SvbDecompressRawSignal(input.LenRawSignal, decodedMask, decodedData)
459+
intRawSignal := make([]int, len(rawSignal))
460+
for i, integer := range rawSignal {
461+
intRawSignal[i] = int(integer)
462+
}
463+
return gen.PostIoSlow5SvbDecompress200JSONResponse{RawSignal: intRawSignal}, nil
410464
}
411465
func (app *App) LuaIoSlow5SvbDecompress(L *lua.LState) int { return 0 }
412466

413467
func (app *App) PostIoPileupParse(ctx context.Context, request gen.PostIoPileupParseRequestObject) (gen.PostIoPileupParseResponseObject, error) {
414-
return nil, nil
468+
pileupString := *request.Body
469+
parser := bio.NewPileupParser(strings.NewReader(pileupString))
470+
pileups, err := parser.Parse()
471+
if err != nil {
472+
return gen.PostIoPileupParse500TextResponse(fmt.Sprintf("Got error: %s", err)), nil
473+
}
474+
data := make([]gen.PileupLine, len(pileups))
475+
for i, pileupRead := range pileups {
476+
data[i] = gen.PileupLine{Sequence: pileupRead.Sequence, Position: int(pileupRead.Position), ReferenceBase: pileupRead.ReferenceBase, ReadCount: int(pileupRead.ReadCount), ReadResults: pileupRead.ReadResults, Quality: pileupRead.Quality}
477+
}
478+
return gen.PostIoPileupParse200JSONResponse(data), nil
415479
}
416480
func (app *App) LuaIoPileupParse(L *lua.LState) int { return 0 }
417481

api/api/converters.go

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,3 +282,33 @@ func convertMetaGenToGenbank(meta gen.Meta) genbank.Meta {
282282
Version: meta.Version,
283283
}
284284
}
285+
286+
func ConvertToSlow5Header(genHeader gen.Slow5Header) slow5.Header {
287+
var slow5HeaderValues []slow5.HeaderValue
288+
for _, hv := range genHeader.HeaderValues {
289+
slow5HV := slow5.HeaderValue{
290+
ReadGroupID: uint32(hv.ReadGroupID),
291+
Slow5Version: hv.Slow5Version,
292+
Attributes: hv.Attributes,
293+
EndReasonHeaderMap: hv.EndReasonHeaderMap,
294+
}
295+
slow5HeaderValues = append(slow5HeaderValues, slow5HV)
296+
}
297+
298+
return slow5.Header{HeaderValues: slow5HeaderValues}
299+
}
300+
301+
func ConvertToGenSlow5Header(slow5Header slow5.Header) gen.Slow5Header {
302+
var genHeaderValues []gen.HeaderValue
303+
for _, hv := range slow5Header.HeaderValues {
304+
genHV := gen.HeaderValue{
305+
ReadGroupID: int(hv.ReadGroupID),
306+
Slow5Version: hv.Slow5Version,
307+
Attributes: hv.Attributes,
308+
EndReasonHeaderMap: hv.EndReasonHeaderMap,
309+
}
310+
genHeaderValues = append(genHeaderValues, genHV)
311+
}
312+
313+
return gen.Slow5Header{HeaderValues: genHeaderValues}
314+
}

api/gen/dnadesign-server.gen.go

Lines changed: 84 additions & 39 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)