A working version of obiscript

Former-commit-id: 6652ac7dfe681e6c92a2946c34a8248bd62996b0
This commit is contained in:
2024-03-08 21:39:05 +01:00
parent b40015deb7
commit 65933ca031
6 changed files with 393 additions and 57 deletions

View File

@@ -1,8 +1,6 @@
package obilua
import (
log "github.com/sirupsen/logrus"
"git.metabarcoding.org/obitools/obitools4/obitools4/pkg/obiseq"
lua "github.com/yuin/gopher-lua"
)
@@ -31,6 +29,7 @@ func obiseq2Lua(interpreter *lua.LState,
return ud
}
func newObiSeq(luaState *lua.LState) int {
seqid := luaState.CheckString(1)
seq := []byte(luaState.CheckString(2))
@@ -47,12 +46,17 @@ func newObiSeq(luaState *lua.LState) int {
}
var bioSequenceMethods = map[string]lua.LGFunction{
"id": bioSequenceGetSetId,
"sequence": bioSequenceGetSetSequence,
"definition": bioSequenceGetSetDefinition,
"count": bioSequenceGetSetCount,
"taxid": bioSequenceGetSetTaxid,
"attribute": bioSequenceGetSetAttribute,
"id": bioSequenceGetSetId,
"sequence": bioSequenceGetSetSequence,
"definition": bioSequenceGetSetDefinition,
"count": bioSequenceGetSetCount,
"taxid": bioSequenceGetSetTaxid,
"attribute": bioSequenceGetSetAttribute,
"len": bioSequenceGetLength,
"has_sequence": bioSequenceHasSequence,
"has_qualities": bioSequenceHasQualities,
"source": bioSequenceGetSource,
"md5": bioSequenceGetMD5,
}
// checkBioSequence checks if the first argument in the Lua stack is a *obiseq.BioSequence.
@@ -132,13 +136,17 @@ func bioSequenceGetSetAttribute(luaState *lua.LState) int {
if luaState.GetTop() == 3 {
ud := luaState.CheckAny(3)
log.Infof("ud : %v [%v]", ud, ud.Type())
//
// Perhaps the code needs some type checking on ud.Value
// It's a first test
//
s.SetAttribute(attName, ud)
if v, ok := ud.(*lua.LTable); ok {
s.SetAttribute(attName, Table2Interface(luaState, v))
} else {
s.SetAttribute(attName, ud)
}
return 0
}
@@ -152,3 +160,42 @@ func bioSequenceGetSetAttribute(luaState *lua.LState) int {
return 1
}
func bioSequenceGetLength(luaState *lua.LState) int {
s := checkBioSequence(luaState)
luaState.Push(lua.LNumber(s.Len()))
return 1
}
func bioSequenceHasSequence(luaState *lua.LState) int {
s := checkBioSequence(luaState)
luaState.Push(lua.LBool(s.HasSequence()))
return 1
}
func bioSequenceHasQualities(luaState *lua.LState) int {
s := checkBioSequence(luaState)
luaState.Push(lua.LBool(s.HasQualities()))
return 1
}
func bioSequenceGetSource(luaState *lua.LState) int {
s := checkBioSequence(luaState)
if s.HasSource() {
luaState.Push(lua.LString(s.Source()))
} else {
luaState.Push(lua.LNil)
}
return 1
}
func bioSequenceGetMD5(luaState *lua.LState) int {
s := checkBioSequence(luaState)
md5 := s.MD5()
rt := luaState.NewTable()
for i := 0; i < 16; i++ {
rt.Append(lua.LNumber(md5[i]))
}
luaState.Push(rt)
return 1
}