{"action":"created","comment":{"url":"https://api.github.com/repos/Ensembl/ensembl/pulls/comments/235702112","pull_request_review_id":177627237,"id":235702112,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIzNTcwMjExMg==","diff_hunk":"@@ -17,340 +17,341 @@ limitations under the License.\n \n =cut\n \n-# Parse RefSeq GPFF files to create xrefs.\n-\n package XrefParser::RefSeqGPFFParser;\n \n use strict;\n use warnings;\n use Carp;\n-use File::Basename;\n-\n-use base qw( XrefParser::BaseParser );\n-my $peptide_source_id;\n-my $mrna_source_id ;\n-my $ncrna_source_id ;\n-my $pred_peptide_source_id ;\n-my $pred_mrna_source_id ;\n-my $pred_ncrna_source_id ;\n-my $entrez_source_id;\n-my $wiki_source_id;\n-my %entrez;\n+use List::MoreUtils qw(uniq);\n+use Readonly;\n \n-sub run {\n+use parent qw( XrefParser::BaseParser );\n+\n+# Refseq sources to consider. Prefixes not in this list will be ignored\n+Readonly my $REFSEQ_SOURCES => {\n+    NM => 'RefSeq_mRNA',\n+    NR => 'RefSeq_ncRNA',\n+    XM => 'RefSeq_mRNA_predicted',\n+    XR => 'RefSeq_ncRNA_predicted',\n+    NP => 'RefSeq_peptide',\n+    XP => 'RefSeq_peptide_predicted',\n+};\n \n+\n+sub run {\n   my ($self, $ref_arg) = @_;\n+\n   my $source_id    = $ref_arg->{source_id};\n   my $species_id   = $ref_arg->{species_id};\n   my $species_name = $ref_arg->{species};\n   my $files        = $ref_arg->{files};\n   my $release_file = $ref_arg->{rel_file};\n-  my $verbose      = $ref_arg->{verbose};\n-  my $dbi          = $ref_arg->{dbi};\n-  $dbi = $self->dbi unless defined $dbi;\n+  my $dbi          = $ref_arg->{dbi} // $self->dbi;\n+  my $verbose      = $ref_arg->{verbose} // 0;\n \n   if((!defined $source_id) or (!defined $species_id) or (!defined $files)){\n     croak \"Need to pass source_id, species_id, files and rel_file as pairs\";\n   }\n-  $verbose |=0;\n-\n-  my @files = @{$files};\n-\n-\n-  $peptide_source_id =\n-    $self->get_source_id_for_source_name('RefSeq_peptide', undef, $dbi);\n-  $mrna_source_id =\n-    $self->get_source_id_for_source_name('RefSeq_mRNA','refseq', $dbi);\n-  $ncrna_source_id =\n-    $self->get_source_id_for_source_name('RefSeq_ncRNA', undef, $dbi);\n-\n-  $pred_peptide_source_id =\n-    $self->get_source_id_for_source_name('RefSeq_peptide_predicted', undef, $dbi);\n-  $pred_mrna_source_id =\n-    $self->get_source_id_for_source_name('RefSeq_mRNA_predicted','refseq', $dbi);\n-  $pred_ncrna_source_id =\n-    $self->get_source_id_for_source_name('RefSeq_ncRNA_predicted', undef, $dbi);\n-\n-  $entrez_source_id = $self->get_source_id_for_source_name('EntrezGene', undef, $dbi);\n-  $wiki_source_id = $self->get_source_id_for_source_name('WikiGene', undef, $dbi);\n-\n-  if($verbose){\n-    print \"RefSeq_peptide source ID = $peptide_source_id\\n\";\n-    print \"RefSeq_mRNA source ID = $mrna_source_id\\n\";\n-    print \"RefSeq_ncRNA source ID = $ncrna_source_id\\n\";\n-    print \"RefSeq_peptide_predicted source ID = $pred_peptide_source_id\\n\";\n-    print \"RefSeq_mRNA_predicted source ID = $pred_mrna_source_id\\n\" ;\n-    print \"RefSeq_ncRNA_predicted source ID = $pred_ncrna_source_id\\n\" ;\n+\n+  $self->{species_id} = $species_id;\n+  $self->{dbi} = $dbi;\n+  $self->{verbose} = $verbose;\n+\n+  # get RefSeq source ids\n+  while (my ($source_prefix, $source_name) = each %{$REFSEQ_SOURCES}) {\n+    $self->{source_ids}->{$source_name} = $self->get_source_id_for_source_name( $source_name, undef, $dbi )\n+  }\n+\n+  # get extra source ids\n+  $self->{source_ids}->{EntrezGene} = $self->get_source_id_for_source_name('EntrezGene', undef, $dbi);\n+  $self->{source_ids}->{WikiGene} = $self->get_source_id_for_source_name('WikiGene', undef, $dbi);\n+\n+  # Retrieve existing RefSeq mRNA\n+  $self->{refseq_ids} = { %{$self->get_valid_codes('RefSeq_mRNA', $species_id, $dbi)},\n+      %{$self->get_valid_codes('RefSeq_mRNA_predicted', $species_id, $dbi)} };\n+  $self->{entrez_ids} = $self->get_valid_codes('EntrezGene', $species_id, $dbi);\n+  $self->{wiki_ids} = $self->get_valid_codes('WikiGene', $species_id, $dbi);\n+\n+  if ($verbose) {\n+    for my $source_name (sort values %{$REFSEQ_SOURCES}) {\n+      print \"$source_name source ID = $self->{source_ids}->{$source_name}\\n\";\n+    }\n   }\n \n-  (%entrez)     = %{$self->get_acc_to_label(\"EntrezGene\",$species_id, undef, $dbi)};\n+  # populate entrez gene id => label hash\n+  $self->{entrez} = $self->get_acc_to_label('EntrezGene', $species_id, undef, $dbi);\n+\n+  # get the species name, prepare species related data checks\n+  my %species2name = $self->species_id2name($dbi);\n+  $species_name //= shift @{$species2name{$species_id}};\n+\n+  $self->{name2species_id} = { map{ $_=>$species_id } @{$species2name{$species_id}} };\n+  my %species2tax  = $self->species_id2taxonomy($dbi);\n+  $self->{taxonomy2species_id} = { map{ $_=>$species_id } @{$species2tax{$species_id}} };\n+\n+  # process the source files\n+  foreach my $file (@{$files}) {\n \n-    my @xrefs;\n-    foreach my $file (@files) {\n-        my $xrefs =\n-          $self->create_xrefs( $file, $species_id, $verbose, $dbi, $species_name );\n+    # type from the file (peptide or dna)\n+    my $type = $self->type_from_file($file);\n \n-        if ( !defined( $xrefs ) ) {\n-            return 1;    #error\n+    # get the file handler\n+    my $refseq_fh = $self->get_filehandle($file);\n+\n+    if ( !defined $refseq_fh ) {\n+      warn \"WARNING: Can't open RefSeqGPFF file $file\\n\";\n+      return;\n+    }\n+\n+    # this will hold the array of xrefs to bulk insert\n+    my $xrefs;\n+\n+    do {\n+      local $/ = \"\\/\\/\\n\";\n+      while ( my $item = $refseq_fh->getline() ) {\n+        my $xref = $self->xref_from_record({\n+          record => $item,\n+          type   => $type\n+        });\n+\n+        if (defined $xref) {\n+          push @{$xrefs}, $xref;\n         }\n-        $self->upload_xref_object_graphs( $xrefs, $dbi )\n+      }\n+    };\n+\n+    $refseq_fh->close();\n+\n+    # no xrefs in this record...\n+    if ( !defined( $xrefs ) ) {\n+      next;\n     }\n \n-    if ( defined $release_file ) {\n-        # Parse and set release info.\n-        my $release_io = $self->get_filehandle($release_file);\n-        local $/ = \"\\n*\";\n-        my $release = $release_io->getline();\n-        $release_io->close();\n-\n-        $release =~ s/\\s{2,}/ /g;\n-        $release =~ s/.*(NCBI Reference Sequence.*) Distribution.*/$1/s;\n-        # Put a comma after the release number to make it more readable.\n-        $release =~ s/Release (\\d+)/Release $1,/;\n-\n-        print \"RefSeq release: '$release'\\n\" if($verbose);\n-\n-        $self->set_release( $source_id,              $release, $dbi );\n-        $self->set_release( $peptide_source_id,      $release, $dbi );\n-        $self->set_release( $mrna_source_id,         $release, $dbi );\n-        $self->set_release( $ncrna_source_id,        $release, $dbi );\n-        $self->set_release( $pred_mrna_source_id,    $release, $dbi );\n-        $self->set_release( $pred_ncrna_source_id,   $release, $dbi );\n-        $self->set_release( $pred_peptide_source_id, $release, $dbi );\n+    # upload the xrefs\n+    $self->upload_xref_object_graphs( $xrefs, $dbi );\n+\n+  }\n+\n+\n+  # process the release file","path":"misc-scripts/xref_mapping/XrefParser/RefSeqGPFFParser.pm","position":190,"original_position":196,"commit_id":"9e7b17412be426744ed8008748d0d88d206bd4e1","original_commit_id":"453fe00318d8587c5aa22b9edae0d7c4152336fa","user":{"login":"tgrego","id":5013470,"node_id":"MDQ6VXNlcjUwMTM0NzA=","avatar_url":"https://avatars2.githubusercontent.com/u/5013470?v=4","gravatar_id":"","url":"https://api.github.com/users/tgrego","html_url":"https://github.com/tgrego","followers_url":"https://api.github.com/users/tgrego/followers","following_url":"https://api.github.com/users/tgrego/following{/other_user}","gists_url":"https://api.github.com/users/tgrego/gists{/gist_id}","starred_url":"https://api.github.com/users/tgrego/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tgrego/subscriptions","organizations_url":"https://api.github.com/users/tgrego/orgs","repos_url":"https://api.github.com/users/tgrego/repos","events_url":"https://api.github.com/users/tgrego/events{/privacy}","received_events_url":"https://api.github.com/users/tgrego/received_events","type":"User","site_admin":false},"body":"It's not a critical failure, it's not even a failure just a warning.\r\ndid set it to verbose only","created_at":"2018-11-22T12:06:03Z","updated_at":"2018-11-22T12:06:03Z","html_url":"https://github.com/Ensembl/ensembl/pull/338#discussion_r235702112","pull_request_url":"https://api.github.com/repos/Ensembl/ensembl/pulls/338","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/Ensembl/ensembl/pulls/comments/235702112"},"html":{"href":"https://github.com/Ensembl/ensembl/pull/338#discussion_r235702112"},"pull_request":{"href":"https://api.github.com/repos/Ensembl/ensembl/pulls/338"}},"in_reply_to_id":235336248},"pull_request":{"url":"https://api.github.com/repos/Ensembl/ensembl/pulls/338","id":232360512,"node_id":"MDExOlB1bGxSZXF1ZXN0MjMyMzYwNTEy","html_url":"https://github.com/Ensembl/ensembl/pull/338","diff_url":"https://github.com/Ensembl/ensembl/pull/338.diff","patch_url":"https://github.com/Ensembl/ensembl/pull/338.patch","issue_url":"https://api.github.com/repos/Ensembl/ensembl/issues/338","number":338,"state":"open","locked":false,"title":"RefSeqGPFFParser update, no ensembl-io","user":{"login":"tgrego","id":5013470,"node_id":"MDQ6VXNlcjUwMTM0NzA=","avatar_url":"https://avatars2.githubusercontent.com/u/5013470?v=4","gravatar_id":"","url":"https://api.github.com/users/tgrego","html_url":"https://github.com/tgrego","followers_url":"https://api.github.com/users/tgrego/followers","following_url":"https://api.github.com/users/tgrego/following{/other_user}","gists_url":"https://api.github.com/users/tgrego/gists{/gist_id}","starred_url":"https://api.github.com/users/tgrego/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tgrego/subscriptions","organizations_url":"https://api.github.com/users/tgrego/orgs","repos_url":"https://api.github.com/users/tgrego/repos","events_url":"https://api.github.com/users/tgrego/events{/privacy}","received_events_url":"https://api.github.com/users/tgrego/received_events","type":"User","site_admin":false},"body":"## Description\r\n\r\nUpdate to the RefSeqGPFFParser as part of the efforts of the xref sprint.\r\nSee ENSCORESW-2898.\r\n\r\nThis pull request is a follow up on https://github.com/Ensembl/ensembl/pull/336\r\nkeeping the refactoring, but removing the ensembl-io dependency.\r\n\r\nWormbaseCElegansRefSeqGPFFParser depends on RefSeqGPFFParser and is non-functional with this pull request, thus requiring changes.\r\n\r\n## Testing\r\n\r\nNo unit tests for this parser directly.\r\nTested with subset of rat, however related xrefs were absent.\r\nOngoing testing with full dataset.\r\nWormbaseCElegansRefSeqGPFFParser has tests in modules/t/xref_parser.t\r\nthese will be temporarily silenced until changes are committed to WormbaseCElegansRefSeqGPFFParser\r\n","created_at":"2018-11-20T15:34:04Z","updated_at":"2018-11-22T12:06:03Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8c4a2a7dc7a11ee2cc0f5f1894b2ff70e82c02f1","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/Ensembl/ensembl/pulls/338/commits","review_comments_url":"https://api.github.com/repos/Ensembl/ensembl/pulls/338/comments","review_comment_url":"https://api.github.com/repos/Ensembl/ensembl/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Ensembl/ensembl/issues/338/comments","statuses_url":"https://api.github.com/repos/Ensembl/ensembl/statuses/9e7b17412be426744ed8008748d0d88d206bd4e1","head":{"label":"Ensembl:xref_RefSeqGPFFParser_no_eio","ref":"xref_RefSeqGPFFParser_no_eio","sha":"9e7b17412be426744ed8008748d0d88d206bd4e1","user":{"login":"Ensembl","id":5832463,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU4MzI0NjM=","avatar_url":"https://avatars3.githubusercontent.com/u/5832463?v=4","gravatar_id":"","url":"https://api.github.com/users/Ensembl","html_url":"https://github.com/Ensembl","followers_url":"https://api.github.com/users/Ensembl/followers","following_url":"https://api.github.com/users/Ensembl/following{/other_user}","gists_url":"https://api.github.com/users/Ensembl/gists{/gist_id}","starred_url":"https://api.github.com/users/Ensembl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ensembl/subscriptions","organizations_url":"https://api.github.com/users/Ensembl/orgs","repos_url":"https://api.github.com/users/Ensembl/repos","events_url":"https://api.github.com/users/Ensembl/events{/privacy}","received_events_url":"https://api.github.com/users/Ensembl/received_events","type":"Organization","site_admin":false},"repo":{"id":15257669,"node_id":"MDEwOlJlcG9zaXRvcnkxNTI1NzY2OQ==","name":"ensembl","full_name":"Ensembl/ensembl","private":false,"owner":{"login":"Ensembl","id":5832463,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU4MzI0NjM=","avatar_url":"https://avatars3.githubusercontent.com/u/5832463?v=4","gravatar_id":"","url":"https://api.github.com/users/Ensembl","html_url":"https://github.com/Ensembl","followers_url":"https://api.github.com/users/Ensembl/followers","following_url":"https://api.github.com/users/Ensembl/following{/other_user}","gists_url":"https://api.github.com/users/Ensembl/gists{/gist_id}","starred_url":"https://api.github.com/users/Ensembl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ensembl/subscriptions","organizations_url":"https://api.github.com/users/Ensembl/orgs","repos_url":"https://api.github.com/users/Ensembl/repos","events_url":"https://api.github.com/users/Ensembl/events{/privacy}","received_events_url":"https://api.github.com/users/Ensembl/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Ensembl/ensembl","description":"The Ensembl Core Perl API and SQL schema","fork":false,"url":"https://api.github.com/repos/Ensembl/ensembl","forks_url":"https://api.github.com/repos/Ensembl/ensembl/forks","keys_url":"https://api.github.com/repos/Ensembl/ensembl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Ensembl/ensembl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Ensembl/ensembl/teams","hooks_url":"https://api.github.com/repos/Ensembl/ensembl/hooks","issue_events_url":"https://api.github.com/repos/Ensembl/ensembl/issues/events{/number}","events_url":"https://api.github.com/repos/Ensembl/ensembl/events","assignees_url":"https://api.github.com/repos/Ensembl/ensembl/assignees{/user}","branches_url":"https://api.github.com/repos/Ensembl/ensembl/branches{/branch}","tags_url":"https://api.github.com/repos/Ensembl/ensembl/tags","blobs_url":"https://api.github.com/repos/Ensembl/ensembl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Ensembl/ensembl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Ensembl/ensembl/git/refs{/sha}","trees_url":"https://api.github.com/repos/Ensembl/ensembl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Ensembl/ensembl/statuses/{sha}","languages_url":"https://api.github.com/repos/Ensembl/ensembl/languages","stargazers_url":"https://api.github.com/repos/Ensembl/ensembl/stargazers","contributors_url":"https://api.github.com/repos/Ensembl/ensembl/contributors","subscribers_url":"https://api.github.com/repos/Ensembl/ensembl/subscribers","subscription_url":"https://api.github.com/repos/Ensembl/ensembl/subscription","commits_url":"https://api.github.com/repos/Ensembl/ensembl/commits{/sha}","git_commits_url":"https://api.github.com/repos/Ensembl/ensembl/git/commits{/sha}","comments_url":"https://api.github.com/repos/Ensembl/ensembl/comments{/number}","issue_comment_url":"https://api.github.com/repos/Ensembl/ensembl/issues/comments{/number}","contents_url":"https://api.github.com/repos/Ensembl/ensembl/contents/{+path}","compare_url":"https://api.github.com/repos/Ensembl/ensembl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Ensembl/ensembl/merges","archive_url":"https://api.github.com/repos/Ensembl/ensembl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Ensembl/ensembl/downloads","issues_url":"https://api.github.com/repos/Ensembl/ensembl/issues{/number}","pulls_url":"https://api.github.com/repos/Ensembl/ensembl/pulls{/number}","milestones_url":"https://api.github.com/repos/Ensembl/ensembl/milestones{/number}","notifications_url":"https://api.github.com/repos/Ensembl/ensembl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Ensembl/ensembl/labels{/name}","releases_url":"https://api.github.com/repos/Ensembl/ensembl/releases{/id}","deployments_url":"https://api.github.com/repos/Ensembl/ensembl/deployments","created_at":"2013-12-17T15:11:49Z","updated_at":"2018-11-19T12:20:48Z","pushed_at":"2018-11-22T12:01:05Z","git_url":"git://github.com/Ensembl/ensembl.git","ssh_url":"git@github.com:Ensembl/ensembl.git","clone_url":"https://github.com/Ensembl/ensembl.git","svn_url":"https://github.com/Ensembl/ensembl","homepage":"http://www.ensembl.org","size":56046,"stargazers_count":45,"watchers_count":45,"language":"Perl","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":52,"mirror_url":null,"archived":false,"open_issues_count":5,"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":52,"open_issues":5,"watchers":45,"default_branch":"release/94"}},"base":{"label":"Ensembl:feature/xref_sprint","ref":"feature/xref_sprint","sha":"82062bd45bfbed14b589e6b0a45bc12f2d518ba7","user":{"login":"Ensembl","id":5832463,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU4MzI0NjM=","avatar_url":"https://avatars3.githubusercontent.com/u/5832463?v=4","gravatar_id":"","url":"https://api.github.com/users/Ensembl","html_url":"https://github.com/Ensembl","followers_url":"https://api.github.com/users/Ensembl/followers","following_url":"https://api.github.com/users/Ensembl/following{/other_user}","gists_url":"https://api.github.com/users/Ensembl/gists{/gist_id}","starred_url":"https://api.github.com/users/Ensembl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ensembl/subscriptions","organizations_url":"https://api.github.com/users/Ensembl/orgs","repos_url":"https://api.github.com/users/Ensembl/repos","events_url":"https://api.github.com/users/Ensembl/events{/privacy}","received_events_url":"https://api.github.com/users/Ensembl/received_events","type":"Organization","site_admin":false},"repo":{"id":15257669,"node_id":"MDEwOlJlcG9zaXRvcnkxNTI1NzY2OQ==","name":"ensembl","full_name":"Ensembl/ensembl","private":false,"owner":{"login":"Ensembl","id":5832463,"node_id":"MDEyOk9yZ2FuaXphdGlvbjU4MzI0NjM=","avatar_url":"https://avatars3.githubusercontent.com/u/5832463?v=4","gravatar_id":"","url":"https://api.github.com/users/Ensembl","html_url":"https://github.com/Ensembl","followers_url":"https://api.github.com/users/Ensembl/followers","following_url":"https://api.github.com/users/Ensembl/following{/other_user}","gists_url":"https://api.github.com/users/Ensembl/gists{/gist_id}","starred_url":"https://api.github.com/users/Ensembl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Ensembl/subscriptions","organizations_url":"https://api.github.com/users/Ensembl/orgs","repos_url":"https://api.github.com/users/Ensembl/repos","events_url":"https://api.github.com/users/Ensembl/events{/privacy}","received_events_url":"https://api.github.com/users/Ensembl/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Ensembl/ensembl","description":"The Ensembl Core Perl API and SQL schema","fork":false,"url":"https://api.github.com/repos/Ensembl/ensembl","forks_url":"https://api.github.com/repos/Ensembl/ensembl/forks","keys_url":"https://api.github.com/repos/Ensembl/ensembl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Ensembl/ensembl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Ensembl/ensembl/teams","hooks_url":"https://api.github.com/repos/Ensembl/ensembl/hooks","issue_events_url":"https://api.github.com/repos/Ensembl/ensembl/issues/events{/number}","events_url":"https://api.github.com/repos/Ensembl/ensembl/events","assignees_url":"https://api.github.com/repos/Ensembl/ensembl/assignees{/user}","branches_url":"https://api.github.com/repos/Ensembl/ensembl/branches{/branch}","tags_url":"https://api.github.com/repos/Ensembl/ensembl/tags","blobs_url":"https://api.github.com/repos/Ensembl/ensembl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Ensembl/ensembl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Ensembl/ensembl/git/refs{/sha}","trees_url":"https://api.github.com/repos/Ensembl/ensembl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Ensembl/ensembl/statuses/{sha}","languages_url":"https://api.github.com/repos/Ensembl/ensembl/languages","stargazers_url":"https://api.github.com/repos/Ensembl/ensembl/stargazers","contributors_url":"https://api.github.com/repos/Ensembl/ensembl/contributors","subscribers_url":"https://api.github.com/repos/Ensembl/ensembl/subscribers","subscription_url":"https://api.github.com/repos/Ensembl/ensembl/subscription","commits_url":"https://api.github.com/repos/Ensembl/ensembl/commits{/sha}","git_commits_url":"https://api.github.com/repos/Ensembl/ensembl/git/commits{/sha}","comments_url":"https://api.github.com/repos/Ensembl/ensembl/comments{/number}","issue_comment_url":"https://api.github.com/repos/Ensembl/ensembl/issues/comments{/number}","contents_url":"https://api.github.com/repos/Ensembl/ensembl/contents/{+path}","compare_url":"https://api.github.com/repos/Ensembl/ensembl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Ensembl/ensembl/merges","archive_url":"https://api.github.com/repos/Ensembl/ensembl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Ensembl/ensembl/downloads","issues_url":"https://api.github.com/repos/Ensembl/ensembl/issues{/number}","pulls_url":"https://api.github.com/repos/Ensembl/ensembl/pulls{/number}","milestones_url":"https://api.github.com/repos/Ensembl/ensembl/milestones{/number}","notifications_url":"https://api.github.com/repos/Ensembl/ensembl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Ensembl/ensembl/labels{/name}","releases_url":"https://api.github.com/repos/Ensembl/ensembl/releases{/id}","deployments_url":"https://api.github.com/repos/Ensembl/ensembl/deployments","created_at":"2013-12-17T15:11:49Z","updated_at":"2018-11-19T12:20:48Z","pushed_at":"2018-11-22T12:01:05Z","git_url":"git://github.com/Ensembl/ensembl.git","ssh_url":"git@github.com:Ensembl/ensembl.git","clone_url":"https://github.com/Ensembl/ensembl.git","svn_url":"https://github.com/Ensembl/ensembl","homepage":"http://www.ensembl.org","size":56046,"stargazers_count":45,"watchers_count":45,"language":"Perl","has_issues":false,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":52,"mirror_url":null,"archived":false,"open_issues_count":5,"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":52,"open_issues":5,"watchers":45,"default_branch":"release/94"}},"_links":{"self":{"href":"https://api.github.com/repos/Ensembl/ensembl/pulls/338"},"html":{"href":"https://github.com/Ensembl/ensembl/pull/338"},"issue":{"href":"https://api.github.com/repos/Ensembl/ensembl/issues/338"},"comments":{"href":"https://api.github.com/repos/Ensembl/ensembl/issues/338/comments"},"review_comments":{"href":"https://api.github.com/repos/Ensembl/ensembl/pulls/338/comments"},"review_comment":{"href":"https://api.github.com/repos/Ensembl/ensembl/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Ensembl/ensembl/pulls/338/commits"},"statuses":{"href":"https://api.github.com/repos/Ensembl/ensembl/statuses/9e7b17412be426744ed8008748d0d88d206bd4e1"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"tgrego"}}