From 2693f6309f29c0d702fadb4193475e53a9740478 Mon Sep 17 00:00:00 2001 From: Mo Kweon Date: Fri, 28 May 2021 20:57:04 -0700 Subject: [PATCH 1/2] Implement PaperRepositoryList() --- client.go | 33 --------------------------------- cmd/client/main.go | 2 +- models/repository.go | 15 +++++++++++++++ paper_repository_list.go | 24 ++++++++++++++++++++++++ paper_repository_list_test.go | 13 +++++++++++++ 5 files changed, 53 insertions(+), 34 deletions(-) create mode 100644 models/repository.go create mode 100644 paper_repository_list.go create mode 100644 paper_repository_list_test.go diff --git a/client.go b/client.go index eeea0dd..fbddbfd 100644 --- a/client.go +++ b/client.go @@ -85,39 +85,6 @@ func (c *Client) GetMethodList(ctx context.Context, id string) (*MethodList, err return &res, nil } -// Repository List implementing by Paper's ID -type RepositoryList struct { - Count int `json:"count"` - Results []Repository `json:"results"` -} - -type Repository struct { - URL string `json:"url"` - IsOfficial bool `json:"is_official"` - Description string `json:"description"` - Stars int `json:"stars"` - Framework string `json:"framework"` -} - -func (c *Client) GetRepositoryList(ctx context.Context, id string) (*RepositoryList, error) { - fmt.Println(id) - url := fmt.Sprintf("%s/papers/%s/repositories", c.BaseURL, url.QueryEscape(id)) - req, err := http.NewRequest("GET", url, nil) - - if err != nil { - return nil, err - } - - req = req.WithContext(ctx) - - res := RepositoryList{} - if err := c.sendRequest(req, &res); err != nil { - return nil, err - } - - return &res, nil -} - func (c *Client) sendRequest(req *http.Request, v interface{}) error { req.Header.Set("Content-Type", "application/json; charset=utf-8") req.Header.Set("Accept", "application/json; charset=utf-8") diff --git a/cmd/client/main.go b/cmd/client/main.go index a317e12..f3e41be 100644 --- a/cmd/client/main.go +++ b/cmd/client/main.go @@ -31,7 +31,7 @@ func main() { fmt.Println() fmt.Println() - repositoryList, _ := c.GetRepositoryList(ctx, paper) + repositoryList, _ := c.PaperRepositoryList(paper) fmt.Println(repositoryList) fmt.Println() fmt.Println() diff --git a/models/repository.go b/models/repository.go new file mode 100644 index 0000000..a4fde54 --- /dev/null +++ b/models/repository.go @@ -0,0 +1,15 @@ +package models + +// RepositoryList contains code repositories implemented by a certain paper. +type RepositoryList struct { + Count int `json:"count"` + Results []Repository `json:"results"` +} + +type Repository struct { + URL string `json:"url"` + IsOfficial bool `json:"is_official"` + Description string `json:"description"` + Stars int `json:"stars"` + Framework string `json:"framework"` +} diff --git a/paper_repository_list.go b/paper_repository_list.go new file mode 100644 index 0000000..155540d --- /dev/null +++ b/paper_repository_list.go @@ -0,0 +1,24 @@ +package paperswithcode_go + +import ( + "encoding/json" + "fmt" + "github.com/codingpot/paperswithcode-go/models" + "net/url" +) + +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 +} diff --git a/paper_repository_list_test.go b/paper_repository_list_test.go new file mode 100644 index 0000000..e9dec58 --- /dev/null +++ b/paper_repository_list_test.go @@ -0,0 +1,13 @@ +package paperswithcode_go + +import ( + "github.com/stretchr/testify/assert" + "testing" +) + +func TestClient_PaperRepositoryList(t *testing.T) { + c := NewClient() + list, err := c.PaperRepositoryList("generative-adversarial-networks") + assert.NoError(t, err) + assert.NotEmpty(t, list.Results[0].URL) +} From 1ac0a7541d5d011ce343097bd138512fc97316b8 Mon Sep 17 00:00:00 2001 From: Mo Kweon Date: Sat, 29 May 2021 00:24:23 -0700 Subject: [PATCH 2/2] Add missing fields to RepositoryList model --- models/repository.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/models/repository.go b/models/repository.go index a4fde54..8cb127c 100644 --- a/models/repository.go +++ b/models/repository.go @@ -2,8 +2,10 @@ package models // RepositoryList contains code repositories implemented by a certain paper. type RepositoryList struct { - Count int `json:"count"` - Results []Repository `json:"results"` + Count int64 `json:"count"` + Next *string `json:"next"` + Previous *string `json:"previous"` + Results []Repository `json:"results"` } type Repository struct {