{"action":"created","comment":{"url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/pulls/comments/77559979","id":77559979,"diff_hunk":"@@ -0,0 +1,366 @@\n+#!/usr/bin/python\n+# -*- coding: utf-8 -*-\n+\n+'''\n+Schedulers determine how worker's queues get filled. They control which locations get scanned,\n+in what order, at what time. This allows further optimizations to be easily added, without\n+having to modify the existing overseer and worker thread code.\n+\n+Schedulers will recieve:\n+\n+queues - A list of queues for the workers they control. For now, this is a list containing a\n+            single queue.\n+status - A list of status dicts for the workers. Schedulers can use this information to make\n+            more intelligent scheduling decisions. Useful values include:\n+            - last_scan_time: unix timestamp of when the last scan was completed\n+            - location: [lat,lng,alt] of the last scan\n+args - The configuration arguments. This may not include all of the arguments, just ones that are\n+            relevant to this scheduler instance (eg. if multiple locations become supported, the args\n+            passed to the scheduler will only contain the parameters for the location it handles)\n+\n+Schedulers must fill the queues with items to search.\n+\n+Queue items are a list containing:\n+    [step, (latitude, longitude, altitude), appears_seconds, disappears_seconds)]\n+Where:\n+    - step is the step number. Used only for display purposes.\n+    - (latitude, longitude, altitude) is the location to be scanned.\n+    - appears_seconds is the unix timestamp of when the pokemon next appears\n+    - disappears_seconds is the unix timestamp of when the pokemon next disappears\n+\n+    appears_seconds and disappears_seconds are used to skip scans that are too late, and wait for scans the\n+    worker is early for.  If a scheduler doesn't have a specific time a location needs to be scanned, it\n+    should set both to 0.\n+\n+If implementing a new scheduler, place it before SchedulerFactory, and add it to __scheduler_classes\n+'''\n+\n+import logging\n+import math\n+import geopy\n+import json\n+from queue import Empty\n+from operator import itemgetter\n+from .transform import get_new_coords\n+from .models import hex_bounds, Pokemon\n+from .utils import now, cur_sec\n+\n+log = logging.getLogger(__name__)\n+\n+\n+# Simple base class that all other schedulers inherit from\n+# Most of these functions should be overridden in the actual scheduler classes.\n+# Not all scheduler methods will need to use all of the functions.\n+class BaseScheduler(object):\n+    def __init__(self, queues, status, args):\n+        self.queues = queues\n+        self.status = status\n+        self.args = args\n+        self.scan_location = False\n+\n+    # schedule function fills the queues with data\n+    def schedule(self):\n+        log.warning('BaseScheduler does not schedule any items')\n+\n+    # location_changed function is called whenever the location being scanned changes\n+    # scan_location = (lat, lng, alt)\n+    def location_changed(self, scan_location):\n+        self.scan_location = scan_location\n+        self.empty_queues()\n+\n+    # scanning_pause function is called when scanning is paused from the UI\n+    # The default function will empty all the queues.\n+    # Note: This function is called repeatedly while scanning is paused!\n+    def scanning_paused(self):\n+        self.empty_queues()\n+\n+    # Function to empty all queues in the queues list\n+    def empty_queues(self):\n+        for queue in self.queues:\n+            if not queue.empty():\n+                try:\n+                    while True:\n+                        queue.get_nowait()\n+                except Empty:","path":"pogom/schedulers.py","position":84,"original_position":84,"commit_id":"e2e5e8c824f702b0b2a4f2d86761f4d69aa7369a","original_commit_id":"e2e5e8c824f702b0b2a4f2d86761f4d69aa7369a","user":{"login":"aldarund","id":571159,"avatar_url":"https://avatars.githubusercontent.com/u/571159?v=3","gravatar_id":"","url":"https://api.github.com/users/aldarund","html_url":"https://github.com/aldarund","followers_url":"https://api.github.com/users/aldarund/followers","following_url":"https://api.github.com/users/aldarund/following{/other_user}","gists_url":"https://api.github.com/users/aldarund/gists{/gist_id}","starred_url":"https://api.github.com/users/aldarund/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aldarund/subscriptions","organizations_url":"https://api.github.com/users/aldarund/orgs","repos_url":"https://api.github.com/users/aldarund/repos","events_url":"https://api.github.com/users/aldarund/events{/privacy}","received_events_url":"https://api.github.com/users/aldarund/received_events","type":"User","site_admin":false},"body":"afaik after each get there should task_done called. \r\nSomething like this look better\r\nwhile not queue.empty():\r\n    try:\r\n        queue.get_nowait()\r\n    except Empty:\r\n        continue\r\n    q.task_done()","created_at":"2016-09-05T23:59:40Z","updated_at":"2016-09-05T23:59:40Z","html_url":"https://github.com/PokemonGoMap/PokemonGo-Map/pull/1165#discussion_r77559979","pull_request_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/pulls/1165","_links":{"self":{"href":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/pulls/comments/77559979"},"html":{"href":"https://github.com/PokemonGoMap/PokemonGo-Map/pull/1165#discussion_r77559979"},"pull_request":{"href":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/pulls/1165"}}},"pull_request":{"url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/pulls/1165","id":84039449,"html_url":"https://github.com/PokemonGoMap/PokemonGo-Map/pull/1165","diff_url":"https://github.com/PokemonGoMap/PokemonGo-Map/pull/1165.diff","patch_url":"https://github.com/PokemonGoMap/PokemonGo-Map/pull/1165.patch","issue_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/issues/1165","number":1165,"state":"open","locked":false,"title":"Refactor search.py, pull out scheduling into separate class","user":{"login":"justsomedudeonthenet","id":20652372,"avatar_url":"https://avatars.githubusercontent.com/u/20652372?v=3","gravatar_id":"","url":"https://api.github.com/users/justsomedudeonthenet","html_url":"https://github.com/justsomedudeonthenet","followers_url":"https://api.github.com/users/justsomedudeonthenet/followers","following_url":"https://api.github.com/users/justsomedudeonthenet/following{/other_user}","gists_url":"https://api.github.com/users/justsomedudeonthenet/gists{/gist_id}","starred_url":"https://api.github.com/users/justsomedudeonthenet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justsomedudeonthenet/subscriptions","organizations_url":"https://api.github.com/users/justsomedudeonthenet/orgs","repos_url":"https://api.github.com/users/justsomedudeonthenet/repos","events_url":"https://api.github.com/users/justsomedudeonthenet/events{/privacy}","received_events_url":"https://api.github.com/users/justsomedudeonthenet/received_events","type":"User","site_admin":false},"body":"<!--- Provide a general summary of your changes in the Title above -->\r\n\r\n## Description\r\nThis moves all the scheduling decisions (hex search, spawnscan, hex search for spawnpoints only) out of search_overseer/search_worker and into a separate schedulers class.\r\n\r\nNo functionality changes.\r\n\r\n## Motivation and Context\r\nsearch.py is still a mess.  There are quite a few more efficient scheduling mechanisms people are working on, this starts paving the way for them to just implement a new scheduler class instead of wedging it into search.py\r\n\r\nThis simplifies search.py, and makes it easier to add future improvements like queue-per worker, worker groups, etc.\r\n\r\nThis is phase 1.  Once this is in, phase 2 will be one queue per worker (to allow more flexible scheduling).  Phase 3 will be multiple locations in a single python process.\r\n\r\n## How Has This Been Tested?\r\nHave tested against fake API in all three scan modes.  Still doing more testing.\r\n\r\n## Screenshots (if appropriate):\r\n\r\n## Types of changes\r\n<!--- What types of changes does your code introduce? Put an `x` in all the boxes that apply: -->\r\n- [ ] Bug fix (non-breaking change which fixes an issue)\r\n- [ ] New feature (non-breaking change which adds functionality)\r\n- [ ] Breaking change (fix or feature that would cause existing functionality to change)\r\n\r\n## Checklist:\r\n<!--- Go over all the following points, and put an `x` in all the boxes that apply. -->\r\n<!--- If you're unsure about any of these, don't hesitate to ask. We're here to help! -->\r\n- [X] My code follows the code style of this project.\r\n- [ ] My change requires a change to the documentation.\r\n- [ ] I have updated the documentation accordingly.\r\n","created_at":"2016-09-05T21:08:44Z","updated_at":"2016-09-05T23:59:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"98420959ec426415e3ace98520cb287f0bf6583c","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/pulls/1165/commits","review_comments_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/pulls/1165/comments","review_comment_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/pulls/comments{/number}","comments_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/issues/1165/comments","statuses_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/statuses/e2e5e8c824f702b0b2a4f2d86761f4d69aa7369a","head":{"label":"justsomedudeonthenet:scheduler_class","ref":"scheduler_class","sha":"e2e5e8c824f702b0b2a4f2d86761f4d69aa7369a","user":{"login":"justsomedudeonthenet","id":20652372,"avatar_url":"https://avatars.githubusercontent.com/u/20652372?v=3","gravatar_id":"","url":"https://api.github.com/users/justsomedudeonthenet","html_url":"https://github.com/justsomedudeonthenet","followers_url":"https://api.github.com/users/justsomedudeonthenet/followers","following_url":"https://api.github.com/users/justsomedudeonthenet/following{/other_user}","gists_url":"https://api.github.com/users/justsomedudeonthenet/gists{/gist_id}","starred_url":"https://api.github.com/users/justsomedudeonthenet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justsomedudeonthenet/subscriptions","organizations_url":"https://api.github.com/users/justsomedudeonthenet/orgs","repos_url":"https://api.github.com/users/justsomedudeonthenet/repos","events_url":"https://api.github.com/users/justsomedudeonthenet/events{/privacy}","received_events_url":"https://api.github.com/users/justsomedudeonthenet/received_events","type":"User","site_admin":false},"repo":{"id":66032164,"name":"PokemonGo-Map","full_name":"justsomedudeonthenet/PokemonGo-Map","owner":{"login":"justsomedudeonthenet","id":20652372,"avatar_url":"https://avatars.githubusercontent.com/u/20652372?v=3","gravatar_id":"","url":"https://api.github.com/users/justsomedudeonthenet","html_url":"https://github.com/justsomedudeonthenet","followers_url":"https://api.github.com/users/justsomedudeonthenet/followers","following_url":"https://api.github.com/users/justsomedudeonthenet/following{/other_user}","gists_url":"https://api.github.com/users/justsomedudeonthenet/gists{/gist_id}","starred_url":"https://api.github.com/users/justsomedudeonthenet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/justsomedudeonthenet/subscriptions","organizations_url":"https://api.github.com/users/justsomedudeonthenet/orgs","repos_url":"https://api.github.com/users/justsomedudeonthenet/repos","events_url":"https://api.github.com/users/justsomedudeonthenet/events{/privacy}","received_events_url":"https://api.github.com/users/justsomedudeonthenet/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/justsomedudeonthenet/PokemonGo-Map","description":"🌏 Live visualization of all the pokemon in your area... and more!","fork":true,"url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map","forks_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/forks","keys_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/keys{/key_id}","collaborators_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/teams","hooks_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/hooks","issue_events_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/issues/events{/number}","events_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/events","assignees_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/assignees{/user}","branches_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/branches{/branch}","tags_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/tags","blobs_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/git/refs{/sha}","trees_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/git/trees{/sha}","statuses_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/statuses/{sha}","languages_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/languages","stargazers_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/stargazers","contributors_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/contributors","subscribers_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/subscribers","subscription_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/subscription","commits_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/commits{/sha}","git_commits_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/git/commits{/sha}","comments_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/comments{/number}","issue_comment_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/issues/comments{/number}","contents_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/contents/{+path}","compare_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/compare/{base}...{head}","merges_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/merges","archive_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/downloads","issues_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/issues{/number}","pulls_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/pulls{/number}","milestones_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/milestones{/number}","notifications_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/labels{/name}","releases_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/releases{/id}","deployments_url":"https://api.github.com/repos/justsomedudeonthenet/PokemonGo-Map/deployments","created_at":"2016-08-18T21:34:09Z","updated_at":"2016-08-18T21:34:11Z","pushed_at":"2016-09-05T21:49:04Z","git_url":"git://github.com/justsomedudeonthenet/PokemonGo-Map.git","ssh_url":"git@github.com:justsomedudeonthenet/PokemonGo-Map.git","clone_url":"https://github.com/justsomedudeonthenet/PokemonGo-Map.git","svn_url":"https://github.com/justsomedudeonthenet/PokemonGo-Map","homepage":"","size":24059,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"develop"}},"base":{"label":"PokemonGoMap:develop","ref":"develop","sha":"0127b36de0e231eca2f1ac93457899f0ffb1f850","user":{"login":"PokemonGoMap","id":20848202,"avatar_url":"https://avatars.githubusercontent.com/u/20848202?v=3","gravatar_id":"","url":"https://api.github.com/users/PokemonGoMap","html_url":"https://github.com/PokemonGoMap","followers_url":"https://api.github.com/users/PokemonGoMap/followers","following_url":"https://api.github.com/users/PokemonGoMap/following{/other_user}","gists_url":"https://api.github.com/users/PokemonGoMap/gists{/gist_id}","starred_url":"https://api.github.com/users/PokemonGoMap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PokemonGoMap/subscriptions","organizations_url":"https://api.github.com/users/PokemonGoMap/orgs","repos_url":"https://api.github.com/users/PokemonGoMap/repos","events_url":"https://api.github.com/users/PokemonGoMap/events{/privacy}","received_events_url":"https://api.github.com/users/PokemonGoMap/received_events","type":"Organization","site_admin":false},"repo":{"id":64970925,"name":"PokemonGo-Map","full_name":"PokemonGoMap/PokemonGo-Map","owner":{"login":"PokemonGoMap","id":20848202,"avatar_url":"https://avatars.githubusercontent.com/u/20848202?v=3","gravatar_id":"","url":"https://api.github.com/users/PokemonGoMap","html_url":"https://github.com/PokemonGoMap","followers_url":"https://api.github.com/users/PokemonGoMap/followers","following_url":"https://api.github.com/users/PokemonGoMap/following{/other_user}","gists_url":"https://api.github.com/users/PokemonGoMap/gists{/gist_id}","starred_url":"https://api.github.com/users/PokemonGoMap/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/PokemonGoMap/subscriptions","organizations_url":"https://api.github.com/users/PokemonGoMap/orgs","repos_url":"https://api.github.com/users/PokemonGoMap/repos","events_url":"https://api.github.com/users/PokemonGoMap/events{/privacy}","received_events_url":"https://api.github.com/users/PokemonGoMap/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/PokemonGoMap/PokemonGo-Map","description":"🌏 Live visualization of all the pokemon in your area... and more!","fork":false,"url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map","forks_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/forks","keys_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/keys{/key_id}","collaborators_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/teams","hooks_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/hooks","issue_events_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/issues/events{/number}","events_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/events","assignees_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/assignees{/user}","branches_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/branches{/branch}","tags_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/tags","blobs_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/git/refs{/sha}","trees_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/git/trees{/sha}","statuses_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/statuses/{sha}","languages_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/languages","stargazers_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/stargazers","contributors_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/contributors","subscribers_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/subscribers","subscription_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/subscription","commits_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/commits{/sha}","git_commits_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/git/commits{/sha}","comments_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/comments{/number}","issue_comment_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/issues/comments{/number}","contents_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/contents/{+path}","compare_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/compare/{base}...{head}","merges_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/merges","archive_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/downloads","issues_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/issues{/number}","pulls_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/pulls{/number}","milestones_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/milestones{/number}","notifications_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/labels{/name}","releases_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/releases{/id}","deployments_url":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/deployments","created_at":"2016-08-04T22:18:49Z","updated_at":"2016-09-05T21:58:59Z","pushed_at":"2016-09-05T23:29:19Z","git_url":"git://github.com/PokemonGoMap/PokemonGo-Map.git","ssh_url":"git@github.com:PokemonGoMap/PokemonGo-Map.git","clone_url":"https://github.com/PokemonGoMap/PokemonGo-Map.git","svn_url":"https://github.com/PokemonGoMap/PokemonGo-Map","homepage":"","size":31614,"stargazers_count":2245,"watchers_count":2245,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1177,"mirror_url":null,"open_issues_count":197,"forks":1177,"open_issues":197,"watchers":2245,"default_branch":"develop"}},"_links":{"self":{"href":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/pulls/1165"},"html":{"href":"https://github.com/PokemonGoMap/PokemonGo-Map/pull/1165"},"issue":{"href":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/issues/1165"},"comments":{"href":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/issues/1165/comments"},"review_comments":{"href":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/pulls/1165/comments"},"review_comment":{"href":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/pulls/1165/commits"},"statuses":{"href":"https://api.github.com/repos/PokemonGoMap/PokemonGo-Map/statuses/e2e5e8c824f702b0b2a4f2d86761f4d69aa7369a"}}}}
{"actor":{"display_login":"aldarund"}}