{"action":"created","comment":{"url":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/comments/134988763","pull_request_review_id":58346357,"id":134988763,"diff_hunk":"@@ -0,0 +1,110 @@\n+'''\n+    Gap2Seq - assembly gap closing tool\n+'''\n+\n+import logging\n+import os\n+import os.path\n+import subprocess\n+import shlex\n+import shutil\n+import tempfile\n+import time\n+\n+import Bio.Seq\n+\n+import tools\n+import tools.samtools\n+import util.file\n+import util.misc\n+\n+TOOL_NAME = 'gap2seq'\n+TOOL_VERSION = '2.1'\n+\n+log = logging.getLogger(__name__)\n+\n+class Gap2SeqTool(tools.Tool):\n+    \"\"\"Tool wrapper for the Gap2Seq gap-closing tool.\"\"\"\n+\n+    def __init__(self, install_methods=None):\n+        if install_methods is None:\n+            install_methods = [tools.CondaPackage(TOOL_NAME, version=TOOL_VERSION, executable='Gap2Seq.sh')]\n+        tools.Tool.__init__(self, install_methods=install_methods)\n+\n+    def version(self):\n+        return TOOL_VERSION\n+\n+    def execute(self, args):    # pylint: disable=W0221\n+        tool_cmd = [self.install_and_get_path()] + args\n+        log.debug('running gap2seq: ' + ' '.join(tool_cmd))\n+        subprocess.check_call(tool_cmd)\n+\n+    def gapfill(self, in_scaffold, inBam, out_scaffold, solid_kmer_thresholds=(3,2), kmer_sizes=(90, 80, 70, 60, 50, 40, 31),\n+                min_gap_to_close=4, gap2seq_opts='', mem_limit_gb=4, threads=1, time_limit_minutes=60):\n+        \"\"\"Try to fill the gaps in the given scaffold, using the reads.\n+\n+        Inputs:\n+            in_scaffold: a FASTA file containing the scaffold.  Each FASTA record corresponds to one\n+                segment (for multi-segment genomes).  Contigs within each segment are\n+                separated by Ns.  The exact number of Ns between contigs does not matter, as the length of the gap is one \n+                of the things determined by the gap-filling tool.  (But see `min_gap_to_close`).\n+            inBam: reads to use for filling the gaps.  Only paired-end reads from the bam file are used, any unpaired reads\n+                are ignored.\n+           \n+        Outputs:\n+            out_scaffold: the input scaffold, with some of the gaps between contigs possibly filled.\n+\n+        Params:\n+            solid_kmer_thresholds: kmers must appear at least this many times in the reads to be considered solid.\n+                We try gapfilling for all combinations of values of solid_kmer_thresholds and kmer_sizes.\n+            kmer_sizes: kmer sizes to use.  We try gapfilling for all combinations of values of solid_kmer_thresholds and kmer_sizes.\n+            min_gap_to_close: stop gap-closing if all gaps are no longer than this many Ns\n+            gap2seq_opts: extra command-line flags to pass to Gap2Seq\n+            mem_limit_gb: max memory to use, in gigabytes\n+            threads: number of threads to use\n+            time_limit_minutes: stop trying to close more gaps after this many minutes (currently this is a soft/advisory limit)\n+        \n+        \"\"\"\n+        from os.path import abspath, join\n+        solid_kmer_thresholds = sorted(util.misc.make_seq(solid_kmer_thresholds), reverse=True)\n+        kmer_sizes = sorted(util.misc.make_seq(kmer_sizes), reverse=True)\n+        samtools = tools.samtools.SamtoolsTool()\n+        with samtools.bam2fq_tmp(inBam) as (reads1, reads2):\n+            done = False\n+            prev_scaffold = in_scaffold\n+            stop_time = time.time() + 60*time_limit_minutes\n+            with util.file.tmp_dir('_gap2seq_dir') as gap2seq_dir:\n+                for solid_kmer_threshold in solid_kmer_thresholds:\n+                    for kmer_size in kmer_sizes:\n+                        gap2seq_filled = join(gap2seq_dir, 'gap2seq-filled.s{}.k{}.fasta'.format(solid_kmer_threshold, kmer_size))\n+                        log.debug('s={} k={} gap2seq_filled={}'.format(solid_kmer_threshold, kmer_size, gap2seq_filled))\n+\n+                        # gap2seq (or rather the gatb library it uses) currently has a bug where tempfiles are left in the\n+                        # current working directory.  So we run it in its own temp dir, but then must give absolute paths\n+                        # for all files.\n+\n+                        args = ['-scaffolds', abspath(prev_scaffold), '-filled', abspath(gap2seq_filled),\n+                                '-reads', ','.join((abspath(reads1), abspath(reads2))), '-solid', str(solid_kmer_threshold), \n+                                '-k', str(kmer_size), '-all-upper',\n+                                '-verbose', '-nb-cores', str(threads), '-max-mem', str(mem_limit_gb)] + shlex.split(gap2seq_opts)\n+                        \n+                        with util.file.tmp_dir('_gap2seq_run_dir') as gap2seq_run_dir:\n+                            with util.file.tmp_chdir(gap2seq_run_dir):\n+                                self.execute(args=args)\n+\n+                        prev_scaffold = gap2seq_filled\n+\n+                        if not any('N'*min_gap_to_close in str(rec.seq) for rec in Bio.SeqIO.parse(gap2seq_filled, 'fasta')):\n+                            log.info('no gaps left, quittting gap2seq early')","path":"tools/gap2seq.py","position":98,"original_position":98,"commit_id":"995c0d6762a9acdf3a6b403253fc3e6e78ede31f","original_commit_id":"995c0d6762a9acdf3a6b403253fc3e6e78ede31f","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":"Maybe `log.info()` should be `log.error()` (or `log.warning()`) here? Same with the time limit conditional below.","created_at":"2017-08-24T11:16:01Z","updated_at":"2017-08-24T11:16:02Z","html_url":"https://github.com/broadinstitute/viral-ngs/pull/661#discussion_r134988763","pull_request_url":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/661","_links":{"self":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/comments/134988763"},"html":{"href":"https://github.com/broadinstitute/viral-ngs/pull/661#discussion_r134988763"},"pull_request":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/661"}}},"pull_request":{"url":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/661","id":137355389,"html_url":"https://github.com/broadinstitute/viral-ngs/pull/661","diff_url":"https://github.com/broadinstitute/viral-ngs/pull/661.diff","patch_url":"https://github.com/broadinstitute/viral-ngs/pull/661.patch","issue_url":"https://api.github.com/repos/broadinstitute/viral-ngs/issues/661","number":661,"state":"open","locked":false,"title":"adding Gap2Seq tool for filling gaps between contigs using reads.","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":"adding Gap2Seq tool for filling gaps between contigs using reads.  This PR just adds the gapfill_gap2seq command to assembly.py ; later PR will link it into the pipeline.","created_at":"2017-08-24T02:12:46Z","updated_at":"2017-08-24T11:16:02Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0f27904d3d93b24ad389f6e69702ce39fa4e9f50","assignee":{"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},"assignees":[{"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}],"requested_reviewers":[{"login":"yesimon","id":601839,"avatar_url":"https://avatars2.githubusercontent.com/u/601839?v=4","gravatar_id":"","url":"https://api.github.com/users/yesimon","html_url":"https://github.com/yesimon","followers_url":"https://api.github.com/users/yesimon/followers","following_url":"https://api.github.com/users/yesimon/following{/other_user}","gists_url":"https://api.github.com/users/yesimon/gists{/gist_id}","starred_url":"https://api.github.com/users/yesimon/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yesimon/subscriptions","organizations_url":"https://api.github.com/users/yesimon/orgs","repos_url":"https://api.github.com/users/yesimon/repos","events_url":"https://api.github.com/users/yesimon/events{/privacy}","received_events_url":"https://api.github.com/users/yesimon/received_events","type":"User","site_admin":false},{"login":"dpark01","id":8513746,"avatar_url":"https://avatars2.githubusercontent.com/u/8513746?v=4","gravatar_id":"","url":"https://api.github.com/users/dpark01","html_url":"https://github.com/dpark01","followers_url":"https://api.github.com/users/dpark01/followers","following_url":"https://api.github.com/users/dpark01/following{/other_user}","gists_url":"https://api.github.com/users/dpark01/gists{/gist_id}","starred_url":"https://api.github.com/users/dpark01/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dpark01/subscriptions","organizations_url":"https://api.github.com/users/dpark01/orgs","repos_url":"https://api.github.com/users/dpark01/repos","events_url":"https://api.github.com/users/dpark01/events{/privacy}","received_events_url":"https://api.github.com/users/dpark01/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/661/commits","review_comments_url":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/661/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/661/comments","statuses_url":"https://api.github.com/repos/broadinstitute/viral-ngs/statuses/995c0d6762a9acdf3a6b403253fc3e6e78ede31f","head":{"label":"broadinstitute:is-add-gap2seq","ref":"is-add-gap2seq","sha":"995c0d6762a9acdf3a6b403253fc3e6e78ede31f","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":"2017-07-17T18:22:56Z","pushed_at":"2017-08-24T04:21:36Z","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":57971,"stargazers_count":55,"watchers_count":55,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":20,"mirror_url":null,"open_issues_count":40,"forks":20,"open_issues":40,"watchers":55,"default_branch":"master"}},"base":{"label":"broadinstitute:master","ref":"master","sha":"b2065add3c03e3e5a4328ec7f47cf001f283eedb","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":"2017-07-17T18:22:56Z","pushed_at":"2017-08-24T04:21:36Z","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":57971,"stargazers_count":55,"watchers_count":55,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":20,"mirror_url":null,"open_issues_count":40,"forks":20,"open_issues":40,"watchers":55,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/661"},"html":{"href":"https://github.com/broadinstitute/viral-ngs/pull/661"},"issue":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/issues/661"},"comments":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/issues/661/comments"},"review_comments":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/pulls/661/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/661/commits"},"statuses":{"href":"https://api.github.com/repos/broadinstitute/viral-ngs/statuses/995c0d6762a9acdf3a6b403253fc3e6e78ede31f"}}}}
{"actor":{"display_login":"tomkinsc"}}