Skip to content

Commit

Permalink
🚜 Move Handle* commands to their respective handlers
Browse files Browse the repository at this point in the history
  • Loading branch information
wesen committed Jul 2, 2023
1 parent e789ac8 commit 2619140
Show file tree
Hide file tree
Showing 5 changed files with 99 additions and 97 deletions.
6 changes: 4 additions & 2 deletions cmd/parka/cmds/serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import (
"github.com/go-go-golems/glazed/pkg/cli"
"github.com/go-go-golems/glazed/pkg/helpers"
"github.com/go-go-golems/glazed/pkg/types"
"github.com/go-go-golems/parka/pkg/glazed/handlers/datatables"
json2 "github.com/go-go-golems/parka/pkg/glazed/handlers/json"
"github.com/go-go-golems/parka/pkg/render"
"github.com/go-go-golems/parka/pkg/server"
"github.com/go-go-golems/parka/pkg/utils/fs"
Expand Down Expand Up @@ -69,8 +71,8 @@ var ServeCmd = &cobra.Command{

// NOTE(manuel, 2023-05-26) This could also be done with a simple Command config file struct once
// implemented as part of sqleton serve
s.Router.GET("/api/example", server.HandleJSONQueryHandler(NewExampleCommand()))
s.Router.GET("/sqleton/example", server.HandleDataTables(NewExampleCommand(), "", "example"))
s.Router.GET("/api/example", json2.HandleJSONQueryHandler(NewExampleCommand()))
s.Router.GET("/sqleton/example", datatables.HandleDataTables(NewExampleCommand(), "", "example"))

ctx, cancel := context.WithCancel(context.Background())
defer cancel()
Expand Down
72 changes: 72 additions & 0 deletions pkg/glazed/handlers/datatables/datatables.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package datatables

import (
"embed"
"fmt"
"github.com/gin-gonic/gin"
"github.com/go-go-golems/glazed/pkg/cmds"
"github.com/go-go-golems/glazed/pkg/formatters"
Expand All @@ -14,9 +15,12 @@ import (
"github.com/go-go-golems/parka/pkg/glazed/parser"
"github.com/go-go-golems/parka/pkg/render"
"github.com/go-go-golems/parka/pkg/render/layout"
"github.com/rs/zerolog/log"
"golang.org/x/sync/errgroup"
"html/template"
"io"
"net/http"
"time"
)

// DataTables describes the data passed to the template displaying the results of a glazed command.
Expand Down Expand Up @@ -312,3 +316,71 @@ func (qh *QueryHandler) renderTemplate(

return nil
}

func HandleDataTables(
cmd cmds.GlazeCommand,
path string,
commandPath string,
options ...QueryHandlerOption,
) gin.HandlerFunc {
// TODO(manuel, 2023-07-02) Move this to the datatables package
return func(c *gin.Context) {
name := cmd.Description().Name
dateTime := time.Now().Format("2006-01-02--15-04-05")
links := []layout.Link{
{
Href: fmt.Sprintf("%s/download/%s/%s-%s.csv", path, commandPath, dateTime, name),
Text: "Download CSV",
Class: "download",
},
{
Href: fmt.Sprintf("%s/download/%s/%s-%s.json", path, commandPath, dateTime, name),
Text: "Download JSON",
Class: "download",
},
{
Href: fmt.Sprintf("%s/download/%s/%s-%s.xlsx", path, commandPath, dateTime, name),
Text: "Download Excel",
Class: "download",
},
{
Href: fmt.Sprintf("%s/download/%s/%s-%s.md", path, commandPath, dateTime, name),
Text: "Download Markdown",
Class: "download",
},
{
Href: fmt.Sprintf("%s/download/%s/%s-%s.html", path, commandPath, dateTime, name),
Text: "Download HTML",
Class: "download",
},
{
Href: fmt.Sprintf("%s/download/%s/%s-%s.txt", path, commandPath, dateTime, name),
Text: "Download Text",
Class: "download",
},
}

dt := &DataTables{
Command: cmd.Description(),
Links: links,
BasePath: path,
JSRendering: true,
UseDataTables: false,
}

options_ := []QueryHandlerOption{
WithDataTables(dt),
}
options_ = append(options_, options...)

handler := NewQueryHandler(cmd, options_...)

err := handler.Handle(c, c.Writer)
if err != nil {
log.Error().Err(err).Msg("error handling query")
c.JSON(http.StatusInternalServerError, gin.H{
"error": err.Error(),
})
}
}
}
20 changes: 20 additions & 0 deletions pkg/glazed/handlers/json/json.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@ import (
"github.com/go-go-golems/parka/pkg/glazed"
"github.com/go-go-golems/parka/pkg/glazed/handlers"
"github.com/go-go-golems/parka/pkg/glazed/parser"
"github.com/rs/zerolog/log"
"io"
"net/http"
)

type QueryHandler struct {
Expand Down Expand Up @@ -94,3 +96,21 @@ func (h *QueryHandler) Handle(c *gin.Context, writer io.Writer) error {

return nil
}

func HandleJSONQueryHandler(
cmd cmds.GlazeCommand,
parserOptions ...parser.ParserOption,
) gin.HandlerFunc {
handler := NewQueryHandler(cmd,
WithQueryHandlerParserOptions(parserOptions...),
)
return func(c *gin.Context) {
err := handler.Handle(c, c.Writer)
if err != nil {
log.Error().Err(err).Msg("failed to handle query")
c.JSON(http.StatusInternalServerError, gin.H{
"error": err.Error(),
})
}
}
}
5 changes: 3 additions & 2 deletions pkg/handlers/command-dir/command-dir.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import (
"github.com/go-go-golems/glazed/pkg/cmds"
"github.com/go-go-golems/glazed/pkg/cmds/layers"
"github.com/go-go-golems/parka/pkg/glazed/handlers/datatables"
"github.com/go-go-golems/parka/pkg/glazed/handlers/json"
"github.com/go-go-golems/parka/pkg/glazed/parser"
"github.com/go-go-golems/parka/pkg/handlers/config"
"github.com/go-go-golems/parka/pkg/render"
Expand Down Expand Up @@ -418,7 +419,7 @@ func (cd *CommandDirHandler) Serve(server *parka.Server, path string) error {
return
}

parka.HandleJSONQueryHandler(sqlCommand)
json.HandleJSONQueryHandler(sqlCommand)
})

server.Router.GET(path+"/sqleton/*path",
Expand All @@ -440,7 +441,7 @@ func (cd *CommandDirHandler) Serve(server *parka.Server, path string) error {
datatables.WithAdditionalData(cd.AdditionalData),
}

parka.HandleDataTables(sqlCommand, path, commandPath, options...)
datatables.HandleDataTables(sqlCommand, path, commandPath, options...)
})

server.Router.GET(path+"/download/*path", func(c *gin.Context) {
Expand Down
93 changes: 0 additions & 93 deletions pkg/server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,11 @@ import (
"fmt"
"github.com/gin-gonic/contrib/gzip"
"github.com/gin-gonic/gin"
"github.com/go-go-golems/glazed/pkg/cmds"
"github.com/go-go-golems/parka/pkg/glazed/handlers/datatables"
"github.com/go-go-golems/parka/pkg/glazed/handlers/json"
"github.com/go-go-golems/parka/pkg/glazed/parser"
"github.com/go-go-golems/parka/pkg/render"
"github.com/go-go-golems/parka/pkg/render/layout"
utils_fs "github.com/go-go-golems/parka/pkg/utils/fs"
"github.com/rs/zerolog/log"
"golang.org/x/sync/errgroup"
"io/fs"
"net/http"
"time"
)

//go:embed "web/src/templates/*"
Expand Down Expand Up @@ -222,89 +215,3 @@ func (s *Server) Run(ctx context.Context) error {

return eg.Wait()
}

func HandleJSONQueryHandler(
cmd cmds.GlazeCommand,
parserOptions ...parser.ParserOption,
) gin.HandlerFunc {
handler := json.NewQueryHandler(cmd,
json.WithQueryHandlerParserOptions(parserOptions...),
)
return func(c *gin.Context) {
err := handler.Handle(c, c.Writer)
if err != nil {
log.Error().Err(err).Msg("failed to handle query")
c.JSON(http.StatusInternalServerError, gin.H{
"error": err.Error(),
})
}
}
}

func HandleDataTables(
cmd cmds.GlazeCommand,
path string,
commandPath string,
options ...datatables.QueryHandlerOption,
) gin.HandlerFunc {
// TODO(manuel, 2023-07-02) Move this to the datatables package
return func(c *gin.Context) {
name := cmd.Description().Name
dateTime := time.Now().Format("2006-01-02--15-04-05")
links := []layout.Link{
{
Href: fmt.Sprintf("%s/download/%s/%s-%s.csv", path, commandPath, dateTime, name),
Text: "Download CSV",
Class: "download",
},
{
Href: fmt.Sprintf("%s/download/%s/%s-%s.json", path, commandPath, dateTime, name),
Text: "Download JSON",
Class: "download",
},
{
Href: fmt.Sprintf("%s/download/%s/%s-%s.xlsx", path, commandPath, dateTime, name),
Text: "Download Excel",
Class: "download",
},
{
Href: fmt.Sprintf("%s/download/%s/%s-%s.md", path, commandPath, dateTime, name),
Text: "Download Markdown",
Class: "download",
},
{
Href: fmt.Sprintf("%s/download/%s/%s-%s.html", path, commandPath, dateTime, name),
Text: "Download HTML",
Class: "download",
},
{
Href: fmt.Sprintf("%s/download/%s/%s-%s.txt", path, commandPath, dateTime, name),
Text: "Download Text",
Class: "download",
},
}

dt := &datatables.DataTables{
Command: cmd.Description(),
Links: links,
BasePath: path,
JSRendering: true,
UseDataTables: false,
}

options_ := []datatables.QueryHandlerOption{
datatables.WithDataTables(dt),
}
options_ = append(options_, options...)

handler := datatables.NewQueryHandler(cmd, options_...)

err := handler.Handle(c, c.Writer)
if err != nil {
log.Error().Err(err).Msg("error handling query")
c.JSON(http.StatusInternalServerError, gin.H{
"error": err.Error(),
})
}
}
}

0 comments on commit 2619140

Please sign in to comment.