{"action":"created","comment":{"url":"https://api.github.com/repos/root-project/root/pulls/comments/176411078","pull_request_review_id":106106147,"id":176411078,"diff_hunk":"@@ -0,0 +1,324 @@\n+// Author: Giulio Eulisse CERN  2/2018\n+\n+/*************************************************************************\n+ * Copyright (C) 1995-2018, Rene Brun and Fons Rademakers.               *\n+ * All rights reserved.                                                  *\n+ *                                                                       *\n+ * For the licensing terms see $ROOTSYS/LICENSE.                         *\n+ * For the list of contributors see $ROOTSYS/README/CREDITS.             *\n+ *************************************************************************/\n+\n+// clang-format off\n+/** \\class ROOT::Experimental::TDF::TArrowDS\n+    \\ingroup dataframe\n+    \\brief TDataFrame data source class to interface with Apache Arrow.\n+\n+The TArrowDS implements a proxy TDataSource to be able to use Apache Arrow\n+tables with TDataFrame.\n+\n+A TDataFrame that adapts an arrow::Table class can be constructed using the factory method\n+ROOT::Experimental::TDF::MakeArrowDataFrame, which accepts one parameter:\n+1. An arrow::Table smart pointer.\n+\n+The types of the columns are derived from the types in the associated\n+arrow::Schema. \n+\n+*/\n+// clang-format on\n+\n+#include <ROOT/TDFUtils.hxx>\n+#include <ROOT/TSeq.hxx>\n+#include <ROOT/TArrowDS.hxx>\n+#include <ROOT/RMakeUnique.hxx>\n+\n+#include <algorithm>\n+#include <sstream>\n+#include <string>\n+#include <arrow/table.h>\n+\n+namespace ROOT {\n+namespace Experimental {\n+namespace TDF {\n+\n+/// Helper to get the contents of a given column\n+\n+/// Helper to get the human readable name of type\n+class TDFTypeNameGetter : public arrow::TypeVisitor {\n+private:\n+   std::string fTypeName;\n+\n+public:\n+   arrow::Status Visit(const arrow::Int64Type &) override\n+   {\n+      fTypeName = \"Long64_t\";\n+      return arrow::Status::OK();\n+   }\n+   arrow::Status Visit(const arrow::Int32Type &) override\n+   {\n+      fTypeName = \"Long32_t\";\n+      return arrow::Status::OK();\n+   }\n+   arrow::Status Visit(const arrow::UInt64Type &) override\n+   {\n+      fTypeName = \"ULong64_t\";\n+      return arrow::Status::OK();\n+   }\n+   arrow::Status Visit(const arrow::UInt32Type &) override\n+   {\n+      fTypeName = \"ULong32_t\";\n+      return arrow::Status::OK();\n+   }\n+   arrow::Status Visit(const arrow::FloatType &) override\n+   {\n+      fTypeName = \"float\";\n+      return arrow::Status::OK();\n+   }\n+   arrow::Status Visit(const arrow::DoubleType &) override\n+   {\n+      fTypeName = \"double\";\n+      return arrow::Status::OK();\n+   }\n+   arrow::Status Visit(const arrow::StringType &) override\n+   {\n+      fTypeName = \"string\";\n+      return arrow::Status::OK();\n+   }\n+   arrow::Status Visit(const arrow::BooleanType &) override\n+   {\n+      fTypeName = \"bool\";\n+      return arrow::Status::OK();\n+   }\n+   std::string result() { return fTypeName; }\n+};\n+\n+/// Helper to determine if a given Column is a supported type.\n+class VerifyValidColumnType : public arrow::TypeVisitor {\n+private:\n+public:\n+   virtual arrow::Status Visit(const arrow::Int64Type &) override { return arrow::Status::OK(); }\n+   virtual arrow::Status Visit(const arrow::Int32Type &) override { return arrow::Status::OK(); }\n+   virtual arrow::Status Visit(const arrow::FloatType &) override { return arrow::Status::OK(); }\n+   virtual arrow::Status Visit(const arrow::DoubleType &) override { return arrow::Status::OK(); }\n+   virtual arrow::Status Visit(const arrow::StringType &) override { return arrow::Status::OK(); }\n+   virtual arrow::Status Visit(const arrow::BooleanType &) override { return arrow::Status::OK(); }\n+};\n+\n+////////////////////////////////////////////////////////////////////////\n+/// Constructor to create an Arrow TDataSource for TDataFrame.\n+/// \\param[in] table the arrow Table to observe.\n+/// \\param[in] columns the name of the columns to use\n+/// In case columns is empty, we use all the columns found in the table\n+TArrowDS::TArrowDS(std::shared_ptr<arrow::Table> table, std::vector<std::string> const &columns)\n+   : fTable{table}, fColumnNames{columns}, fNSlots(1)\n+{\n+   // We want to allow people to specify which columns they\n+   // need so that we can think of upfront IO optimizations.\n+   // FIXME: Not sure this is really needed...\n+   auto filterWantedColumns = [&columns = fColumnNames, &table = fTable ]()\n+   {\n+      if (columns.empty()) {\n+         for (auto &field : table->schema()->fields()) {\n+            columns.push_back(field->name());\n+         }\n+      }\n+   };\n+\n+   // For the moment we assume that the table is rectangular","path":"tree/treeplayer/src/TArrowDS.cxx","position":126,"original_position":126,"commit_id":"0ccc4a294f6af3bc80417390377c338f33438038","original_commit_id":"0ccc4a294f6af3bc80417390377c338f33438038","user":{"login":"ktf","id":10544,"avatar_url":"https://avatars0.githubusercontent.com/u/10544?v=4","gravatar_id":"","url":"https://api.github.com/users/ktf","html_url":"https://github.com/ktf","followers_url":"https://api.github.com/users/ktf/followers","following_url":"https://api.github.com/users/ktf/following{/other_user}","gists_url":"https://api.github.com/users/ktf/gists{/gist_id}","starred_url":"https://api.github.com/users/ktf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ktf/subscriptions","organizations_url":"https://api.github.com/users/ktf/orgs","repos_url":"https://api.github.com/users/ktf/repos","events_url":"https://api.github.com/users/ktf/events{/privacy}","received_events_url":"https://api.github.com/users/ktf/received_events","type":"User","site_admin":false},"body":"Bad comment here. I removed it.","created_at":"2018-03-22T13:03:34Z","updated_at":"2018-03-22T13:03:34Z","html_url":"https://github.com/root-project/root/pull/1712#discussion_r176411078","pull_request_url":"https://api.github.com/repos/root-project/root/pulls/1712","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/root-project/root/pulls/comments/176411078"},"html":{"href":"https://github.com/root-project/root/pull/1712#discussion_r176411078"},"pull_request":{"href":"https://api.github.com/repos/root-project/root/pulls/1712"}},"in_reply_to_id":174171446},"pull_request":{"url":"https://api.github.com/repos/root-project/root/pulls/1712","id":173733627,"html_url":"https://github.com/root-project/root/pull/1712","diff_url":"https://github.com/root-project/root/pull/1712.diff","patch_url":"https://github.com/root-project/root/pull/1712.patch","issue_url":"https://api.github.com/repos/root-project/root/issues/1712","number":1712,"state":"open","locked":false,"title":"Add initial support for an Apache Arrow based TDataFrame","user":{"login":"ktf","id":10544,"avatar_url":"https://avatars0.githubusercontent.com/u/10544?v=4","gravatar_id":"","url":"https://api.github.com/users/ktf","html_url":"https://github.com/ktf","followers_url":"https://api.github.com/users/ktf/followers","following_url":"https://api.github.com/users/ktf/following{/other_user}","gists_url":"https://api.github.com/users/ktf/gists{/gist_id}","starred_url":"https://api.github.com/users/ktf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ktf/subscriptions","organizations_url":"https://api.github.com/users/ktf/orgs","repos_url":"https://api.github.com/users/ktf/repos","events_url":"https://api.github.com/users/ktf/events{/privacy}","received_events_url":"https://api.github.com/users/ktf/received_events","type":"User","site_admin":false},"body":"Apache Arrow is a cross-language development platform for in-memory data\r\nwhich is backed by a number of opensource projects including Calcite,\r\nCassandra, Drill, Hadoop, HBase, Ibis, Impala, Kudu, Pandas, Parquet,\r\nPhoenix, Spark, and Storm. This implements a TDataSource which allows\r\nusing columns in a `arrow::Table` as an input to a TDataFrame.","created_at":"2018-03-08T13:19:52Z","updated_at":"2018-03-22T13:03:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"85128ec1378ec9021a4b67532ed5e7cc8fe1f265","assignee":{"login":"amadio","id":249404,"avatar_url":"https://avatars2.githubusercontent.com/u/249404?v=4","gravatar_id":"","url":"https://api.github.com/users/amadio","html_url":"https://github.com/amadio","followers_url":"https://api.github.com/users/amadio/followers","following_url":"https://api.github.com/users/amadio/following{/other_user}","gists_url":"https://api.github.com/users/amadio/gists{/gist_id}","starred_url":"https://api.github.com/users/amadio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/amadio/subscriptions","organizations_url":"https://api.github.com/users/amadio/orgs","repos_url":"https://api.github.com/users/amadio/repos","events_url":"https://api.github.com/users/amadio/events{/privacy}","received_events_url":"https://api.github.com/users/amadio/received_events","type":"User","site_admin":false},"assignees":[{"login":"amadio","id":249404,"avatar_url":"https://avatars2.githubusercontent.com/u/249404?v=4","gravatar_id":"","url":"https://api.github.com/users/amadio","html_url":"https://github.com/amadio","followers_url":"https://api.github.com/users/amadio/followers","following_url":"https://api.github.com/users/amadio/following{/other_user}","gists_url":"https://api.github.com/users/amadio/gists{/gist_id}","starred_url":"https://api.github.com/users/amadio/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/amadio/subscriptions","organizations_url":"https://api.github.com/users/amadio/orgs","repos_url":"https://api.github.com/users/amadio/repos","events_url":"https://api.github.com/users/amadio/events{/privacy}","received_events_url":"https://api.github.com/users/amadio/received_events","type":"User","site_admin":false},{"login":"dpiparo","id":7850302,"avatar_url":"https://avatars2.githubusercontent.com/u/7850302?v=4","gravatar_id":"","url":"https://api.github.com/users/dpiparo","html_url":"https://github.com/dpiparo","followers_url":"https://api.github.com/users/dpiparo/followers","following_url":"https://api.github.com/users/dpiparo/following{/other_user}","gists_url":"https://api.github.com/users/dpiparo/gists{/gist_id}","starred_url":"https://api.github.com/users/dpiparo/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dpiparo/subscriptions","organizations_url":"https://api.github.com/users/dpiparo/orgs","repos_url":"https://api.github.com/users/dpiparo/repos","events_url":"https://api.github.com/users/dpiparo/events{/privacy}","received_events_url":"https://api.github.com/users/dpiparo/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"etejedor","id":8089558,"avatar_url":"https://avatars0.githubusercontent.com/u/8089558?v=4","gravatar_id":"","url":"https://api.github.com/users/etejedor","html_url":"https://github.com/etejedor","followers_url":"https://api.github.com/users/etejedor/followers","following_url":"https://api.github.com/users/etejedor/following{/other_user}","gists_url":"https://api.github.com/users/etejedor/gists{/gist_id}","starred_url":"https://api.github.com/users/etejedor/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/etejedor/subscriptions","organizations_url":"https://api.github.com/users/etejedor/orgs","repos_url":"https://api.github.com/users/etejedor/repos","events_url":"https://api.github.com/users/etejedor/events{/privacy}","received_events_url":"https://api.github.com/users/etejedor/received_events","type":"User","site_admin":false},{"login":"bluehood","id":10999034,"avatar_url":"https://avatars3.githubusercontent.com/u/10999034?v=4","gravatar_id":"","url":"https://api.github.com/users/bluehood","html_url":"https://github.com/bluehood","followers_url":"https://api.github.com/users/bluehood/followers","following_url":"https://api.github.com/users/bluehood/following{/other_user}","gists_url":"https://api.github.com/users/bluehood/gists{/gist_id}","starred_url":"https://api.github.com/users/bluehood/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bluehood/subscriptions","organizations_url":"https://api.github.com/users/bluehood/orgs","repos_url":"https://api.github.com/users/bluehood/repos","events_url":"https://api.github.com/users/bluehood/events{/privacy}","received_events_url":"https://api.github.com/users/bluehood/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/root-project/root/pulls/1712/commits","review_comments_url":"https://api.github.com/repos/root-project/root/pulls/1712/comments","review_comment_url":"https://api.github.com/repos/root-project/root/pulls/comments{/number}","comments_url":"https://api.github.com/repos/root-project/root/issues/1712/comments","statuses_url":"https://api.github.com/repos/root-project/root/statuses/0ccc4a294f6af3bc80417390377c338f33438038","head":{"label":"ktf:tarrowds","ref":"tarrowds","sha":"0ccc4a294f6af3bc80417390377c338f33438038","user":{"login":"ktf","id":10544,"avatar_url":"https://avatars0.githubusercontent.com/u/10544?v=4","gravatar_id":"","url":"https://api.github.com/users/ktf","html_url":"https://github.com/ktf","followers_url":"https://api.github.com/users/ktf/followers","following_url":"https://api.github.com/users/ktf/following{/other_user}","gists_url":"https://api.github.com/users/ktf/gists{/gist_id}","starred_url":"https://api.github.com/users/ktf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ktf/subscriptions","organizations_url":"https://api.github.com/users/ktf/orgs","repos_url":"https://api.github.com/users/ktf/repos","events_url":"https://api.github.com/users/ktf/events{/privacy}","received_events_url":"https://api.github.com/users/ktf/received_events","type":"User","site_admin":false},"repo":{"id":86633993,"name":"root","full_name":"ktf/root","owner":{"login":"ktf","id":10544,"avatar_url":"https://avatars0.githubusercontent.com/u/10544?v=4","gravatar_id":"","url":"https://api.github.com/users/ktf","html_url":"https://github.com/ktf","followers_url":"https://api.github.com/users/ktf/followers","following_url":"https://api.github.com/users/ktf/following{/other_user}","gists_url":"https://api.github.com/users/ktf/gists{/gist_id}","starred_url":"https://api.github.com/users/ktf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ktf/subscriptions","organizations_url":"https://api.github.com/users/ktf/orgs","repos_url":"https://api.github.com/users/ktf/repos","events_url":"https://api.github.com/users/ktf/events{/privacy}","received_events_url":"https://api.github.com/users/ktf/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ktf/root","description":"The official ROOT repository","fork":true,"url":"https://api.github.com/repos/ktf/root","forks_url":"https://api.github.com/repos/ktf/root/forks","keys_url":"https://api.github.com/repos/ktf/root/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ktf/root/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ktf/root/teams","hooks_url":"https://api.github.com/repos/ktf/root/hooks","issue_events_url":"https://api.github.com/repos/ktf/root/issues/events{/number}","events_url":"https://api.github.com/repos/ktf/root/events","assignees_url":"https://api.github.com/repos/ktf/root/assignees{/user}","branches_url":"https://api.github.com/repos/ktf/root/branches{/branch}","tags_url":"https://api.github.com/repos/ktf/root/tags","blobs_url":"https://api.github.com/repos/ktf/root/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ktf/root/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ktf/root/git/refs{/sha}","trees_url":"https://api.github.com/repos/ktf/root/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ktf/root/statuses/{sha}","languages_url":"https://api.github.com/repos/ktf/root/languages","stargazers_url":"https://api.github.com/repos/ktf/root/stargazers","contributors_url":"https://api.github.com/repos/ktf/root/contributors","subscribers_url":"https://api.github.com/repos/ktf/root/subscribers","subscription_url":"https://api.github.com/repos/ktf/root/subscription","commits_url":"https://api.github.com/repos/ktf/root/commits{/sha}","git_commits_url":"https://api.github.com/repos/ktf/root/git/commits{/sha}","comments_url":"https://api.github.com/repos/ktf/root/comments{/number}","issue_comment_url":"https://api.github.com/repos/ktf/root/issues/comments{/number}","contents_url":"https://api.github.com/repos/ktf/root/contents/{+path}","compare_url":"https://api.github.com/repos/ktf/root/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ktf/root/merges","archive_url":"https://api.github.com/repos/ktf/root/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ktf/root/downloads","issues_url":"https://api.github.com/repos/ktf/root/issues{/number}","pulls_url":"https://api.github.com/repos/ktf/root/pulls{/number}","milestones_url":"https://api.github.com/repos/ktf/root/milestones{/number}","notifications_url":"https://api.github.com/repos/ktf/root/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ktf/root/labels{/name}","releases_url":"https://api.github.com/repos/ktf/root/releases{/id}","deployments_url":"https://api.github.com/repos/ktf/root/deployments","created_at":"2017-03-29T22:11:05Z","updated_at":"2017-03-29T22:12:01Z","pushed_at":"2018-03-09T11:56:12Z","git_url":"git://github.com/ktf/root.git","ssh_url":"git@github.com:ktf/root.git","clone_url":"https://github.com/ktf/root.git","svn_url":"https://github.com/ktf/root","homepage":"","size":683693,"stargazers_count":0,"watchers_count":0,"language":"C++","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"root-project:master","ref":"master","sha":"d639b6aa720eb320f66e750bd02a4e6162374698","user":{"login":"root-project","id":6450093,"avatar_url":"https://avatars1.githubusercontent.com/u/6450093?v=4","gravatar_id":"","url":"https://api.github.com/users/root-project","html_url":"https://github.com/root-project","followers_url":"https://api.github.com/users/root-project/followers","following_url":"https://api.github.com/users/root-project/following{/other_user}","gists_url":"https://api.github.com/users/root-project/gists{/gist_id}","starred_url":"https://api.github.com/users/root-project/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/root-project/subscriptions","organizations_url":"https://api.github.com/users/root-project/orgs","repos_url":"https://api.github.com/users/root-project/repos","events_url":"https://api.github.com/users/root-project/events{/privacy}","received_events_url":"https://api.github.com/users/root-project/received_events","type":"Organization","site_admin":false},"repo":{"id":10994345,"name":"root","full_name":"root-project/root","owner":{"login":"root-project","id":6450093,"avatar_url":"https://avatars1.githubusercontent.com/u/6450093?v=4","gravatar_id":"","url":"https://api.github.com/users/root-project","html_url":"https://github.com/root-project","followers_url":"https://api.github.com/users/root-project/followers","following_url":"https://api.github.com/users/root-project/following{/other_user}","gists_url":"https://api.github.com/users/root-project/gists{/gist_id}","starred_url":"https://api.github.com/users/root-project/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/root-project/subscriptions","organizations_url":"https://api.github.com/users/root-project/orgs","repos_url":"https://api.github.com/users/root-project/repos","events_url":"https://api.github.com/users/root-project/events{/privacy}","received_events_url":"https://api.github.com/users/root-project/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/root-project/root","description":"The official ROOT repository","fork":false,"url":"https://api.github.com/repos/root-project/root","forks_url":"https://api.github.com/repos/root-project/root/forks","keys_url":"https://api.github.com/repos/root-project/root/keys{/key_id}","collaborators_url":"https://api.github.com/repos/root-project/root/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/root-project/root/teams","hooks_url":"https://api.github.com/repos/root-project/root/hooks","issue_events_url":"https://api.github.com/repos/root-project/root/issues/events{/number}","events_url":"https://api.github.com/repos/root-project/root/events","assignees_url":"https://api.github.com/repos/root-project/root/assignees{/user}","branches_url":"https://api.github.com/repos/root-project/root/branches{/branch}","tags_url":"https://api.github.com/repos/root-project/root/tags","blobs_url":"https://api.github.com/repos/root-project/root/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/root-project/root/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/root-project/root/git/refs{/sha}","trees_url":"https://api.github.com/repos/root-project/root/git/trees{/sha}","statuses_url":"https://api.github.com/repos/root-project/root/statuses/{sha}","languages_url":"https://api.github.com/repos/root-project/root/languages","stargazers_url":"https://api.github.com/repos/root-project/root/stargazers","contributors_url":"https://api.github.com/repos/root-project/root/contributors","subscribers_url":"https://api.github.com/repos/root-project/root/subscribers","subscription_url":"https://api.github.com/repos/root-project/root/subscription","commits_url":"https://api.github.com/repos/root-project/root/commits{/sha}","git_commits_url":"https://api.github.com/repos/root-project/root/git/commits{/sha}","comments_url":"https://api.github.com/repos/root-project/root/comments{/number}","issue_comment_url":"https://api.github.com/repos/root-project/root/issues/comments{/number}","contents_url":"https://api.github.com/repos/root-project/root/contents/{+path}","compare_url":"https://api.github.com/repos/root-project/root/compare/{base}...{head}","merges_url":"https://api.github.com/repos/root-project/root/merges","archive_url":"https://api.github.com/repos/root-project/root/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/root-project/root/downloads","issues_url":"https://api.github.com/repos/root-project/root/issues{/number}","pulls_url":"https://api.github.com/repos/root-project/root/pulls{/number}","milestones_url":"https://api.github.com/repos/root-project/root/milestones{/number}","notifications_url":"https://api.github.com/repos/root-project/root/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/root-project/root/labels{/name}","releases_url":"https://api.github.com/repos/root-project/root/releases{/id}","deployments_url":"https://api.github.com/repos/root-project/root/deployments","created_at":"2013-06-27T10:46:59Z","updated_at":"2018-03-22T12:35:05Z","pushed_at":"2018-03-22T12:35:41Z","git_url":"git://github.com/root-project/root.git","ssh_url":"git@github.com:root-project/root.git","clone_url":"https://github.com/root-project/root.git","svn_url":"https://github.com/root-project/root","homepage":"https://root.cern","size":685309,"stargazers_count":534,"watchers_count":534,"language":"C++","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":400,"mirror_url":null,"archived":false,"open_issues_count":53,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":400,"open_issues":53,"watchers":534,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/root-project/root/pulls/1712"},"html":{"href":"https://github.com/root-project/root/pull/1712"},"issue":{"href":"https://api.github.com/repos/root-project/root/issues/1712"},"comments":{"href":"https://api.github.com/repos/root-project/root/issues/1712/comments"},"review_comments":{"href":"https://api.github.com/repos/root-project/root/pulls/1712/comments"},"review_comment":{"href":"https://api.github.com/repos/root-project/root/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/root-project/root/pulls/1712/commits"},"statuses":{"href":"https://api.github.com/repos/root-project/root/statuses/0ccc4a294f6af3bc80417390377c338f33438038"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"ktf"}}