{"action":"created","comment":{"url":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/comments/177470934","pull_request_review_id":107346845,"id":177470934,"diff_hunk":"@@ -1143,6 +1144,162 @@ class KrakenBuildError(Exception):\n     '''Error while building kraken database.'''\n \n \n+def parser_kraken_taxlevel_summary(parser=argparse.ArgumentParser()):\n+    parser.add_argument('summary_files_in', nargs=\"+\", help='Kraken summary text file with tab-delimited taxonomic levels.')\n+    parser.add_argument('--jsonOut', dest=\"json_out\", type=argparse.FileType('w'), help='The path to a json file containing the relevant parsed summary data in json format.')\n+    parser.add_argument('--csvOut', dest=\"csv_out\", type=argparse.FileType('w'), help='The path to a csv file containing sample-specific counts.')\n+    parser.add_argument('--taxHeading', nargs=\"+\", dest=\"tax_headings\", help='The taxonomic heading to analyze (default: %(default)s)', default=\"Viruses\")\n+    parser.add_argument('--taxlevelFocus', dest=\"taxlevel_focus\", help='The taxonomic heading to summarize (totals by Genus, etc.) (default: %(default)s).', default=\"genus\", \n+                        choices=[\"species\", \"genus\", \"family\", \"order\", \"class\", \"phylum\", \"kingdom\", \"superkingdom\"])\n+    parser.add_argument('--topN', type=int, dest=\"top_n_entries\", help='Only include the top N taxa by read count (default: %(default)s)')\n+    parser.add_argument('--countThreshold', type=int, dest=\"count_threshold\", help='Minimum number of reads to be included (default: %(default)s)', default=1)\n+    parser.add_argument('--noHist', action='store_true', dest=\"no_hist\", help='When topN==1, write out a report by-sample rather than a histogram.')\n+    util.cmd.common_args(parser, (('loglevel', None), ('version', None), ('tmp_dir', None)))\n+    util.cmd.attach_main(parser, taxlevel_summary, split_args=True)\n+    return parser\n+\n+def taxlevel_summary(summary_files_in, json_out, csv_out, tax_headings, taxlevel_focus, top_n_entries, count_threshold, no_hist):\n+    \"\"\"\n+        By default, when --taxHeading is at the same level as --taxlevelFocus\n+        a summary with lines for each sample is emitted. Otherwise, a histogram is returned.\n+        Full data returned via --jsonOut (filtered by --topN and --countThreshold), whereas -csvOut returns a summary.\n+    \"\"\"\n+\n+    samples = {}\n+    same_level = False\n+    \n+    def indent_len(in_string):\n+        return len(in_string)-len(in_string.lstrip())\n+\n+    for f in list(summary_files_in):\n+        sample_name, extension = os.path.splitext(f)\n+        sample_summary = {}\n+        tax_headings_copy = [s.lower() for s in tax_headings]\n+\n+        with util.file.open_or_gzopen(f, 'rU') as inf:\n+            should_process = False\n+            indent_of_selection = -1\n+            currently_being_processed = \"\"\n+            for line in inf:\n+                if len(line.rstrip('\\r\\n').strip()) == 0:\n+                    continue\n+                csv.register_dialect('kraken_report', quoting=csv.QUOTE_MINIMAL, delimiter=\"\\t\")\n+                row = next(csv.reader([line.strip().rstrip('\\n')], dialect=\"kraken_report\"))\n+                \n+                indent_of_line = indent_len(row[5])\n+                row = [item.strip() for item in row] # remove leading/trailing whitespace from each item\n+                \n+                # rows are formatted like so:\n+                # 0.00  16  0   D   10239     Viruses\n+                #\n+                # row[0] Percentage of reads covered by the clade rooted at this taxon\n+                # row[1] Number of reads covered by the clade rooted at this taxon\n+                # row[2] Number of reads assigned directly to this taxon\n+                # row[3] A rank code, indicating (U)nclassified, (D)omain, (K)ingdom, (P)hylum, (C)lass, (O)rder, (F)amily, (G)enus, or (S)pecies. All other ranks are simply '-'.\n+                # row[4] NCBI taxonomy ID\n+                # row[5] indented scientific name\n+\n+                if indent_of_line == indent_of_selection:\n+                    should_process = False\n+                    indent_of_selection=-1\n+\n+                if indent_of_selection == -1:\n+                    if row[5].lower() in tax_headings_copy:\n+                        tax_headings_copy.remove(row[5].lower())\n+                        \n+                        should_process = True\n+                        indent_of_selection = indent_of_line\n+                        currently_being_processed = row[5]\n+                        sample_summary[row[5]] = collections.OrderedDict()\n+                        if row[3] == rank_code(taxlevel_focus):\n+                            same_level = True\n+                        if row[3] == \"-\":\n+                            log.warning(\"Non-taxonomic parent level selected\")\n+                \n+                if should_process:\n+                    if (rank_code(taxlevel_focus) == row[3]):\n+                        \n+                        if int(row[1])>=count_threshold:\n+                            sample_summary[currently_being_processed][row[5]] = [float(row[0]), int(row[1])]\n+\n+        \n+        for k,taxa in sample_summary.items():\n+            sample_summary[k] = collections.OrderedDict(sorted(taxa.items(), key=lambda item: (item[1][1]) , reverse=True)[:top_n_entries])\n+\n+            if len(list(sample_summary[k].items()))>0:\n+                log.info(\"{f}: most abundant among {heading} at the {level} level: \\\"{name}\\\" with {reads} reads ({percent:.2%} of total); included since >{threshold} read{plural}\".format(\n+                                                                                                  f=f,\n+                                                                                                  heading=k, \n+                                                                                                  level=taxlevel_focus, \n+                                                                                                  name=list(sample_summary[k].items())[0][0],\n+                                                                                                  reads=list(sample_summary[k].items())[0][1][1],\n+                                                                                                  percent=list(sample_summary[k].items())[0][1][0]/100.0,\n+                                                                                                  threshold=count_threshold,\n+                                                                                                  plural=\"s\" if count_threshold>1 else \"\" )\n+                )\n+        samples[sample_name] = sample_summary\n+    json_summary = json.dumps(samples, sort_keys=True, indent=4, separators=(',', ': '))\n+    json_out.write(json_summary)\n+    json_out.close()\n+\n+\n+    if csv_out != None:\n+\n+        # if we're writing out at the same level as the query header\n+        # write out the fractions and counts\n+        if same_level or (top_n_entries==1 and no_hist):\n+\n+            fieldnames = set()\n+            for sample, taxa in samples.items():\n+                for heading,taxon in taxa.items():\n+                    if len(taxon):\n+                        for k in taxon.keys():\n+                            fieldnames |= set([k+\"-pt\",k+\"-ct\"])\n+\n+            writer = csv.DictWriter(csv_out, fieldnames=[\"sample\"]+sorted(list(fieldnames)))\n+            writer.writeheader()\n+\n+            for sample, taxa in samples.items():\n+                sample_dict = {}\n+                sample_dict[\"sample\"] = sample\n+                for heading,taxon in taxa.items(): \n+                    for entry in taxon.keys():\n+                        sample_dict[entry+\"-pt\"] = taxon[entry][0]\n+                        sample_dict[entry+\"-ct\"] = taxon[entry][1]\n+                writer.writerow(sample_dict)\n+                \n+\n+            csv_out.close()\n+\n+        # otherwise write out a histogram\n+        else:\n+            count = 0\n+            summary_counts = collections.defaultdict(dict)\n+            for sample, totals in samples.items():","path":"metagenomics.py","position":147,"original_position":143,"commit_id":"59d911a1ddbb607280d69e709f6d24a60283a4af","original_commit_id":"a1e88c707fcefdcec10badb3b361154fe3044f31","user":{"login":"notestaff","id":1517155,"avatar_url":"https://avatars2.githubusercontent.com/u/1517155?v=4","gravatar_id":"","url":"https://api.github.com/users/notestaff","html_url":"https://github.com/notestaff","followers_url":"https://api.github.com/users/notestaff/followers","following_url":"https://api.github.com/users/notestaff/following{/other_user}","gists_url":"https://api.github.com/users/notestaff/gists{/gist_id}","starred_url":"https://api.github.com/users/notestaff/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/notestaff/subscriptions","organizations_url":"https://api.github.com/users/notestaff/orgs","repos_url":"https://api.github.com/users/notestaff/repos","events_url":"https://api.github.com/users/notestaff/events{/privacy}","received_events_url":"https://api.github.com/users/notestaff/received_events","type":"User","site_admin":false},"body":"\"seems a little silly to include just for this\" -- problem is, I think this every time I miss pandas, and there've been several over time.","created_at":"2018-03-27T15:35:05Z","updated_at":"2018-03-27T15:35:05Z","html_url":"https://github.com/broadinstitute/viral-ngs/pull/792#discussion_r177470934","pull_request_url":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/792","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/comments/177470934"},"html":{"href":"https://github.com/broadinstitute/viral-ngs/pull/792#discussion_r177470934"},"pull_request":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/792"}},"in_reply_to_id":168869825},"pull_request":{"url":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/792","id":169668386,"html_url":"https://github.com/broadinstitute/viral-ngs/pull/792","diff_url":"https://github.com/broadinstitute/viral-ngs/pull/792.diff","patch_url":"https://github.com/broadinstitute/viral-ngs/pull/792.patch","issue_url":"https://api.github.com/repos/broadinstitute/viral-ngs/issues/792","number":792,"state":"open","locked":false,"title":"kraken summary parser","user":{"login":"tomkinsc","id":53064,"avatar_url":"https://avatars3.githubusercontent.com/u/53064?v=4","gravatar_id":"","url":"https://api.github.com/users/tomkinsc","html_url":"https://github.com/tomkinsc","followers_url":"https://api.github.com/users/tomkinsc/followers","following_url":"https://api.github.com/users/tomkinsc/following{/other_user}","gists_url":"https://api.github.com/users/tomkinsc/gists{/gist_id}","starred_url":"https://api.github.com/users/tomkinsc/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tomkinsc/subscriptions","organizations_url":"https://api.github.com/users/tomkinsc/orgs","repos_url":"https://api.github.com/users/tomkinsc/repos","events_url":"https://api.github.com/users/tomkinsc/events{/privacy}","received_events_url":"https://api.github.com/users/tomkinsc/received_events","type":"User","site_admin":false},"body":"This aggregates stats at a taxonomic level for lines in a kraken summary file below (or at the same level as) a named taxon. WIP","created_at":"2018-02-16T16:30:41Z","updated_at":"2018-03-27T15:35:05Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d511fcaf5f9126e08e4b24542a9282850de76950","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/792/commits","review_comments_url":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/792/comments","review_comment_url":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/broadinstitute/viral-ngs/issues/792/comments","statuses_url":"https://api.github.com/repos/broadinstitute/viral-ngs/statuses/59d911a1ddbb607280d69e709f6d24a60283a4af","head":{"label":"broadinstitute:ct-ag100-exploration","ref":"ct-ag100-exploration","sha":"59d911a1ddbb607280d69e709f6d24a60283a4af","user":{"login":"broadinstitute","id":393552,"avatar_url":"https://avatars0.githubusercontent.com/u/393552?v=4","gravatar_id":"","url":"https://api.github.com/users/broadinstitute","html_url":"https://github.com/broadinstitute","followers_url":"https://api.github.com/users/broadinstitute/followers","following_url":"https://api.github.com/users/broadinstitute/following{/other_user}","gists_url":"https://api.github.com/users/broadinstitute/gists{/gist_id}","starred_url":"https://api.github.com/users/broadinstitute/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/broadinstitute/subscriptions","organizations_url":"https://api.github.com/users/broadinstitute/orgs","repos_url":"https://api.github.com/users/broadinstitute/repos","events_url":"https://api.github.com/users/broadinstitute/events{/privacy}","received_events_url":"https://api.github.com/users/broadinstitute/received_events","type":"Organization","site_admin":false},"repo":{"id":24471201,"name":"viral-ngs","full_name":"broadinstitute/viral-ngs","owner":{"login":"broadinstitute","id":393552,"avatar_url":"https://avatars0.githubusercontent.com/u/393552?v=4","gravatar_id":"","url":"https://api.github.com/users/broadinstitute","html_url":"https://github.com/broadinstitute","followers_url":"https://api.github.com/users/broadinstitute/followers","following_url":"https://api.github.com/users/broadinstitute/following{/other_user}","gists_url":"https://api.github.com/users/broadinstitute/gists{/gist_id}","starred_url":"https://api.github.com/users/broadinstitute/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/broadinstitute/subscriptions","organizations_url":"https://api.github.com/users/broadinstitute/orgs","repos_url":"https://api.github.com/users/broadinstitute/repos","events_url":"https://api.github.com/users/broadinstitute/events{/privacy}","received_events_url":"https://api.github.com/users/broadinstitute/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/broadinstitute/viral-ngs","description":"Viral genomics analysis pipelines","fork":false,"url":"https://api.github.com/repos/broadinstitute/viral-ngs","forks_url":"https://api.github.com/repos/broadinstitute/viral-ngs/forks","keys_url":"https://api.github.com/repos/broadinstitute/viral-ngs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/broadinstitute/viral-ngs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/broadinstitute/viral-ngs/teams","hooks_url":"https://api.github.com/repos/broadinstitute/viral-ngs/hooks","issue_events_url":"https://api.github.com/repos/broadinstitute/viral-ngs/issues/events{/number}","events_url":"https://api.github.com/repos/broadinstitute/viral-ngs/events","assignees_url":"https://api.github.com/repos/broadinstitute/viral-ngs/assignees{/user}","branches_url":"https://api.github.com/repos/broadinstitute/viral-ngs/branches{/branch}","tags_url":"https://api.github.com/repos/broadinstitute/viral-ngs/tags","blobs_url":"https://api.github.com/repos/broadinstitute/viral-ngs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/broadinstitute/viral-ngs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/broadinstitute/viral-ngs/git/refs{/sha}","trees_url":"https://api.github.com/repos/broadinstitute/viral-ngs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/broadinstitute/viral-ngs/statuses/{sha}","languages_url":"https://api.github.com/repos/broadinstitute/viral-ngs/languages","stargazers_url":"https://api.github.com/repos/broadinstitute/viral-ngs/stargazers","contributors_url":"https://api.github.com/repos/broadinstitute/viral-ngs/contributors","subscribers_url":"https://api.github.com/repos/broadinstitute/viral-ngs/subscribers","subscription_url":"https://api.github.com/repos/broadinstitute/viral-ngs/subscription","commits_url":"https://api.github.com/repos/broadinstitute/viral-ngs/commits{/sha}","git_commits_url":"https://api.github.com/repos/broadinstitute/viral-ngs/git/commits{/sha}","comments_url":"https://api.github.com/repos/broadinstitute/viral-ngs/comments{/number}","issue_comment_url":"https://api.github.com/repos/broadinstitute/viral-ngs/issues/comments{/number}","contents_url":"https://api.github.com/repos/broadinstitute/viral-ngs/contents/{+path}","compare_url":"https://api.github.com/repos/broadinstitute/viral-ngs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/broadinstitute/viral-ngs/merges","archive_url":"https://api.github.com/repos/broadinstitute/viral-ngs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/broadinstitute/viral-ngs/downloads","issues_url":"https://api.github.com/repos/broadinstitute/viral-ngs/issues{/number}","pulls_url":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls{/number}","milestones_url":"https://api.github.com/repos/broadinstitute/viral-ngs/milestones{/number}","notifications_url":"https://api.github.com/repos/broadinstitute/viral-ngs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/broadinstitute/viral-ngs/labels{/name}","releases_url":"https://api.github.com/repos/broadinstitute/viral-ngs/releases{/id}","deployments_url":"https://api.github.com/repos/broadinstitute/viral-ngs/deployments","created_at":"2014-09-25T19:00:24Z","updated_at":"2018-03-26T17:31:28Z","pushed_at":"2018-03-27T15:01:57Z","git_url":"git://github.com/broadinstitute/viral-ngs.git","ssh_url":"git@github.com:broadinstitute/viral-ngs.git","clone_url":"https://github.com/broadinstitute/viral-ngs.git","svn_url":"https://github.com/broadinstitute/viral-ngs","homepage":"","size":59483,"stargazers_count":66,"watchers_count":66,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":24,"mirror_url":null,"archived":false,"open_issues_count":42,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":24,"open_issues":42,"watchers":66,"default_branch":"master"}},"base":{"label":"broadinstitute:master","ref":"master","sha":"2e2e05af036c1e840380c098cb75ce8135024832","user":{"login":"broadinstitute","id":393552,"avatar_url":"https://avatars0.githubusercontent.com/u/393552?v=4","gravatar_id":"","url":"https://api.github.com/users/broadinstitute","html_url":"https://github.com/broadinstitute","followers_url":"https://api.github.com/users/broadinstitute/followers","following_url":"https://api.github.com/users/broadinstitute/following{/other_user}","gists_url":"https://api.github.com/users/broadinstitute/gists{/gist_id}","starred_url":"https://api.github.com/users/broadinstitute/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/broadinstitute/subscriptions","organizations_url":"https://api.github.com/users/broadinstitute/orgs","repos_url":"https://api.github.com/users/broadinstitute/repos","events_url":"https://api.github.com/users/broadinstitute/events{/privacy}","received_events_url":"https://api.github.com/users/broadinstitute/received_events","type":"Organization","site_admin":false},"repo":{"id":24471201,"name":"viral-ngs","full_name":"broadinstitute/viral-ngs","owner":{"login":"broadinstitute","id":393552,"avatar_url":"https://avatars0.githubusercontent.com/u/393552?v=4","gravatar_id":"","url":"https://api.github.com/users/broadinstitute","html_url":"https://github.com/broadinstitute","followers_url":"https://api.github.com/users/broadinstitute/followers","following_url":"https://api.github.com/users/broadinstitute/following{/other_user}","gists_url":"https://api.github.com/users/broadinstitute/gists{/gist_id}","starred_url":"https://api.github.com/users/broadinstitute/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/broadinstitute/subscriptions","organizations_url":"https://api.github.com/users/broadinstitute/orgs","repos_url":"https://api.github.com/users/broadinstitute/repos","events_url":"https://api.github.com/users/broadinstitute/events{/privacy}","received_events_url":"https://api.github.com/users/broadinstitute/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/broadinstitute/viral-ngs","description":"Viral genomics analysis pipelines","fork":false,"url":"https://api.github.com/repos/broadinstitute/viral-ngs","forks_url":"https://api.github.com/repos/broadinstitute/viral-ngs/forks","keys_url":"https://api.github.com/repos/broadinstitute/viral-ngs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/broadinstitute/viral-ngs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/broadinstitute/viral-ngs/teams","hooks_url":"https://api.github.com/repos/broadinstitute/viral-ngs/hooks","issue_events_url":"https://api.github.com/repos/broadinstitute/viral-ngs/issues/events{/number}","events_url":"https://api.github.com/repos/broadinstitute/viral-ngs/events","assignees_url":"https://api.github.com/repos/broadinstitute/viral-ngs/assignees{/user}","branches_url":"https://api.github.com/repos/broadinstitute/viral-ngs/branches{/branch}","tags_url":"https://api.github.com/repos/broadinstitute/viral-ngs/tags","blobs_url":"https://api.github.com/repos/broadinstitute/viral-ngs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/broadinstitute/viral-ngs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/broadinstitute/viral-ngs/git/refs{/sha}","trees_url":"https://api.github.com/repos/broadinstitute/viral-ngs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/broadinstitute/viral-ngs/statuses/{sha}","languages_url":"https://api.github.com/repos/broadinstitute/viral-ngs/languages","stargazers_url":"https://api.github.com/repos/broadinstitute/viral-ngs/stargazers","contributors_url":"https://api.github.com/repos/broadinstitute/viral-ngs/contributors","subscribers_url":"https://api.github.com/repos/broadinstitute/viral-ngs/subscribers","subscription_url":"https://api.github.com/repos/broadinstitute/viral-ngs/subscription","commits_url":"https://api.github.com/repos/broadinstitute/viral-ngs/commits{/sha}","git_commits_url":"https://api.github.com/repos/broadinstitute/viral-ngs/git/commits{/sha}","comments_url":"https://api.github.com/repos/broadinstitute/viral-ngs/comments{/number}","issue_comment_url":"https://api.github.com/repos/broadinstitute/viral-ngs/issues/comments{/number}","contents_url":"https://api.github.com/repos/broadinstitute/viral-ngs/contents/{+path}","compare_url":"https://api.github.com/repos/broadinstitute/viral-ngs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/broadinstitute/viral-ngs/merges","archive_url":"https://api.github.com/repos/broadinstitute/viral-ngs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/broadinstitute/viral-ngs/downloads","issues_url":"https://api.github.com/repos/broadinstitute/viral-ngs/issues{/number}","pulls_url":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls{/number}","milestones_url":"https://api.github.com/repos/broadinstitute/viral-ngs/milestones{/number}","notifications_url":"https://api.github.com/repos/broadinstitute/viral-ngs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/broadinstitute/viral-ngs/labels{/name}","releases_url":"https://api.github.com/repos/broadinstitute/viral-ngs/releases{/id}","deployments_url":"https://api.github.com/repos/broadinstitute/viral-ngs/deployments","created_at":"2014-09-25T19:00:24Z","updated_at":"2018-03-26T17:31:28Z","pushed_at":"2018-03-27T15:01:57Z","git_url":"git://github.com/broadinstitute/viral-ngs.git","ssh_url":"git@github.com:broadinstitute/viral-ngs.git","clone_url":"https://github.com/broadinstitute/viral-ngs.git","svn_url":"https://github.com/broadinstitute/viral-ngs","homepage":"","size":59483,"stargazers_count":66,"watchers_count":66,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":24,"mirror_url":null,"archived":false,"open_issues_count":42,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":24,"open_issues":42,"watchers":66,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/792"},"html":{"href":"https://github.com/broadinstitute/viral-ngs/pull/792"},"issue":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/issues/792"},"comments":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/issues/792/comments"},"review_comments":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/792/comments"},"review_comment":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/792/commits"},"statuses":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/statuses/59d911a1ddbb607280d69e709f6d24a60283a4af"}},"author_association":"COLLABORATOR"}}
{"actor":{"display_login":"notestaff"}}