added a map for validators, and moved init under bundle

This commit is contained in:
Shreyas Goenka 2023-05-19 15:39:55 +02:00
parent 9a8205b3df
commit f5384fc5ed
No known key found for this signature in database
GPG Key ID: 92A07DF49CCB0622
4 changed files with 57 additions and 28 deletions

View File

@ -1,11 +1,10 @@
package init
package bundle
import (
"encoding/json"
"os"
"path/filepath"
"github.com/databricks/cli/cmd/root"
"github.com/databricks/cli/libs/template"
"github.com/spf13/cobra"
)
@ -66,5 +65,5 @@ var targetDir string
func init() {
initCmd.Flags().StringVar(&targetDir, "target-dir", ".", "path to directory template will be initialized in")
root.RootCmd.AddCommand(initCmd)
AddCommand(initCmd)
}

View File

@ -6,7 +6,7 @@ import (
"path/filepath"
"testing"
_ "github.com/databricks/cli/cmd/init"
_ "github.com/databricks/cli/cmd/bundle"
"github.com/databricks/cli/cmd/root"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
@ -36,7 +36,7 @@ func TestTemplateInitializationForDevConfig(t *testing.T) {
// materialize the template
cmd := root.RootCmd
cmd.SetArgs([]string{"init", filepath.FromSlash("testdata/init/templateDefinition"), "--target-dir", tmp})
cmd.SetArgs([]string{"bundle", "init", filepath.FromSlash("testdata/init/templateDefinition"), "--target-dir", tmp})
err = cmd.Execute()
require.NoError(t, err)
@ -68,7 +68,7 @@ func TestTemplateInitializationForProdConfig(t *testing.T) {
cmd := root.RootCmd
childCommands := cmd.Commands()
fmt.Println(childCommands)
cmd.SetArgs([]string{"init", filepath.FromSlash("testdata/init/templateDefinition"), "--target-dir", tmp})
cmd.SetArgs([]string{"bundle", "init", filepath.FromSlash("testdata/init/templateDefinition"), "--target-dir", tmp})
err = cmd.Execute()
require.NoError(t, err)

View File

@ -3,8 +3,6 @@ package template
import (
"fmt"
"reflect"
"golang.org/x/exp/slices"
)
type Schema map[string]FieldInfo
@ -67,28 +65,12 @@ func (schema Schema) CastFloatToInt(config map[string]any) error {
}
func validateType(v any, fieldType FieldType) error {
switch fieldType {
case FieldTypeString:
if _, ok := v.(string); !ok {
return fmt.Errorf("expected type string, but value is %#v", v)
}
case FieldTypeInt:
if !slices.Contains([]reflect.Kind{reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64},
reflect.TypeOf(v).Kind()) {
return fmt.Errorf("expected type integer, but value is %#v", v)
}
case FieldTypeFloat:
if !slices.Contains([]reflect.Kind{reflect.Float32, reflect.Float64},
reflect.TypeOf(v).Kind()) {
return fmt.Errorf("expected type float, but value is %#v", v)
}
case FieldTypeBoolean:
if _, ok := v.(bool); !ok {
return fmt.Errorf("expected type boolean, but value is %#v", v)
}
}
validateFunc, ok := validators[fieldType]
if !ok {
return nil
}
return validateFunc(v)
}
// TODO: add validation check for regex for string types
func (schema Schema) ValidateConfig(config map[string]any) error {

View File

@ -0,0 +1,48 @@
package template
import (
"fmt"
"reflect"
"golang.org/x/exp/slices"
)
type Validator func(v any) error
// TODO: refactor tests into individual tests for individual validators
func validateString(v any) error {
if _, ok := v.(string); !ok {
return fmt.Errorf("expected type string, but value is %#v", v)
}
return nil
}
func validateBoolean(v any) error {
if _, ok := v.(bool); !ok {
return fmt.Errorf("expected type boolean, but value is %#v", v)
}
return nil
}
func validateFloat(v any) error {
if !slices.Contains([]reflect.Kind{reflect.Float32, reflect.Float64},
reflect.TypeOf(v).Kind()) {
return fmt.Errorf("expected type float, but value is %#v", v)
}
return nil
}
func validateInteger(v any) error {
if !slices.Contains([]reflect.Kind{reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64},
reflect.TypeOf(v).Kind()) {
return fmt.Errorf("expected type integer, but value is %#v", v)
}
return nil
}
var validators map[FieldType]Validator = map[FieldType]Validator{
FieldTypeString: validateString,
FieldTypeBoolean: validateBoolean,
FieldTypeInt: validateInteger,
FieldTypeFloat: validateFloat,
}