payload: {"action":"created","comment":{"url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls/comments/343579852","pull_request_review_id":313226519,"id":343579852,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDM0MzU3OTg1Mg==","diff_hunk":"@@ -0,0 +1,251 @@\n+// Copyright 2018 Owkin, inc.\n+//\n+// Licensed under the Apache License, Version 2.0 (the \"License\");\n+// you may not use this file except in compliance with the License.\n+// You may obtain a copy of the License at\n+//\n+//      http://www.apache.org/licenses/LICENSE-2.0\n+//\n+// Unless required by applicable law or agreed to in writing, software\n+// distributed under the License is distributed on an \"AS IS\" BASIS,\n+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n+// See the License for the specific language governing permissions and\n+// limitations under the License.\n+\n+package main\n+\n+import (\n+\t\"chaincode/errors\"\n+\t\"sort\"\n+\t\"strconv\"\n+)\n+\n+// createComputePlan is the wrapper for the substra smartcontract CreateComputePlan\n+func createComputePlan(db LedgerDB, args []string) (resp outputComputePlan, err error) {\n+\tinp := inputComputePlan{}\n+\terr = AssetFromJSON(args, &inp)\n+\tif err != nil {\n+\t\treturn\n+\t}\n+\ttraintupleKeysByID := map[string]string{}\n+\tresp.TraintupleKeys = []string{}\n+\tvar traintuplesTodo []outputTraintuple\n+\tfor i, computeTraintuple := range inp.Traintuples {\n+\t\tinpTraintuple := inputTraintuple{}\n+\t\tinpTraintuple.AlgoKey = inp.AlgoKey\n+\t\tinpTraintuple.ObjectiveKey = inp.ObjectiveKey\n+\t\tinpTraintuple.DataManagerKey = computeTraintuple.DataManagerKey\n+\t\tinpTraintuple.DataSampleKeys = computeTraintuple.DataSampleKeys\n+\t\tinpTraintuple.Tag = computeTraintuple.Tag\n+\t\tinpTraintuple.Rank = strconv.Itoa(i)\n+\n+\t\ttraintuple := Traintuple{}\n+\t\terr := traintuple.SetFromInput(db, inpTraintuple)\n+\t\tif err != nil {\n+\t\t\treturn resp, err\n+\t\t}\n+\n+\t\t// Set the inModels by matching the id to traintuples key previously\n+\t\t// encontered in this compute plan\n+\t\tfor _, InModelID := range computeTraintuple.InModelsIDs {\n+\t\t\tinModelKey, ok := traintupleKeysByID[InModelID]\n+\t\t\tif !ok {\n+\t\t\t\treturn resp, errors.BadRequest(\"traintuple ID %s: model ID %s not found, check traintuple list order\", computeTraintuple.ID, InModelID)\n+\t\t\t}\n+\t\t\ttraintuple.InModelKeys = append(traintuple.InModelKeys, inModelKey)\n+\t\t}\n+\n+\t\ttraintupleKey := traintuple.GetKey()\n+\n+\t\t// Set the ComputePlanID\n+\t\tif i == 0 {\n+\t\t\ttraintuple.ComputePlanID = traintupleKey\n+\t\t\tresp.ComputePlanID = traintuple.ComputePlanID\n+\t\t} else {\n+\t\t\ttraintuple.ComputePlanID = resp.ComputePlanID\n+\t\t}\n+\n+\t\t// Set status: if it has parents it's waiting\n+\t\t// if not it's todo and it has to be included in the event\n+\t\tif len(computeTraintuple.InModelsIDs) > 0 {\n+\t\t\ttraintuple.Status = StatusWaiting\n+\t\t} else {\n+\t\t\ttraintuple.Status = StatusTodo\n+\t\t\tout := outputTraintuple{}\n+\t\t\terr = out.Fill(db, traintuple, traintupleKey)\n+\t\t\tif err != nil {\n+\t\t\t\treturn resp, err\n+\t\t\t}\n+\t\t\ttraintuplesTodo = append(traintuplesTodo, out)\n+\t\t}\n+\n+\t\terr = traintuple.Save(db, traintupleKey)\n+\t\tif err != nil {\n+\t\t\treturn resp, err\n+\t\t}\n+\t\ttraintupleKeysByID[computeTraintuple.ID] = traintupleKey\n+\t\tresp.TraintupleKeys = append(resp.TraintupleKeys, traintupleKey)\n+\t}\n+\n+\tresp.TesttupleKeys = []string{}\n+\tfor index, computeTesttuple := range inp.Testtuples {\n+\t\ttraintupleKey, ok := traintupleKeysByID[computeTesttuple.TraintupleID]\n+\t\tif !ok {\n+\t\t\treturn resp, errors.BadRequest(\"testtuple index %s: traintuple ID %s not found\", index, computeTesttuple.TraintupleID)\n+\t\t}\n+\t\ttesttuple := Testtuple{}\n+\t\ttesttuple.Model = &Model{TraintupleKey: traintupleKey}\n+\t\ttesttuple.ObjectiveKey = inp.ObjectiveKey\n+\t\ttesttuple.AlgoKey = inp.AlgoKey\n+\n+\t\tinputTesttuple := inputTesttuple{}\n+\t\tinputTesttuple.DataManagerKey = computeTesttuple.DataManagerKey\n+\t\tinputTesttuple.DataSampleKeys = computeTesttuple.DataSampleKeys\n+\t\tinputTesttuple.Tag = computeTesttuple.Tag\n+\t\terr = testtuple.SetFromInput(db, inputTesttuple)\n+\t\tif err != nil {\n+\t\t\treturn resp, err\n+\t\t}\n+\t\ttesttuple.Status = StatusWaiting\n+\t\ttesttupleKey := testtuple.GetKey()\n+\t\terr = testtuple.Save(db, testtupleKey)\n+\t\tif err != nil {\n+\t\t\treturn resp, err\n+\t\t}\n+\t\tresp.TesttupleKeys = append(resp.TesttupleKeys, testtupleKey)\n+\t}\n+\n+\tevent := TuplesEvent{}\n+\tevent.SetTraintuples(traintuplesTodo...)\n+\terr = SendTuplesEvent(db.cc, event)\n+\tif err != nil {\n+\t\treturn resp, err\n+\t}\n+\n+\treturn resp, err\n+}\n+\n+func queryComputePlan(db LedgerDB, args []string) (resp outputComputePlanDetails, err error) {\n+\tinp := inputHash{}\n+\terr = AssetFromJSON(args, &inp)\n+\tif err != nil {\n+\t\treturn\n+\t}\n+\treturn getComputePlan(db, inp.Key)\n+}\n+\n+func queryComputePlans(db LedgerDB, args []string) (resp []outputComputePlanDetails, err error) {\n+\tcomputePlanKeys, err := db.GetIndexKeys(\"traintuple~computeplanid\", []string{\"computeplan\"})\n+\tif err != nil {\n+\t\treturn\n+\t}\n+\tfor _, key := range computePlanKeys {\n+\t\tvar computePlan outputComputePlanDetails\n+\t\tcomputePlan, err = getComputePlan(db, key)\n+\t\tif err != nil {\n+\t\t\treturn\n+\t\t}\n+\t\tresp = append(resp, computePlan)\n+\t}\n+\treturn resp, err\n+}\n+\n+func getComputePlan(db LedgerDB, key string) (resp outputComputePlanDetails, err error) {\n+\t// get traintuples\n+\ttraintuples, err := getTraintuplesForComputePlan(db, key)\n+\tif err != nil {\n+\t\treturn\n+\t}\n+\tif len(traintuples) == 0 {\n+\t\terr = errors.E(\"No traintuple found for compute plan %s\", key)\n+\t\treturn\n+\t}\n+\tvar firstTt *Traintuple\n+\tttKeys := []string{}\n+\toutTts := []outputTraintuple{}\n+\tfor _, traintupleAndKey := range traintuples {\n+\t\tttKey := traintupleAndKey.Key\n+\t\ttt := traintupleAndKey.Traintuple\n+\n+\t\tif firstTt == nil {\n+\t\t\tfirstTt = &tt\n+\t\t}\n+\t\tttKeys = append(ttKeys, ttKey)\n+\n+\t\toutTt := outputTraintuple{}\n+\t\toutTt.Fill(db, tt, ttKey)\n+\t\toutTts = append(outTts, outTt)\n+\t}","path":"chaincode/compute_plan.go","position":178,"original_position":178,"commit_id":"87a771d671a2e8945f6d5cab1e6349fa09b97b40","original_commit_id":"87a771d671a2e8945f6d5cab1e6349fa09b97b40","user":{"login":"thibaultrobert","id":33907951,"node_id":"MDQ6VXNlcjMzOTA3OTUx","avatar_url":"https://avatars2.githubusercontent.com/u/33907951?v=4","gravatar_id":"","url":"https://api.github.com/users/thibaultrobert","html_url":"https://github.com/thibaultrobert","followers_url":"https://api.github.com/users/thibaultrobert/followers","following_url":"https://api.github.com/users/thibaultrobert/following{/other_user}","gists_url":"https://api.github.com/users/thibaultrobert/gists{/gist_id}","starred_url":"https://api.github.com/users/thibaultrobert/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thibaultrobert/subscriptions","organizations_url":"https://api.github.com/users/thibaultrobert/orgs","repos_url":"https://api.github.com/users/thibaultrobert/repos","events_url":"https://api.github.com/users/thibaultrobert/events{/privacy}","received_events_url":"https://api.github.com/users/thibaultrobert/received_events","type":"User","site_admin":false},"body":"I have the impression we range over that list twice and it could be avoided if `getTraintupleForComputePlan` would return `OutputTraintuple` already filled. But I could clearly be missing something.","created_at":"2019-11-07T10:34:01Z","updated_at":"2019-11-07T10:48:11Z","html_url":"https://github.com/SubstraFoundation/substra-chaincode/pull/22#discussion_r343579852","pull_request_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls/22","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls/comments/343579852"},"html":{"href":"https://github.com/SubstraFoundation/substra-chaincode/pull/22#discussion_r343579852"},"pull_request":{"href":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls/22"}}},"pull_request":{"url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls/22","id":337671131,"node_id":"MDExOlB1bGxSZXF1ZXN0MzM3NjcxMTMx","html_url":"https://github.com/SubstraFoundation/substra-chaincode/pull/22","diff_url":"https://github.com/SubstraFoundation/substra-chaincode/pull/22.diff","patch_url":"https://github.com/SubstraFoundation/substra-chaincode/pull/22.patch","issue_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/issues/22","number":22,"state":"open","locked":false,"title":"queryComputePlan smart contracts ","user":{"login":"AurelienGasser","id":168382,"node_id":"MDQ6VXNlcjE2ODM4Mg==","avatar_url":"https://avatars2.githubusercontent.com/u/168382?v=4","gravatar_id":"","url":"https://api.github.com/users/AurelienGasser","html_url":"https://github.com/AurelienGasser","followers_url":"https://api.github.com/users/AurelienGasser/followers","following_url":"https://api.github.com/users/AurelienGasser/following{/other_user}","gists_url":"https://api.github.com/users/AurelienGasser/gists{/gist_id}","starred_url":"https://api.github.com/users/AurelienGasser/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AurelienGasser/subscriptions","organizations_url":"https://api.github.com/users/AurelienGasser/orgs","repos_url":"https://api.github.com/users/AurelienGasser/repos","events_url":"https://api.github.com/users/AurelienGasser/events{/privacy}","received_events_url":"https://api.github.com/users/AurelienGasser/received_events","type":"User","site_admin":false},"body":"Smart contract `queryComputePlan`\r\n\r\n- input: compute plan key\r\n- output: `outputComputePlanDetails`\r\n\r\nSmart contract `queryComputePlans`\r\n\r\n- input: none\r\n- output: `[]outputComputePlanDetails`\r\n\r\n---\r\n\r\n`outputComputePlanDetails`:\r\n\r\n- `computePlanID`: `string`\r\n- `algoKey`:       `string`\r\n- `objectiveKey`:  `string`\r\n- `traintuples`:   `[]outputTraintuple` (same as smart contract `queryTraintuples`)\r\n- `testtuples`:    `[]outputTesttuple` (same as smart contract `queryTesttuples`)\r\n","created_at":"2019-11-06T21:51:41Z","updated_at":"2019-11-07T10:48:11Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ff8bea8ff47469a1412f2d11682f4a90871615ac","assignee":null,"assignees":[],"requested_reviewers":[{"login":"inalgnu","id":665908,"node_id":"MDQ6VXNlcjY2NTkwOA==","avatar_url":"https://avatars0.githubusercontent.com/u/665908?v=4","gravatar_id":"","url":"https://api.github.com/users/inalgnu","html_url":"https://github.com/inalgnu","followers_url":"https://api.github.com/users/inalgnu/followers","following_url":"https://api.github.com/users/inalgnu/following{/other_user}","gists_url":"https://api.github.com/users/inalgnu/gists{/gist_id}","starred_url":"https://api.github.com/users/inalgnu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/inalgnu/subscriptions","organizations_url":"https://api.github.com/users/inalgnu/orgs","repos_url":"https://api.github.com/users/inalgnu/repos","events_url":"https://api.github.com/users/inalgnu/events{/privacy}","received_events_url":"https://api.github.com/users/inalgnu/received_events","type":"User","site_admin":false},{"login":"jmorel","id":1270900,"node_id":"MDQ6VXNlcjEyNzA5MDA=","avatar_url":"https://avatars0.githubusercontent.com/u/1270900?v=4","gravatar_id":"","url":"https://api.github.com/users/jmorel","html_url":"https://github.com/jmorel","followers_url":"https://api.github.com/users/jmorel/followers","following_url":"https://api.github.com/users/jmorel/following{/other_user}","gists_url":"https://api.github.com/users/jmorel/gists{/gist_id}","starred_url":"https://api.github.com/users/jmorel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jmorel/subscriptions","organizations_url":"https://api.github.com/users/jmorel/orgs","repos_url":"https://api.github.com/users/jmorel/repos","events_url":"https://api.github.com/users/jmorel/events{/privacy}","received_events_url":"https://api.github.com/users/jmorel/received_events","type":"User","site_admin":false},{"login":"camillemarini","id":3705071,"node_id":"MDQ6VXNlcjM3MDUwNzE=","avatar_url":"https://avatars3.githubusercontent.com/u/3705071?v=4","gravatar_id":"","url":"https://api.github.com/users/camillemarini","html_url":"https://github.com/camillemarini","followers_url":"https://api.github.com/users/camillemarini/followers","following_url":"https://api.github.com/users/camillemarini/following{/other_user}","gists_url":"https://api.github.com/users/camillemarini/gists{/gist_id}","starred_url":"https://api.github.com/users/camillemarini/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/camillemarini/subscriptions","organizations_url":"https://api.github.com/users/camillemarini/orgs","repos_url":"https://api.github.com/users/camillemarini/repos","events_url":"https://api.github.com/users/camillemarini/events{/privacy}","received_events_url":"https://api.github.com/users/camillemarini/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls/22/commits","review_comments_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls/22/comments","review_comment_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls/comments{/number}","comments_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/issues/22/comments","statuses_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/statuses/87a771d671a2e8945f6d5cab1e6349fa09b97b40","head":{"label":"SubstraFoundation:feature/query-compute-plan","ref":"feature/query-compute-plan","sha":"87a771d671a2e8945f6d5cab1e6349fa09b97b40","user":{"login":"SubstraFoundation","id":38098422,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4MDk4NDIy","avatar_url":"https://avatars3.githubusercontent.com/u/38098422?v=4","gravatar_id":"","url":"https://api.github.com/users/SubstraFoundation","html_url":"https://github.com/SubstraFoundation","followers_url":"https://api.github.com/users/SubstraFoundation/followers","following_url":"https://api.github.com/users/SubstraFoundation/following{/other_user}","gists_url":"https://api.github.com/users/SubstraFoundation/gists{/gist_id}","starred_url":"https://api.github.com/users/SubstraFoundation/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SubstraFoundation/subscriptions","organizations_url":"https://api.github.com/users/SubstraFoundation/orgs","repos_url":"https://api.github.com/users/SubstraFoundation/repos","events_url":"https://api.github.com/users/SubstraFoundation/events{/privacy}","received_events_url":"https://api.github.com/users/SubstraFoundation/received_events","type":"Organization","site_admin":false},"repo":{"id":217492924,"node_id":"MDEwOlJlcG9zaXRvcnkyMTc0OTI5MjQ=","name":"substra-chaincode","full_name":"SubstraFoundation/substra-chaincode","private":false,"owner":{"login":"SubstraFoundation","id":38098422,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4MDk4NDIy","avatar_url":"https://avatars3.githubusercontent.com/u/38098422?v=4","gravatar_id":"","url":"https://api.github.com/users/SubstraFoundation","html_url":"https://github.com/SubstraFoundation","followers_url":"https://api.github.com/users/SubstraFoundation/followers","following_url":"https://api.github.com/users/SubstraFoundation/following{/other_user}","gists_url":"https://api.github.com/users/SubstraFoundation/gists{/gist_id}","starred_url":"https://api.github.com/users/SubstraFoundation/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SubstraFoundation/subscriptions","organizations_url":"https://api.github.com/users/SubstraFoundation/orgs","repos_url":"https://api.github.com/users/SubstraFoundation/repos","events_url":"https://api.github.com/users/SubstraFoundation/events{/privacy}","received_events_url":"https://api.github.com/users/SubstraFoundation/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/SubstraFoundation/substra-chaincode","description":"Chaincode for the Substra platform","fork":false,"url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode","forks_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/forks","keys_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/teams","hooks_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/hooks","issue_events_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/issues/events{/number}","events_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/events","assignees_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/assignees{/user}","branches_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/branches{/branch}","tags_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/tags","blobs_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/git/refs{/sha}","trees_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/statuses/{sha}","languages_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/languages","stargazers_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/stargazers","contributors_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/contributors","subscribers_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/subscribers","subscription_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/subscription","commits_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/commits{/sha}","git_commits_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/git/commits{/sha}","comments_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/comments{/number}","issue_comment_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/issues/comments{/number}","contents_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/contents/{+path}","compare_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/merges","archive_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/downloads","issues_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/issues{/number}","pulls_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls{/number}","milestones_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/milestones{/number}","notifications_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/labels{/name}","releases_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/releases{/id}","deployments_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/deployments","created_at":"2019-10-25T08:53:19Z","updated_at":"2019-11-05T19:58:00Z","pushed_at":"2019-11-06T21:51:42Z","git_url":"git://github.com/SubstraFoundation/substra-chaincode.git","ssh_url":"git@github.com:SubstraFoundation/substra-chaincode.git","clone_url":"https://github.com/SubstraFoundation/substra-chaincode.git","svn_url":"https://github.com/SubstraFoundation/substra-chaincode","homepage":"","size":10947,"stargazers_count":11,"watchers_count":11,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":6,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":11,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":6,"open_issues":11,"watchers":11,"default_branch":"dev"}},"base":{"label":"SubstraFoundation:dev","ref":"dev","sha":"f953fb4610a796d3753e0fccb0a5125ff6c2ad47","user":{"login":"SubstraFoundation","id":38098422,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4MDk4NDIy","avatar_url":"https://avatars3.githubusercontent.com/u/38098422?v=4","gravatar_id":"","url":"https://api.github.com/users/SubstraFoundation","html_url":"https://github.com/SubstraFoundation","followers_url":"https://api.github.com/users/SubstraFoundation/followers","following_url":"https://api.github.com/users/SubstraFoundation/following{/other_user}","gists_url":"https://api.github.com/users/SubstraFoundation/gists{/gist_id}","starred_url":"https://api.github.com/users/SubstraFoundation/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SubstraFoundation/subscriptions","organizations_url":"https://api.github.com/users/SubstraFoundation/orgs","repos_url":"https://api.github.com/users/SubstraFoundation/repos","events_url":"https://api.github.com/users/SubstraFoundation/events{/privacy}","received_events_url":"https://api.github.com/users/SubstraFoundation/received_events","type":"Organization","site_admin":false},"repo":{"id":217492924,"node_id":"MDEwOlJlcG9zaXRvcnkyMTc0OTI5MjQ=","name":"substra-chaincode","full_name":"SubstraFoundation/substra-chaincode","private":false,"owner":{"login":"SubstraFoundation","id":38098422,"node_id":"MDEyOk9yZ2FuaXphdGlvbjM4MDk4NDIy","avatar_url":"https://avatars3.githubusercontent.com/u/38098422?v=4","gravatar_id":"","url":"https://api.github.com/users/SubstraFoundation","html_url":"https://github.com/SubstraFoundation","followers_url":"https://api.github.com/users/SubstraFoundation/followers","following_url":"https://api.github.com/users/SubstraFoundation/following{/other_user}","gists_url":"https://api.github.com/users/SubstraFoundation/gists{/gist_id}","starred_url":"https://api.github.com/users/SubstraFoundation/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/SubstraFoundation/subscriptions","organizations_url":"https://api.github.com/users/SubstraFoundation/orgs","repos_url":"https://api.github.com/users/SubstraFoundation/repos","events_url":"https://api.github.com/users/SubstraFoundation/events{/privacy}","received_events_url":"https://api.github.com/users/SubstraFoundation/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/SubstraFoundation/substra-chaincode","description":"Chaincode for the Substra platform","fork":false,"url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode","forks_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/forks","keys_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/keys{/key_id}","collaborators_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/teams","hooks_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/hooks","issue_events_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/issues/events{/number}","events_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/events","assignees_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/assignees{/user}","branches_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/branches{/branch}","tags_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/tags","blobs_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/git/refs{/sha}","trees_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/git/trees{/sha}","statuses_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/statuses/{sha}","languages_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/languages","stargazers_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/stargazers","contributors_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/contributors","subscribers_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/subscribers","subscription_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/subscription","commits_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/commits{/sha}","git_commits_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/git/commits{/sha}","comments_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/comments{/number}","issue_comment_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/issues/comments{/number}","contents_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/contents/{+path}","compare_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/compare/{base}...{head}","merges_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/merges","archive_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/downloads","issues_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/issues{/number}","pulls_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls{/number}","milestones_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/milestones{/number}","notifications_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/labels{/name}","releases_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/releases{/id}","deployments_url":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/deployments","created_at":"2019-10-25T08:53:19Z","updated_at":"2019-11-05T19:58:00Z","pushed_at":"2019-11-06T21:51:42Z","git_url":"git://github.com/SubstraFoundation/substra-chaincode.git","ssh_url":"git@github.com:SubstraFoundation/substra-chaincode.git","clone_url":"https://github.com/SubstraFoundation/substra-chaincode.git","svn_url":"https://github.com/SubstraFoundation/substra-chaincode","homepage":"","size":10947,"stargazers_count":11,"watchers_count":11,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":6,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":11,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":6,"open_issues":11,"watchers":11,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls/22"},"html":{"href":"https://github.com/SubstraFoundation/substra-chaincode/pull/22"},"issue":{"href":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/issues/22"},"comments":{"href":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/issues/22/comments"},"review_comments":{"href":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls/22/comments"},"review_comment":{"href":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/pulls/22/commits"},"statuses":{"href":"https://api.github.com/repos/SubstraFoundation/substra-chaincode/statuses/87a771d671a2e8945f6d5cab1e6349fa09b97b40"}},"author_association":"MEMBER"}}
other: {"actor":{"display_login":"thibaultrobert"}}