Files
obitools4/pkg/obiseq/eval.go

66 lines
1.3 KiB
Go
Raw Normal View History

2023-02-16 13:32:27 +01:00
package obiseq
import (
"context"
"fmt"
log "github.com/sirupsen/logrus"
)
func Expression(expression string) func(*BioSequence) (interface{}, error) {
2023-02-16 13:32:27 +01:00
exp, err := OBILang.NewEvaluable(expression)
2023-02-16 13:32:27 +01:00
if err != nil {
log.Fatalf("Error in the expression : %s", expression)
}
f := func(sequence *BioSequence) (interface{}, error) {
2023-02-16 13:32:27 +01:00
return exp(context.Background(),
map[string]interface{}{
"annotations": sequence.Annotations(),
"sequence": sequence,
2023-02-16 13:32:27 +01:00
},
)
}
return f
}
func EditIdWorker(expression string) SeqWorker {
e := Expression(expression)
f := func(sequence *BioSequence) (BioSequenceSlice, error) {
v, err := e(sequence)
if err == nil {
sequence.SetId(fmt.Sprintf("%v", v))
} else {
err = fmt.Errorf("Expression '%s' cannot be evaluated on sequence %s : %v",
2023-02-16 13:32:27 +01:00
expression,
sequence.Id(),
err)
2023-02-16 13:32:27 +01:00
}
return BioSequenceSlice{sequence}, err
2023-02-16 13:32:27 +01:00
}
return f
}
func EditAttributeWorker(key string, expression string) SeqWorker {
e := Expression(expression)
f := func(sequence *BioSequence) (BioSequenceSlice, error) {
v, err := e(sequence)
if err == nil {
sequence.SetAttribute(key, v)
} else {
err = fmt.Errorf("Expression '%s' cannot be evaluated on sequence %s : %v",
2023-02-16 13:32:27 +01:00
expression,
sequence.Id(),
err)
2023-02-16 13:32:27 +01:00
}
return BioSequenceSlice{sequence}, err
2023-02-16 13:32:27 +01:00
}
return f
}