Skip to content

Commit

Permalink
Merge pull request #71 from wesen/task/67/add-streaming-support
Browse files Browse the repository at this point in the history
✨ Add streaming support
  • Loading branch information
wesen authored Jul 3, 2023
2 parents d859ea1 + f49fbbf commit 067595b
Show file tree
Hide file tree
Showing 20 changed files with 1,250 additions and 1,036 deletions.
194 changes: 104 additions & 90 deletions cmd/parka/cmds/examples.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,110 +6,119 @@ import (
"github.com/go-go-golems/glazed/pkg/cmds"
"github.com/go-go-golems/glazed/pkg/cmds/layers"
"github.com/go-go-golems/glazed/pkg/cmds/parameters"
"github.com/go-go-golems/glazed/pkg/processor"
"github.com/go-go-golems/glazed/pkg/middlewares"
"github.com/go-go-golems/glazed/pkg/settings"
"github.com/go-go-golems/glazed/pkg/types"
"github.com/spf13/cobra"
)

type ExampleCommand struct {
description *cmds.CommandDescription
}

func NewExampleCommand() *ExampleCommand {
return &ExampleCommand{
description: &cmds.CommandDescription{
Name: "example",
Short: "Short parka example command",
Long: "",
Flags: []*parameters.ParameterDefinition{
// required string test argument
{
Name: "test",
ShortFlag: "t",
Type: parameters.ParameterTypeString,
Help: "Test string argument",
Required: true,
},
{
Name: "string",
ShortFlag: "s",
Type: parameters.ParameterTypeString,
Help: "Test string flag",
Default: "default",
Required: false,
},
{
Name: "string_from_file",
Type: parameters.ParameterTypeStringFromFile,
Help: "Test string from file flag",
},
{
Name: "object_from_file",
Type: parameters.ParameterTypeObjectFromFile,
Help: "Test object from file flag",
},
{
Name: "integer",
ShortFlag: "i",
Type: parameters.ParameterTypeInteger,
Help: "Test integer flag",
Default: 1,
},
{
Name: "float",
ShortFlag: "f",
Type: parameters.ParameterTypeFloat,
Help: "Test float flag",
Default: 1.0,
},
{
Name: "bool",
ShortFlag: "b",
Type: parameters.ParameterTypeBool,
Help: "Test bool flag",
},
{
Name: "date",
ShortFlag: "d",
Type: parameters.ParameterTypeDate,
Help: "Test date flag",
},
{
Name: "string_list",
ShortFlag: "l",
Type: parameters.ParameterTypeStringList,
Help: "Test string list flag",
Default: []string{"default", "default2"},
},
{
Name: "integer_list",
Type: parameters.ParameterTypeIntegerList,
Help: "Test integer list flag",
Default: []int{1, 2},
},
{
Name: "float_list",
Type: parameters.ParameterTypeFloatList,
Help: "Test float list flag",
Default: []float64{1.0, 2.0},
},
{
Name: "choice",
ShortFlag: "c",
Type: parameters.ParameterTypeChoice,
Help: "Test choice flag",
Choices: []string{"choice1", "choice2"},
Default: "choice1",
},
glazedParameterLayer, err := settings.NewGlazedParameterLayers()
cobra.CheckErr(err)

description := &cmds.CommandDescription{
Name: "example",
Short: "Short parka example command",
Long: "",
Flags: []*parameters.ParameterDefinition{
// required string test argument
{
Name: "test",
ShortFlag: "t",
Type: parameters.ParameterTypeString,
Help: "Test string argument",
Default: "test",
},
{
Name: "string",
ShortFlag: "s",
Type: parameters.ParameterTypeString,
Help: "Test string flag",
Default: "default",
Required: false,
},
{
Name: "string_from_file",
Type: parameters.ParameterTypeStringFromFile,
Help: "Test string from file flag",
},
{
Name: "object_from_file",
Type: parameters.ParameterTypeObjectFromFile,
Help: "Test object from file flag",
},
{
Name: "integer",
ShortFlag: "i",
Type: parameters.ParameterTypeInteger,
Help: "Test integer flag",
Default: 1,
},
{
Name: "float",
ShortFlag: "f",
Type: parameters.ParameterTypeFloat,
Help: "Test float flag",
Default: 1.0,
},
{
Name: "bool",
ShortFlag: "b",
Type: parameters.ParameterTypeBool,
Help: "Test bool flag",
},
{
Name: "date",
ShortFlag: "d",
Type: parameters.ParameterTypeDate,
Help: "Test date flag",
},
{
Name: "string_list",
ShortFlag: "l",
Type: parameters.ParameterTypeStringList,
Help: "Test string list flag",
Default: []string{"default", "default2"},
},
{
Name: "integer_list",
Type: parameters.ParameterTypeIntegerList,
Help: "Test integer list flag",
Default: []int{1, 2},
},
{
Name: "float_list",
Type: parameters.ParameterTypeFloatList,
Help: "Test float list flag",
Default: []float64{1.0, 2.0},
},
{
Name: "choice",
ShortFlag: "c",
Type: parameters.ParameterTypeChoice,
Help: "Test choice flag",
Choices: []string{"choice1", "choice2"},
Default: "choice1",
},
},
Layers: []layers.ParameterLayer{
glazedParameterLayer,
},
}
return &ExampleCommand{
description: description,
}
}

func (e *ExampleCommand) Run(
ctx context.Context,
parsedLayers map[string]*layers.ParsedParameterLayer,
ps map[string]interface{},
gp processor.TableProcessor,
gp middlewares.Processor,
) error {
obj := types.NewRow(
types.MRP("test", ps["test"]),
Expand All @@ -133,8 +142,8 @@ func (e *ExampleCommand) Run(

err = gp.AddRow(ctx, types.NewRow(
types.MRP("test", "test"),
types.MRP("test2", []int{123, 123, 123, 123}),
types.MRP("test3", map[string]interface{}{
types.MRP("integer_list", []int{123, 123, 123, 123}),
types.MRP("object_from_file", map[string]interface{}{
"test": "test",
"test2": []int{123, 123, 123, 123},
}),
Expand All @@ -149,6 +158,11 @@ func (e *ExampleCommand) Description() *cmds.CommandDescription {
return e.description
}

func (e *ExampleCommand) RunFromParka(c *gin.Context, parsedLayers map[string]*layers.ParsedParameterLayer, ps map[string]interface{}, gp *processor.GlazeProcessor) error {
func (e *ExampleCommand) RunFromParka(
c *gin.Context,
parsedLayers map[string]*layers.ParsedParameterLayer,
ps map[string]interface{},
gp middlewares.Processor,
) error {
return e.Run(c, parsedLayers, ps, gp)
}
25 changes: 16 additions & 9 deletions cmd/parka/cmds/serve.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,9 @@ 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"
output_file "github.com/go-go-golems/parka/pkg/glazed/handlers/output-file"
"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 All @@ -22,10 +25,15 @@ var ServeCmd = &cobra.Command{
Short: "Starts the server",
Args: cobra.NoArgs,
Run: func(cmd *cobra.Command, args []string) {
_, err := cmd.Flags().GetUint16("port")
port, err := cmd.Flags().GetUint16("port")
cobra.CheckErr(err)
host, err := cmd.Flags().GetString("host")
cobra.CheckErr(err)

serverOptions := []server.ServerOption{}
serverOptions := []server.ServerOption{
server.WithPort(port),
server.WithAddress(host),
}
defaultLookups := []render.TemplateLookup{}

dev, _ := cmd.Flags().GetBool("dev")
Expand Down Expand Up @@ -64,8 +72,9 @@ 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", s.HandleSimpleQueryCommand(NewExampleCommand()))
s.Router.POST("/api/example", s.HandleSimpleFormCommand(NewExampleCommand()))
s.Router.GET("/api/example", json2.CreateJSONQueryHandler(NewExampleCommand()))
s.Router.GET("/example", datatables.CreateDataTablesHandler(NewExampleCommand(), "", "example"))
s.Router.GET("/download/example.csv", output_file.CreateGlazedFileHandler(NewExampleCommand(), "example.csv"))

ctx, cancel := context.WithCancel(context.Background())
defer cancel()
Expand Down Expand Up @@ -109,24 +118,22 @@ var LsServerCmd = &cobra.Command{
err = json.Unmarshal(body, &cmds)
cobra.CheckErr(err)

gp, err := cli.CreateGlazedProcessorFromCobra(cmd)
gp, _, err := cli.CreateGlazedProcessorFromCobra(cmd)
cobra.CheckErr(err)

for _, cmd := range cmds {
err = gp.AddRow(ctx, types.NewRowFromMap(cmd))
cobra.CheckErr(err)
}

err = gp.Finalize(ctx)
cobra.CheckErr(err)

err = gp.OutputFormatter().Output(ctx, gp.GetTable(), os.Stdout)
err = gp.Close(ctx)
cobra.CheckErr(err)
},
}

func init() {
ServeCmd.Flags().Uint16("port", 8080, "Port to listen on")
ServeCmd.Flags().String("host", "localhost", "Port to listen on")
ServeCmd.Flags().String("template-dir", "pkg/web/src/templates", "Directory containing templates")
ServeCmd.Flags().Bool("dev", false, "Enable development mode")

Expand Down
5 changes: 3 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ require (
github.com/alecthomas/chroma/v2 v2.2.0
github.com/gin-gonic/contrib v0.0.0-20221130124618-7e01895a63f2
github.com/gin-gonic/gin v1.9.0
github.com/go-go-golems/clay v0.0.17
github.com/go-go-golems/glazed v0.3.0
github.com/go-go-golems/clay v0.0.18
github.com/go-go-golems/glazed v0.3.2
github.com/pkg/errors v0.9.1
github.com/rs/zerolog v1.29.0
github.com/spf13/cobra v1.6.1
Expand Down Expand Up @@ -101,6 +101,7 @@ require (
golang.org/x/sys v0.8.0 // indirect
golang.org/x/text v0.9.0 // indirect
google.golang.org/protobuf v1.28.1 // indirect
gopkg.in/errgo.v2 v2.1.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)
9 changes: 5 additions & 4 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -111,10 +111,10 @@ github.com/gin-gonic/gin v1.9.0/go.mod h1:W1Me9+hsUSyj3CePGrd1/QrKJMSJ1Tu/0hFEH8
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-go-golems/clay v0.0.17 h1:lFOXpAs3AiBMu3LwUO2xvJ7JvkIVU4g2beRODyKGvTM=
github.com/go-go-golems/clay v0.0.17/go.mod h1:2QM24Cz+xBFrnXr5h561DAQ/lxLYlnUO8EjlxiOsYk4=
github.com/go-go-golems/glazed v0.3.0 h1:L4lJAz1WvYasKjvkxd3UTJImoPEcl6gEvV21qUqjjcM=
github.com/go-go-golems/glazed v0.3.0/go.mod h1:zMZnD5ZCj5h/UAQpfpaWV6UkGMdILd8yWXGh9y8sdvU=
github.com/go-go-golems/clay v0.0.18 h1:smhX//d2xuinPWAx+MOlZxMva2bTQDg5Kl+dN1b3YVc=
github.com/go-go-golems/clay v0.0.18/go.mod h1:lwCix3m4IQDIbXnb5F6uVayADuKVHNKPngJdxCTEelU=
github.com/go-go-golems/glazed v0.3.2 h1:VS55mFMXYiZfaEXGQo+gDS7p+n5GF+Vx2egDc0PzXPY=
github.com/go-go-golems/glazed v0.3.2/go.mod h1:nv4FnbQ7kgWQlzyxA3+10jmEc/GDsw3SB0A/sWH14FQ=
github.com/go-openapi/errors v0.20.3 h1:rz6kiC84sqNQoqrtulzaL/VERgkoCyB6WdEkc2ujzUc=
github.com/go-openapi/errors v0.20.3/go.mod h1:Z3FlZ4I8jEGxjUK+bugx3on2mIAk4txuAOhlsB1FSgk=
github.com/go-openapi/strfmt v0.21.7 h1:rspiXgNWgeUzhjo1YU01do6qsahtJNByjLVbPLNHb8k=
Expand Down Expand Up @@ -686,6 +686,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
Expand Down
Loading

0 comments on commit 067595b

Please sign in to comment.