{"action":"created","comment":{"url":"https://api.github.com/repos/spotify/luigi/pulls/comments/223565694","pull_request_review_id":162722442,"id":223565694,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMzU2NTY5NA==","diff_hunk":"@@ -0,0 +1,78 @@\n+# -*- coding: utf-8 -*-\n+#\n+# Copyright 2017 Open Targets\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+\n+\n+\"\"\"\n+Tests for OpenPAI wrapper for Luigi.\n+\n+\n+Requires:\n+\n+- requests: ``pip install requests``\n+\n+Written and maintained by Liu, Dongqing (@liudongqing).\n+\"\"\"\n+from helpers import unittest\n+import responses\n+\n+import time\n+import luigi\n+import logging\n+from luigi.contrib.pai import PaiTask\n+from luigi.contrib.pai import TaskRole\n+\n+logging.basicConfig(level=logging.DEBUG)\n+\n+\"\"\"\n+The following configurations are required to run the test\n+[OpenPai]\n+pai_url:http://host:port/\n+username:admin\n+password:admin-password\n+expiration:3600\n+\n+\"\"\"\n+# luigi.configuration.add_config_path('luigi_pai.cfg')\n+\n+\n+class SklearnJob(PaiTask):\n+    image = \"openpai/pai.example.sklearn\"\n+    name = \"test_job_sk_{0}\".format(time.time())\n+    command = 'cd scikit-learn/benchmarks && python bench_mnist.py'\n+    virtual_cluster = 'spark'\n+    tasks = [TaskRole('test', 'cd scikit-learn/benchmarks && python bench_mnist.py', memoryMB=4096)]\n+\n+\n+class TestPaiTask(unittest.TestCase):\n+\n+    @responses.activate\n+    def test_run(self):\n+        responses.add(responses.POST, 'http://127.0.0.1:9186/api/v1/token',\n+                      json={\"token\": \"test\", \"user\": \"admin\", \"admin\": True}, status=200)\n+        sk_task = SklearnJob()\n+\n+        responses.add(responses.POST, 'http://127.0.0.1:9186/api/v1/jobs',\n+                      json={\"message\": \"update job {0} successfully\".format(sk_task.name)}, status=202)\n+\n+        responses.add(responses.GET, 'http://127.0.0.1:9186/api/v1/jobs/{0}'.format(sk_task.name),\n+                      json={}, status=404)\n+\n+        responses.add(responses.GET, 'http://127.0.0.1:9186/api/v1/jobs/{0}'.format(sk_task.name),\n+                      body='{\"jobStatus\": {\"state\":\"SUCCEED\"}}', status=200)\n+\n+        luigi.build([sk_task], local_scheduler=True)\n+        self.assertTrue(sk_task)","path":"test/contrib/pai_test.py","position":78,"original_position":78,"commit_id":"d16cb90cc7ecbd223b4f9476819d19d94f18c8a0","original_commit_id":"d16cb90cc7ecbd223b4f9476819d19d94f18c8a0","user":{"login":"liudongqing","id":318296,"node_id":"MDQ6VXNlcjMxODI5Ng==","avatar_url":"https://avatars3.githubusercontent.com/u/318296?v=4","gravatar_id":"","url":"https://api.github.com/users/liudongqing","html_url":"https://github.com/liudongqing","followers_url":"https://api.github.com/users/liudongqing/followers","following_url":"https://api.github.com/users/liudongqing/following{/other_user}","gists_url":"https://api.github.com/users/liudongqing/gists{/gist_id}","starred_url":"https://api.github.com/users/liudongqing/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/liudongqing/subscriptions","organizations_url":"https://api.github.com/users/liudongqing/orgs","repos_url":"https://api.github.com/users/liudongqing/repos","events_url":"https://api.github.com/users/liudongqing/events{/privacy}","received_events_url":"https://api.github.com/users/liudongqing/received_events","type":"User","site_admin":false},"body":"It is not only test building, the task will succeed because I mocked the calls:\r\n\r\n`responses.add(responses.POST, 'http://127.0.0.1:9186/api/v1/token',\r\n                      json={\"token\": \"test\", \"user\": \"admin\", \"admin\": True}, status=200)\r\n        sk_task = SklearnJob()\r\n\r\n        responses.add(responses.POST, 'http://127.0.0.1:9186/api/v1/jobs',\r\n                      json={\"message\": \"update job {0} successfully\".format(sk_task.name)}, status=202)\r\n\r\n        responses.add(responses.GET, 'http://127.0.0.1:9186/api/v1/jobs/{0}'.format(sk_task.name),\r\n                      json={}, status=404)\r\n\r\n        responses.add(responses.GET, 'http://127.0.0.1:9186/api/v1/jobs/{0}'.format(sk_task.name),\r\n                      body='{\"jobStatus\": {\"state\":\"SUCCEED\"}}', status=200)`","created_at":"2018-10-09T05:44:11Z","updated_at":"2018-10-09T05:44:11Z","html_url":"https://github.com/spotify/luigi/pull/2531#discussion_r223565694","pull_request_url":"https://api.github.com/repos/spotify/luigi/pulls/2531","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/spotify/luigi/pulls/comments/223565694"},"html":{"href":"https://github.com/spotify/luigi/pull/2531#discussion_r223565694"},"pull_request":{"href":"https://api.github.com/repos/spotify/luigi/pulls/2531"}},"in_reply_to_id":222631606},"pull_request":{"url":"https://api.github.com/repos/spotify/luigi/pulls/2531","id":217927467,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE3OTI3NDY3","html_url":"https://github.com/spotify/luigi/pull/2531","diff_url":"https://github.com/spotify/luigi/pull/2531.diff","patch_url":"https://github.com/spotify/luigi/pull/2531.patch","issue_url":"https://api.github.com/repos/spotify/luigi/issues/2531","number":2531,"state":"open","locked":false,"title":"Add a Task wrapper for MicroSoft OpenPAI","user":{"login":"liudongqing","id":318296,"node_id":"MDQ6VXNlcjMxODI5Ng==","avatar_url":"https://avatars3.githubusercontent.com/u/318296?v=4","gravatar_id":"","url":"https://api.github.com/users/liudongqing","html_url":"https://github.com/liudongqing","followers_url":"https://api.github.com/users/liudongqing/followers","following_url":"https://api.github.com/users/liudongqing/following{/other_user}","gists_url":"https://api.github.com/users/liudongqing/gists{/gist_id}","starred_url":"https://api.github.com/users/liudongqing/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/liudongqing/subscriptions","organizations_url":"https://api.github.com/users/liudongqing/orgs","repos_url":"https://api.github.com/users/liudongqing/repos","events_url":"https://api.github.com/users/liudongqing/events{/privacy}","received_events_url":"https://api.github.com/users/liudongqing/received_events","type":"User","site_admin":false},"body":"<!--- This template is optional. Please use it as a starting point to help guide PRs -->\r\n\r\n<!--- Provide a general summary of your changes in the Title above -->\r\n\r\n## Description\r\nMicrosoft OpenPAI Job wrapper for Luigi.\r\nAdd luigi/contrib/pai.py \r\nAdd test/contrib/pai_test.py\r\n\r\n## Motivation and Context\r\nMicrosoft OpenPAI Job wrapper for Luigi.\r\n\r\n  \"OpenPAI is an open source platform that provides complete AI model training and resource management capabilities,\r\n  it is easy to extend and supports on-premise, cloud and hybrid environments in various scale.\"\r\n\r\nFor more information about OpenPAI : https://github.com/Microsoft/pai/\r\n\r\n## Have you tested this? If so, how?\r\nTested in our local open pai cluster.\r\n<!---\r\nfor more information on how to submit valuable contributions,\r\nsee https://opensource.guide/how-to-contribute/#how-to-submit-a-contribution\r\n-->\r\n","created_at":"2018-09-25T10:20:47Z","updated_at":"2018-10-09T05:44:11Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b9314330a354362516618e86f1ce3fb30c690487","assignee":null,"assignees":[],"requested_reviewers":[{"login":"ulzha","id":84229,"node_id":"MDQ6VXNlcjg0MjI5","avatar_url":"https://avatars3.githubusercontent.com/u/84229?v=4","gravatar_id":"","url":"https://api.github.com/users/ulzha","html_url":"https://github.com/ulzha","followers_url":"https://api.github.com/users/ulzha/followers","following_url":"https://api.github.com/users/ulzha/following{/other_user}","gists_url":"https://api.github.com/users/ulzha/gists{/gist_id}","starred_url":"https://api.github.com/users/ulzha/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ulzha/subscriptions","organizations_url":"https://api.github.com/users/ulzha/orgs","repos_url":"https://api.github.com/users/ulzha/repos","events_url":"https://api.github.com/users/ulzha/events{/privacy}","received_events_url":"https://api.github.com/users/ulzha/received_events","type":"User","site_admin":false},{"login":"Tarrasch","id":294349,"node_id":"MDQ6VXNlcjI5NDM0OQ==","avatar_url":"https://avatars1.githubusercontent.com/u/294349?v=4","gravatar_id":"","url":"https://api.github.com/users/Tarrasch","html_url":"https://github.com/Tarrasch","followers_url":"https://api.github.com/users/Tarrasch/followers","following_url":"https://api.github.com/users/Tarrasch/following{/other_user}","gists_url":"https://api.github.com/users/Tarrasch/gists{/gist_id}","starred_url":"https://api.github.com/users/Tarrasch/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Tarrasch/subscriptions","organizations_url":"https://api.github.com/users/Tarrasch/orgs","repos_url":"https://api.github.com/users/Tarrasch/repos","events_url":"https://api.github.com/users/Tarrasch/events{/privacy}","received_events_url":"https://api.github.com/users/Tarrasch/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/spotify/luigi/pulls/2531/commits","review_comments_url":"https://api.github.com/repos/spotify/luigi/pulls/2531/comments","review_comment_url":"https://api.github.com/repos/spotify/luigi/pulls/comments{/number}","comments_url":"https://api.github.com/repos/spotify/luigi/issues/2531/comments","statuses_url":"https://api.github.com/repos/spotify/luigi/statuses/d16cb90cc7ecbd223b4f9476819d19d94f18c8a0","head":{"label":"liudongqing:contrib/pai","ref":"contrib/pai","sha":"d16cb90cc7ecbd223b4f9476819d19d94f18c8a0","user":{"login":"liudongqing","id":318296,"node_id":"MDQ6VXNlcjMxODI5Ng==","avatar_url":"https://avatars3.githubusercontent.com/u/318296?v=4","gravatar_id":"","url":"https://api.github.com/users/liudongqing","html_url":"https://github.com/liudongqing","followers_url":"https://api.github.com/users/liudongqing/followers","following_url":"https://api.github.com/users/liudongqing/following{/other_user}","gists_url":"https://api.github.com/users/liudongqing/gists{/gist_id}","starred_url":"https://api.github.com/users/liudongqing/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/liudongqing/subscriptions","organizations_url":"https://api.github.com/users/liudongqing/orgs","repos_url":"https://api.github.com/users/liudongqing/repos","events_url":"https://api.github.com/users/liudongqing/events{/privacy}","received_events_url":"https://api.github.com/users/liudongqing/received_events","type":"User","site_admin":false},"repo":{"id":149251626,"node_id":"MDEwOlJlcG9zaXRvcnkxNDkyNTE2MjY=","name":"luigi","full_name":"liudongqing/luigi","private":false,"owner":{"login":"liudongqing","id":318296,"node_id":"MDQ6VXNlcjMxODI5Ng==","avatar_url":"https://avatars3.githubusercontent.com/u/318296?v=4","gravatar_id":"","url":"https://api.github.com/users/liudongqing","html_url":"https://github.com/liudongqing","followers_url":"https://api.github.com/users/liudongqing/followers","following_url":"https://api.github.com/users/liudongqing/following{/other_user}","gists_url":"https://api.github.com/users/liudongqing/gists{/gist_id}","starred_url":"https://api.github.com/users/liudongqing/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/liudongqing/subscriptions","organizations_url":"https://api.github.com/users/liudongqing/orgs","repos_url":"https://api.github.com/users/liudongqing/repos","events_url":"https://api.github.com/users/liudongqing/events{/privacy}","received_events_url":"https://api.github.com/users/liudongqing/received_events","type":"User","site_admin":false},"html_url":"https://github.com/liudongqing/luigi","description":"Luigi is a Python module that helps you build complex pipelines of batch jobs. It handles dependency resolution, workflow management, visualization etc. It also comes with Hadoop support built in. ","fork":true,"url":"https://api.github.com/repos/liudongqing/luigi","forks_url":"https://api.github.com/repos/liudongqing/luigi/forks","keys_url":"https://api.github.com/repos/liudongqing/luigi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/liudongqing/luigi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/liudongqing/luigi/teams","hooks_url":"https://api.github.com/repos/liudongqing/luigi/hooks","issue_events_url":"https://api.github.com/repos/liudongqing/luigi/issues/events{/number}","events_url":"https://api.github.com/repos/liudongqing/luigi/events","assignees_url":"https://api.github.com/repos/liudongqing/luigi/assignees{/user}","branches_url":"https://api.github.com/repos/liudongqing/luigi/branches{/branch}","tags_url":"https://api.github.com/repos/liudongqing/luigi/tags","blobs_url":"https://api.github.com/repos/liudongqing/luigi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/liudongqing/luigi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/liudongqing/luigi/git/refs{/sha}","trees_url":"https://api.github.com/repos/liudongqing/luigi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/liudongqing/luigi/statuses/{sha}","languages_url":"https://api.github.com/repos/liudongqing/luigi/languages","stargazers_url":"https://api.github.com/repos/liudongqing/luigi/stargazers","contributors_url":"https://api.github.com/repos/liudongqing/luigi/contributors","subscribers_url":"https://api.github.com/repos/liudongqing/luigi/subscribers","subscription_url":"https://api.github.com/repos/liudongqing/luigi/subscription","commits_url":"https://api.github.com/repos/liudongqing/luigi/commits{/sha}","git_commits_url":"https://api.github.com/repos/liudongqing/luigi/git/commits{/sha}","comments_url":"https://api.github.com/repos/liudongqing/luigi/comments{/number}","issue_comment_url":"https://api.github.com/repos/liudongqing/luigi/issues/comments{/number}","contents_url":"https://api.github.com/repos/liudongqing/luigi/contents/{+path}","compare_url":"https://api.github.com/repos/liudongqing/luigi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/liudongqing/luigi/merges","archive_url":"https://api.github.com/repos/liudongqing/luigi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/liudongqing/luigi/downloads","issues_url":"https://api.github.com/repos/liudongqing/luigi/issues{/number}","pulls_url":"https://api.github.com/repos/liudongqing/luigi/pulls{/number}","milestones_url":"https://api.github.com/repos/liudongqing/luigi/milestones{/number}","notifications_url":"https://api.github.com/repos/liudongqing/luigi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/liudongqing/luigi/labels{/name}","releases_url":"https://api.github.com/repos/liudongqing/luigi/releases{/id}","deployments_url":"https://api.github.com/repos/liudongqing/luigi/deployments","created_at":"2018-09-18T08:08:39Z","updated_at":"2018-09-27T07:44:34Z","pushed_at":"2018-09-27T07:44:30Z","git_url":"git://github.com/liudongqing/luigi.git","ssh_url":"git@github.com:liudongqing/luigi.git","clone_url":"https://github.com/liudongqing/luigi.git","svn_url":"https://github.com/liudongqing/luigi","homepage":null,"size":8788,"stargazers_count":0,"watchers_count":0,"language":"Python","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":{"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":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"spotify:master","ref":"master","sha":"b35e8bc1a7f8bc28a1291c9162b90f5628813175","user":{"login":"spotify","id":251374,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI1MTM3NA==","avatar_url":"https://avatars2.githubusercontent.com/u/251374?v=4","gravatar_id":"","url":"https://api.github.com/users/spotify","html_url":"https://github.com/spotify","followers_url":"https://api.github.com/users/spotify/followers","following_url":"https://api.github.com/users/spotify/following{/other_user}","gists_url":"https://api.github.com/users/spotify/gists{/gist_id}","starred_url":"https://api.github.com/users/spotify/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spotify/subscriptions","organizations_url":"https://api.github.com/users/spotify/orgs","repos_url":"https://api.github.com/users/spotify/repos","events_url":"https://api.github.com/users/spotify/events{/privacy}","received_events_url":"https://api.github.com/users/spotify/received_events","type":"Organization","site_admin":false},"repo":{"id":5888353,"node_id":"MDEwOlJlcG9zaXRvcnk1ODg4MzUz","name":"luigi","full_name":"spotify/luigi","private":false,"owner":{"login":"spotify","id":251374,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI1MTM3NA==","avatar_url":"https://avatars2.githubusercontent.com/u/251374?v=4","gravatar_id":"","url":"https://api.github.com/users/spotify","html_url":"https://github.com/spotify","followers_url":"https://api.github.com/users/spotify/followers","following_url":"https://api.github.com/users/spotify/following{/other_user}","gists_url":"https://api.github.com/users/spotify/gists{/gist_id}","starred_url":"https://api.github.com/users/spotify/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/spotify/subscriptions","organizations_url":"https://api.github.com/users/spotify/orgs","repos_url":"https://api.github.com/users/spotify/repos","events_url":"https://api.github.com/users/spotify/events{/privacy}","received_events_url":"https://api.github.com/users/spotify/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/spotify/luigi","description":"Luigi is a Python module that helps you build complex pipelines of batch jobs. It handles dependency resolution, workflow management, visualization etc. It also comes with Hadoop support built in. ","fork":false,"url":"https://api.github.com/repos/spotify/luigi","forks_url":"https://api.github.com/repos/spotify/luigi/forks","keys_url":"https://api.github.com/repos/spotify/luigi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/spotify/luigi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/spotify/luigi/teams","hooks_url":"https://api.github.com/repos/spotify/luigi/hooks","issue_events_url":"https://api.github.com/repos/spotify/luigi/issues/events{/number}","events_url":"https://api.github.com/repos/spotify/luigi/events","assignees_url":"https://api.github.com/repos/spotify/luigi/assignees{/user}","branches_url":"https://api.github.com/repos/spotify/luigi/branches{/branch}","tags_url":"https://api.github.com/repos/spotify/luigi/tags","blobs_url":"https://api.github.com/repos/spotify/luigi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/spotify/luigi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/spotify/luigi/git/refs{/sha}","trees_url":"https://api.github.com/repos/spotify/luigi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/spotify/luigi/statuses/{sha}","languages_url":"https://api.github.com/repos/spotify/luigi/languages","stargazers_url":"https://api.github.com/repos/spotify/luigi/stargazers","contributors_url":"https://api.github.com/repos/spotify/luigi/contributors","subscribers_url":"https://api.github.com/repos/spotify/luigi/subscribers","subscription_url":"https://api.github.com/repos/spotify/luigi/subscription","commits_url":"https://api.github.com/repos/spotify/luigi/commits{/sha}","git_commits_url":"https://api.github.com/repos/spotify/luigi/git/commits{/sha}","comments_url":"https://api.github.com/repos/spotify/luigi/comments{/number}","issue_comment_url":"https://api.github.com/repos/spotify/luigi/issues/comments{/number}","contents_url":"https://api.github.com/repos/spotify/luigi/contents/{+path}","compare_url":"https://api.github.com/repos/spotify/luigi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/spotify/luigi/merges","archive_url":"https://api.github.com/repos/spotify/luigi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/spotify/luigi/downloads","issues_url":"https://api.github.com/repos/spotify/luigi/issues{/number}","pulls_url":"https://api.github.com/repos/spotify/luigi/pulls{/number}","milestones_url":"https://api.github.com/repos/spotify/luigi/milestones{/number}","notifications_url":"https://api.github.com/repos/spotify/luigi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/spotify/luigi/labels{/name}","releases_url":"https://api.github.com/repos/spotify/luigi/releases{/id}","deployments_url":"https://api.github.com/repos/spotify/luigi/deployments","created_at":"2012-09-20T15:06:38Z","updated_at":"2018-10-09T02:57:05Z","pushed_at":"2018-10-08T12:34:28Z","git_url":"git://github.com/spotify/luigi.git","ssh_url":"git@github.com:spotify/luigi.git","clone_url":"https://github.com/spotify/luigi.git","svn_url":"https://github.com/spotify/luigi","homepage":null,"size":8794,"stargazers_count":10181,"watchers_count":10181,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":1738,"mirror_url":null,"archived":false,"open_issues_count":68,"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":1738,"open_issues":68,"watchers":10181,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/spotify/luigi/pulls/2531"},"html":{"href":"https://github.com/spotify/luigi/pull/2531"},"issue":{"href":"https://api.github.com/repos/spotify/luigi/issues/2531"},"comments":{"href":"https://api.github.com/repos/spotify/luigi/issues/2531/comments"},"review_comments":{"href":"https://api.github.com/repos/spotify/luigi/pulls/2531/comments"},"review_comment":{"href":"https://api.github.com/repos/spotify/luigi/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/spotify/luigi/pulls/2531/commits"},"statuses":{"href":"https://api.github.com/repos/spotify/luigi/statuses/d16cb90cc7ecbd223b4f9476819d19d94f18c8a0"}},"author_association":"NONE"}}
{"actor":{"display_login":"liudongqing"}}