Skip to content

Commit

Permalink
Merge pull request #2 from ChrisYammine/1.0
Browse files Browse the repository at this point in the history
1.0
  • Loading branch information
yammine authored Sep 23, 2016
2 parents 049cc41 + e2485fb commit 3eec6c3
Show file tree
Hide file tree
Showing 27 changed files with 698 additions and 223 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,6 @@ erl_crash.dump

# Also ignore archive artifacts (built via "mix archive.build").
*.ez

# Used to export env vars by direnv
.envrc
38 changes: 33 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,34 @@ A library for interfacing with the Trello API.

Heavily influenced by https://github.com/parroty/extwitter with some stuff straight ripped out of it.

## **Important! Migration from 0.x -> 1.x**
Since this change will break all existing projects using ExTrello upon upgrading this deserves a spot at the top :)

All calls to the Trello API will now be wrapped in a tuple with the first element either being `:ok`, `:error`, or `:connection_error`
Regular errors will no longer raise exceptions as that is not idiomatic.

Here's an example(just a little sample):
```elixir
# Old and bad
boards = ExTrello.boards()
# New and great
{:ok, boards} = ExTrello.boards()

# Old and bad, yuck!
try do
ExTrello.get("potato/2")
rescue
%ExTrello.Error{code: code, message: message} -> IO.puts "ERROR[#{code}] - #{message}"
end

# New and fantastic
case ExTrello.get("potato/2") do
{:ok, response} -> response
{:error, %ExTrello.Error{code: code, message: message}} -> IO.puts "ERROR[#{code}] - #{message}"
{:connection_error, %ExTrello.ConnectionError{reason: _, message: message}} -> IO.puts "#{message} We should retry."
end
```

## Documentation
- https://hexdocs.pm/ex_trello

Expand All @@ -17,7 +45,7 @@ Heavily influenced by https://github.com/parroty/extwitter with some stuff strai
def deps do
[
...,
{:ex_trello, "~> 0.5.0"}
{:ex_trello, "~> 1.0.0"}
]
end
```
Expand Down Expand Up @@ -66,7 +94,7 @@ defmodule TrelloServer do
end

def init(%User{token: token, token_secret: token_secret}) do
ExTrello.configure(
:ok = ExTrello.configure(
:process,
consumer_key: System.get_env("TRELLO_CONSUMER_KEY"),
consumer_secret: System.get_env("TRELLO_CONSUMER_SECRET"),
Expand All @@ -88,7 +116,7 @@ Example for authorization. This is a naive solution that only works for demonstr
TODO: Set up example application.
```elixir
# First we have to get a request token from Trello.
token = ExTrello.request_token("http://localhost:4000/auth/trello/callback/1234")
{:ok, token} = ExTrello.request_token("http://localhost:4000/auth/trello/callback/1234")
# We have to store this token because we need the `oauth_token_secret` after the callback to obtain our access token & secret.
# e.g. TokenAgent.store("1234", token.oauth_token_secret)

Expand Down Expand Up @@ -122,7 +150,7 @@ ExTrello.configure(
)

# Testing our token!
ExTrello.member() # Fetches the authenticated member record from Trello
{:ok, member} = ExTrello.member() # Fetches the authenticated member record from Trello
```


Expand All @@ -136,7 +164,7 @@ ExTrello.member() # Fetches the authenticated member record from Trello
- [x] ~~Implement own OAuth 1.0 library to remove dependency on `erlang-oauth` (or investigate existing solutions)~~
- [x] ~~Usage tutorial.~~
- [x] ~~Tests (IN PROGRESS)~~
- [ ] Add models for label, checklist, ~~member~~, notification, ~~organization~~, session, token, ~~action~~
- [ ] Add models for label, ~~checklist~~, ~~member~~, notification, ~~organization~~, session, token, ~~action~~
- [ ] Pagination
- [ ] Example Application
- [ ] Investigate handling storage of request_token.oauth_token_secret instead of leaving that up to the dev.
Expand Down
38 changes: 38 additions & 0 deletions fixtures/custom_cassettes/request_token_app_not_found.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
[
{
"request": {
"body": "",
"headers": {
"Authorization": "***"
},
"method": "get",
"options": [],
"request_body": "",
"url": "https://api.trello.com/1/OAuthGetRequestToken?"
},
"response": {
"body": "App not found",
"headers": {
"Cache-Control": "no-store, no-cache",
"X-Content-Type-Options": "nosniff",
"Strict-Transport-Security": "max-age=15768000",
"X-XSS-Protection": "1; mode=block",
"X-FRAME-OPTIONS": "DENY",
"X-Trello-Version": "1.731.0",
"X-Trello-Environment": "Production",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, PUT, POST, DELETE",
"Access-Control-Allow-Headers": "Authorization, Accept, Content-Type",
"Content-Type": "text/plain; charset=utf-8",
"Content-Length": "13",
"ETag": "W/\"d-ee17eb3f\"",
"Vary": "Accept-Encoding",
"Date": "Wed, 24 Aug 2016 01:54:05 GMT",
"Connection": "keep-alive",
"Set-Cookie": "<REMOVED> Secure"
},
"status_code": 500,
"type": "ok"
}
}
]
39 changes: 39 additions & 0 deletions fixtures/vcr_cassettes/get_card_with_checklists.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
[
{
"request": {
"body": "",
"headers": {
"Authorization": "***"
},
"method": "get",
"options": [],
"request_body": "",
"url": "https://api.trello.com/1/cards/57bd2602cdde0dc976b45606?checklists=all"
},
"response": {
"body": "{\"id\":\"57bd2602cdde0dc976b45606\",\"badges\":{\"votes\":0,\"viewingMemberVoted\":false,\"subscribed\":false,\"fogbugz\":\"\",\"checkItems\":5,\"checkItemsChecked\":0,\"comments\":0,\"attachments\":0,\"description\":false,\"due\":null},\"checkItemStates\":[],\"closed\":false,\"dateLastActivity\":\"2016-08-24T04:44:03.635Z\",\"desc\":\"\",\"descData\":null,\"due\":null,\"email\":null,\"idBoard\":\"57a1228c2faa01332768dffa\",\"idChecklists\":[\"57bd260748d2ba4f69dcf72d\",\"57bd260f7a6996c51d762173\"],\"idLabels\":[],\"idList\":\"57a1228c2faa01332768dffb\",\"idMembers\":[],\"idShort\":1,\"idAttachmentCover\":null,\"manualCoverAttachment\":false,\"labels\":[],\"name\":\"some card\",\"pos\":65535,\"shortUrl\":\"https://trello.com/c/XxAtJgk9\",\"url\":\"https://trello.com/c/XxAtJgk9/1-some-card\",\"checklists\":[{\"id\":\"57bd260748d2ba4f69dcf72d\",\"name\":\"Checklist\",\"idBoard\":\"57a1228c2faa01332768dffa\",\"idCard\":\"57bd2602cdde0dc976b45606\",\"pos\":16384,\"checkItems\":[{\"state\":\"incomplete\",\"idChecklist\":\"57bd260748d2ba4f69dcf72d\",\"id\":\"57bd2609bc4c30ebec935afe\",\"name\":\"asdfa\",\"nameData\":null,\"pos\":16682},{\"state\":\"incomplete\",\"idChecklist\":\"57bd260748d2ba4f69dcf72d\",\"id\":\"57bd260a0e7455f5be839a6c\",\"name\":\"adsf\",\"nameData\":null,\"pos\":33384},{\"state\":\"incomplete\",\"idChecklist\":\"57bd260748d2ba4f69dcf72d\",\"id\":\"57bd260ac3c10ff0e7c1808c\",\"name\":\"sadf\",\"nameData\":null,\"pos\":50608}]},{\"id\":\"57bd260f7a6996c51d762173\",\"name\":\"Checklist\",\"idBoard\":\"57a1228c2faa01332768dffa\",\"idCard\":\"57bd2602cdde0dc976b45606\",\"pos\":32768,\"checkItems\":[{\"state\":\"incomplete\",\"idChecklist\":\"57bd260f7a6996c51d762173\",\"id\":\"57bd2611cb6ea5592e3df2c3\",\"name\":\"dfdf\",\"nameData\":null,\"pos\":17383},{\"state\":\"incomplete\",\"idChecklist\":\"57bd260f7a6996c51d762173\",\"id\":\"57bd2613c3f90e5e538f2e12\",\"name\":\"ggg\",\"nameData\":null,\"pos\":34432}]}]}",
"headers": {
"Cache-Control": "max-age=0, must-revalidate, no-cache, no-store",
"X-Content-Type-Options": "nosniff",
"Strict-Transport-Security": "max-age=15768000",
"X-XSS-Protection": "1; mode=block",
"X-FRAME-OPTIONS": "DENY",
"X-Trello-Version": "1.731.0",
"X-Trello-Environment": "Production",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, PUT, POST, DELETE",
"Access-Control-Allow-Headers": "Authorization, Accept, Content-Type",
"X-Server-Time": "1472014122643",
"Expires": "Thu, 01 Jan 1970 00:00:00",
"Content-Type": "application/json; charset=utf-8",
"ETag": "W/\"21qRdpp6UgjnXDRn/guKCA==\"",
"Date": "Wed, 24 Aug 2016 04:48:42 GMT",
"Content-Length": "1729",
"Connection": "keep-alive",
"Set-Cookie": "<REMOVED> Secure"
},
"status_code": 200,
"type": "ok"
}
}
]
40 changes: 40 additions & 0 deletions fixtures/vcr_cassettes/get_checklist.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[
{
"request": {
"body": "",
"headers": {
"Authorization": "***"
},
"method": "get",
"options": [],
"request_body": "",
"url": "https://api.trello.com/1/checklists/57bc918bfb1103f1d32ffe01?"
},
"response": {
"body": "{\"id\":\"57bc918bfb1103f1d32ffe01\",\"name\":\"Da list\",\"idBoard\":\"57b206dc864eadbd9c1b69c6\",\"idCard\":\"57bc9186b8d3aca75628c202\",\"pos\":16384,\"checkItems\":[{\"state\":\"incomplete\",\"idChecklist\":\"57bc918bfb1103f1d32ffe01\",\"id\":\"57bc918e811e504b53de35d9\",\"name\":\"Item yo\",\"nameData\":null,\"pos\":17297},{\"state\":\"incomplete\",\"idChecklist\":\"57bc918bfb1103f1d32ffe01\",\"id\":\"57bc9192fc9648ad386ac364\",\"name\":\"Something else\",\"nameData\":null,\"pos\":34195},{\"state\":\"incomplete\",\"idChecklist\":\"57bc918bfb1103f1d32ffe01\",\"id\":\"57bc91b30f0d2568d49301e0\",\"name\":\"https://trello.com/c/vgQNogbc do this\",\"nameData\":null,\"pos\":51405}]}",
"headers": {
"Cache-Control": "max-age=0, must-revalidate, no-cache, no-store",
"X-Content-Type-Options": "nosniff",
"Strict-Transport-Security": "max-age=15768000",
"X-XSS-Protection": "1; mode=block",
"X-FRAME-OPTIONS": "DENY",
"X-Trello-Version": "1.731.0",
"X-Trello-Environment": "Production",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, PUT, POST, DELETE",
"Access-Control-Allow-Headers": "Authorization, Accept, Content-Type",
"X-Server-Time": "1472014352621",
"Expires": "Thu, 01 Jan 1970 00:00:00",
"Content-Type": "application/json; charset=utf-8",
"Content-Length": "610",
"ETag": "W/\"262-3640f7c1\"",
"Vary": "Accept-Encoding",
"Date": "Wed, 24 Aug 2016 04:52:32 GMT",
"Connection": "keep-alive",
"Set-Cookie": "<REMOVED> Secure"
},
"status_code": 200,
"type": "ok"
}
}
]
39 changes: 39 additions & 0 deletions fixtures/vcr_cassettes/get_checklist_board_by_id.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
[
{
"request": {
"body": "",
"headers": {
"Authorization": "***"
},
"method": "get",
"options": [],
"request_body": "",
"url": "https://api.trello.com/1/checklists/57bc918bfb1103f1d32ffe01/board?"
},
"response": {
"body": "{\"id\":\"57b206dc864eadbd9c1b69c6\",\"name\":\"ExTrello\",\"desc\":\"An Elixir library to wrap the Trello API\",\"descData\":null,\"closed\":false,\"idOrganization\":null,\"invited\":false,\"pinned\":false,\"starred\":false,\"url\":\"https://trello.com/b/m36ZkROK/extrello\",\"prefs\":{\"permissionLevel\":\"private\",\"voting\":\"disabled\",\"comments\":\"members\",\"invitations\":\"members\",\"selfJoin\":true,\"cardCovers\":true,\"cardAging\":\"regular\",\"calendarFeedEnabled\":false,\"background\":\"blue\",\"backgroundImage\":null,\"backgroundImageScaled\":null,\"backgroundTile\":false,\"backgroundBrightness\":\"dark\",\"backgroundColor\":\"#0079BF\",\"canBePublic\":true,\"canBeOrg\":true,\"canBePrivate\":true,\"canInvite\":true},\"invitations\":[],\"memberships\":[{\"id\":\"57b206dc864eadbd9c1b69ca\",\"idMember\":\"560ee9cc994c6f0f35fd6259\",\"memberType\":\"admin\",\"unconfirmed\":false,\"deactivated\":false}],\"shortLink\":\"m36ZkROK\",\"subscribed\":false,\"labelNames\":{\"green\":\"\",\"yellow\":\"\",\"orange\":\"\",\"red\":\"\",\"purple\":\"\",\"blue\":\"\",\"sky\":\"\",\"lime\":\"\",\"pink\":\"\",\"black\":\"\"},\"powerUps\":[],\"dateLastActivity\":\"2016-08-24T01:59:15.754Z\",\"dateLastView\":\"2016-08-24T04:43:22.839Z\",\"shortUrl\":\"https://trello.com/b/m36ZkROK\",\"idTags\":[]}",
"headers": {
"Cache-Control": "max-age=0, must-revalidate, no-cache, no-store",
"X-Content-Type-Options": "nosniff",
"Strict-Transport-Security": "max-age=15768000",
"X-XSS-Protection": "1; mode=block",
"X-FRAME-OPTIONS": "DENY",
"X-Trello-Version": "1.731.0",
"X-Trello-Environment": "Production",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, PUT, POST, DELETE",
"Access-Control-Allow-Headers": "Authorization, Accept, Content-Type",
"X-Server-Time": "1472016431469",
"Expires": "Thu, 01 Jan 1970 00:00:00",
"Content-Type": "application/json; charset=utf-8",
"ETag": "W/\"0xMUWRx2h5oPYCP+I2V+iQ==\"",
"Date": "Wed, 24 Aug 2016 05:27:11 GMT",
"Content-Length": "1146",
"Connection": "keep-alive",
"Set-Cookie": "<REMOVED> Secure"
},
"status_code": 200,
"type": "ok"
}
}
]
77 changes: 77 additions & 0 deletions fixtures/vcr_cassettes/get_checklist_board_by_struct.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
[
{
"request": {
"body": "",
"headers": {
"Authorization": "***"
},
"method": "get",
"options": [],
"request_body": "",
"url": "https://api.trello.com/1/checklists/57bc918bfb1103f1d32ffe01?"
},
"response": {
"body": "{\"id\":\"57bc918bfb1103f1d32ffe01\",\"name\":\"Da list\",\"idBoard\":\"57b206dc864eadbd9c1b69c6\",\"idCard\":\"57bc9186b8d3aca75628c202\",\"pos\":16384,\"checkItems\":[{\"state\":\"incomplete\",\"idChecklist\":\"57bc918bfb1103f1d32ffe01\",\"id\":\"57bc918e811e504b53de35d9\",\"name\":\"Item yo\",\"nameData\":null,\"pos\":17297},{\"state\":\"incomplete\",\"idChecklist\":\"57bc918bfb1103f1d32ffe01\",\"id\":\"57bc9192fc9648ad386ac364\",\"name\":\"Something else\",\"nameData\":null,\"pos\":34195},{\"state\":\"incomplete\",\"idChecklist\":\"57bc918bfb1103f1d32ffe01\",\"id\":\"57bc91b30f0d2568d49301e0\",\"name\":\"https://trello.com/c/vgQNogbc do this\",\"nameData\":null,\"pos\":51405}]}",
"headers": {
"Cache-Control": "max-age=0, must-revalidate, no-cache, no-store",
"X-Content-Type-Options": "nosniff",
"Strict-Transport-Security": "max-age=15768000",
"X-XSS-Protection": "1; mode=block",
"X-FRAME-OPTIONS": "DENY",
"X-Trello-Version": "1.731.0",
"X-Trello-Environment": "Production",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, PUT, POST, DELETE",
"Access-Control-Allow-Headers": "Authorization, Accept, Content-Type",
"X-Server-Time": "1472016428968",
"Expires": "Thu, 01 Jan 1970 00:00:00",
"Content-Type": "application/json; charset=utf-8",
"Content-Length": "610",
"ETag": "W/\"262-3640f7c1\"",
"Vary": "Accept-Encoding",
"Date": "Wed, 24 Aug 2016 05:27:09 GMT",
"Connection": "keep-alive",
"Set-Cookie": "<REMOVED> Secure"
},
"status_code": 200,
"type": "ok"
}
},
{
"request": {
"body": "",
"headers": {
"Authorization": "***"
},
"method": "get",
"options": [],
"request_body": "",
"url": "https://api.trello.com/1/checklists/57bc918bfb1103f1d32ffe01/board?"
},
"response": {
"body": "{\"id\":\"57b206dc864eadbd9c1b69c6\",\"name\":\"ExTrello\",\"desc\":\"An Elixir library to wrap the Trello API\",\"descData\":null,\"closed\":false,\"idOrganization\":null,\"invited\":false,\"pinned\":false,\"starred\":false,\"url\":\"https://trello.com/b/m36ZkROK/extrello\",\"prefs\":{\"permissionLevel\":\"private\",\"voting\":\"disabled\",\"comments\":\"members\",\"invitations\":\"members\",\"selfJoin\":true,\"cardCovers\":true,\"cardAging\":\"regular\",\"calendarFeedEnabled\":false,\"background\":\"blue\",\"backgroundImage\":null,\"backgroundImageScaled\":null,\"backgroundTile\":false,\"backgroundBrightness\":\"dark\",\"backgroundColor\":\"#0079BF\",\"canBePublic\":true,\"canBeOrg\":true,\"canBePrivate\":true,\"canInvite\":true},\"invitations\":[],\"memberships\":[{\"id\":\"57b206dc864eadbd9c1b69ca\",\"idMember\":\"560ee9cc994c6f0f35fd6259\",\"memberType\":\"admin\",\"unconfirmed\":false,\"deactivated\":false}],\"shortLink\":\"m36ZkROK\",\"subscribed\":false,\"labelNames\":{\"green\":\"\",\"yellow\":\"\",\"orange\":\"\",\"red\":\"\",\"purple\":\"\",\"blue\":\"\",\"sky\":\"\",\"lime\":\"\",\"pink\":\"\",\"black\":\"\"},\"powerUps\":[],\"dateLastActivity\":\"2016-08-24T01:59:15.754Z\",\"dateLastView\":\"2016-08-24T04:43:22.839Z\",\"shortUrl\":\"https://trello.com/b/m36ZkROK\",\"idTags\":[]}",
"headers": {
"Cache-Control": "max-age=0, must-revalidate, no-cache, no-store",
"X-Content-Type-Options": "nosniff",
"Strict-Transport-Security": "max-age=15768000",
"X-XSS-Protection": "1; mode=block",
"X-FRAME-OPTIONS": "DENY",
"X-Trello-Version": "1.731.0",
"X-Trello-Environment": "Production",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, PUT, POST, DELETE",
"Access-Control-Allow-Headers": "Authorization, Accept, Content-Type",
"X-Server-Time": "1472016429110",
"Expires": "Thu, 01 Jan 1970 00:00:00",
"Content-Type": "application/json; charset=utf-8",
"ETag": "W/\"0xMUWRx2h5oPYCP+I2V+iQ==\"",
"Date": "Wed, 24 Aug 2016 05:27:09 GMT",
"Content-Length": "1146",
"Connection": "keep-alive",
"Set-Cookie": "<REMOVED> Secure"
},
"status_code": 200,
"type": "ok"
}
}
]
39 changes: 39 additions & 0 deletions fixtures/vcr_cassettes/get_checklist_with_options.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
[
{
"request": {
"body": "",
"headers": {
"Authorization": "***"
},
"method": "get",
"options": [],
"request_body": "",
"url": "https://api.trello.com/1/checklists/57bc918bfb1103f1d32ffe01?cards=all&checkItem_fields=all"
},
"response": {
"body": "{\"id\":\"57bc918bfb1103f1d32ffe01\",\"name\":\"Da list\",\"idBoard\":\"57b206dc864eadbd9c1b69c6\",\"idCard\":\"57bc9186b8d3aca75628c202\",\"pos\":16384,\"checkItems\":[{\"state\":\"incomplete\",\"idChecklist\":\"57bc918bfb1103f1d32ffe01\",\"id\":\"57bc918e811e504b53de35d9\",\"name\":\"Item yo\",\"nameData\":null,\"type\":null,\"pos\":17297},{\"state\":\"incomplete\",\"idChecklist\":\"57bc918bfb1103f1d32ffe01\",\"id\":\"57bc9192fc9648ad386ac364\",\"name\":\"Something else\",\"nameData\":null,\"type\":null,\"pos\":34195},{\"state\":\"incomplete\",\"idChecklist\":\"57bc918bfb1103f1d32ffe01\",\"id\":\"57bc91b30f0d2568d49301e0\",\"name\":\"https://trello.com/c/vgQNogbc do this\",\"nameData\":null,\"type\":null,\"pos\":51405}],\"cards\":[{\"id\":\"57bc9186b8d3aca75628c202\",\"checkItemStates\":null,\"closed\":false,\"dateLastActivity\":\"2016-08-24T01:59:15.754Z\",\"desc\":\"\",\"descData\":null,\"idBoard\":\"57b206dc864eadbd9c1b69c6\",\"idList\":\"57b206dc864eadbd9c1b69c7\",\"idMembersVoted\":[],\"idShort\":1,\"idAttachmentCover\":null,\"manualCoverAttachment\":false,\"idLabels\":[],\"name\":\"Checklists ahoy\",\"pos\":65535,\"shortLink\":\"LgZRSvjx\",\"badges\":{\"votes\":0,\"viewingMemberVoted\":false,\"subscribed\":false,\"fogbugz\":\"\",\"checkItems\":4,\"checkItemsChecked\":0,\"comments\":0,\"attachments\":0,\"description\":false,\"due\":null},\"due\":null,\"idChecklists\":[\"57bc918bfb1103f1d32ffe01\",\"57bcff710227b4e67d4530a4\"],\"idMembers\":[],\"labels\":[],\"shortUrl\":\"https://trello.com/c/LgZRSvjx\",\"subscribed\":false,\"url\":\"https://trello.com/c/LgZRSvjx/1-checklists-ahoy\"}]}",
"headers": {
"Cache-Control": "max-age=0, must-revalidate, no-cache, no-store",
"X-Content-Type-Options": "nosniff",
"Strict-Transport-Security": "max-age=15768000",
"X-XSS-Protection": "1; mode=block",
"X-FRAME-OPTIONS": "DENY",
"X-Trello-Version": "1.731.0",
"X-Trello-Environment": "Production",
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, PUT, POST, DELETE",
"Access-Control-Allow-Headers": "Authorization, Accept, Content-Type",
"X-Server-Time": "1472014718735",
"Expires": "Thu, 01 Jan 1970 00:00:00",
"Content-Type": "application/json; charset=utf-8",
"ETag": "W/\"VtXm/CcpJpZOuxkq5zdzjw==\"",
"Date": "Wed, 24 Aug 2016 04:58:38 GMT",
"Content-Length": "1438",
"Connection": "keep-alive",
"Set-Cookie": "<REMOVED> Secure"
},
"status_code": 200,
"type": "ok"
}
}
]
Loading

0 comments on commit 3eec6c3

Please sign in to comment.