{"action":"created","comment":{"url":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls/comments/224729705","pull_request_review_id":164170617,"id":224729705,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyNDcyOTcwNQ==","diff_hunk":"@@ -0,0 +1,160 @@\n+from functools import wraps\n+from django.utils import timezone\n+from django.db import transaction\n+from django.db.models import Q\n+from opal.models import Patient\n+from intrahospital_api import logger\n+from intrahospital_api.exceptions import BatchLoadError\n+from intrahospital_api import models\n+\n+MAX_ALLOWABLE_BATCH_RUN_TIME = 3600\n+\n+\n+def any_loads_running():\n+    \"\"\"\n+    Returns a boolean as to whether any loads are\n+    running, for use by things that synch databases\n+    \"\"\"\n+    patient_loading = models.InitialPatientLoad.objects.filter(\n+        state=models.InitialPatientLoad.RUNNING\n+    ).exists()\n+\n+    batch_loading = models.BatchPatientLoad.objects.filter(\n+        state=models.BatchPatientLoad.RUNNING\n+    ).exists()\n+    result = patient_loading or batch_loading\n+    logger.info(\"Checking loads are running {}\".format(result))\n+    return result\n+\n+\n+def good_to_go(service_name):\n+    \"\"\"\n+    Are we good to run a batch load, returns True if we should.\n+    runs a lot of sanity checks.\n+    \"\"\"\n+    batch_loads = models.BatchPatientLoad.objects.filter(\n+        service_name=service_name\n+    )\n+\n+    if not batch_loads.exists():\n+        return True\n+\n+    current_running = batch_loads.filter(\n+        Q(stopped=None) | Q(state=models.BatchPatientLoad.RUNNING)\n+    )\n+\n+    if current_running.count() > 1:\n+        # we should never have multiple batches running at the same time\n+        raise BatchLoadError(\n+            \"We appear to have {} concurrent batch loads\".format(\n+                current_running.count()\n+            )\n+        )\n+\n+    last_run_running = current_running.last()\n+\n+    if last_run_running:\n+        time_ago = timezone.now() - last_run_running.started\n+\n+        if time_ago.seconds < MAX_ALLOWABLE_BATCH_RUN_TIME:\n+            logger.info(\n+                \"batch still running after {} seconds, skipping\".format(\n+                    time_ago.seconds\n+                )\n+            )\n+            return False\n+        else:\n+            logger.error(","path":"intrahospital_api/services/base/load_utils.py","position":67,"original_position":67,"commit_id":"8d8e86356492cffc024106d4d2289d613103e02f","original_commit_id":"8d8e86356492cffc024106d4d2289d613103e02f","user":{"login":"fredkingham","id":2175455,"node_id":"MDQ6VXNlcjIxNzU0NTU=","avatar_url":"https://avatars1.githubusercontent.com/u/2175455?v=4","gravatar_id":"","url":"https://api.github.com/users/fredkingham","html_url":"https://github.com/fredkingham","followers_url":"https://api.github.com/users/fredkingham/followers","following_url":"https://api.github.com/users/fredkingham/following{/other_user}","gists_url":"https://api.github.com/users/fredkingham/gists{/gist_id}","starred_url":"https://api.github.com/users/fredkingham/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fredkingham/subscriptions","organizations_url":"https://api.github.com/users/fredkingham/orgs","repos_url":"https://api.github.com/users/fredkingham/repos","events_url":"https://api.github.com/users/fredkingham/events{/privacy}","received_events_url":"https://api.github.com/users/fredkingham/received_events","type":"User","site_admin":false},"body":"yep","created_at":"2018-10-12T09:43:06Z","updated_at":"2018-10-12T09:43:06Z","html_url":"https://github.com/openhealthcare/elcid-rfh/pull/528#discussion_r224729705","pull_request_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls/528","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls/comments/224729705"},"html":{"href":"https://github.com/openhealthcare/elcid-rfh/pull/528#discussion_r224729705"},"pull_request":{"href":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls/528"}},"in_reply_to_id":224442274},"pull_request":{"url":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls/528","id":221864047,"node_id":"MDExOlB1bGxSZXF1ZXN0MjIxODY0MDQ3","html_url":"https://github.com/openhealthcare/elcid-rfh/pull/528","diff_url":"https://github.com/openhealthcare/elcid-rfh/pull/528.diff","patch_url":"https://github.com/openhealthcare/elcid-rfh/pull/528.patch","issue_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/issues/528","number":528,"state":"open","locked":false,"title":"V0.3.7 api refactor","user":{"login":"fredkingham","id":2175455,"node_id":"MDQ6VXNlcjIxNzU0NTU=","avatar_url":"https://avatars1.githubusercontent.com/u/2175455?v=4","gravatar_id":"","url":"https://api.github.com/users/fredkingham","html_url":"https://github.com/fredkingham","followers_url":"https://api.github.com/users/fredkingham/followers","following_url":"https://api.github.com/users/fredkingham/following{/other_user}","gists_url":"https://api.github.com/users/fredkingham/gists{/gist_id}","starred_url":"https://api.github.com/users/fredkingham/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/fredkingham/subscriptions","organizations_url":"https://api.github.com/users/fredkingham/orgs","repos_url":"https://api.github.com/users/fredkingham/repos","events_url":"https://api.github.com/users/fredkingham/events{/privacy}","received_events_url":"https://api.github.com/users/fredkingham/received_events","type":"User","site_admin":false},"body":"So this is the first (and the worst) of the api refactor pull requests.\r\n\r\nOld state was \r\n* An API that provided all database access.\r\n* A loader file that would get the data from the api and pass it to updater files, e.g. update_lab_tests\r\n* There was a single batch load cron job that would run every hour.\r\n\r\nNew State\r\n* There are many services, each with their own cron jobs, backend and service.\r\n* The `base` service provides utilities to help the services.\r\n* Each service defines a `/backend/` directory and a live.API and a dev.API that is used depending on a setting.\r\n* Each service has a `service.py` that requests data from the api and saves.\r\n* There will be one batch loads for _each_ service.\r\n\r\nThis pull request.\r\n* In the final pull request there are demographics, appointments and lab tests, this pull request only contains lab tests to make it simpler.\r\n* the fab file now looks in /etc/cron and populates any files it finds there with jinja variables and copies them over.\r\n\r\n\r\n","created_at":"2018-10-10T17:00:22Z","updated_at":"2018-10-12T09:43:06Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b5ffaad099717ffb3dbdd0e024bc280e807c0a14","assignee":{"login":"davidmiller","id":17229,"node_id":"MDQ6VXNlcjE3MjI5","avatar_url":"https://avatars3.githubusercontent.com/u/17229?v=4","gravatar_id":"","url":"https://api.github.com/users/davidmiller","html_url":"https://github.com/davidmiller","followers_url":"https://api.github.com/users/davidmiller/followers","following_url":"https://api.github.com/users/davidmiller/following{/other_user}","gists_url":"https://api.github.com/users/davidmiller/gists{/gist_id}","starred_url":"https://api.github.com/users/davidmiller/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidmiller/subscriptions","organizations_url":"https://api.github.com/users/davidmiller/orgs","repos_url":"https://api.github.com/users/davidmiller/repos","events_url":"https://api.github.com/users/davidmiller/events{/privacy}","received_events_url":"https://api.github.com/users/davidmiller/received_events","type":"User","site_admin":false},"assignees":[{"login":"davidmiller","id":17229,"node_id":"MDQ6VXNlcjE3MjI5","avatar_url":"https://avatars3.githubusercontent.com/u/17229?v=4","gravatar_id":"","url":"https://api.github.com/users/davidmiller","html_url":"https://github.com/davidmiller","followers_url":"https://api.github.com/users/davidmiller/followers","following_url":"https://api.github.com/users/davidmiller/following{/other_user}","gists_url":"https://api.github.com/users/davidmiller/gists{/gist_id}","starred_url":"https://api.github.com/users/davidmiller/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/davidmiller/subscriptions","organizations_url":"https://api.github.com/users/davidmiller/orgs","repos_url":"https://api.github.com/users/davidmiller/repos","events_url":"https://api.github.com/users/davidmiller/events{/privacy}","received_events_url":"https://api.github.com/users/davidmiller/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":289461962,"node_id":"MDU6TGFiZWwyODk0NjE5NjI=","url":"https://api.github.com/repos/openhealthcare/elcid-rfh/labels/in%20progress","name":"in progress","color":"ededed","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls/528/commits","review_comments_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls/528/comments","review_comment_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls/comments{/number}","comments_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/issues/528/comments","statuses_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/statuses/8d8e86356492cffc024106d4d2289d613103e02f","head":{"label":"openhealthcare:v0.3.7-api-refactor","ref":"v0.3.7-api-refactor","sha":"8d8e86356492cffc024106d4d2289d613103e02f","user":{"login":"openhealthcare","id":1117166,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMTcxNjY=","avatar_url":"https://avatars2.githubusercontent.com/u/1117166?v=4","gravatar_id":"","url":"https://api.github.com/users/openhealthcare","html_url":"https://github.com/openhealthcare","followers_url":"https://api.github.com/users/openhealthcare/followers","following_url":"https://api.github.com/users/openhealthcare/following{/other_user}","gists_url":"https://api.github.com/users/openhealthcare/gists{/gist_id}","starred_url":"https://api.github.com/users/openhealthcare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openhealthcare/subscriptions","organizations_url":"https://api.github.com/users/openhealthcare/orgs","repos_url":"https://api.github.com/users/openhealthcare/repos","events_url":"https://api.github.com/users/openhealthcare/events{/privacy}","received_events_url":"https://api.github.com/users/openhealthcare/received_events","type":"Organization","site_admin":false},"repo":{"id":43063394,"node_id":"MDEwOlJlcG9zaXRvcnk0MzA2MzM5NA==","name":"elcid-rfh","full_name":"openhealthcare/elcid-rfh","private":false,"owner":{"login":"openhealthcare","id":1117166,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMTcxNjY=","avatar_url":"https://avatars2.githubusercontent.com/u/1117166?v=4","gravatar_id":"","url":"https://api.github.com/users/openhealthcare","html_url":"https://github.com/openhealthcare","followers_url":"https://api.github.com/users/openhealthcare/followers","following_url":"https://api.github.com/users/openhealthcare/following{/other_user}","gists_url":"https://api.github.com/users/openhealthcare/gists{/gist_id}","starred_url":"https://api.github.com/users/openhealthcare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openhealthcare/subscriptions","organizations_url":"https://api.github.com/users/openhealthcare/orgs","repos_url":"https://api.github.com/users/openhealthcare/repos","events_url":"https://api.github.com/users/openhealthcare/events{/privacy}","received_events_url":"https://api.github.com/users/openhealthcare/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/openhealthcare/elcid-rfh","description":"The elCID instance for the Royal Free","fork":false,"url":"https://api.github.com/repos/openhealthcare/elcid-rfh","forks_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/forks","keys_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/teams","hooks_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/hooks","issue_events_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/issues/events{/number}","events_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/events","assignees_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/assignees{/user}","branches_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/branches{/branch}","tags_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/tags","blobs_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/git/refs{/sha}","trees_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/statuses/{sha}","languages_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/languages","stargazers_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/stargazers","contributors_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/contributors","subscribers_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/subscribers","subscription_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/subscription","commits_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/commits{/sha}","git_commits_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/git/commits{/sha}","comments_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/comments{/number}","issue_comment_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/issues/comments{/number}","contents_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/contents/{+path}","compare_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/merges","archive_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/downloads","issues_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/issues{/number}","pulls_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls{/number}","milestones_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/milestones{/number}","notifications_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/labels{/name}","releases_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/releases{/id}","deployments_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/deployments","created_at":"2015-09-24T11:41:53Z","updated_at":"2018-10-11T14:15:54Z","pushed_at":"2018-10-11T14:32:22Z","git_url":"git://github.com/openhealthcare/elcid-rfh.git","ssh_url":"git@github.com:openhealthcare/elcid-rfh.git","clone_url":"https://github.com/openhealthcare/elcid-rfh.git","svn_url":"https://github.com/openhealthcare/elcid-rfh","homepage":"","size":3283,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":107,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":1,"open_issues":107,"watchers":0,"default_branch":"v0.3.6"}},"base":{"label":"openhealthcare:v0.3.7","ref":"v0.3.7","sha":"aaf1eedc1bc3ac5e7605666e8181dd17a1d78e8a","user":{"login":"openhealthcare","id":1117166,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMTcxNjY=","avatar_url":"https://avatars2.githubusercontent.com/u/1117166?v=4","gravatar_id":"","url":"https://api.github.com/users/openhealthcare","html_url":"https://github.com/openhealthcare","followers_url":"https://api.github.com/users/openhealthcare/followers","following_url":"https://api.github.com/users/openhealthcare/following{/other_user}","gists_url":"https://api.github.com/users/openhealthcare/gists{/gist_id}","starred_url":"https://api.github.com/users/openhealthcare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openhealthcare/subscriptions","organizations_url":"https://api.github.com/users/openhealthcare/orgs","repos_url":"https://api.github.com/users/openhealthcare/repos","events_url":"https://api.github.com/users/openhealthcare/events{/privacy}","received_events_url":"https://api.github.com/users/openhealthcare/received_events","type":"Organization","site_admin":false},"repo":{"id":43063394,"node_id":"MDEwOlJlcG9zaXRvcnk0MzA2MzM5NA==","name":"elcid-rfh","full_name":"openhealthcare/elcid-rfh","private":false,"owner":{"login":"openhealthcare","id":1117166,"node_id":"MDEyOk9yZ2FuaXphdGlvbjExMTcxNjY=","avatar_url":"https://avatars2.githubusercontent.com/u/1117166?v=4","gravatar_id":"","url":"https://api.github.com/users/openhealthcare","html_url":"https://github.com/openhealthcare","followers_url":"https://api.github.com/users/openhealthcare/followers","following_url":"https://api.github.com/users/openhealthcare/following{/other_user}","gists_url":"https://api.github.com/users/openhealthcare/gists{/gist_id}","starred_url":"https://api.github.com/users/openhealthcare/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openhealthcare/subscriptions","organizations_url":"https://api.github.com/users/openhealthcare/orgs","repos_url":"https://api.github.com/users/openhealthcare/repos","events_url":"https://api.github.com/users/openhealthcare/events{/privacy}","received_events_url":"https://api.github.com/users/openhealthcare/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/openhealthcare/elcid-rfh","description":"The elCID instance for the Royal Free","fork":false,"url":"https://api.github.com/repos/openhealthcare/elcid-rfh","forks_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/forks","keys_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/teams","hooks_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/hooks","issue_events_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/issues/events{/number}","events_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/events","assignees_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/assignees{/user}","branches_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/branches{/branch}","tags_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/tags","blobs_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/git/refs{/sha}","trees_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/statuses/{sha}","languages_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/languages","stargazers_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/stargazers","contributors_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/contributors","subscribers_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/subscribers","subscription_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/subscription","commits_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/commits{/sha}","git_commits_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/git/commits{/sha}","comments_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/comments{/number}","issue_comment_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/issues/comments{/number}","contents_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/contents/{+path}","compare_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/merges","archive_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/downloads","issues_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/issues{/number}","pulls_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls{/number}","milestones_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/milestones{/number}","notifications_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/labels{/name}","releases_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/releases{/id}","deployments_url":"https://api.github.com/repos/openhealthcare/elcid-rfh/deployments","created_at":"2015-09-24T11:41:53Z","updated_at":"2018-10-11T14:15:54Z","pushed_at":"2018-10-11T14:32:22Z","git_url":"git://github.com/openhealthcare/elcid-rfh.git","ssh_url":"git@github.com:openhealthcare/elcid-rfh.git","clone_url":"https://github.com/openhealthcare/elcid-rfh.git","svn_url":"https://github.com/openhealthcare/elcid-rfh","homepage":"","size":3283,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1,"mirror_url":null,"archived":false,"open_issues_count":107,"license":{"key":"other","name":"Other","spdx_id":"NOASSERTION","url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":1,"open_issues":107,"watchers":0,"default_branch":"v0.3.6"}},"_links":{"self":{"href":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls/528"},"html":{"href":"https://github.com/openhealthcare/elcid-rfh/pull/528"},"issue":{"href":"https://api.github.com/repos/openhealthcare/elcid-rfh/issues/528"},"comments":{"href":"https://api.github.com/repos/openhealthcare/elcid-rfh/issues/528/comments"},"review_comments":{"href":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls/528/comments"},"review_comment":{"href":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/openhealthcare/elcid-rfh/pulls/528/commits"},"statuses":{"href":"https://api.github.com/repos/openhealthcare/elcid-rfh/statuses/8d8e86356492cffc024106d4d2289d613103e02f"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"fredkingham"}}