fix: parse schema in API, not engine (#233)

* no schema parsing in core engine

* fix: parse schema in api, not engine

* fix: parsing of input schema should not use json keys as field names
This commit is contained in:
abelanger5
2024-03-04 15:39:54 -08:00
committed by GitHub
parent c4fc355805
commit d3534edc4c
22 changed files with 1151 additions and 186 deletions
@@ -0,0 +1,36 @@
package stepruns
import (
"encoding/json"
"fmt"
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/internal/repository/prisma/db"
"github.com/hatchet-dev/hatchet/internal/schema"
)
func (t *StepRunService) StepRunGetSchema(ctx echo.Context, request gen.StepRunGetSchemaRequestObject) (gen.StepRunGetSchemaResponseObject, error) {
stepRun := ctx.Get("step-run").(*db.StepRunModel)
var res map[string]interface{}
input, ok := stepRun.Input()
if ok {
schemaBytes, err := schema.SchemaBytesFromBytes(input)
if err != nil {
return nil, fmt.Errorf("could not get schema bytes: %w", err)
}
err = json.Unmarshal(schemaBytes, &res)
if err != nil {
return nil, fmt.Errorf("could not unmarshal schema: %w", err)
}
}
return gen.StepRunGetSchema200JSONResponse(res), nil
}
@@ -0,0 +1,21 @@
package workflows
import (
"github.com/labstack/echo/v4"
"github.com/hatchet-dev/hatchet/api/v1/server/oas/gen"
"github.com/hatchet-dev/hatchet/internal/repository/prisma/db"
)
func (t *WorkflowService) WorkflowDelete(ctx echo.Context, request gen.WorkflowDeleteRequestObject) (gen.WorkflowDeleteResponseObject, error) {
tenant := ctx.Get("tenant").(*db.TenantModel)
workflow := ctx.Get("workflow").(*db.WorkflowModel)
workflow, err := t.config.Repository.Workflow().DeleteWorkflow(tenant.ID, workflow.ID)
if err != nil {
return nil, err
}
return gen.WorkflowDelete204Response{}, nil
}
+310 -111
View File
@@ -460,7 +460,6 @@ type StepRun struct {
FinishedAt *time.Time `json:"finishedAt,omitempty"`
FinishedAtEpoch *int `json:"finishedAtEpoch,omitempty"`
Input *string `json:"input,omitempty"`
InputSchema *string `json:"inputSchema,omitempty"`
JobRun *JobRun `json:"jobRun,omitempty"`
JobRunId string `json:"jobRunId"`
Metadata APIResourceMeta `json:"metadata"`
@@ -978,6 +977,9 @@ type ServerInterface interface {
// Rerun step run
// (POST /api/v1/tenants/{tenant}/step-runs/{step-run}/rerun)
StepRunUpdateRerun(ctx echo.Context, tenant openapi_types.UUID, stepRun openapi_types.UUID) error
// Get step run schema
// (GET /api/v1/tenants/{tenant}/step-runs/{step-run}/schema)
StepRunGetSchema(ctx echo.Context, tenant openapi_types.UUID, stepRun openapi_types.UUID) error
// Get workers
// (GET /api/v1/tenants/{tenant}/worker)
WorkerList(ctx echo.Context, tenant openapi_types.UUID) error
@@ -1032,6 +1034,9 @@ type ServerInterface interface {
// Get worker
// (GET /api/v1/workers/{worker})
WorkerGet(ctx echo.Context, worker openapi_types.UUID) error
// Delete workflow
// (DELETE /api/v1/workflows/{workflow})
WorkflowDelete(ctx echo.Context, workflow openapi_types.UUID) error
// Get workflow
// (GET /api/v1/workflows/{workflow})
WorkflowGet(ctx echo.Context, workflow openapi_types.UUID) error
@@ -1693,6 +1698,34 @@ func (w *ServerInterfaceWrapper) StepRunUpdateRerun(ctx echo.Context) error {
return err
}
// StepRunGetSchema converts echo context to params.
func (w *ServerInterfaceWrapper) StepRunGetSchema(ctx echo.Context) error {
var err error
// ------------- Path parameter "tenant" -------------
var tenant openapi_types.UUID
err = runtime.BindStyledParameterWithLocation("simple", false, "tenant", runtime.ParamLocationPath, ctx.Param("tenant"), &tenant)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter tenant: %s", err))
}
// ------------- Path parameter "step-run" -------------
var stepRun openapi_types.UUID
err = runtime.BindStyledParameterWithLocation("simple", false, "step-run", runtime.ParamLocationPath, ctx.Param("step-run"), &stepRun)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter step-run: %s", err))
}
ctx.Set(BearerAuthScopes, []string{})
ctx.Set(CookieAuthScopes, []string{})
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.StepRunGetSchema(ctx, tenant, stepRun)
return err
}
// WorkerList converts echo context to params.
func (w *ServerInterfaceWrapper) WorkerList(ctx echo.Context) error {
var err error
@@ -1996,6 +2029,26 @@ func (w *ServerInterfaceWrapper) WorkerGet(ctx echo.Context) error {
return err
}
// WorkflowDelete converts echo context to params.
func (w *ServerInterfaceWrapper) WorkflowDelete(ctx echo.Context) error {
var err error
// ------------- Path parameter "workflow" -------------
var workflow openapi_types.UUID
err = runtime.BindStyledParameterWithLocation("simple", false, "workflow", runtime.ParamLocationPath, ctx.Param("workflow"), &workflow)
if err != nil {
return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter workflow: %s", err))
}
ctx.Set(BearerAuthScopes, []string{})
ctx.Set(CookieAuthScopes, []string{})
// Invoke the callback with all the unmarshaled arguments
err = w.Handler.WorkflowDelete(ctx, workflow)
return err
}
// WorkflowGet converts echo context to params.
func (w *ServerInterfaceWrapper) WorkflowGet(ctx echo.Context) error {
var err error
@@ -2179,6 +2232,7 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
router.GET(baseURL+"/api/v1/tenants/:tenant/members", wrapper.TenantMemberList)
router.GET(baseURL+"/api/v1/tenants/:tenant/step-runs/:step-run", wrapper.StepRunGet)
router.POST(baseURL+"/api/v1/tenants/:tenant/step-runs/:step-run/rerun", wrapper.StepRunUpdateRerun)
router.GET(baseURL+"/api/v1/tenants/:tenant/step-runs/:step-run/schema", wrapper.StepRunGetSchema)
router.GET(baseURL+"/api/v1/tenants/:tenant/worker", wrapper.WorkerList)
router.GET(baseURL+"/api/v1/tenants/:tenant/workflow-runs/:workflow-run", wrapper.WorkflowRunGet)
router.GET(baseURL+"/api/v1/tenants/:tenant/workflow-runs/:workflow-run/prs", wrapper.WorkflowRunListPullRequests)
@@ -2197,6 +2251,7 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL
router.GET(baseURL+"/api/v1/users/memberships", wrapper.TenantMembershipsList)
router.POST(baseURL+"/api/v1/users/register", wrapper.UserCreate)
router.GET(baseURL+"/api/v1/workers/:worker", wrapper.WorkerGet)
router.DELETE(baseURL+"/api/v1/workflows/:workflow", wrapper.WorkflowDelete)
router.GET(baseURL+"/api/v1/workflows/:workflow", wrapper.WorkflowGet)
router.POST(baseURL+"/api/v1/workflows/:workflow/link-github", wrapper.WorkflowUpdateLinkGithub)
router.POST(baseURL+"/api/v1/workflows/:workflow/trigger", wrapper.WorkflowRunCreate)
@@ -3213,6 +3268,51 @@ func (response StepRunUpdateRerun403JSONResponse) VisitStepRunUpdateRerunRespons
return json.NewEncoder(w).Encode(response)
}
type StepRunGetSchemaRequestObject struct {
Tenant openapi_types.UUID `json:"tenant"`
StepRun openapi_types.UUID `json:"step-run"`
}
type StepRunGetSchemaResponseObject interface {
VisitStepRunGetSchemaResponse(w http.ResponseWriter) error
}
type StepRunGetSchema200JSONResponse map[string]interface{}
func (response StepRunGetSchema200JSONResponse) VisitStepRunGetSchemaResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(200)
return json.NewEncoder(w).Encode(response)
}
type StepRunGetSchema400JSONResponse APIErrors
func (response StepRunGetSchema400JSONResponse) VisitStepRunGetSchemaResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(400)
return json.NewEncoder(w).Encode(response)
}
type StepRunGetSchema403JSONResponse APIErrors
func (response StepRunGetSchema403JSONResponse) VisitStepRunGetSchemaResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(403)
return json.NewEncoder(w).Encode(response)
}
type StepRunGetSchema404JSONResponse APIErrors
func (response StepRunGetSchema404JSONResponse) VisitStepRunGetSchemaResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(404)
return json.NewEncoder(w).Encode(response)
}
type WorkerListRequestObject struct {
Tenant openapi_types.UUID `json:"tenant"`
}
@@ -3821,6 +3921,49 @@ func (response WorkerGet403JSONResponse) VisitWorkerGetResponse(w http.ResponseW
return json.NewEncoder(w).Encode(response)
}
type WorkflowDeleteRequestObject struct {
Workflow openapi_types.UUID `json:"workflow"`
}
type WorkflowDeleteResponseObject interface {
VisitWorkflowDeleteResponse(w http.ResponseWriter) error
}
type WorkflowDelete204Response struct {
}
func (response WorkflowDelete204Response) VisitWorkflowDeleteResponse(w http.ResponseWriter) error {
w.WriteHeader(204)
return nil
}
type WorkflowDelete400JSONResponse APIErrors
func (response WorkflowDelete400JSONResponse) VisitWorkflowDeleteResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(400)
return json.NewEncoder(w).Encode(response)
}
type WorkflowDelete403JSONResponse APIErrors
func (response WorkflowDelete403JSONResponse) VisitWorkflowDeleteResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(403)
return json.NewEncoder(w).Encode(response)
}
type WorkflowDelete404JSONResponse APIErrors
func (response WorkflowDelete404JSONResponse) VisitWorkflowDeleteResponse(w http.ResponseWriter) error {
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(404)
return json.NewEncoder(w).Encode(response)
}
type WorkflowGetRequestObject struct {
Workflow openapi_types.UUID `json:"workflow"`
}
@@ -4094,6 +4237,8 @@ type StrictServerInterface interface {
StepRunUpdateRerun(ctx echo.Context, request StepRunUpdateRerunRequestObject) (StepRunUpdateRerunResponseObject, error)
StepRunGetSchema(ctx echo.Context, request StepRunGetSchemaRequestObject) (StepRunGetSchemaResponseObject, error)
WorkerList(ctx echo.Context, request WorkerListRequestObject) (WorkerListResponseObject, error)
WorkflowRunGet(ctx echo.Context, request WorkflowRunGetRequestObject) (WorkflowRunGetResponseObject, error)
@@ -4130,6 +4275,8 @@ type StrictServerInterface interface {
WorkerGet(ctx echo.Context, request WorkerGetRequestObject) (WorkerGetResponseObject, error)
WorkflowDelete(ctx echo.Context, request WorkflowDeleteRequestObject) (WorkflowDeleteResponseObject, error)
WorkflowGet(ctx echo.Context, request WorkflowGetRequestObject) (WorkflowGetResponseObject, error)
WorkflowUpdateLinkGithub(ctx echo.Context, request WorkflowUpdateLinkGithubRequestObject) (WorkflowUpdateLinkGithubResponseObject, error)
@@ -4889,6 +5036,32 @@ func (sh *strictHandler) StepRunUpdateRerun(ctx echo.Context, tenant openapi_typ
return nil
}
// StepRunGetSchema operation middleware
func (sh *strictHandler) StepRunGetSchema(ctx echo.Context, tenant openapi_types.UUID, stepRun openapi_types.UUID) error {
var request StepRunGetSchemaRequestObject
request.Tenant = tenant
request.StepRun = stepRun
handler := func(ctx echo.Context, request interface{}) (interface{}, error) {
return sh.ssi.StepRunGetSchema(ctx, request.(StepRunGetSchemaRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "StepRunGetSchema")
}
response, err := handler(ctx, request)
if err != nil {
return err
} else if validResponse, ok := response.(StepRunGetSchemaResponseObject); ok {
return validResponse.VisitStepRunGetSchemaResponse(ctx.Response())
} else if response != nil {
return fmt.Errorf("Unexpected response type: %T", response)
}
return nil
}
// WorkerList operation middleware
func (sh *strictHandler) WorkerList(ctx echo.Context, tenant openapi_types.UUID) error {
var request WorkerListRequestObject
@@ -5343,6 +5516,31 @@ func (sh *strictHandler) WorkerGet(ctx echo.Context, worker openapi_types.UUID)
return nil
}
// WorkflowDelete operation middleware
func (sh *strictHandler) WorkflowDelete(ctx echo.Context, workflow openapi_types.UUID) error {
var request WorkflowDeleteRequestObject
request.Workflow = workflow
handler := func(ctx echo.Context, request interface{}) (interface{}, error) {
return sh.ssi.WorkflowDelete(ctx, request.(WorkflowDeleteRequestObject))
}
for _, middleware := range sh.middlewares {
handler = middleware(handler, "WorkflowDelete")
}
response, err := handler(ctx, request)
if err != nil {
return err
} else if validResponse, ok := response.(WorkflowDeleteResponseObject); ok {
return validResponse.VisitWorkflowDeleteResponse(ctx.Response())
} else if response != nil {
return fmt.Errorf("Unexpected response type: %T", response)
}
return nil
}
// WorkflowGet operation middleware
func (sh *strictHandler) WorkflowGet(ctx echo.Context, workflow openapi_types.UUID) error {
var request WorkflowGetRequestObject
@@ -5486,116 +5684,117 @@ func (sh *strictHandler) WorkflowVersionGetDefinition(ctx echo.Context, workflow
// Base64 encoded, gzipped, json marshaled Swagger object
var swaggerSpec = []string{
"H4sIAAAAAAAC/+x9WXPbuJb/V2Hx/3+YqZIs20n37fGbE7tzfa/jpGynUzNdrhREQhJiimADoB1PSt99",
"CitBEuCiLVJHT1FMLAcHv7Pg4AD4HkZ4nuEUpoyGZ99DGs3gHIif5x+vLgnBhP/OCM4gYQiKLxGOIf83",
"hjQiKGMIp+FZCIIopwzPg38CFs0gCyCvHYjCgxB+A/MsgeHZyevj40E4wWQOWHgW5ihlv74OByF7yWB4",
"FqKUwSkk4WJQbr7em/X/YIJJwGaIyj7t7sLzouATVDTNIaVgCoteKSMonYpOcUS/JCh9dHXJ/x4wHLAZ",
"DGIc5XOYMuAgYBCgSYBYAL8hymiJnClis3x8FOH5aCb5NIzhk/7tomiCYBLXqeE0iE8BmwFmdR4gGgBK",
"cYQAg3HwjNhM0AOyLEERGCel6QhTMHcwYjEICfwrRwTG4dmfpa4fTGE8/gojxmnUWKF1sEDzd8TgXPz4",
"/wROwrPw/40K7I0U8EYGdQvTDSAEvNRIUu16qHkPGajTAnI260AAr3zOiy4W/tbPVVvlHkQr8md9umie",
"ZZjwSeGN0gBPAk4RTBmKBIzsifkzHAOKonAQTjGeJpCP1HCwBpIaq3xkX3H5IkALVWWuUg4PB9ieZ5DN",
"oII4KprgWFOVApwKuUApZSCNLEyNMU4gSDkRAmxO3vAvnCGyiYLGuuy0glUhWg/Gg5BbSHFOIuhGSkQg",
"l55z5qaWoTm05I6otoJnQANVtUT56fHp6fDkdHjy6v70+Oz417PXvx399ttv/xNamjAGDA55wy4lgDwa",
"AMWSaRYRgwClwadPVxeBatomZDw+PXn92/E/hqevf4XD16/AL0Nw+ks8fH3yj19P4pNoMvkvaBOV54iP",
"ZA6+XcN0yhH/6tdBOEep/d8atXkWL8u9BFAWqPrrZGEFI2JUxSTbJHvwco8foUtkvmWIQOoa6ucZlCJx",
"/vEqYLx6oEofdZ73OWQgBhKhLVqrBGivrN1XZM3QdlSe5tNffmnjoaFtYETOMMPJxCiCGbtKnxCDt/Cv",
"HFJW5ycSnyVne4K2D0gH4bchBhkacvdkCtMh/MYIGDIwFVQ8gQTxeQnPzIgHQhQWNSBJel3jfSvgpaHj",
"HbF7ns7lLEm/YqVpEu13oY9mOKWwTiDTyK8jqURWMxmyFT8dH/MkUTz6neD5HYPZbe4QuDEBaTS7UUxr",
"7tMq+2A6uocpSNtgCOcAJe4xi09afHLKrSIOJAzqXFgCZ7JrMRScwDbBl6N5D+djSG55+ZqfJJpTjfnZ",
"L9vpCdKqMmGikXVwQQyDJvnU3Sn/sv5OB8oLF4BZeNwKQZSLj5dPMHVw7hG+uMfwCF+MeENe92jNBkAy",
"phuAivJXsZvcq4syw6trDLUC8Q7kGZPHSYKfb/P0Lp/PAXlpo0ww9HO9WoMd4sy2BvKgp+UCuJw8zdf6",
"YPmX8uQE//Gvuw83wfiFQfqf7dpONG26//dqGNBtXCOXaGZgilLj0Dcx9KMpaZS90DLP3ZdnZjj1NYcm",
"dFeobCDxA4khefNygQiMNEkwzed85gDlay4+VZaUV+ZC1f9dr8x13cKh9Fa9g4BEM+cazof3Gi8nADlX",
"aUId59wScFGVpQKSp2V/0x9wyWAac1paGlbF+rRM8jTt0LIq1qdlmkcRhHE7O0zB7q1zvLyDTLkiF2gy",
"8TtJMZpMugPUarI10CFb5rrknVj/nmfZFV9jJ4lnFQ+iCOcp+wKeAAPkS04SJ9x0sdTtSg1CZPXyhULG",
"UDql3uaWNlR+be4noEL9wDVml42WHHwj3EKfa9nAEPolhhOQJ8z6bKIbTt9T02dV9dN1CzNcp4rADPtp",
"El/xcwpJuztslR1YzboI+hceOzDeFJAVZtMKySpn4SseH21oYVtrkzKY9ZPBuvCV3aB6nA3NIc6Ze/jq",
"Y9vQnyChCKfOHvzCYMiyGzArbzl0z0w611ERSCOYJDpK0y0cYSqZnQF/kVsIqASKI6SdIjrr1/VXicim",
"GeWglSU9s7cC6AikZbkvOEwZIKzfYCgDLKcdxsPdAFlW4fs2T3ubmSVQHj1C0iwCfYZr+f5tJFv+T6Xm",
"8vJSbkQDxMyCX2ruzDRpD+/j5c3F1c27cBDefrq5kb/uPr19e3l5cXkRDsLfz6+uxY+35zdvL6/5b5cr",
"eI3Sx0LnU8QwefGuvaeI8VKF1aprHmJaCaTdcSoe1dCNdy1vNcP1SlMjH7TJaWxFGBtnM7Zt9y05HeT0",
"CkTXQnWlLsv8qAxsUOG6CyN8oePeVem601Wt6pBT1YkI0VG/+7nV5ZWJhjtXWJxip6e6K+S73eg2N9wi",
"UfXnw4TtZMLSoHuQp3DnQYSlO5ZsX/iantatUGzTnFmlOnduNd3OcbsDvv65xtNrlMJeu3Vcj4jP3Cfl",
"Rkp7ZwmeBglKYZ+9GJk14OyDN6cKtPq7vtqyhFVd46rCGHvfqkhlMD1YrLqGTzCx7dfF5ZtP3GZd3fz+",
"IRyEn89vb8JBeHl7++HWbaisdky4o9NMlyhwAU19//HRIg0rtzaTH1eIGJVb6BkzUpUbokYOBtibZ9/D",
"KCcEpuxLJrB7OghT+E3/79UgTPO5+A8Nz06OF4OqZJUquzZzVYkgkyg0HZ92Ct9YtDizAuC3esuvurVc",
"jMu5B40ZSOygFi8qYrEJokzuHxQ5S8ddokUOc2CruyYF+gZQWPh3tTm2Sv4TgrhbyasLq4Qd5SuK3Ijh",
"txbjbjDsodll+XIb94gl/giG9PJumoIcssiH7pEOu0KtlyqnHLS6OOWbioFnMh1sfCjDwvBW6wOcQe5h",
"RAmmpeSVghu3kMPr59lHv4VZAl5EdNy/X8u/XsVlpb/ttJfmfDVN4YMYEuGrS7E6b5jCLHdFHGqc48V4",
"qyKi5QgHa4NVj9XMUBITWF6ztAxrQ/GVDBCdg9qdEgJBDMYJ9C8g5XeTJgUDymDmdNDWFvbz9OCPVFij",
"KIUtdJhCTaA0llfuhDZvusRqYb5zdpnhkqmxLMSagoHLgRB6+1wmuFjUaRhvVR7tYEaWszsBbuf3ryYG",
"2x7uK8qvX8hwznxDWFL+/sphDs8nTBrlbsxeeyhVVmmYuW7hViVD5Xhr110EXtanPDpolj4jNlUaRvyM",
"iS+C2ylkahBoRtYYLrX3M30ZMHUg4xhNEHTzBRPE1zVJ+wBkzocpb7X7UFDWFMlVv76c391dvbt5f3lz",
"Hw5C+R8Ryl0p0ntvknDKTNl4YqcvLWrlvKr2NFBvipSdere5nLuFSUT122sr/Vg2s9XU3OUS+9oytFRe",
"FordqVn6s59rsoR/e0C1UEpMXQIlpYzEYq7svK0W7OxA0KgE5app5KuiKR5KQQ1vebtiwWPP6VpVwmqA",
"6p4iyEWvrfQnComs8TEfJyhqgoJoryE31aZ5ZyZdzd8yk36r5kkboQ+fby5vubW5eH91Ew7C95fv31y6",
"I7H3BE2nkFj7o+tbOH4Shx86JUavJSfZO9+fqEswWg0DiGMCKbUNREmPa41TtxP8wx+QGD+kdoJDHXtS",
"VmcGaPCkivO/IlKm4Mh56mkjtj5GNEvAS8nm64H3VsVlPvhm5hpPUbp8yvxys7RSBn0GKH3GxGMw9ddm",
"9i1BgOl24cvGNyV8vL6FU0QZ/3eP2N3NM/WgdAdnSx9r6jpptuKjM5TRfbVZNRu+RZ28CZUnO3NN22ex",
"UPZFTT0rCPVR+tVyqR1EIA0ySPj4OD3dgygJEFsJhI0hYOescc1SdCfOSVKYsgAEM137aL2HTje+RpVj",
"OXIHiSKY6tRr6gvv8jIi4CqSuotT+EXDq+XJtSx1/YDaAcFXyHbuamsv0pXjmyX4ZQ7bVwW6jQtT4y1O",
"J2jaenWDJ1NYZ+kdebI/PSDgX1xNdOKRyhh1iWT/XMWtiIuXQ9rCOXQHmC7PIT3Ge+BUXioVuR8qeXt/",
"yIrmrNo6xM6Jxp8jnXLqOxqyVCKcszVf2KnYW5PtBedZFti5lkeOndVtHB/pkd7pH/KDhS2ZUVE9p61F",
"Kri6cE6Nru02CSttmW7ZmgiL0emykc/lhO/qUSnhxnmzPda7tWeCISCOEWcBSD5a5DCSQ8cA5P5Hd/YU",
"e3dVDbnCBG/sYIF9yNDsdjVvU8noE4zfvPRo/N6qZSXzK93f01Q4Wlj9SMAf1lEaxbvyYB+a0b0jfp7l",
"hfQSzo0dcKj1oRnVd0gWPiuC5cGZIzkYpx/F7rYH27zAXTSDce7JUINPHdxhc+ZYJfpsJkGmJ+JNpSYY",
"c9fOccdbgsl6fPeVnVt3VEZS2DgwCYu3hEvXxI2MhmSIL8jD7LYOVaraxJOm9sW3Ib5it9Q9wv6apMI3",
"V/bNUy1ZpEfDhj/rNZdSvbvZV2j8L2rJ0p/Nltkqc1kvTldZcq6S1UPiSvoNStmrU2dWNLOg0mPGqLXW",
"c4uy+thJITxb0YeuPqeu01MBapo1l0oNPbRP9gXkPqf7nD0Bz+XPjrUbeA7++/z9dRCbgv31XbmfDkS7",
"r7TbEsJ+ApRwPxtGOUHs5a6473EMAYFEXwspL4IMz9SfiwHOGBMJYxHGjwjq4ohzSP5JRznOwtqloCBD",
"4u6VhVjXTLCbyfr+1fOPV7yqTLwPy381sxSeHB0fHYtJzmAKMhSeha+OTo6OhffAZmJoI5ChUYKehBmf",
"QkeM+h1kVB6rQk8whZQGxpvmGDQBhPBafX8nxkWU0yt6OT0+rjf8TwgSNhMq8hfX9xvMTJ+lmQnP/nwY",
"hFTfocIpLArqcNmfqv1oBqPH8IHXF2MlEMQv7YPlxVDTaG91gXUOVxAXMBwAcaFewAiYTFSeRdPoDbWt",
"w3864f8MxZVtdPTd/F4IrYKpgye38Ak/wgCk1m2HE0wCoDKEaqw5z5A4RCpzD2R16bGCOWTCRP3ZeOWc",
"uCAkPBMoLWTG0Bra0i5X+dRk6K6U6L94qM3k6zpD7vIogpRO8iR5CYgYXiwzpvTR2ddygiOcMrW+UFf0",
"8hZGX1W+dEF0l2tz1f5dNUY1BwkfMowDTIIxiANSnMF8ffxqO2T8jskYxTGUd6UU2FTQ4RN7r2ZOw7P4",
"28Mg/DbUN4WKbwZXxZSXECx91NF38e9ipE2fT6Llpc763i+QFvdxlXFr7hOTIt2KV3l7mECZA65yablN",
"qK4Pc8XNao7JrsCfEQSflABIjoj5OEhBSUNbnClkQAYWGvAvMVTCvoxmD0GWjexIPPUKwDWizBe/r5s1",
"s3HAq11Vim4Mbx0uFugHxPIgdwmLJ9sh41MKcjbDBP0vjGXHv2yn4/eQzXAcpJgFIEnws77ws/Bevpcc",
"5D8fFiV3pg2uWnZkkW6yMfo+nQ3tvyxGYuuts8yYjToEW0RGXNzQxXjY5HhtSIXsPbUmvmst+ol0aQ4O",
"Er2/El0RpqpA16xhVQhWEnnxd/5rKHbcF8X/ucgtRmN1t0tn1WAqNKqFN0WpfdMMgy6ZC14iC1Y3kti3",
"U333or9PVaJ7l9vRgLW7g/opQYO2gwLcXwVoqYx1KL/RMxzPMH70R3CsvqcJHoMk0FXcSksGbt6Jop9N",
"yfYQVwm4GcH8PzA2nR0wu0uYLQcRJUKACyHtHrdG4Oi7+rHohEV16LALFmXGeoHFViOqGvXaz2cL1lv1",
"qA8S87eTmBqOmyRmDpuDldTcFmcO4ur9Hev9rbKkvFc1/FsR62KfSszs47KYzbhdAXPLXoqdVabm8X1x",
"/15lJkfWg2YtawaQJEGptG8WZeStVHCjjqnrttJeM5zw4eFJeXS7NNtlT6wyCc2TTPlSUgr4Qm84+I3b",
"3c1doOP+5cm9S6m0ZF2Mlznu77ZdJjy81SWfjGDLKzmW2u6ovm1lEXFyMJ8H89nJfFIGsyHJuVTqn4uR",
"vGhzmBG/ZMqnsAIQZHmS6JlR29gmHaUmtPLwmBRc9ZYZ6SLA+tyaV4Q17Zv2P+WthVhmPKwFBI1Pujlw",
"ISNaWc4ChtUDmpVZqPFgsUGD15f8koZRF7oKo1cawc+92cl7fb2dXm8wF9o8jSuGXYl3BVZakZg8soat",
"ViOR7eomVndhNecboMlE6RejDcaQPUP1cugcU6aPufJvIJW4miBCxV+OfOroHWTiNq590kMbkmbPE079",
"3NdYPdV0kOAfKcFcbmIJ6w2JbYKnzUs0am6OpxXJrcuifcf5ngjioOEVNYYD+ogyTdtfOSQvBXF4MqEi",
"tOAgxX9ndnN3CZojFoxfPF2Kz6v2eG6Wpgl8ggnl/U5QwiBp6FiULPXc9S58eQG8Z+RU3PMeiN4sOiaY",
"eAiRFfoSoq6TdxDxWVyLhwORB+0fP7Yvs+/ZeekifA8fZPexuW2/kYoLq9gylBT1N7y/Z2mDNuPDIWmn",
"y9FDqlwlQGO0sGULrvG0vxmQn2nbqpAGIEjhsy+dWe49yKLhJhdV5YeaPWsptVo2i6mtrp70dYE91knM",
"3DD4N8Z4H4irpYoBm0a44m0N5C5EFyHJIpm/Ofpscutpt9z9ro7Njw5VPmw+OF55oKvf4kLHlg5avqrl",
"zQEA2u9UwMNi0BLj631Qxej2/YD7puyPxrplgTYfiis6PcjXuuRLCcKSx26aDU5xPrxhHQ2SRDm3JQH0",
"HLnZF1vzMy+gH+FLp+UzL1fqtfur/uL8a/2WEz9N1vVMnWgrdEVvAq17opYjkeSpOkkKO9Gqy3Ze+Lqv",
"ZflBwQgxnz8mFCG63oFAhE3HtsIQhTY9BCFWdU8VWzof1utiNUdCO3Y0nVLldjCf/4Yvh9VaYUOWwr9g",
"9kEGXDIQKJO+Tjkg4t2/pisH+HcaAGNIZUWPBOiLBkSjP+8qzvGaoieIqE+uC1eEaL5tL47Y3VBJ4g6m",
"ynvBgrg2fb3GSr4jRJuzlAvRLL0+RD3hc+t1n5/cTtX40S/gUeH2Ia5eslg1LLZF17tGFct7RKqDRqwf",
"gorWplb56aHmrS31alufHa6TjUjnEvtcGhgHsXRudxVy010uO1gq/Yeh/P9CCnECmeNy0gvxd2oWVV1E",
"WdbZ2xBlWa6aaRsaduy7bW2VXomQXZbekiBJEBZw9aVClOdR2DXAXM8hyFVTP0nY8zMsOygJ67e7/if/",
"utrdXM/ytjNLOkqupG9vJFdOSH/JbbJ8c/kSWc81mq7lFnHrMc7DGq3Mj6XWaJrbB2fQtUYrsLgeX9CV",
"8914SsM+mPEicew7b7G3Bu/vfgCk68mtsnxqrhxOfWzr1EcJi8+AinOivmMgZnoK1cDnOeATvWwOcLOe",
"GBFI1HtGnv0I8QghsElrOCoqih90xi7ukJA8VVPV4hSbM6vy7kHXcBc7odgO+yON+yMy8WaTCuXZvDPr",
"dzWSRD1c2pJ+bT0x+pO74BYnDhmha7mCWgGwcsASkmUdbs1oZUzt/7Y53qW0uFaBUGlt++yHlwbsvZPM",
"4uAeS615sW4psT345W7JNbzpdz66hKnl5XmUkQ7XW9nXL9DK5SpOr7ny3KJ1LQc9iPqmCCzdgEOZjPT6",
"cpBh54RXa/LuRMXNH86y8bLk+REdIC1B96B/KiG7Mnc2roFoJ2dalOzmPRwc6sI0H1zq9RvmfjLRUQhG",
"JE+7S0IgIlRdfenDkatdPXJlp+fyPqeQmak98nSs3yXelmfTnTLrscW9W8CsoCgFXw7K0r+KWUFh5hQS",
"OopyQtRQmh9yVAUDXq2mET9RSN5B9lY1tkFc8Z56gklQfLjCdH/eeeAgr8BNY1xMvwPG6v78CCTJGESP",
"Xji/xfNM5i1yZHzg/QfOK0t5R+r5BtH0B87Lt7r5CsBfHZ+23KkbqX7jer8zCGKVgZJgORnleaiq7UUv",
"ZuoRlzvtyE/KAPHrhjv+dTlOiqr92Sjo+QFMFOT25CDG0wRuBpGi6R1G5DoAKNm3ZgAWjNs5AK6Kt7bD",
"RsWp2PLZDvM6QquB5y3Y6YUbvVC/9+ke6yTqT3W0p4v72OuBpdajP17sjeRr2/70j3PxvV+mtKyzofvi",
"ZOO15N5F7zvz5cgPR1gaFy/n6jH2liMsfnwR+BVGrCm9iH/vhy9ZJ9xUngxvfA34kiM/4KslSYUzaQl8",
"JXiKGrLWrvGUBigNgLCNRw0OxrVoaEPHEbgJ5u1v6VqxTivtBE+nMA5Qelhg7+4bIQI1XVfSCZ7inLUI",
"A85ZN2ngTe0IRjkpB5Du0WufAj1dYatOQcxQ1mMJZFXqtgyyz7OIamr/Z6MAd3fafz1ks+iwJlpmTWRz",
"sB2SBE75HJAmf1WWoI3KdKM3ZvMONBm75Fho5h1i+HvhYmgItatrlT0r8+Ig6ZLh6lDEMuO2YyarbKMx",
"h6zlWfVdT+9eYnt1x+RpZ/K6e6R1DzR0agCXeScm9bNzGnentJMeqFdZBs25k3ueh7VkasEB/e6sgiWz",
"EttlYJSg9HEoNxYblpcofQxAIIsFBGaYIobl7boNL0xqUtXCE6WP6tHLfRKU9Xt3BSNuDSe7ntdLPDOx",
"1eN7nYWcU6skvE7x4XjyD36UTki1C0kbUjWMoOm0aeV1Lwuoy+iWOkbV/V66XVAwzYmIT5BQhNOj4Goi",
"XH6ac3zAeCBz+wGDlOlCAaLBBLJoBmNftqIqGe68flQwsGa1z2nmypGc7WvFvm/tHs6G7ZJS1Dqo5VRa",
"2+nqHmpRySXtuhzREt9JJf4hC+/R6uTvoBM3rGHUpC6bvq0HfdA1O/AqcG1WNuZ+aT0ziuEEpUgnw/VR",
"OUXNvtrnoujzoIf+ZnrImtvVNJKFr4Ny2kXlZE/Q8nqqutE3hoBAYjb6Bs6tP0ietL7ISRKeheHiYfF/",
"AQAA//98DeBsBvwAAA==",
"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",
}
// GetSwagger returns the content of the embedded swagger specification file
@@ -212,10 +212,6 @@ func ToStepRun(stepRun *db.StepRunModel) (*gen.StepRun, error) {
res.Output = repository.StringPtr(string(json.RawMessage(outputData)))
}
if inputSchema, ok := stepRun.InputSchema(); ok {
res.InputSchema = repository.StringPtr(string(json.RawMessage(inputSchema)))
}
if jobRun := stepRun.RelationsStepRun.JobRun; jobRun != nil {
var err error