action execute respects item action support
This commit is contained in:
parent
7ca6ccfaf3
commit
680d8db6bb
5
Makefile
5
Makefile
@ -1,7 +1,10 @@
|
|||||||
.PHONY: help serve
|
.PHONY: help serve test-data
|
||||||
|
|
||||||
help: ## display this help
|
help: ## display this help
|
||||||
@awk 'BEGIN{FS = ":.*##"; printf "\033[1m\nUsage\n \033[1;92m make\033[0;36m <target>\033[0m\n"} /^[a-zA-Z0-9_-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } ' $(MAKEFILE_LIST)
|
@awk 'BEGIN{FS = ":.*##"; printf "\033[1m\nUsage\n \033[1;92m make\033[0;36m <target>\033[0m\n"} /^[a-zA-Z0-9_-]+:.*?##/ { printf " \033[36m%-15s\033[0m %s\n", $$1, $$2 } ' $(MAKEFILE_LIST)
|
||||||
|
|
||||||
serve: ## Run "intake serve" with live reload
|
serve: ## Run "intake serve" with live reload
|
||||||
@air -build.cmd "go build -o tmp/intake" -build.bin tmp/intake -build.args_bin serve,--data-dir,tmp
|
@air -build.cmd "go build -o tmp/intake" -build.bin tmp/intake -build.args_bin serve,--data-dir,tmp
|
||||||
|
|
||||||
|
test-data: ## Recreate test data in tmp/
|
||||||
|
@test/test_items.sh
|
@ -16,6 +16,9 @@ var actionExecuteCmd = &cobra.Command{
|
|||||||
Short: "Run a source action for an item",
|
Short: "Run a source action for an item",
|
||||||
Long: fmt.Sprintf(`Execute a source action for an item.
|
Long: fmt.Sprintf(`Execute a source action for an item.
|
||||||
|
|
||||||
|
The item must declare support for the action by having the action's name
|
||||||
|
in its "action" field. Use --force to execute the action anyway.
|
||||||
|
|
||||||
The "fetch" action is special and does not execute for any specific item.
|
The "fetch" action is special and does not execute for any specific item.
|
||||||
Use "intake source fetch" to run the fetch action.
|
Use "intake source fetch" to run the fetch action.
|
||||||
|
|
||||||
@ -33,6 +36,7 @@ var actionExecuteItem string
|
|||||||
var actionExecuteFormat string
|
var actionExecuteFormat string
|
||||||
var actionExecuteDryRun bool
|
var actionExecuteDryRun bool
|
||||||
var actionExecuteDiff bool
|
var actionExecuteDiff bool
|
||||||
|
var actionExecuteForce bool
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
actionCmd.AddCommand(actionExecuteCmd)
|
actionCmd.AddCommand(actionExecuteCmd)
|
||||||
@ -46,10 +50,12 @@ func init() {
|
|||||||
actionExecuteCmd.PersistentFlags().StringVarP(&actionExecuteAction, "action", "a", "", "Action to run")
|
actionExecuteCmd.PersistentFlags().StringVarP(&actionExecuteAction, "action", "a", "", "Action to run")
|
||||||
actionExecuteCmd.MarkFlagRequired("action")
|
actionExecuteCmd.MarkFlagRequired("action")
|
||||||
|
|
||||||
actionExecuteCmd.Flags().StringVarP(&actionExecuteFormat, "format", "f", "headlines", "Feed format for returned items.")
|
actionExecuteCmd.Flags().StringVarP(&actionExecuteFormat, "format", "f", "headlines", "Feed format for returned items")
|
||||||
actionExecuteCmd.Flags().BoolVar(&actionExecuteDryRun, "dry-run", false, "Instead of updating the item, print it")
|
actionExecuteCmd.Flags().BoolVar(&actionExecuteDryRun, "dry-run", false, "Instead of updating the item, print it")
|
||||||
|
|
||||||
actionExecuteCmd.Flags().BoolVar(&actionExecuteDiff, "diff", false, "Show which fields of the item changed")
|
actionExecuteCmd.Flags().BoolVar(&actionExecuteDiff, "diff", false, "Show which fields of the item changed")
|
||||||
|
|
||||||
|
actionExecuteCmd.Flags().BoolVar(&actionExecuteForce, "force", false, "Execute the action even if the item does not support it")
|
||||||
}
|
}
|
||||||
|
|
||||||
func actionExecute() {
|
func actionExecute() {
|
||||||
@ -67,16 +73,24 @@ func actionExecute() {
|
|||||||
|
|
||||||
db := openAndMigrateDb()
|
db := openAndMigrateDb()
|
||||||
|
|
||||||
argv, err := core.GetArgvForAction(db, actionExecuteSource, actionExecuteAction)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("error: failed to get action: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
item, err := core.GetItem(db, actionExecuteSource, actionExecuteItem)
|
item, err := core.GetItem(db, actionExecuteSource, actionExecuteItem)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("error: failed to get item: %v", err)
|
log.Fatalf("error: failed to get item: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if item.Action[actionExecuteAction] == nil {
|
||||||
|
if actionExecuteForce {
|
||||||
|
log.Printf("warning: force-executing %s on %s/%s", actionExecuteAction, actionExecuteSource, actionExecuteItem)
|
||||||
|
} else {
|
||||||
|
log.Fatalf("error: %s/%s does not support %s", actionExecuteSource, actionExecuteItem, actionExecuteAction)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
argv, err := core.GetArgvForAction(db, actionExecuteSource, actionExecuteAction)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("error: failed to get action: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
itemJson, err := json.Marshal(item)
|
itemJson, err := json.Marshal(item)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("error: failed to serialize item: %v", err)
|
log.Fatalf("error: failed to serialize item: %v", err)
|
||||||
|
@ -49,7 +49,7 @@ func feed() {
|
|||||||
items, err = core.GetActiveItemsForSource(db, feedSource)
|
items, err = core.GetActiveItemsForSource(db, feedSource)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("error: failed to fetch items from %s", feedSource)
|
log.Fatalf("error: failed to fetch items from %s:, %v", feedSource, err)
|
||||||
}
|
}
|
||||||
} else if feedChannel != "" {
|
} else if feedChannel != "" {
|
||||||
log.Fatal("error: unimplemented")
|
log.Fatal("error: unimplemented")
|
||||||
@ -60,7 +60,7 @@ func feed() {
|
|||||||
items, err = core.GetAllActiveItems(db)
|
items, err = core.GetAllActiveItems(db)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal("error: failed to fetch items")
|
log.Fatalf("error: failed to fetch items: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@ package cmd
|
|||||||
import (
|
import (
|
||||||
"crypto/rand"
|
"crypto/rand"
|
||||||
"encoding/hex"
|
"encoding/hex"
|
||||||
"fmt"
|
"encoding/json"
|
||||||
"log"
|
"log"
|
||||||
|
|
||||||
"github.com/Jaculabilis/intake/core"
|
"github.com/Jaculabilis/intake/core"
|
||||||
@ -30,6 +30,7 @@ var addItemAuthor string
|
|||||||
var addItemBody string
|
var addItemBody string
|
||||||
var addItemLink string
|
var addItemLink string
|
||||||
var addItemTime int
|
var addItemTime int
|
||||||
|
var addItemActions string
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
itemCmd.AddCommand(itemAddCmd)
|
itemCmd.AddCommand(itemAddCmd)
|
||||||
@ -41,6 +42,7 @@ func init() {
|
|||||||
itemAddCmd.Flags().StringVarP(&addItemBody, "body", "b", "", "Item body")
|
itemAddCmd.Flags().StringVarP(&addItemBody, "body", "b", "", "Item body")
|
||||||
itemAddCmd.Flags().StringVarP(&addItemLink, "link", "l", "", "Item link")
|
itemAddCmd.Flags().StringVarP(&addItemLink, "link", "l", "", "Item link")
|
||||||
itemAddCmd.Flags().IntVarP(&addItemTime, "time", "m", 0, "Item time as a Unix timestamp")
|
itemAddCmd.Flags().IntVarP(&addItemTime, "time", "m", 0, "Item time as a Unix timestamp")
|
||||||
|
itemAddCmd.Flags().StringVarP(&addItemActions, "action", "x", "", "Item time as a Unix timestamp")
|
||||||
}
|
}
|
||||||
|
|
||||||
func itemAdd() {
|
func itemAdd() {
|
||||||
@ -52,11 +54,18 @@ func itemAdd() {
|
|||||||
if addItemId == "" {
|
if addItemId == "" {
|
||||||
bytes := make([]byte, 16)
|
bytes := make([]byte, 16)
|
||||||
if _, err := rand.Read(bytes); err != nil {
|
if _, err := rand.Read(bytes); err != nil {
|
||||||
log.Fatal("Failed to generate id")
|
log.Fatalf("error: failed to generate id: %v", err)
|
||||||
}
|
}
|
||||||
addItemId = hex.EncodeToString(bytes)
|
addItemId = hex.EncodeToString(bytes)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var actions core.Actions
|
||||||
|
if addItemActions != "" {
|
||||||
|
if err := json.Unmarshal([]byte(addItemActions), &actions); err != nil {
|
||||||
|
log.Fatalf("error: could not parse actions: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
db := openAndMigrateDb()
|
db := openAndMigrateDb()
|
||||||
|
|
||||||
if err := core.AddItems(db, []core.Item{{
|
if err := core.AddItems(db, []core.Item{{
|
||||||
@ -67,9 +76,10 @@ func itemAdd() {
|
|||||||
Body: addItemBody,
|
Body: addItemBody,
|
||||||
Link: addItemLink,
|
Link: addItemLink,
|
||||||
Time: addItemTime,
|
Time: addItemTime,
|
||||||
|
Action: actions,
|
||||||
}}); err != nil {
|
}}); err != nil {
|
||||||
log.Fatalf("Failed to add item: %s", err)
|
log.Fatalf("error: failed to add item: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Printf("Added %s/%s\n", addItemSource, addItemId)
|
log.Printf("Added %s/%s\n", addItemSource, addItemId)
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ go build -o tmp/intake
|
|||||||
rm tmp/intake.db* || true
|
rm tmp/intake.db* || true
|
||||||
export INTAKE_DATA_DIR="tmp"
|
export INTAKE_DATA_DIR="tmp"
|
||||||
tmp/intake migrate
|
tmp/intake migrate
|
||||||
|
|
||||||
tmp/intake source add -s feedtest
|
tmp/intake source add -s feedtest
|
||||||
tmp/intake item add -s feedtest --id "this-item-has-no-title"
|
tmp/intake item add -s feedtest --id "this-item-has-no-title"
|
||||||
tmp/intake item add -s feedtest --title "This item has only a title"
|
tmp/intake item add -s feedtest --title "This item has only a title"
|
||||||
@ -18,3 +19,7 @@ tmp/intake item add -s feedtest --title "Title, time" --time 1737780324
|
|||||||
tmp/intake item add -s feedtest --title "Title, author, body" --author "Authorname" --body "Hello body!"
|
tmp/intake item add -s feedtest --title "Title, author, body" --author "Authorname" --body "Hello body!"
|
||||||
tmp/intake item add -s feedtest --title "Title, author, time, body" --author "Authorname" --time 1700000000 --body "Hello body!"
|
tmp/intake item add -s feedtest --title "Title, author, time, body" --author "Authorname" --time 1700000000 --body "Hello body!"
|
||||||
tmp/intake item add -s feedtest --title "Title, time, body" --time 1737780324 --body "Hello, body!"
|
tmp/intake item add -s feedtest --title "Title, time, body" --time 1737780324 --body "Hello, body!"
|
||||||
|
|
||||||
|
tmp/intake source add -s spook
|
||||||
|
tmp/intake action add -s spook -a spookier -- jq -c '.title = .title + "o"'
|
||||||
|
tmp/intake item add -s spook --id boo --title "Boo" --action '{"spookier": true}'
|
||||||
|
Loading…
Reference in New Issue
Block a user