11package tinybird
22
33import (
4- "fmt "
4+ "bytes "
55 "net/http"
6- "net/url"
76 "time"
87
9- "github.com/the-hotels-network/go-tinybird/internal/env"
10-
118 log "github.com/sirupsen/logrus"
129)
1310
14- const (
15- Format string = "json"
16- JSON = "json"
17- NDJSON = "ndjson"
18- CSV = "csv"
19- )
20-
2111// Basic request struct.
2212type Request struct {
13+ After func (* Request ) // Run after execute request.
14+ Before func (* Request ) bool // Run before execute request.
15+ Data []byte // Data to send.
2316 Elapsed Duration // Elapsed time of client request.
2417 Error error // Error on client request.
18+ Event Event // Send event to data source.
2519 Method string // Define HTTP method.
2620 Pipe Pipe // Pipe details.
2721 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.
3122}
3223
3324// Custom HTTP client for this module.
@@ -83,7 +74,7 @@ func (r *Request) Execute() error {
8374
8475// Create new request.
8576func (r * Request ) newRequest () (* http.Request , error ) {
86- req , err := http .NewRequest (r .Method , r .URL (), nil )
77+ req , err := http .NewRequest (r .Method , r .URI (), bytes . NewBuffer ( r . Data ) )
8778 if err != nil {
8879 return nil , err
8980 }
@@ -94,8 +85,11 @@ func (r *Request) newRequest() (*http.Request, error) {
9485 }).Debug ("tinybird" )
9586
9687 req .Header .Add ("Accept" , "application/json" )
97- req .Header .Add ("Authorization" , fmt .Sprintf ("Bearer %s" , r .Pipe .Workspace .Token ))
98- req .URL .RawQuery = r .Pipe .GetParameters ()
88+ req .Header .Add ("Authorization" , r .Token ())
89+
90+ if r .Pipe .Workspace .IsSet () {
91+ req .URL .RawQuery = r .Pipe .GetParameters ()
92+ }
9993
10094 return req , nil
10195}
@@ -104,7 +98,7 @@ func (r *Request) newRequest() (*http.Request, error) {
10498func (r * Request ) readBody (resp * http.Response ) (err error ) {
10599 defer resp .Body .Close ()
106100
107- r .Response .Format = r .Format
101+ r .Response .Format = r .Format ()
108102 r .Response .Status = resp .StatusCode
109103 r .Response .Header = resp .Header
110104 r .Response .Raw = resp .Body
@@ -119,38 +113,40 @@ func (r *Request) readBody(resp *http.Response) (err error) {
119113 return err
120114}
121115
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
116+ func (r * Request ) URL () (out string ) {
117+ if r .Pipe .Workspace .IsSet () {
118+ out = r .Pipe .GetURL ()
119+ } else if r .Event .Workspace .IsSet () {
120+ out = r .Event .GetURL ()
129121 }
130122
131- return fmt .Sprintf (
132- "%s/%s.%s" ,
133- baseUrl ,
134- r .Pipe .Name ,
135- r .GetFormat (),
136- )
123+ return out
137124}
138125
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
126+ func (r * Request ) Token () (out string ) {
127+ if r .Pipe .Workspace .IsSet () {
128+ out = r .Pipe .Workspace .GetToken ()
129+ } else if r .Event .Workspace .IsSet () {
130+ out = r .Event .Workspace .GetToken ()
143131 }
144132
145- if env .GetBool ("TB_NDJSON" , false ) {
146- return NDJSON
133+ return out
134+ }
135+
136+ func (r * Request ) URI () (out string ) {
137+ if r .Pipe .Workspace .IsSet () {
138+ out = r .Pipe .GetURI ()
139+ } else if r .Event .Workspace .IsSet () {
140+ out = r .Event .GetURI ()
147141 }
148142
149- return JSON
143+ return out
150144}
151145
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 )
146+ func (r * Request ) Format () (out string ) {
147+ if r .Pipe .Workspace .IsSet () {
148+ out = r .Pipe .GetFormat ()
149+ }
150+
151+ return out
156152}
0 commit comments