Skip to content

Commit

Permalink
refactor: use a common function to send a GET request
Browse files Browse the repository at this point in the history
  • Loading branch information
kkweon committed Sep 9, 2021
1 parent b9029e6 commit 669236a
Show file tree
Hide file tree
Showing 13 changed files with 45 additions and 121 deletions.
3 changes: 1 addition & 2 deletions internal/testutils/testutils.go
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ func MustExtractAPITokenFromEnv() string {
return apiToken
}


// ToStringPtr returns a pointer to the given string.
func ToStringPtr(s string) *string {
return &s
}
}
18 changes: 3 additions & 15 deletions method_get.go
Original file line number Diff line number Diff line change
@@ -1,26 +1,14 @@
package paperswithcode_go

import (
"encoding/json"
"github.com/codingpot/paperswithcode-go/v2/models"
)

// MethodGet returns a method in a paper.
// 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
}
err := c.sendGetRequest(url, &result)
return &result, err
}
2 changes: 1 addition & 1 deletion method_get_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,4 @@ func TestClient_MethodGet(t *testing.T) {
assert.Equal(t, tt.want, got)
})
}
}
}
18 changes: 3 additions & 15 deletions method_list.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package paperswithcode_go

import (
"encoding/json"
"fmt"
"github.com/codingpot/paperswithcode-go/v2/models"
)
Expand All @@ -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
}
err := c.sendGetRequest(url, &listResult)
return &listResult, err
}
22 changes: 12 additions & 10 deletions method_list_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"),
},
},
},
Expand All @@ -54,11 +53,14 @@ 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)
})
}
}

func toPtr(s string) *string {
return &s
}
}
17 changes: 3 additions & 14 deletions paper_get.go
Original file line number Diff line number Diff line change
@@ -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
}
2 changes: 1 addition & 1 deletion paper_get_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
16 changes: 2 additions & 14 deletions paper_list.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package paperswithcode_go

import (
"encoding/json"
"fmt"
"strings"

Expand All @@ -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.
Expand Down
13 changes: 1 addition & 12 deletions paper_method_list.go
Original file line number Diff line number Diff line change
@@ -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
}
14 changes: 2 additions & 12 deletions paper_repository_list.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package paperswithcode_go

import (
"encoding/json"
"fmt"
"github.com/codingpot/paperswithcode-go/v2/models"
"net/url"
Expand All @@ -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
}
15 changes: 2 additions & 13 deletions paper_result_list.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package paperswithcode_go

import (
"encoding/json"
"fmt"
"github.com/codingpot/paperswithcode-go/v2/models"
"net/url"
Expand All @@ -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
}
14 changes: 2 additions & 12 deletions paper_task_list.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package paperswithcode_go

import (
"encoding/json"
"fmt"
"github.com/codingpot/paperswithcode-go/v2/models"
"net/url"
Expand All @@ -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
}
12 changes: 12 additions & 0 deletions send_get_request.go
Original file line number Diff line number Diff line change
@@ -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)
}

0 comments on commit 669236a

Please sign in to comment.