From 669236a9786228196473f976380e2608ac7b02da Mon Sep 17 00:00:00 2001 From: Mo Kweon Date: Wed, 8 Sep 2021 22:16:52 -0700 Subject: [PATCH] refactor: use a common function to send a GET request --- internal/testutils/testutils.go | 3 +-- method_get.go | 18 +++--------------- method_get_test.go | 2 +- method_list.go | 18 +++--------------- method_list_test.go | 22 ++++++++++++---------- paper_get.go | 17 +++-------------- paper_get_test.go | 2 +- paper_list.go | 16 ++-------------- paper_method_list.go | 13 +------------ paper_repository_list.go | 14 ++------------ paper_result_list.go | 15 ++------------- paper_task_list.go | 14 ++------------ send_get_request.go | 12 ++++++++++++ 13 files changed, 45 insertions(+), 121 deletions(-) create mode 100644 send_get_request.go diff --git a/internal/testutils/testutils.go b/internal/testutils/testutils.go index 956892e..d4cf2d8 100644 --- a/internal/testutils/testutils.go +++ b/internal/testutils/testutils.go @@ -13,8 +13,7 @@ func MustExtractAPITokenFromEnv() string { return apiToken } - // ToStringPtr returns a pointer to the given string. func ToStringPtr(s string) *string { return &s -} \ No newline at end of file +} diff --git a/method_get.go b/method_get.go index 3e21b05..dba55c9 100644 --- a/method_get.go +++ b/method_get.go @@ -1,7 +1,6 @@ package paperswithcode_go import ( - "encoding/json" "github.com/codingpot/paperswithcode-go/v2/models" ) @@ -9,18 +8,7 @@ import ( // See https://paperswithcode-client.readthedocs.io/en/latest/api/client.html#paperswithcode.client.PapersWithCodeClient.method_list func (c *Client) MethodGet(methodID string) (*models.Method, error) { url := c.baseURL + "/methods/" + methodID - - response, err := c.httpClient.Get(url) - if err != nil { - return nil, err - } - var result models.Method - - err = json.NewDecoder(response.Body).Decode(&result) - if err != nil { - return nil, err - } - - return &result, nil -} \ No newline at end of file + err := c.sendGetRequest(url, &result) + return &result, err +} diff --git a/method_get_test.go b/method_get_test.go index 8fe764e..01bd317 100644 --- a/method_get_test.go +++ b/method_get_test.go @@ -40,4 +40,4 @@ func TestClient_MethodGet(t *testing.T) { assert.Equal(t, tt.want, got) }) } -} \ No newline at end of file +} diff --git a/method_list.go b/method_list.go index 3dcb30a..8c2cf99 100644 --- a/method_list.go +++ b/method_list.go @@ -1,7 +1,6 @@ package paperswithcode_go import ( - "encoding/json" "fmt" "github.com/codingpot/paperswithcode-go/v2/models" ) @@ -19,18 +18,7 @@ func (m MethodListParams) String() string { func (c *Client) MethodList(params MethodListParams) (*models.MethodList, error) { url := c.baseURL + "/methods?" + params.String() - - response, err := c.httpClient.Get(url) - if err != nil { - return nil, err - } - var listResult models.MethodList - - err = json.NewDecoder(response.Body).Decode(&listResult) - if err != nil { - return nil, err - } - - return &listResult, nil -} \ No newline at end of file + err := c.sendGetRequest(url, &listResult) + return &listResult, err +} diff --git a/method_list_test.go b/method_list_test.go index 3ea9aa8..a142de7 100644 --- a/method_list_test.go +++ b/method_list_test.go @@ -20,23 +20,22 @@ func TestClient_MethodList(t *testing.T) { ItemsPerPage: 2, }, want: &models.MethodList{ - Count: 1129, Next: toPtr("https://paperswithcode.com/api/v1/methods/?items_per_page=2&page=2"), Previous: nil, Results: []*models.Method{ { - ID: "1cycle", - Name: "1cycle", - FullName: "1cycle learning rate scheduling policy", + ID: "1cycle", + Name: "1cycle", + FullName: "1cycle learning rate scheduling policy", Description: "", - Paper: toPtr("a-disciplined-approach-to-neural-network"), + Paper: toPtr("a-disciplined-approach-to-neural-network"), }, { - ID: "1d-cnn", - Name: "1D CNN", - FullName: "1-Dimensional Convolutional Neural Networks", + ID: "1d-cnn", + Name: "1D CNN", + FullName: "1-Dimensional Convolutional Neural Networks", Description: "1D Convolutional Neural Networks are similar to well known and more established 2D Convolutional Neural Networks. 1D Convolutional Neural Networks are used mainly used on text and 1D signals.", - Paper: toPtr("convolutional-neural-network-and-rule-based"), + Paper: toPtr("convolutional-neural-network-and-rule-based"), }, }, }, @@ -54,6 +53,9 @@ func TestClient_MethodList(t *testing.T) { assert.NoError(t, err) } + // we don't want to test count values as it's changing. + tt.want.Count = got.Count + assert.Equal(t, tt.want, got) }) } @@ -61,4 +63,4 @@ func TestClient_MethodList(t *testing.T) { func toPtr(s string) *string { return &s -} \ No newline at end of file +} diff --git a/paper_get.go b/paper_get.go index 0b75c04..812a864 100644 --- a/paper_get.go +++ b/paper_get.go @@ -1,25 +1,14 @@ package paperswithcode_go import ( - "encoding/json" "fmt" "github.com/codingpot/paperswithcode-go/v2/models" - "net/url" ) // PaperGet returns a single paper. Note that paperID is hyphen cased (e.g., generative-adversarial-networks). func (c *Client) PaperGet(paperID string) (*models.Paper, error) { - paperGetURL := fmt.Sprintf("%s/papers/%s/", c.baseURL, url.QueryEscape(paperID)) - response, err := c.httpClient.Get(paperGetURL) - if err != nil { - return nil, err - } - + paperGetURL := fmt.Sprintf("%s/papers/%s/", c.baseURL, paperID) var paperGetResult models.Paper - err = json.NewDecoder(response.Body).Decode(&paperGetResult) - if err != nil { - return nil, err - } - - return &paperGetResult, nil + err := c.sendGetRequest(paperGetURL, &paperGetResult) + return &paperGetResult, err } diff --git a/paper_get_test.go b/paper_get_test.go index 8cd72e4..94fc682 100644 --- a/paper_get_test.go +++ b/paper_get_test.go @@ -6,7 +6,7 @@ import ( ) func TestClient_PaperGet(t *testing.T) { - c := NewClient(WithAPIToken(apiToken)) + c := NewClient() got, err := c.PaperGet("generative-adversarial-networks") assert.NoError(t, err) assert.Equal(t, "generative-adversarial-networks", got.ID) diff --git a/paper_list.go b/paper_list.go index 7e92f19..e7358fd 100644 --- a/paper_list.go +++ b/paper_list.go @@ -1,7 +1,6 @@ package paperswithcode_go import ( - "encoding/json" "fmt" "strings" @@ -11,20 +10,9 @@ import ( // PaperList returns multiple papers. func (c *Client) PaperList(params PaperListParams) (*models.PaperList, error) { papersListURL := c.baseURL + "/papers?" + params.Build() - - response, err := c.httpClient.Get(papersListURL) - if err != nil { - return nil, err - } - var paperListResult models.PaperList - - err = json.NewDecoder(response.Body).Decode(&paperListResult) - if err != nil { - return nil, err - } - - return &paperListResult, nil + err := c.sendGetRequest(papersListURL, &paperListResult) + return &paperListResult, err } // PaperListParams is the parameter for PaperList method. diff --git a/paper_method_list.go b/paper_method_list.go index 2952e49..fada8e6 100644 --- a/paper_method_list.go +++ b/paper_method_list.go @@ -1,26 +1,15 @@ package paperswithcode_go import ( - "encoding/json" "fmt" "github.com/codingpot/paperswithcode-go/v2/models" - "net/http" "net/url" ) // PaperMethodList returns the methods used in the given paper. func (c *Client) PaperMethodList(paperID string) (*models.MethodList, error) { pURL := fmt.Sprintf("%s/papers/%s/methods", c.baseURL, url.QueryEscape(paperID)) - response, err := http.Get(pURL) - if err != nil { - return nil, err - } - var methodList models.MethodList - err = json.NewDecoder(response.Body).Decode(&methodList) - if err != nil { - return nil, err - } - + err := c.sendGetRequest(pURL, &methodList) return &methodList, err } diff --git a/paper_repository_list.go b/paper_repository_list.go index ef322ae..43ff501 100644 --- a/paper_repository_list.go +++ b/paper_repository_list.go @@ -1,7 +1,6 @@ package paperswithcode_go import ( - "encoding/json" "fmt" "github.com/codingpot/paperswithcode-go/v2/models" "net/url" @@ -10,16 +9,7 @@ import ( // PaperRepositoryList returns repositories related to the given paper. func (c *Client) PaperRepositoryList(paperID string) (*models.RepositoryList, error) { paperURL := fmt.Sprintf("%s/papers/%s/repositories", c.baseURL, url.QueryEscape(paperID)) - response, err := c.httpClient.Get(paperURL) - if err != nil { - return nil, err - } - var repoList models.RepositoryList - err = json.NewDecoder(response.Body).Decode(&repoList) - if err != nil { - return nil, err - } - - return &repoList, nil + err := c.sendGetRequest(paperURL, &repoList) + return &repoList, err } diff --git a/paper_result_list.go b/paper_result_list.go index 2b72d9d..d919f03 100644 --- a/paper_result_list.go +++ b/paper_result_list.go @@ -1,7 +1,6 @@ package paperswithcode_go import ( - "encoding/json" "fmt" "github.com/codingpot/paperswithcode-go/v2/models" "net/url" @@ -10,17 +9,7 @@ import ( // PaperResultList returns the evaluation results of the paper. func (c *Client) PaperResultList(paperID string) (*models.ResultList, error) { pURL := fmt.Sprintf("%s/papers/%s/results", c.baseURL, url.QueryEscape(paperID)) - - resp, err := c.httpClient.Get(pURL) - if err != nil { - return nil, err - } - var paperResultList models.ResultList - err = json.NewDecoder(resp.Body).Decode(&paperResultList) - if err != nil { - return nil, err - } - - return &paperResultList, nil + err := c.sendGetRequest(pURL, &paperResultList) + return &paperResultList, err } diff --git a/paper_task_list.go b/paper_task_list.go index a7af313..c87c847 100644 --- a/paper_task_list.go +++ b/paper_task_list.go @@ -1,7 +1,6 @@ package paperswithcode_go import ( - "encoding/json" "fmt" "github.com/codingpot/paperswithcode-go/v2/models" "net/url" @@ -10,16 +9,7 @@ import ( // PaperTaskList returns tasks (an area of research) for the given paper. func (c *Client) PaperTaskList(paperID string) (*models.TaskList, error) { pURL := fmt.Sprintf("%s/papers/%s/tasks/", c.baseURL, url.QueryEscape(paperID)) - resp, err := c.httpClient.Get(pURL) - if err != nil { - return nil, err - } - var taskList models.TaskList - err = json.NewDecoder(resp.Body).Decode(&taskList) - if err != nil { - return nil, err - } - - return &taskList, nil + err := c.sendGetRequest(pURL, &taskList) + return &taskList, err } diff --git a/send_get_request.go b/send_get_request.go new file mode 100644 index 0000000..aa5b83d --- /dev/null +++ b/send_get_request.go @@ -0,0 +1,12 @@ +package paperswithcode_go + +import "encoding/json" + +func (c *Client) sendGetRequest(url string, result interface{}) error { + response, err := c.httpClient.Get(url) + if err != nil { + return err + } + + return json.NewDecoder(response.Body).Decode(result) +}