-
Notifications
You must be signed in to change notification settings - Fork 66
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
add customDo function #192
Changes from 1 commit
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -5,6 +5,7 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
"compress/gzip" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"context" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"encoding/json" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"errors" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"fmt" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"io" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
"mime/multipart" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -54,6 +55,7 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
Client *http.Client | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
BaseURL string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RequestInterceptor RequestInterceptor | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CustomDo RequestInterceptorFunc | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ParseDataWhenErrors bool | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -202,6 +204,11 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
f := ChainInterceptor(append([]RequestInterceptor{c.RequestInterceptor}, interceptors...)...) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// if custom do is set, use it instead of the default one | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if c.CustomDo != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return f(ctx, req, gqlInfo, respData, c.CustomDo) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return f(ctx, req, gqlInfo, respData, c.do) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -261,7 +268,11 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
buffer *bytes.Buffer, formFields []FormField, files []MultipartFilesGroup, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) (string, error) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
writer := multipart.NewWriter(buffer) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
defer writer.Close() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
defer func(writer *multipart.Writer) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
err := writer.Close() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}(writer) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The - if err != nil {
- }
+ if err != nil {
+ // handle or return the error
+ } Commitable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// form fields | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
for _, field := range formFields { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -299,11 +310,15 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
func (c *Client) do(_ context.Context, req *http.Request, _ *GQLRequestInfo, res interface{}) error { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
resp, err := c.Client.Do(req) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return fmt.Errorf("request failed: %w", err) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
defer resp.Body.Close() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
defer func(Body io.ReadCloser) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
err := Body.Close() | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
}(resp.Body) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The - if err != nil {
- }
+ if err != nil {
+ // handle or return the error
+ } Commitable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if resp.Header.Get("Content-Encoding") == "gzip" { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
resp.Body, err = gzip.NewReader(resp.Body) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -330,12 +345,13 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fmt.Println("body", string(body)) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
// some servers return a graphql error with a non OK http code, try anyway to parse the body | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if err := c.unmarshal(body, result); err != nil { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if gqlErr, ok := err.(*GqlErrorList); ok { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
var gqlErr *GqlErrorList | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if errors.As(err, &gqlErr) { | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
errResponse.GqlErrors = &gqlErr.Errors | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} else if !isKOCode { // if is KO code there is already the http error, this error should not be returned | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return err | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The + var gqlErr *GqlErrorList
+ if errors.As(err, &gqlErr) {
+ errResponse.GqlErrors = &gqlErr.Errors
+ } Commitable suggestion
Your code snippet already contains the lines from the diff snippet. Therefore, no changes are needed. Here is your original code:
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The
Post
method is updated to conditionally useCustomDo
if it's set. This provides flexibility to the client to use a custom function for handling requests.Commitable suggestion