11package tinybird
22
33import (
4- "fmt"
54 "net/http"
6- "net/url"
75 "time"
86
9- "github.com/the-hotels-network/go-tinybird/internal/env"
10-
117 log "github.com/sirupsen/logrus"
128)
139
14- const (
15- Format string = "json"
16- JSON = "json"
17- NDJSON = "ndjson"
18- CSV = "csv"
19- )
20-
2110// Basic request struct.
2211type Request struct {
12+ After func (* Request ) // Run after execute request.
13+ Before func (* Request ) bool // Run before execute request.
2314 Elapsed Duration // Elapsed time of client request.
2415 Error error // Error on client request.
16+ Event Event // Send event to data source.
2517 Method string // Define HTTP method.
2618 Pipe Pipe // Pipe details.
2719 Response Response // Response data.
28- Format string // Return format.
29- Before func (* Request ) bool // Run before execute request.
30- After func (* Request ) // Run after execute request.
3120}
3221
3322// Custom HTTP client for this module.
@@ -94,7 +83,7 @@ func (r *Request) newRequest() (*http.Request, error) {
9483 }).Debug ("tinybird" )
9584
9685 req .Header .Add ("Accept" , "application/json" )
97- req .Header .Add ("Authorization" , fmt . Sprintf ( "Bearer %s" , r . Pipe . Workspace . Token ))
86+ req .Header .Add ("Authorization" , r . Token ( ))
9887 req .URL .RawQuery = r .Pipe .GetParameters ()
9988
10089 return req , nil
@@ -104,7 +93,7 @@ func (r *Request) newRequest() (*http.Request, error) {
10493func (r * Request ) readBody (resp * http.Response ) (err error ) {
10594 defer resp .Body .Close ()
10695
107- r .Response .Format = r .Format
96+ r .Response .Format = r .Format ()
10897 r .Response .Status = resp .StatusCode
10998 r .Response .Header = resp .Header
11099 r .Response .Raw = resp .Body
@@ -119,38 +108,40 @@ func (r *Request) readBody(resp *http.Response) (err error) {
119108 return err
120109}
121110
122- // Build and return the pipe URL.
123- func (r * Request ) URL () string {
124- var baseUrl string
125- if r .Pipe .URL != "" {
126- baseUrl = r .Pipe .URL
127- } else {
128- baseUrl = URL_BASE
111+ func (r * Request ) URL () (out string ) {
112+ if r .Pipe .Workspace .IsSet () {
113+ out = r .Pipe .GetURL ()
114+ } else if r .Event .Workspace .IsSet () {
115+ out = r .Event .GetURL ()
129116 }
130117
131- return fmt .Sprintf (
132- "%s/%s.%s" ,
133- baseUrl ,
134- r .Pipe .Name ,
135- r .GetFormat (),
136- )
118+ return out
137119}
138120
139- // Verify the variable Format value to return json, ndjson or csv.
140- func (r * Request ) GetFormat () string {
141- if r .Format == JSON || r .Format == NDJSON || r .Format == CSV {
142- return r .Format
121+ func (r * Request ) Token () (out string ) {
122+ if r .Pipe .Workspace .IsSet () {
123+ out = r .Pipe .Workspace .GetToken ()
124+ } else if r .Event .Workspace .IsSet () {
125+ out = r .Event .Workspace .GetToken ()
143126 }
144127
145- if env .GetBool ("TB_NDJSON" , false ) {
146- return NDJSON
128+ return out
129+ }
130+
131+ func (r * Request ) URI () (out string ) {
132+ if r .Pipe .Workspace .IsSet () {
133+ out = r .Pipe .GetURI ()
134+ } else if r .Event .Workspace .IsSet () {
135+ out = r .Event .GetURI ()
147136 }
148137
149- return JSON
138+ return out
150139}
151140
152- // Return concatened URL and Query String to generate a URI.
153- func (r * Request ) URI () string {
154- qs , _ := url .QueryUnescape (r .Pipe .GetParameters ())
155- return fmt .Sprintf ("%s?%s" , r .URL (), qs )
141+ func (r * Request ) Format () (out string ) {
142+ if r .Pipe .Workspace .IsSet () {
143+ out = r .Pipe .GetFormat ()
144+ }
145+
146+ return out
156147}
0 commit comments