github.com/GuanceCloud/cliutils@v1.1.21/pipeline/ptinput/funcs/fn_pt_kvs.go (about) 1 package funcs 2 3 import ( 4 _ "embed" 5 6 "github.com/GuanceCloud/platypus/pkg/ast" 7 "github.com/GuanceCloud/platypus/pkg/engine/runtime" 8 "github.com/GuanceCloud/platypus/pkg/errchain" 9 ) 10 11 // embed docs. 12 var ( 13 //go:embed md/pt_kvs_get.md 14 docPtKvsGet string 15 16 //go:embed md/pt_kvs_get.en.md 17 docPtKvsGetEN string 18 19 //go:embed md/pt_kvs_set.md 20 docKvsSet string 21 22 //go:embed md/pt_kvs_set.en.md 23 docPtKvsSetEN string 24 25 //go:embed md/pt_kvs_del.md 26 docKvsDel string 27 28 //go:embed md/pt_kvs_del.en.md 29 docPtKvsDelEN string 30 31 //go:embed md/pt_kvs_keys.md 32 docKvsKeys string 33 34 //go:embed md/pt_kvs_keys.en.md 35 docPtKvsKeysEN string 36 37 // todo: parse function definition 38 _ = "fn pt_kvs_get(name: str) -> any" 39 _ = "fn pt_kvs_set(name: str, value: any, as_tag: bool = false) -> bool" 40 _ = "fn pt_kvs_del(name: str)" 41 _ = "fn pt_kvs_keys(tags: bool = true, fields: bool = true) -> list" 42 43 FnPtKvsGet = NewFunc( 44 "pt_kvs_get", 45 []*Param{ 46 { 47 Name: "name", 48 Type: []ast.DType{ast.String}, 49 }, 50 }, 51 []ast.DType{ast.Bool, ast.Int, ast.Float, ast.String, 52 ast.List, ast.Map, ast.Nil}, 53 [2]*PLDoc{ 54 { 55 Language: langTagZhCN, Doc: docPtKvsGet, 56 FnCategory: map[string][]string{ 57 langTagZhCN: {cPointOp}}, 58 }, 59 { 60 Language: langTagEnUS, Doc: docPtKvsGetEN, 61 FnCategory: map[string][]string{ 62 langTagEnUS: {ePointOp}}, 63 }, 64 }, 65 ptKvsGet, 66 ) 67 68 FnPtKvsSet = NewFunc( 69 "pt_kvs_set", 70 []*Param{ 71 { 72 Name: "name", 73 Type: []ast.DType{ast.String}, 74 }, 75 { 76 Name: "value", 77 Type: []ast.DType{ast.Bool, ast.Int, ast.Float, ast.String, 78 ast.List, ast.Map, ast.Nil}, 79 }, 80 { 81 Name: "as_tag", 82 Type: []ast.DType{ast.Bool}, 83 Optional: true, 84 DefaultVal: func() (any, ast.DType) { 85 return false, ast.Bool 86 }, 87 }, 88 }, 89 []ast.DType{ast.Bool}, 90 [2]*PLDoc{ 91 { 92 Language: langTagZhCN, Doc: docKvsSet, 93 FnCategory: map[string][]string{ 94 langTagZhCN: {cPointOp}}, 95 }, 96 { 97 Language: langTagEnUS, Doc: docPtKvsSetEN, 98 FnCategory: map[string][]string{ 99 langTagEnUS: {ePointOp}}, 100 }, 101 }, 102 ptKvsSet, 103 ) 104 105 FnPtKvsDel = NewFunc( 106 "pt_kvs_del", 107 []*Param{ 108 { 109 Name: "name", 110 Type: []ast.DType{ast.String}, 111 }, 112 }, 113 nil, 114 [2]*PLDoc{ 115 { 116 Language: langTagZhCN, Doc: docKvsDel, 117 FnCategory: map[string][]string{ 118 langTagZhCN: {cPointOp}}, 119 }, 120 { 121 Language: langTagEnUS, Doc: docPtKvsDelEN, 122 FnCategory: map[string][]string{ 123 langTagEnUS: {ePointOp}}, 124 }, 125 }, 126 ptKvsDel, 127 ) 128 129 FnPtKvsKeys = NewFunc( 130 "pt_kvs_keys", 131 []*Param{ 132 { 133 Name: "tags", 134 Type: []ast.DType{ast.Bool}, 135 Optional: true, 136 DefaultVal: func() (any, ast.DType) { 137 return true, ast.Bool 138 }, 139 }, 140 { 141 Name: "fields", 142 Type: []ast.DType{ast.Bool}, 143 Optional: true, 144 DefaultVal: func() (any, ast.DType) { 145 return true, ast.Bool 146 }, 147 }, 148 }, 149 []ast.DType{ast.List}, 150 [2]*PLDoc{ 151 { 152 Language: langTagZhCN, Doc: docKvsKeys, 153 FnCategory: map[string][]string{ 154 langTagZhCN: {cPointOp}}, 155 }, 156 { 157 Language: langTagEnUS, Doc: docPtKvsKeysEN, 158 FnCategory: map[string][]string{ 159 langTagEnUS: {ePointOp}}, 160 }, 161 }, 162 ptKvsKeys, 163 ) 164 ) 165 166 func ptKvsGet(ctx *runtime.Task, funcExpr *ast.CallExpr, vals ...any) *errchain.PlError { 167 if val, dtype, err := getPtKey(ctx.InData(), vals[0].(string)); err != nil { 168 ctx.Regs.ReturnAppend(nil, ast.Nil) 169 } else { 170 ctx.Regs.ReturnAppend(val, dtype) 171 } 172 173 return nil 174 } 175 176 func ptKvsSet(ctx *runtime.Task, funcExpr *ast.CallExpr, vals ...any) *errchain.PlError { 177 name := vals[0].(string) 178 asTag := vals[2].(bool) 179 val := vals[1] 180 181 pt, err := getPoint(ctx.InData()) 182 if err != nil { 183 ctx.Regs.ReturnAppend(false, ast.Bool) 184 return nil 185 } 186 187 if asTag { 188 if ok := pt.SetTag(name, val, getValDtype(val)); !ok { 189 ctx.Regs.ReturnAppend(false, ast.Bool) 190 return nil 191 } 192 } else { 193 if ok := pt.Set(name, val, getValDtype(val)); !ok { 194 ctx.Regs.ReturnAppend(false, ast.Bool) 195 return nil 196 } 197 } 198 199 ctx.Regs.ReturnAppend(true, ast.Bool) 200 return nil 201 } 202 203 func ptKvsDel(ctx *runtime.Task, funcExpr *ast.CallExpr, vals ...any) *errchain.PlError { 204 name := vals[0].(string) 205 deletePtKey(ctx.InData(), name) 206 return nil 207 } 208 209 func ptKvsKeys(ctx *runtime.Task, funcExpr *ast.CallExpr, vals ...any) *errchain.PlError { 210 tags := vals[0].(bool) 211 fields := vals[1].(bool) 212 213 pt, err := getPoint(ctx.InData()) 214 if err != nil { 215 ctx.Regs.ReturnAppend(false, ast.Bool) 216 return nil 217 } 218 219 var elemCount int 220 221 if tags { 222 elemCount += len(pt.Tags()) 223 } 224 if fields { 225 elemCount += len(pt.Fields()) 226 } 227 228 keyList := make([]any, 0, elemCount) 229 230 if tags { 231 for k := range pt.Tags() { 232 keyList = append(keyList, k) 233 } 234 } 235 if fields { 236 for k := range pt.Fields() { 237 keyList = append(keyList, k) 238 } 239 } 240 241 ctx.Regs.ReturnAppend(keyList, ast.List) 242 243 return nil 244 }