This is an automated email from the ASF dual-hosted git repository.

zhangliang2022 pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-devlake.git


The following commit(s) were added to refs/heads/main by this push:
     new cd9775bd fix: add getAfterResponse to overwrite by helper (#2755)
cd9775bd is described below

commit cd9775bd5dc82432b2ac704c8ceb121eacf0d2c4
Author: likyh <[email protected]>
AuthorDate: Wed Aug 17 19:01:05 2022 +0800

    fix: add getAfterResponse to overwrite by helper (#2755)
    
    * fix: fix afterResponse callback will overwrite by helper
    
    * fix: fix for ci
    
    Co-authored-by: linyh <[email protected]>
---
 plugins/feishu/tasks/api_client.go   |  9 ---------
 plugins/gitee/tasks/api_client.go    |  7 -------
 plugins/github/tasks/api_client.go   |  6 ------
 plugins/gitlab/tasks/api_client.go   |  6 ------
 plugins/helper/api_async_client.go   |  1 +
 plugins/helper/api_client.go         | 22 ++++++++++++++++------
 plugins/helper/api_collector.go      | 17 +++++++++++------
 plugins/helper/api_collector_test.go |  1 +
 plugins/icla/tasks/api_client.go     | 10 ----------
 plugins/jenkins/tasks/client.go      |  9 ---------
 plugins/jira/tasks/api_client.go     |  6 ------
 11 files changed, 29 insertions(+), 65 deletions(-)

diff --git a/plugins/feishu/tasks/api_client.go 
b/plugins/feishu/tasks/api_client.go
index f726dc74..b762a609 100644
--- a/plugins/feishu/tasks/api_client.go
+++ b/plugins/feishu/tasks/api_client.go
@@ -19,8 +19,6 @@ package tasks
 
 import (
        "fmt"
-       "net/http"
-
        "github.com/apache/incubator-devlake/plugins/feishu/apimodels"
        "github.com/apache/incubator-devlake/plugins/feishu/models"
 
@@ -65,13 +63,6 @@ func NewFeishuApiClient(taskCtx core.TaskContext, connection 
*models.FeishuConne
                "Authorization": fmt.Sprintf("Bearer %v", 
tokenResBody.TenantAccessToken),
        })
 
-       apiClient.SetAfterFunction(func(res *http.Response) error {
-               if res.StatusCode == http.StatusUnauthorized {
-                       return fmt.Errorf("feishu authentication failed, please 
check your AccessToken")
-               }
-               return nil
-       })
-
        // create async api client
        asyncApiCLient, err := helper.CreateAsyncApiClient(taskCtx, apiClient, 
&helper.ApiRateLimitCalculator{
                UserRateLimitPerHour: connection.RateLimitPerHour,
diff --git a/plugins/gitee/tasks/api_client.go 
b/plugins/gitee/tasks/api_client.go
index 230f5d60..8449437a 100644
--- a/plugins/gitee/tasks/api_client.go
+++ b/plugins/gitee/tasks/api_client.go
@@ -42,13 +42,6 @@ func NewGiteeApiClient(taskCtx core.TaskContext, connection 
*models.GiteeConnect
                return nil
        })
 
-       apiClient.SetAfterFunction(func(res *http.Response) error {
-               if res.StatusCode == http.StatusUnauthorized {
-                       return fmt.Errorf("authentication failed, please check 
your Basic Auth Token")
-               }
-               return nil
-       })
-
        rateLimiter := &helper.ApiRateLimitCalculator{
                UserRateLimitPerHour: connection.RateLimitPerHour,
                DynamicRateLimit: func(res *http.Response) (int, time.Duration, 
error) {
diff --git a/plugins/github/tasks/api_client.go 
b/plugins/github/tasks/api_client.go
index 326d52c4..131467c3 100644
--- a/plugins/github/tasks/api_client.go
+++ b/plugins/github/tasks/api_client.go
@@ -46,12 +46,6 @@ func CreateApiClient(taskCtx core.TaskContext, connection 
*models.GithubConnecti
                tokenIndex = (tokenIndex + 1) % len(tokens)
                return nil
        })
-       apiClient.SetAfterFunction(func(res *http.Response) error {
-               if res.StatusCode == http.StatusUnauthorized {
-                       return fmt.Errorf("authentication failed, please check 
your AccessToken configuration")
-               }
-               return nil
-       })
 
        // create rate limit calculator
        rateLimiter := &helper.ApiRateLimitCalculator{
diff --git a/plugins/gitlab/tasks/api_client.go 
b/plugins/gitlab/tasks/api_client.go
index fe40a4ab..804f2ba4 100644
--- a/plugins/gitlab/tasks/api_client.go
+++ b/plugins/gitlab/tasks/api_client.go
@@ -38,12 +38,6 @@ func NewGitlabApiClient(taskCtx core.TaskContext, connection 
*models.GitlabConne
        if err != nil {
                return nil, err
        }
-       apiClient.SetAfterFunction(func(res *http.Response) error {
-               if res.StatusCode == http.StatusUnauthorized {
-                       return fmt.Errorf("authentication failed, please check 
your AccessToken")
-               }
-               return nil
-       })
 
        // create rate limit calculator
        rateLimiter := &helper.ApiRateLimitCalculator{
diff --git a/plugins/helper/api_async_client.go 
b/plugins/helper/api_async_client.go
index d86ac0bb..fe60a825 100644
--- a/plugins/helper/api_async_client.go
+++ b/plugins/helper/api_async_client.go
@@ -239,6 +239,7 @@ type RateLimitedApiClient interface {
        HasError() bool
        NextTick(task func() error)
        GetNumOfWorkers() int
+       GetAfterFunction() common.ApiClientAfterResponse
        SetAfterFunction(callback common.ApiClientAfterResponse)
        Release()
 }
diff --git a/plugins/helper/api_client.go b/plugins/helper/api_client.go
index 6bebdb7b..2baf0783 100644
--- a/plugins/helper/api_client.go
+++ b/plugins/helper/api_client.go
@@ -47,7 +47,7 @@ type ApiClient struct {
        endpoint      string
        headers       map[string]string
        beforeRequest common.ApiClientBeforeRequest
-       afterReponse  common.ApiClientAfterResponse
+       afterResponse common.ApiClientAfterResponse
        ctx           context.Context
        logger        core.Logger
 }
@@ -146,14 +146,24 @@ func (apiClient *ApiClient) GetHeaders() 
map[string]string {
        return apiClient.headers
 }
 
-// SetBeforeFunction FIXME ...
+// GetBeforeFunction return beforeResponseFunction
+func (apiClient *ApiClient) GetBeforeFunction() common.ApiClientBeforeRequest {
+       return apiClient.beforeRequest
+}
+
+// SetBeforeFunction will set beforeResponseFunction
 func (apiClient *ApiClient) SetBeforeFunction(callback 
common.ApiClientBeforeRequest) {
        apiClient.beforeRequest = callback
 }
 
-// SetAfterFunction FIXME ...
+// GetAfterFunction return afterResponseFunction
+func (apiClient *ApiClient) GetAfterFunction() common.ApiClientAfterResponse {
+       return apiClient.afterResponse
+}
+
+// SetAfterFunction will set afterResponseFunction
 func (apiClient *ApiClient) SetAfterFunction(callback 
common.ApiClientAfterResponse) {
-       apiClient.afterReponse = callback
+       apiClient.afterResponse = callback
 }
 
 // SetContext FIXME ...
@@ -250,8 +260,8 @@ func (apiClient *ApiClient) Do(
        }
 
        // after receive
-       if apiClient.afterReponse != nil {
-               err = apiClient.afterReponse(res)
+       if apiClient.afterResponse != nil {
+               err = apiClient.afterResponse(res)
                if err == ErrIgnoreAndContinue {
                        res.Body.Close()
                        return res, err
diff --git a/plugins/helper/api_collector.go b/plugins/helper/api_collector.go
index 60be876f..6a4aaaec 100644
--- a/plugins/helper/api_collector.go
+++ b/plugins/helper/api_collector.go
@@ -109,22 +109,22 @@ func NewApiCollector(args ApiCollectorArgs) 
(*ApiCollector, error) {
        if args.ResponseParser == nil {
                return nil, fmt.Errorf("ResponseParser is required")
        }
-       apicllector := &ApiCollector{
+       apiCollector := &ApiCollector{
                RawDataSubTask: rawDataSubTask,
                args:           &args,
                urlTemplate:    tpl,
        }
        if args.AfterResponse != nil {
-               apicllector.SetAfterResponse(args.AfterResponse)
-       } else {
-               apicllector.SetAfterResponse(func(res *http.Response) error {
+               apiCollector.SetAfterResponse(args.AfterResponse)
+       } else if apiCollector.GetAfterResponse() == nil {
+               apiCollector.SetAfterResponse(func(res *http.Response) error {
                        if res.StatusCode == http.StatusUnauthorized {
                                return fmt.Errorf("authentication failed, 
please check your AccessToken")
                        }
                        return nil
                })
        }
-       return apicllector, nil
+       return apiCollector, nil
 }
 
 // Execute will start collection
@@ -303,7 +303,12 @@ func (collector *ApiCollector) generateUrl(pager *Pager, 
input interface{}) (str
        return buf.String(), nil
 }
 
-// SetAfterResponse FIXME ...
+// GetAfterResponse return apiClient's afterResponseFunction
+func (collector *ApiCollector) GetAfterResponse() 
common.ApiClientAfterResponse {
+       return collector.args.ApiClient.GetAfterFunction()
+}
+
+// SetAfterResponse set apiClient's afterResponseFunction
 func (collector *ApiCollector) SetAfterResponse(f 
common.ApiClientAfterResponse) {
        collector.args.ApiClient.SetAfterFunction(f)
 }
diff --git a/plugins/helper/api_collector_test.go 
b/plugins/helper/api_collector_test.go
index ee9cb961..73055f8a 100644
--- a/plugins/helper/api_collector_test.go
+++ b/plugins/helper/api_collector_test.go
@@ -72,6 +72,7 @@ func TestFetchPageUndetermined(t *testing.T) {
        }).Twice()
        mockApi.On("HasError").Return(false)
        mockApi.On("WaitAsync").Return(nil)
+       mockApi.On("GetAfterFunction", mock.Anything).Return(nil)
        mockApi.On("SetAfterFunction", mock.Anything).Return()
        params := struct {
                Name string
diff --git a/plugins/icla/tasks/api_client.go b/plugins/icla/tasks/api_client.go
index 6e695e2b..664b6a1f 100644
--- a/plugins/icla/tasks/api_client.go
+++ b/plugins/icla/tasks/api_client.go
@@ -19,8 +19,6 @@ package tasks
 
 import (
        "fmt"
-       "net/http"
-
        "github.com/apache/incubator-devlake/plugins/core"
        "github.com/apache/incubator-devlake/plugins/helper"
        "github.com/apache/incubator-devlake/utils"
@@ -50,14 +48,6 @@ func NewIclaApiClient(taskCtx core.TaskContext) 
(*helper.ApiAsyncClient, error)
                "Authorization": fmt.Sprintf("Bearer %v", token),
        })
 
-       // TODO add some check after request if necessary
-       apiClient.SetAfterFunction(func(res *http.Response) error {
-               if res.StatusCode == http.StatusUnauthorized {
-                       return fmt.Errorf("authentication failed, please check 
your Bearer Auth Token")
-               }
-               return nil
-       })
-
        // create async api client
        asyncApiClient, err := helper.CreateAsyncApiClient(taskCtx, apiClient, 
&helper.ApiRateLimitCalculator{
                UserRateLimitPerHour: userRateLimit,
diff --git a/plugins/jenkins/tasks/client.go b/plugins/jenkins/tasks/client.go
index b226b321..b0a98408 100644
--- a/plugins/jenkins/tasks/client.go
+++ b/plugins/jenkins/tasks/client.go
@@ -19,8 +19,6 @@ package tasks
 
 import (
        "fmt"
-       "net/http"
-
        "github.com/apache/incubator-devlake/plugins/core"
        "github.com/apache/incubator-devlake/plugins/helper"
        "github.com/apache/incubator-devlake/plugins/jenkins/models"
@@ -37,13 +35,6 @@ func CreateApiClient(taskCtx core.TaskContext, connection 
*models.JenkinsConnect
                return nil, err
        }
 
-       apiClient.SetAfterFunction(func(res *http.Response) error {
-               if res.StatusCode == http.StatusUnauthorized {
-                       return fmt.Errorf("authentication failed, please check 
your Username/Password")
-               }
-               return nil
-       })
-
        // create rate limit calculator
        rateLimiter := &helper.ApiRateLimitCalculator{
                UserRateLimitPerHour: connection.RateLimitPerHour,
diff --git a/plugins/jira/tasks/api_client.go b/plugins/jira/tasks/api_client.go
index 13f94aef..85312afc 100644
--- a/plugins/jira/tasks/api_client.go
+++ b/plugins/jira/tasks/api_client.go
@@ -36,12 +36,6 @@ func NewJiraApiClient(taskCtx core.TaskContext, connection 
*models.JiraConnectio
        if err != nil {
                return nil, err
        }
-       apiClient.SetAfterFunction(func(res *http.Response) error {
-               if res.StatusCode == http.StatusUnauthorized {
-                       return fmt.Errorf("authentication failed, please check 
your AccessToken")
-               }
-               return nil
-       })
 
        // create rate limit calculator
        rateLimiter := &helper.ApiRateLimitCalculator{

Reply via email to