Merge pull request #543 from trheyi/main

[fix] sui parser and request
This commit is contained in:
Max 2024-01-04 10:19:24 +08:00 committed by GitHub
commit cf683802b9
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 19 deletions

View file

@ -242,6 +242,13 @@ func (parser *TemplateParser) forStatementNode(sel *goquery.Selection) {
// Create a new node
new := sel.Clone()
parser.removeParsed(new)
parser.data[itemVarName] = item
parser.data[indexVarName] = idx
// parser attributes
parser.parseElementAttrs(new)
parser.parsed(new)
// Set the key
parser.sequence = parser.sequence + 1
@ -250,8 +257,6 @@ func (parser *TemplateParser) forStatementNode(sel *goquery.Selection) {
// Show the node
parser.show(new)
parser.data[itemVarName] = item
parser.data[indexVarName] = idx
if parser.option.Editor {
parser.setSuiAttr(new, "generate", "true")
@ -414,6 +419,10 @@ func (parser *TemplateParser) parsed(sel *goquery.Selection) {
sel.SetAttr("parsed", "true")
}
func (parser *TemplateParser) removeParsed(sel *goquery.Selection) {
sel.RemoveAttr("parsed")
}
func (parser *TemplateParser) hasParsed(sel *goquery.Selection) bool {
if parseed, exist := sel.Attr("parsed"); exist && parseed == "true" {
return true

View file

@ -7,6 +7,7 @@ import (
jsoniter "github.com/json-iterator/go"
"github.com/yaoapp/gou/process"
"github.com/yaoapp/kun/any"
"github.com/yaoapp/kun/log"
)
// Cache the cache
@ -211,7 +212,11 @@ func (r *Request) call(p interface{}) (interface{}, error) {
process.WithSID(r.Sid)
}
return process.Exec()
v, err := process.Exec()
if err != nil {
log.Error("[Request] process %s %s", processName, err.Error())
}
return v, err
}
func (r *Request) parseArgs(args []interface{}) ([]interface{}, error) {
@ -230,28 +235,35 @@ func (r *Request) parseArgs(args []interface{}) ([]interface{}, error) {
switch v := arg.(type) {
case string:
if strings.HasPrefix(v, "$") {
key := strings.TrimLeft(v, "$")
args[i] = key
if data.Has(key) {
v := data.Get(key)
args[i] = v
if strings.HasPrefix(key, "query.") || strings.HasPrefix(key, "header.") {
switch arg := v.(type) {
case []interface{}:
if len(arg) == 1 {
args[i] = arg[0]
}
case []string:
if len(arg) == 1 {
args[i] = arg[0]
}
if !strings.HasPrefix(v, "$") {
args[i] = v
break
}
key := strings.TrimLeft(v, "$")
args[i] = key
if data.Has(key) {
v := data.Get(key)
args[i] = v
if strings.HasPrefix(key, "query.") || strings.HasPrefix(key, "header.") {
switch arg := v.(type) {
case []interface{}:
if len(arg) == 1 {
args[i] = arg[0]
}
case []string:
if len(arg) == 1 {
args[i] = arg[0]
}
}
}
}
break
case int, int8, int16, int32, int64, float32, float64, bool, []string, []int, []int8, []int16, []int32, []int64, []float32, []float64, []bool:
args[i] = v
break
case []interface{}:
res, err := r.parseArgs(v)
if err != nil {