claude go reimplement
This commit is contained in:
1 parent
4bcb924158
commit
f523c79618
83 files changed
+3714
-3454
No files matched your search
@@ -0,0 +1,93 @@
|
||||
// kjv-api: the King James Bible web API as one program plus one SQLite
|
||||
// database (kjv.db) that holds the text, every page and asset, user data and
|
||||
// the logs.
|
||||
package main
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"kjv-api/internal/kjv"
|
||||
)
|
||||
|
||||
const usage = `usage:
|
||||
kjv-api [-db kjv.db] [-addr 127.0.0.1:1611] run the server
|
||||
kjv-api import-assets [-db kjv.db] DIR load the pages, scripts, styles and data files from the assets folder into the database
|
||||
kjv-api logs [-db kjv.db] [-n 100] print the newest log lines stored in the database
|
||||
`
|
||||
|
||||
func findDB(flagValue string) string {
|
||||
if flagValue != "" {
|
||||
return flagValue
|
||||
}
|
||||
if v := os.Getenv("KJV_DB"); v != "" {
|
||||
return v
|
||||
}
|
||||
candidates := []string{"kjv.db"}
|
||||
if exe, err := os.Executable(); err == nil {
|
||||
candidates = append(candidates, filepath.Join(filepath.Dir(exe), "kjv.db"))
|
||||
}
|
||||
for _, c := range candidates {
|
||||
if _, err := os.Stat(c); err == nil {
|
||||
return c
|
||||
}
|
||||
}
|
||||
return "kjv.db"
|
||||
}
|
||||
|
||||
func main() {
|
||||
args := os.Args[1:]
|
||||
if len(args) > 0 {
|
||||
switch args[0] {
|
||||
case "import-assets":
|
||||
fs := flag.NewFlagSet("import-assets", flag.ExitOnError)
|
||||
db := fs.String("db", "", "path to kjv.db")
|
||||
fs.Parse(args[1:])
|
||||
if fs.NArg() != 1 {
|
||||
fmt.Fprint(os.Stderr, usage)
|
||||
os.Exit(2)
|
||||
}
|
||||
dbPath := findDB(*db)
|
||||
if _, err := os.Stat(dbPath); err != nil {
|
||||
fatal(err)
|
||||
}
|
||||
if err := kjv.ImportAssets(dbPath, fs.Arg(0)); err != nil {
|
||||
fatal(err)
|
||||
}
|
||||
return
|
||||
case "logs":
|
||||
fs := flag.NewFlagSet("logs", flag.ExitOnError)
|
||||
db := fs.String("db", "", "path to kjv.db")
|
||||
n := fs.Int("n", 100, "number of lines")
|
||||
fs.Parse(args[1:])
|
||||
if err := kjv.ShowLogs(findDB(*db), *n); err != nil {
|
||||
fatal(err)
|
||||
}
|
||||
return
|
||||
case "help", "-h", "--help":
|
||||
fmt.Print(usage)
|
||||
return
|
||||
}
|
||||
}
|
||||
fs := flag.NewFlagSet("kjv-api", flag.ExitOnError)
|
||||
dbFlag := fs.String("db", "", "path to kjv.db (default: $KJV_DB, ./kjv.db, next to the program)")
|
||||
addr := fs.String("addr", envOr("KJV_ADDR", "127.0.0.1:1611"), "listen address (localhost only)")
|
||||
fs.Parse(args)
|
||||
if err := kjv.Run(findDB(*dbFlag), *addr); err != nil {
|
||||
fatal(err)
|
||||
}
|
||||
}
|
||||
|
||||
func fatal(err error) {
|
||||
fmt.Fprintln(os.Stderr, "kjv-api:", err)
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
func envOr(key, def string) string {
|
||||
if v := os.Getenv(key); v != "" {
|
||||
return v
|
||||
}
|
||||
return def
|
||||
}
|
||||
Reference in new issue
Block a user