diff --git a/cmd/actionExecute.go b/cmd/actionExecute.go index f974d68..880aeb2 100644 --- a/cmd/actionExecute.go +++ b/cmd/actionExecute.go @@ -81,14 +81,9 @@ func actionExecute( db := openAndMigrateDb() - state, err := core.GetState(db, source) + state, envs, argv, postProcess, err := core.GetSourceActionInputs(db, source, action) if err != nil { - log.Fatalf("error: failed to load state for %s: %v", source, err) - } - - envs, err := core.GetEnvs(db, source) - if err != nil { - log.Fatalf("error: failed to get envs for %s: %v", source, err) + log.Fatalf("error: failed to load data for %s: %v", source, err) } item, err := core.GetItem(db, source, itemId) @@ -104,16 +99,6 @@ func actionExecute( } } - argv, err := core.GetArgvForAction(db, source, action) - if err != nil { - log.Fatalf("error: failed to get action: %v", err) - } - - postProcess, err := core.GetSourcePostProcessor(db, source) - if err != nil { - log.Fatalf("error: failed to get source post-processor: %v", err) - } - newItem, newState, err := core.ExecuteItemAction(item, argv, envs, state, time.Minute, postProcess) if err != nil { log.Fatalf("error executing %s: %v", action, err) diff --git a/cmd/sourceFetch.go b/cmd/sourceFetch.go index 74953a5..be55ebc 100644 --- a/cmd/sourceFetch.go +++ b/cmd/sourceFetch.go @@ -43,24 +43,9 @@ func sourceFetch(source string, format string, dryRun bool) { db := openAndMigrateDb() - state, err := core.GetState(db, source) + state, envs, argv, postProcess, err := core.GetSourceActionInputs(db, source, "fetch") if err != nil { - log.Fatalf("error: failed to load state for %s: %v", source, err) - } - - envs, err := core.GetEnvs(db, source) - if err != nil { - log.Fatalf("error: failed to get envs for %s: %v", source, err) - } - - argv, err := core.GetArgvForAction(db, source, "fetch") - if err != nil { - log.Fatalf("error: failed to get fetch action: %v", err) - } - - postProcess, err := core.GetSourcePostProcessor(db, source) - if err != nil { - log.Fatalf("error: failed to get source post-processor: %v", err) + log.Fatalf("error: failed to load data for %s: %v", source, err) } items, newState, err := core.Execute(source, argv, envs, state, "", time.Minute, postProcess) diff --git a/core/source.go b/core/source.go index d29e068..d4ce625 100644 --- a/core/source.go +++ b/core/source.go @@ -114,6 +114,39 @@ func GetSourcePostProcessor(db DB, source string) (func(item Item) Item, error) }, nil } +func GetSourceActionInputs( + db DB, + source string, + action string, +) ( + state []byte, + envs []string, + argv []string, + postProcess func(Item) Item, + err error, +) { + state, err = GetState(db, source) + if err != nil { + return nil, nil, nil, nil, fmt.Errorf("failed to load state for %s: %v", source, err) + } + + envs, err = GetEnvs(db, source) + if err != nil { + return nil, nil, nil, nil, fmt.Errorf("failed to get envs for %s: %v", source, err) + } + + argv, err = GetArgvForAction(db, source, action) + if err != nil { + return nil, nil, nil, nil, fmt.Errorf("failed to get %s action for %s: %v", action, source, err) + } + + postProcess, err = GetSourcePostProcessor(db, source) + if err != nil { + return nil, nil, nil, nil, fmt.Errorf("failed to get %s post-processor: %v", source, err) + } + return +} + // Given the results of a fetch, add new items, update existing items, and delete expired items. // // Returns the number of new and deleted items on success. diff --git a/web/item.go b/web/item.go index ccd7b2e..339e0b2 100644 --- a/web/item.go +++ b/web/item.go @@ -69,14 +69,9 @@ func (env *Env) doAction(writer http.ResponseWriter, req *http.Request) { id := req.PathValue("id") action := req.PathValue("action") - state, err := core.GetState(env.db, source) + state, envs, argv, postProcess, err := core.GetSourceActionInputs(env.db, source, action) if err != nil { - log.Fatalf("error: failed to load state for %s: %v", source, err) - } - - envs, err := core.GetEnvs(env.db, source) - if err != nil { - log.Fatalf("error: failed to get envs for %s: %v", source, err) + http.Error(writer, fmt.Sprintf("error: failed to load data for %s: %v", source, err), 500) } item, err := core.GetItem(env.db, source, id) @@ -90,17 +85,6 @@ func (env *Env) doAction(writer http.ResponseWriter, req *http.Request) { return } - argv, err := core.GetArgvForAction(env.db, source, action) - if err != nil { - http.Error(writer, err.Error(), 500) - return - } - - postProcess, err := core.GetSourcePostProcessor(env.db, source) - if err != nil { - log.Fatalf("error: failed to get source post-processor: %v", err) - } - newItem, newState, err := core.ExecuteItemAction(item, argv, envs, state, time.Minute, postProcess) if err != nil { http.Error(writer, err.Error(), 500) diff --git a/web/source.go b/web/source.go index baf9d51..0fe7788 100644 --- a/web/source.go +++ b/web/source.go @@ -49,27 +49,9 @@ func (env *Env) fetchSource(writer http.ResponseWriter, req *http.Request) { return } - state, err := core.GetState(env.db, source) + state, envs, argv, postProcess, err := core.GetSourceActionInputs(env.db, source, "fetch") if err != nil { - http.Error(writer, fmt.Sprintf("error: failed to get state: %v", err.Error()), 500) - return - } - - envs, err := core.GetEnvs(env.db, source) - if err != nil { - http.Error(writer, fmt.Sprintf("error: failed to get envs: %v", err.Error()), 500) - return - } - - argv, err := core.GetArgvForAction(env.db, source, "fetch") - if err != nil { - http.Error(writer, fmt.Sprintf("error: failed to get fetch argv: %v", err.Error()), 500) - return - } - - postProcess, err := core.GetSourcePostProcessor(env.db, source) - if err != nil { - http.Error(writer, fmt.Sprintf("error: failed to get post-processor: %v", err.Error()), 500) + http.Error(writer, fmt.Sprintf("error: failed to get data for %s: %v", source, err.Error()), 500) return }