diff --git a/internal/app/action/action.go b/internal/app/action/action.go index 628edaf..e7f9268 100644 --- a/internal/app/action/action.go +++ b/internal/app/action/action.go @@ -53,12 +53,13 @@ type Action struct { LightTheme string DarkTheme string containerProxyUrl string + hidden map[string]bool // params which are not shown in the UI } // NewAction creates a new action func NewAction(logger *types.Logger, sourceFS *appfs.SourceFs, isDev bool, name, description, apath string, run, suggest starlark.Callable, params []apptype.AppParam, paramValuesStr map[string]string, paramDict starlark.StringDict, - appPath string, styleType types.StyleType, containerProxyUrl string) (*Action, error) { + appPath string, styleType types.StyleType, containerProxyUrl string, hidden []string) (*Action, error) { funcMap := system.GetFuncMap() @@ -97,6 +98,11 @@ func NewAction(logger *types.Logger, sourceFS *appfs.SourceFs, isDev bool, name, pagePath = "" } + hiddenParams := make(map[string]bool) + for _, h := range hidden { + hiddenParams[h] = true + } + return &Action{ Logger: &appLogger, isDev: isDev, @@ -112,6 +118,7 @@ func NewAction(logger *types.Logger, sourceFS *appfs.SourceFs, isDev bool, name, actionTemplate: tmpl, StyleType: styleType, containerProxyUrl: containerProxyUrl, + hidden: hiddenParams, // AppTemplate and Theme names are initialized later }, nil } @@ -551,7 +558,7 @@ func (a *Action) getForm(w http.ResponseWriter, r *http.Request) { } for _, p := range a.params { - if strings.HasPrefix(p.Name, OPTIONS_PREFIX) { + if strings.HasPrefix(p.Name, OPTIONS_PREFIX) || a.hidden[p.Name] { continue } diff --git a/internal/app/apptype/builtins.go b/internal/app/apptype/builtins.go index 091cd1d..c9ad28c 100644 --- a/internal/app/apptype/builtins.go +++ b/internal/app/apptype/builtins.go @@ -297,16 +297,22 @@ func createLibraryBuiltin(_ *starlark.Thread, _ *starlark.Builtin, args starlark func createActionBuiltin(_ *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) { var name, desc, path starlark.String var suggest, executor starlark.Callable + var hidden *starlark.List if err := starlark.UnpackArgs(ACTION, args, kwargs, "name", &name, "path", &path, - "run", &executor, "suggest?", &suggest, "description?", &desc); err != nil { + "run", &executor, "suggest?", &suggest, "description?", &desc, "hidden?", &hidden); err != nil { return nil, fmt.Errorf("error unpacking action args: %w", err) } + if hidden == nil { + hidden = starlark.NewList([]starlark.Value{}) + } + fields := starlark.StringDict{ "name": name, "description": desc, "path": path, "run": executor, + "hidden": hidden, } if suggest != nil { diff --git a/internal/app/setup.go b/internal/app/setup.go index 1d241dc..9b1db11 100644 --- a/internal/app/setup.go +++ b/internal/app/setup.go @@ -509,6 +509,7 @@ func (a *App) addAction(count int, val starlark.Value, router *chi.Mux) error { var name, path, description string var run, suggest starlark.Callable + var hidden []string var err error if name, err = apptype.GetStringAttr(actionDef, "name"); err != nil { return err @@ -522,7 +523,9 @@ func (a *App) addAction(count int, val starlark.Value, router *chi.Mux) error { if run, err = apptype.GetCallableAttr(actionDef, "run"); err != nil { return err } - + if hidden, err = apptype.GetListStringAttr(actionDef, "hidden", true); err != nil { + return err + } sa, _ := actionDef.Attr("suggest") if sa != nil { if suggest, err = apptype.GetCallableAttr(actionDef, "suggest"); err != nil { @@ -539,7 +542,7 @@ func (a *App) addAction(count int, val starlark.Value, router *chi.Mux) error { } action, err := action.NewAction(a.Logger, a.sourceFS, a.IsDev, name, description, path, run, suggest, slices.Collect(maps.Values(a.paramInfo)), a.paramValuesStr, a.paramDict, a.Path, a.appStyle.GetStyleType(), - containerProxyUrl) + containerProxyUrl, hidden) if err != nil { return fmt.Errorf("error creating action %s: %w", name, err) } diff --git a/internal/app/tests/appaction_test.go b/internal/app/tests/appaction_test.go index 7508d9d..e89b9fd 100644 --- a/internal/app/tests/appaction_test.go +++ b/internal/app/tests/appaction_test.go @@ -588,11 +588,12 @@ def handler(dry_run, args): return ace.result(status="done", values=["a", "b"], param_errors={"param1": "param1error", "param3": "param3error"}) app = ace.app("testApp", - actions=[ace.action("testAction", "/", handler)]) + actions=[ace.action("testAction", "/", handler, hidden=["param2"])]) `, "params.star": `param("param1", description="param1 description", type=STRING, default="myvalue") -param("options-param1", description="param1 options", type=LIST, default=["a", "b", "c"])`, +param("options-param1", description="param1 options", type=LIST, default=["a", "b", "c"]) +param("param2", description="param2 description", type=STRING, default="myvalue2")`, } a, _, err := CreateTestApp(logger, fileData) if err != nil { @@ -610,6 +611,9 @@ param("options-param1", description="param1 options", type=LIST, default=["a", " if strings.Contains(bodyStripped, `options-param1`) { t.Errorf("options-param1 should not be in the body") } + if strings.Contains(bodyStripped, `param2`) { + t.Errorf("hidden param2 should not be in the body") + } } func TestActionError(t *testing.T) {