Skip to content

Commit

Permalink
Fix cyclic imports
Browse files Browse the repository at this point in the history
  • Loading branch information
akclace committed Jan 15, 2024
1 parent 95c825e commit 2e9f1ea
Show file tree
Hide file tree
Showing 14 changed files with 212 additions and 193 deletions.
5 changes: 2 additions & 3 deletions internal/app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import (

"github.com/Masterminds/sprig/v3"
"github.com/claceio/clace/internal/app/dev"
"github.com/claceio/clace/internal/app/store"
"github.com/claceio/clace/internal/app/util"
"github.com/claceio/clace/internal/utils"
"github.com/fsnotify/fsnotify"
Expand All @@ -41,7 +40,7 @@ type App struct {
reloadStartTime time.Time
appDev *dev.AppDev
systemConfig *utils.SystemConfig
storeInfo *store.StoreInfo
storeInfo *utils.StoreInfo
plugins *AppPlugins

globals starlark.StringDict
Expand Down Expand Up @@ -260,7 +259,7 @@ func (a *App) loadSchemaInfo(sourceFS *util.SourceFs) error {
return nil // Ignore absence of schema file
}

a.storeInfo, err = store.ReadStoreInfo(util.SCHEMA_FILE_NAME, schemaInfoData)
a.storeInfo, err = util.ReadStoreInfo(util.SCHEMA_FILE_NAME, schemaInfoData)
if err != nil {
return fmt.Errorf("error reading schema info: %w", err)
}
Expand Down
3 changes: 1 addition & 2 deletions internal/app/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,7 @@ import (
)

type PluginContext struct {
Connection *any
Config utils.PluginSettings
Config utils.PluginSettings
}

type NewPluginFunc func(pluginContext *PluginContext) (any, error)
Expand Down
3 changes: 1 addition & 2 deletions internal/app/setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import (
"path"

"github.com/claceio/clace/internal/app/dev"
"github.com/claceio/clace/internal/app/store"
"github.com/claceio/clace/internal/app/util"
"github.com/claceio/clace/internal/utils"
"github.com/go-chi/chi"
Expand Down Expand Up @@ -139,7 +138,7 @@ func (a *App) addSchemaTypes(builtin starlark.StringDict) (starlark.StringDict,

typeDict := starlark.StringDict{}
for _, t := range a.storeInfo.Types {
tb := store.TypeBuilder{Name: t.Name, Fields: t.Fields}
tb := utils.TypeBuilder{Name: t.Name, Fields: t.Fields}
typeDict[t.Name] = starlark.NewBuiltin(t.Name, tb.CreateType)
}

Expand Down
31 changes: 31 additions & 0 deletions internal/app/store/db_plugin.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Copyright (c) ClaceIO, LLC
// SPDX-License-Identifier: Apache-2.0

package store

import (
"net/http"

"github.com/claceio/clace/internal/app"
"go.starlark.net/starlark"
)

func init() {
h := &dbPlugin{}
pluginFuncs := []app.PluginFunc{
app.CreatePluginApi(h.Create, false),
}
app.RegisterPlugin("db", NewDBPlugin, pluginFuncs)
}

type dbPlugin struct {
client *http.Client
}

func NewDBPlugin(pluginContext *app.PluginContext) (any, error) {
return &dbPlugin{}, nil
}

func (h *dbPlugin) Create(thread *starlark.Thread, builtin *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
return nil, nil
}
5 changes: 5 additions & 0 deletions internal/app/store/sqlite_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,11 @@ func NewSqliteStore(logger *utils.Logger, config *utils.ServerConfig, db *sql.DB
}, nil
}

func validateCollectionName(name string) error {
// TODO: validate collection name
return nil
}

func (s *SqliteStore) genTableName(collection string) (string, error) {
err := validateCollectionName(collection)
if err != nil {
Expand Down
68 changes: 0 additions & 68 deletions internal/app/store/store_info.go

This file was deleted.

24 changes: 0 additions & 24 deletions internal/app/store/store_plugin.go

This file was deleted.

57 changes: 28 additions & 29 deletions internal/app/store/loader.go → internal/app/util/loader.go
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
// Copyright (c) ClaceIO, LLC
// SPDX-License-Identifier: Apache-2.0

package store
package util

import (
"fmt"

"github.com/claceio/clace/internal/app/util"
"github.com/claceio/clace/internal/utils"
"go.starlark.net/starlark"
"go.starlark.net/starlarkstruct"
Expand All @@ -18,7 +17,7 @@ const (
INDEX = "index"
)

func LoadStoreInfo(fileName string, data []byte) (*StoreInfo, error) {
func LoadStoreInfo(fileName string, data []byte) (*utils.StoreInfo, error) {
definedTypes := make(map[string]starlark.Value)

typeBuiltin := func(_ *starlark.Thread, _ *starlark.Builtin, args starlark.Tuple, kwargs []starlark.Tuple) (starlark.Value, error) {
Expand Down Expand Up @@ -48,14 +47,14 @@ func LoadStoreInfo(fileName string, data []byte) (*StoreInfo, error) {
}

builtins := starlark.StringDict{
TYPE: starlark.NewBuiltin(TYPE, typeBuiltin),
FIELD: starlark.NewBuiltin(FIELD, createFieldBuiltin),
INDEX: starlark.NewBuiltin(INDEX, createIndexBuiltin),
string(INT): starlark.String(INT),
string(STRING): starlark.String(STRING),
string(BOOLEAN): starlark.String(BOOLEAN),
string(DICT): starlark.String(DICT),
string(LIST): starlark.String(LIST),
TYPE: starlark.NewBuiltin(TYPE, typeBuiltin),
FIELD: starlark.NewBuiltin(FIELD, createFieldBuiltin),
INDEX: starlark.NewBuiltin(INDEX, createIndexBuiltin),
string(utils.INT): starlark.String(utils.INT),
string(utils.STRING): starlark.String(utils.STRING),
string(utils.BOOLEAN): starlark.String(utils.BOOLEAN),
string(utils.DICT): starlark.String(utils.DICT),
string(utils.LIST): starlark.String(utils.LIST),
}

thread := &starlark.Thread{
Expand All @@ -74,15 +73,15 @@ func LoadStoreInfo(fileName string, data []byte) (*StoreInfo, error) {
return createStoreInfo(definedTypes)
}

func createStoreInfo(definedTypes map[string]starlark.Value) (*StoreInfo, error) {
types := make([]StoreType, 0, len(definedTypes))
func createStoreInfo(definedTypes map[string]starlark.Value) (*utils.StoreInfo, error) {
types := make([]utils.StoreType, 0, len(definedTypes))
for _, t := range definedTypes {
typeStruct, ok := t.(*starlarkstruct.Struct)
if !ok {
return nil, fmt.Errorf("invalid type definition: %s", t.String())
}

typeName, err := util.GetStringAttr(typeStruct, "name")
typeName, err := GetStringAttr(typeStruct, "name")
if err != nil {
return nil, err
}
Expand All @@ -96,19 +95,19 @@ func createStoreInfo(definedTypes map[string]starlark.Value) (*StoreInfo, error)
return nil, fmt.Errorf("error getting indexes in type %s: %s", typeName, err)
}

types = append(types, StoreType{
types = append(types, utils.StoreType{
Name: string(typeName),
Fields: fields,
Indexes: indexes,
})
}

return &StoreInfo{
return &utils.StoreInfo{
Types: types,
}, nil
}

func getFields(typeName string, typeStruct *starlarkstruct.Struct, key string) ([]StoreField, error) {
func getFields(typeName string, typeStruct *starlarkstruct.Struct, key string) ([]utils.StoreField, error) {
fieldsAttr, err := typeStruct.Attr(key)
if err != nil {
return nil, fmt.Errorf("error getting %s attribute in type %s: %s", key, typeName, err)
Expand All @@ -123,26 +122,26 @@ func getFields(typeName string, typeStruct *starlarkstruct.Struct, key string) (
iter := fieldsList.Iterate()
var val starlark.Value

ret := make([]StoreField, 0, fields.Len())
ret := make([]utils.StoreField, 0, fields.Len())
for iter.Next(&val) {
fieldStruct, ok := val.(*starlarkstruct.Struct)
if !ok {
return nil, fmt.Errorf("invalid field definition: %s", val.String())
}

fieldName, err := util.GetStringAttr(fieldStruct, "name")
fieldName, err := GetStringAttr(fieldStruct, "name")
if err != nil {
return nil, err
}

fieldType, err := util.GetStringAttr(fieldStruct, "type")
fieldType, err := GetStringAttr(fieldStruct, "type")
if err != nil {
return nil, err
}

field := StoreField{
field := utils.StoreField{
Name: string(fieldName),
Type: TypeName(fieldType),
Type: utils.TypeName(fieldType),
}

defaultValue, err := fieldStruct.Attr("default")
Expand All @@ -160,14 +159,14 @@ func getFields(typeName string, typeStruct *starlarkstruct.Struct, key string) (
return ret, nil
}

func getIndexes(typeName string, typeStruct *starlarkstruct.Struct, key string) ([]Index, error) {
func getIndexes(typeName string, typeStruct *starlarkstruct.Struct, key string) ([]utils.Index, error) {
indexesAttr, err := typeStruct.Attr(key)
if err != nil {
return []Index{}, nil // no indexes
return []utils.Index{}, nil // no indexes
}

if indexesAttr == nil || indexesAttr == starlark.None {
return []Index{}, nil
return []utils.Index{}, nil
}

indexes, ok := indexesAttr.(*starlark.List)
Expand All @@ -179,24 +178,24 @@ func getIndexes(typeName string, typeStruct *starlarkstruct.Struct, key string)
iter := indexesList.Iterate()
var val starlark.Value

ret := make([]Index, 0, indexes.Len())
ret := make([]utils.Index, 0, indexes.Len())
for iter.Next(&val) {
indexStruct, ok := val.(*starlarkstruct.Struct)
if !ok {
return nil, fmt.Errorf("invalid index definition: %s", val.String())
}

fields, err := util.GetListStringAttr(indexStruct, "fields", false)
fields, err := GetListStringAttr(indexStruct, "fields", false)
if err != nil {
return nil, err
}

unique, err := util.GetBoolAttr(indexStruct, "unique")
unique, err := GetBoolAttr(indexStruct, "unique")
if err != nil {
return nil, err
}

ret = append(ret, Index{
ret = append(ret, utils.Index{
Fields: fields,
Unique: unique,
})
Expand Down
33 changes: 33 additions & 0 deletions internal/app/util/store_info.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
// Copyright (c) ClaceIO, LLC
// SPDX-License-Identifier: Apache-2.0

package util

import "github.com/claceio/clace/internal/utils"

func ReadStoreInfo(fileName string, inp []byte) (*utils.StoreInfo, error) {
storeInfo, err := LoadStoreInfo(fileName, inp)
if err != nil {
return nil, err
}

if err := validateStoreInfo(storeInfo); err != nil {
return nil, err
}

return storeInfo, nil
}

func validateStoreInfo(storeInfo *utils.StoreInfo) error {
if err := validateTypes(storeInfo.Types); err != nil {
return err
}

// TODO: validate collections
return nil
}

func validateTypes(types []utils.StoreType) error {
// TODO: validate types
return nil
}
Loading

0 comments on commit 2e9f1ea

Please sign in to comment.