{"action":"created","comment":{"url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/pulls/comments/96004870","pull_request_review_id":16578492,"id":96004870,"diff_hunk":"@@ -0,0 +1,182 @@\n+#!/usr/bin/env python\n+# -*- coding: utf-8 -*-\n+\n+# Copyright (C) 2017 University of Dundee & Open Microscopy Environment.\n+# All rights reserved.\n+#\n+# This program is free software: you can redistribute it and/or modify\n+# it under the terms of the GNU Affero General Public License as\n+# published by the Free Software Foundation, either version 3 of the\n+# License, or (at your option) any later version.\n+#\n+# This program is distributed in the hope that it will be useful,\n+# but WITHOUT ANY WARRANTY; without even the implied warranty of\n+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n+# GNU Affero General Public License for more details.\n+#\n+# You should have received a copy of the GNU Affero General Public License\n+# along with this program.  If not, see <http://www.gnu.org/licenses/>.\n+\n+\"\"\"Tests querying Images with web json api.\"\"\"\n+\n+from omeroweb.testlib import IWebTest, _get_response_json\n+from django.core.urlresolvers import reverse\n+from django.conf import settings\n+import pytest\n+from omero.gateway import BlitzGateway\n+from omero_marshal import get_encoder\n+from omero.model import DatasetI, ImageI\n+from omero.rtypes import rstring, unwrap\n+import json\n+\n+\n+def get_update_service(user):\n+    \"\"\"Get the update_service for the given user's client.\"\"\"\n+    return user[0].getSession().getUpdateService()\n+\n+\n+def get_query_service(user):\n+    \"\"\"Get the query_service for the given user's client.\"\"\"\n+    return user[0].getSession().getQueryService()\n+\n+\n+def get_connection(user, group_id=None):\n+    \"\"\"Get a BlitzGateway connection for the given user's client.\"\"\"\n+    connection = BlitzGateway(client_obj=user[0])\n+    # Refresh the session context\n+    connection.getEventContext()\n+    if group_id is not None:\n+        connection.SERVICE_OPTS.setOmeroGroup(group_id)\n+    return connection\n+\n+\n+def cmp_name_insensitive(x, y):\n+    \"\"\"Case-insensitive name comparator.\"\"\"\n+    return cmp(unwrap(x.name).lower(), unwrap(y.name).lower())\n+\n+\n+def marshal_objects(objects):\n+    \"\"\"Marshal objects using omero_marshal.\"\"\"\n+    expected = []\n+    for obj in objects:\n+        encoder = get_encoder(obj.__class__)\n+        expected.append(encoder.encode(obj))\n+    return expected\n+\n+\n+def assert_objects(conn, json_objects, omero_ids_objects, dtype=\"Project\",\n+                   group='-1', extra=None, opts=None):\n+    \"\"\"\n+    Load objects from OMERO, via conn.getObjects().\n+\n+    marshal with omero_marshal and compare with json_objects.\n+    omero_ids_objects can be IDs or list of omero.model objects.\n+\n+    @param: extra       List of dicts containing expected extra json data\n+                        e.g. {'omero:childCount': 1}\n+    \"\"\"\n+    pids = []\n+    for p in omero_ids_objects:\n+        try:\n+            pids.append(long(p))\n+        except TypeError:\n+            pids.append(p.id.val)\n+    conn.SERVICE_OPTS.setOmeroGroup(group)\n+    objs = conn.getObjects(dtype, pids, respect_order=True, opts=opts)\n+    objs = [p._obj for p in objs]\n+    expected = marshal_objects(objs)\n+    assert len(json_objects) == len(expected)\n+    for i, o1, o2 in zip(range(len(expected)), json_objects, expected):\n+        if extra is not None and i < len(extra):\n+            o2.update(extra[i])\n+        # dumping to json and loading (same as test data) means that\n+        # unicode has been handled in same way, e.g. Pixel size symbols.\n+        o2 = json.loads(json.dumps(o2))\n+        assert o1 == o2\n+\n+\n+class TestImages(IWebTest):\n+    \"\"\"Tests querying & editing Images.\"\"\"\n+\n+    @pytest.fixture()\n+    def user1(self):\n+        \"\"\"Return a new user in a read-annotate group.\"\"\"\n+        group = self.new_group(perms='rwra--')\n+        user = self.new_client_and_user(group=group)\n+        return user\n+\n+    @pytest.fixture()\n+    def dataset_images(self, user1):\n+        \"\"\"Return Dataset with Images and an orphaned Image.\"\"\"\n+        query = get_query_service(user1)\n+        dataset = DatasetI()\n+        dataset.name = rstring('Dataset')\n+\n+        # Create 5 Images in Dataset\n+        for i in range(5):\n+            img = self.create_test_image(size_x=125, size_y=125,\n+                                         session=user1[0].getSession(),\n+                                         name=\"Image%s\" % i)\n+            img = ImageI(img.id.val, False)\n+            dataset.linkImage(img)\n+\n+        # Import a single orphaned Image \"tinyTest.d3d.dv\" and get ImageID\n+        pids = self.import_image(client=user1[0], skip=None)\n+        pixels = query.get(\"Pixels\", long(pids[0]))\n+        image = query.get(\"Image\", pixels.image.id.val)\n+\n+        dataset = get_update_service(user1).saveAndReturnObject(dataset)\n+        return dataset, image\n+\n+    def test_dataset_images(self, user1, dataset_images):\n+        \"\"\"Test listing of Images in a Dataset.\"\"\"\n+        conn = get_connection(user1)\n+        user_name = conn.getUser().getName()\n+        django_client = self.new_django_client(user_name, user_name)\n+        version = settings.API_VERSIONS[-1]\n+\n+        dataset = dataset_images[0]\n+        images = dataset.linkedImageList()\n+        orphaned = dataset_images[1]\n+\n+        images_url = reverse('api_images', kwargs={'api_version': version})\n+        datasets_url = reverse('api_datasets', kwargs={'api_version': version})\n+\n+        # List ALL Images\n+        rsp = _get_response_json(django_client, images_url, {})\n+        assert len(rsp['data']) == 6\n+\n+        # Filter Images by Orphaned\n+        payload = {'orphaned': 'true'}\n+        rsp = _get_response_json(django_client, images_url, payload)\n+        assert_objects(conn, rsp['data'], [orphaned], dtype='Image',\n+                       opts={'load_pixels': True})\n+\n+        # Filter Images by Dataset\n+        images.sort(cmp_name_insensitive)\n+        payload = {'dataset': dataset.id.val}\n+        rsp = _get_response_json(django_client, images_url, payload)\n+        # Manual check that Pixels is loaded but Channels are not\n+        assert 'Channels' not in rsp['data'][0]['Pixels']\n+        assert_objects(conn, rsp['data'], images, dtype='Image',\n+                       opts={'load_pixels': True})\n+\n+        # Pagination, listing images via /datasets/:id/images/\n+        limit = 3\n+        dataset_images_url = datasets_url + \"%s/images/\" % dataset.id.val\n+        payload = {'dataset': dataset.id.val, 'limit': limit}\n+        rsp = _get_response_json(django_client, dataset_images_url, payload)\n+        assert_objects(conn, rsp['data'], images[0:limit], dtype='Image',\n+                       opts={'load_pixels': True})\n+        payload['page'] = 2\n+        rsp = _get_response_json(django_client, images_url, payload)\n+        assert_objects(conn, rsp['data'], images[limit:limit * 2],\n+                       dtype='Image', opts={'load_pixels': True})","path":"components/tools/OmeroWeb/test/integration/test_api_images.py","position":173,"original_position":174,"commit_id":"438d4e18714ec170a72838c05306f2eddc78fd33","original_commit_id":"678f724a33d429091bee7f4040d5afb068292fd8","user":{"login":"will-moore","id":900055,"avatar_url":"https://avatars.githubusercontent.com/u/900055?v=3","gravatar_id":"","url":"https://api.github.com/users/will-moore","html_url":"https://github.com/will-moore","followers_url":"https://api.github.com/users/will-moore/followers","following_url":"https://api.github.com/users/will-moore/following{/other_user}","gists_url":"https://api.github.com/users/will-moore/gists{/gist_id}","starred_url":"https://api.github.com/users/will-moore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/will-moore/subscriptions","organizations_url":"https://api.github.com/users/will-moore/orgs","repos_url":"https://api.github.com/users/will-moore/repos","events_url":"https://api.github.com/users/will-moore/events{/privacy}","received_events_url":"https://api.github.com/users/will-moore/received_events","type":"User","site_admin":false},"body":"In this case I'm not testing the loading of images with/without loading pixels. We don't provide that option for web api (always load pixels). The ```opts={'load_pixels': True}``` is just required here so that the when we ```getObjects('Image', opts={'load_pixels': True})``` to compare objects to json, we are comparing like-for-like (pixels loaded in both cases).","created_at":"2017-01-13T14:30:01Z","updated_at":"2017-01-13T14:30:01Z","html_url":"https://github.com/openmicroscopy/openmicroscopy/pull/5025#discussion_r96004870","pull_request_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/pulls/5025","_links":{"self":{"href":"https://api.github.com/repos/openmicroscopy/openmicroscopy/pulls/comments/96004870"},"html":{"href":"https://github.com/openmicroscopy/openmicroscopy/pull/5025#discussion_r96004870"},"pull_request":{"href":"https://api.github.com/repos/openmicroscopy/openmicroscopy/pulls/5025"}}},"pull_request":{"url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/pulls/5025","id":101229599,"html_url":"https://github.com/openmicroscopy/openmicroscopy/pull/5025","diff_url":"https://github.com/openmicroscopy/openmicroscopy/pull/5025.diff","patch_url":"https://github.com/openmicroscopy/openmicroscopy/pull/5025.patch","issue_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/issues/5025","number":5025,"state":"open","locked":false,"title":"Api images","user":{"login":"will-moore","id":900055,"avatar_url":"https://avatars.githubusercontent.com/u/900055?v=3","gravatar_id":"","url":"https://api.github.com/users/will-moore","html_url":"https://github.com/will-moore","followers_url":"https://api.github.com/users/will-moore/followers","following_url":"https://api.github.com/users/will-moore/following{/other_user}","gists_url":"https://api.github.com/users/will-moore/gists{/gist_id}","starred_url":"https://api.github.com/users/will-moore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/will-moore/subscriptions","organizations_url":"https://api.github.com/users/will-moore/orgs","repos_url":"https://api.github.com/users/will-moore/repos","events_url":"https://api.github.com/users/will-moore/events{/privacy}","received_events_url":"https://api.github.com/users/will-moore/received_events","type":"User","site_admin":false},"body":"# What this PR does\r\n\r\nAdds support for ```/images/``` and ```/images/:image_id/```.\r\n\r\nAdded integration tests of urls below.\r\nAlso added gateway test for ```getObject()``` with 'load_pixels' and 'load_channels' and one for 'orphaned'.\r\n\r\n# Testing this PR\r\n\r\n- Check tests green.\r\n- Browse from /api/ -> version -> images_url to list all images at e.g. ```/api/v0.1/m/images/```\r\n- Filter by dataset ```/images/?dataset=:id``` or ```datasets/:dataset_id/images/```\r\n- List orphaned images ```/images/?orphaned=true```\r\n- For all above urls, pixels should be loaded for images. json contains \"Pixels\"\r\n- Show a single image ```/images/:image-id/```\r\n- This should also load Channels data.\r\n\r\n# Related reading\r\n\r\nhttps://github.com/openmicroscopy/design/issues/69\r\n","created_at":"2017-01-12T10:11:55Z","updated_at":"2017-01-13T14:30:01Z","closed_at":null,"merged_at":null,"merge_commit_sha":"451e0c6bed413bb89656d3b8e8207c3c4bf554e0","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/pulls/5025/commits","review_comments_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/pulls/5025/comments","review_comment_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/issues/5025/comments","statuses_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/statuses/438d4e18714ec170a72838c05306f2eddc78fd33","head":{"label":"will-moore:api_images","ref":"api_images","sha":"438d4e18714ec170a72838c05306f2eddc78fd33","user":{"login":"will-moore","id":900055,"avatar_url":"https://avatars.githubusercontent.com/u/900055?v=3","gravatar_id":"","url":"https://api.github.com/users/will-moore","html_url":"https://github.com/will-moore","followers_url":"https://api.github.com/users/will-moore/followers","following_url":"https://api.github.com/users/will-moore/following{/other_user}","gists_url":"https://api.github.com/users/will-moore/gists{/gist_id}","starred_url":"https://api.github.com/users/will-moore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/will-moore/subscriptions","organizations_url":"https://api.github.com/users/will-moore/orgs","repos_url":"https://api.github.com/users/will-moore/repos","events_url":"https://api.github.com/users/will-moore/events{/privacy}","received_events_url":"https://api.github.com/users/will-moore/received_events","type":"User","site_admin":false},"repo":{"id":2423057,"name":"openmicroscopy","full_name":"will-moore/openmicroscopy","owner":{"login":"will-moore","id":900055,"avatar_url":"https://avatars.githubusercontent.com/u/900055?v=3","gravatar_id":"","url":"https://api.github.com/users/will-moore","html_url":"https://github.com/will-moore","followers_url":"https://api.github.com/users/will-moore/followers","following_url":"https://api.github.com/users/will-moore/following{/other_user}","gists_url":"https://api.github.com/users/will-moore/gists{/gist_id}","starred_url":"https://api.github.com/users/will-moore/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/will-moore/subscriptions","organizations_url":"https://api.github.com/users/will-moore/orgs","repos_url":"https://api.github.com/users/will-moore/repos","events_url":"https://api.github.com/users/will-moore/events{/privacy}","received_events_url":"https://api.github.com/users/will-moore/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/will-moore/openmicroscopy","description":"OME (Open Microscopy Environment) develops open-source software and data format standards for the storage and manipulation of biological light microscopy data. A joint project between universities, research establishments and industry in Europe and the USA, OME has over 20 active researchers with strong links to the microscopy community. Funded by private and public research grants, OME has been a major force on the international microscopy stage since 2000.","fork":true,"url":"https://api.github.com/repos/will-moore/openmicroscopy","forks_url":"https://api.github.com/repos/will-moore/openmicroscopy/forks","keys_url":"https://api.github.com/repos/will-moore/openmicroscopy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/will-moore/openmicroscopy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/will-moore/openmicroscopy/teams","hooks_url":"https://api.github.com/repos/will-moore/openmicroscopy/hooks","issue_events_url":"https://api.github.com/repos/will-moore/openmicroscopy/issues/events{/number}","events_url":"https://api.github.com/repos/will-moore/openmicroscopy/events","assignees_url":"https://api.github.com/repos/will-moore/openmicroscopy/assignees{/user}","branches_url":"https://api.github.com/repos/will-moore/openmicroscopy/branches{/branch}","tags_url":"https://api.github.com/repos/will-moore/openmicroscopy/tags","blobs_url":"https://api.github.com/repos/will-moore/openmicroscopy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/will-moore/openmicroscopy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/will-moore/openmicroscopy/git/refs{/sha}","trees_url":"https://api.github.com/repos/will-moore/openmicroscopy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/will-moore/openmicroscopy/statuses/{sha}","languages_url":"https://api.github.com/repos/will-moore/openmicroscopy/languages","stargazers_url":"https://api.github.com/repos/will-moore/openmicroscopy/stargazers","contributors_url":"https://api.github.com/repos/will-moore/openmicroscopy/contributors","subscribers_url":"https://api.github.com/repos/will-moore/openmicroscopy/subscribers","subscription_url":"https://api.github.com/repos/will-moore/openmicroscopy/subscription","commits_url":"https://api.github.com/repos/will-moore/openmicroscopy/commits{/sha}","git_commits_url":"https://api.github.com/repos/will-moore/openmicroscopy/git/commits{/sha}","comments_url":"https://api.github.com/repos/will-moore/openmicroscopy/comments{/number}","issue_comment_url":"https://api.github.com/repos/will-moore/openmicroscopy/issues/comments{/number}","contents_url":"https://api.github.com/repos/will-moore/openmicroscopy/contents/{+path}","compare_url":"https://api.github.com/repos/will-moore/openmicroscopy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/will-moore/openmicroscopy/merges","archive_url":"https://api.github.com/repos/will-moore/openmicroscopy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/will-moore/openmicroscopy/downloads","issues_url":"https://api.github.com/repos/will-moore/openmicroscopy/issues{/number}","pulls_url":"https://api.github.com/repos/will-moore/openmicroscopy/pulls{/number}","milestones_url":"https://api.github.com/repos/will-moore/openmicroscopy/milestones{/number}","notifications_url":"https://api.github.com/repos/will-moore/openmicroscopy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/will-moore/openmicroscopy/labels{/name}","releases_url":"https://api.github.com/repos/will-moore/openmicroscopy/releases{/id}","deployments_url":"https://api.github.com/repos/will-moore/openmicroscopy/deployments","created_at":"2011-09-20T14:52:46Z","updated_at":"2014-08-05T08:53:49Z","pushed_at":"2017-01-13T13:55:20Z","git_url":"git://github.com/will-moore/openmicroscopy.git","ssh_url":"git@github.com:will-moore/openmicroscopy.git","clone_url":"https://github.com/will-moore/openmicroscopy.git","svn_url":"https://github.com/will-moore/openmicroscopy","homepage":"http://www.openmicroscopy.org","size":2072264,"stargazers_count":2,"watchers_count":2,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":1,"forks":0,"open_issues":1,"watchers":2,"default_branch":"develop"}},"base":{"label":"openmicroscopy:develop","ref":"develop","sha":"40a26491cdf5b38271fe32532b30fc9a6aac95cf","user":{"login":"openmicroscopy","id":975861,"avatar_url":"https://avatars.githubusercontent.com/u/975861?v=3","gravatar_id":"","url":"https://api.github.com/users/openmicroscopy","html_url":"https://github.com/openmicroscopy","followers_url":"https://api.github.com/users/openmicroscopy/followers","following_url":"https://api.github.com/users/openmicroscopy/following{/other_user}","gists_url":"https://api.github.com/users/openmicroscopy/gists{/gist_id}","starred_url":"https://api.github.com/users/openmicroscopy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openmicroscopy/subscriptions","organizations_url":"https://api.github.com/users/openmicroscopy/orgs","repos_url":"https://api.github.com/users/openmicroscopy/repos","events_url":"https://api.github.com/users/openmicroscopy/events{/privacy}","received_events_url":"https://api.github.com/users/openmicroscopy/received_events","type":"Organization","site_admin":false},"repo":{"id":2228226,"name":"openmicroscopy","full_name":"openmicroscopy/openmicroscopy","owner":{"login":"openmicroscopy","id":975861,"avatar_url":"https://avatars.githubusercontent.com/u/975861?v=3","gravatar_id":"","url":"https://api.github.com/users/openmicroscopy","html_url":"https://github.com/openmicroscopy","followers_url":"https://api.github.com/users/openmicroscopy/followers","following_url":"https://api.github.com/users/openmicroscopy/following{/other_user}","gists_url":"https://api.github.com/users/openmicroscopy/gists{/gist_id}","starred_url":"https://api.github.com/users/openmicroscopy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openmicroscopy/subscriptions","organizations_url":"https://api.github.com/users/openmicroscopy/orgs","repos_url":"https://api.github.com/users/openmicroscopy/repos","events_url":"https://api.github.com/users/openmicroscopy/events{/privacy}","received_events_url":"https://api.github.com/users/openmicroscopy/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/openmicroscopy/openmicroscopy","description":"OME (Open Microscopy Environment) develops open-source software and data format standards for the storage and manipulation of biological light microscopy data. A joint project between universities, research establishments and industry in Europe and the USA, OME has over 20 active researchers with strong links to the microscopy community. Funded by private and public research grants, OME has been a major force on the international microscopy stage since 2000.","fork":false,"url":"https://api.github.com/repos/openmicroscopy/openmicroscopy","forks_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/forks","keys_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/teams","hooks_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/hooks","issue_events_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/issues/events{/number}","events_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/events","assignees_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/assignees{/user}","branches_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/branches{/branch}","tags_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/tags","blobs_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/git/refs{/sha}","trees_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/statuses/{sha}","languages_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/languages","stargazers_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/stargazers","contributors_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/contributors","subscribers_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/subscribers","subscription_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/subscription","commits_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/commits{/sha}","git_commits_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/git/commits{/sha}","comments_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/comments{/number}","issue_comment_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/issues/comments{/number}","contents_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/contents/{+path}","compare_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/merges","archive_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/downloads","issues_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/issues{/number}","pulls_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/pulls{/number}","milestones_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/milestones{/number}","notifications_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/labels{/name}","releases_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/releases{/id}","deployments_url":"https://api.github.com/repos/openmicroscopy/openmicroscopy/deployments","created_at":"2011-08-18T14:26:02Z","updated_at":"2016-12-24T21:26:52Z","pushed_at":"2017-01-13T14:17:26Z","git_url":"git://github.com/openmicroscopy/openmicroscopy.git","ssh_url":"git@github.com:openmicroscopy/openmicroscopy.git","clone_url":"https://github.com/openmicroscopy/openmicroscopy.git","svn_url":"https://github.com/openmicroscopy/openmicroscopy","homepage":"http://www.openmicroscopy.org","size":1969869,"stargazers_count":90,"watchers_count":90,"language":"Java","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":77,"mirror_url":null,"open_issues_count":29,"forks":77,"open_issues":29,"watchers":90,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/openmicroscopy/openmicroscopy/pulls/5025"},"html":{"href":"https://github.com/openmicroscopy/openmicroscopy/pull/5025"},"issue":{"href":"https://api.github.com/repos/openmicroscopy/openmicroscopy/issues/5025"},"comments":{"href":"https://api.github.com/repos/openmicroscopy/openmicroscopy/issues/5025/comments"},"review_comments":{"href":"https://api.github.com/repos/openmicroscopy/openmicroscopy/pulls/5025/comments"},"review_comment":{"href":"https://api.github.com/repos/openmicroscopy/openmicroscopy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/openmicroscopy/openmicroscopy/pulls/5025/commits"},"statuses":{"href":"https://api.github.com/repos/openmicroscopy/openmicroscopy/statuses/438d4e18714ec170a72838c05306f2eddc78fd33"}}}}
{"actor":{"display_login":"will-moore"}}