summaryrefslogtreecommitdiff
path: root/flyscrape.go
diff options
context:
space:
mode:
authorPhilipp Tanlak <philipp.tanlak@gmail.com>2023-11-18 22:49:26 +0100
committerGitHub <noreply@github.com>2023-11-18 22:49:26 +0100
commit6aa52bdbe2cefdbc9219abfb4399afa0d492913d (patch)
tree02c743b7d9393dbf024e14adada73c6594bdd34a /flyscrape.go
parent94da9293f63e46712b0a890e1e0eab4153fdb3f9 (diff)
Support passing config options as CLI arguments (#15)
Diffstat (limited to 'flyscrape.go')
-rw-r--r--flyscrape.go38
1 files changed, 24 insertions, 14 deletions
diff --git a/flyscrape.go b/flyscrape.go
index a96d37a..797d4c7 100644
--- a/flyscrape.go
+++ b/flyscrape.go
@@ -5,7 +5,6 @@
package flyscrape
import (
- "encoding/json"
"fmt"
"log"
"net/http"
@@ -15,9 +14,10 @@ import (
"syscall"
"github.com/inancgumus/screen"
+ "github.com/tidwall/sjson"
)
-func Run(file string) error {
+func Run(file string, overrides map[string]any) error {
src, err := os.ReadFile(file)
if err != nil {
return fmt.Errorf("failed to read script %q: %w", file, err)
@@ -33,18 +33,21 @@ func Run(file string) error {
return fmt.Errorf("failed to compile script: %w", err)
}
+ cfg := exports.Config()
+ cfg = updateCfgMultiple(cfg, overrides)
+
scraper := NewScraper()
scraper.ScrapeFunc = exports.Scrape
scraper.SetupFunc = exports.Setup
scraper.Script = file
scraper.Client = client
- scraper.Modules = LoadModules(exports.Config())
+ scraper.Modules = LoadModules(cfg)
scraper.Run()
return nil
}
-func Dev(file string) error {
+func Dev(file string, overrides map[string]any) error {
cachefile, err := newCacheFile()
if err != nil {
return fmt.Errorf("failed to create cache file: %w", err)
@@ -67,6 +70,7 @@ func Dev(file string) error {
}
cfg := exports.Config()
+ cfg = updateCfgMultiple(cfg, overrides)
cfg = updateCfg(cfg, "depth", 0)
cfg = updateCfg(cfg, "cache", "file:"+cachefile)
@@ -104,19 +108,11 @@ func printCompileErr(script string, err error) {
}
func updateCfg(cfg Config, key string, value any) Config {
- var m map[string]any
- if err := json.Unmarshal(cfg, &m); err != nil {
- return cfg
- }
-
- m[key] = value
-
- b, err := json.Marshal(m)
+ newcfg, err := sjson.Set(string(cfg), key, value)
if err != nil {
return cfg
}
-
- return b
+ return Config(newcfg)
}
func newCacheFile() (string, error) {
@@ -137,3 +133,17 @@ func trapsignal(f func()) {
os.Exit(0)
}()
}
+
+func updateCfgMultiple(cfg Config, updates map[string]any) Config {
+ c := string(cfg)
+
+ for k, v := range updates {
+ nc, err := sjson.Set(c, k, v)
+ if err != nil {
+ continue
+ }
+ c = nc
+ }
+
+ return []byte(c)
+}