{"action":"opened","number":53,"pull_request":{"url":"https://api.github.com/repos/codeinthehole/django-cacheback/pulls/53","id":69209055,"html_url":"https://github.com/codeinthehole/django-cacheback/pull/53","diff_url":"https://github.com/codeinthehole/django-cacheback/pull/53.diff","patch_url":"https://github.com/codeinthehole/django-cacheback/pull/53.patch","issue_url":"https://api.github.com/repos/codeinthehole/django-cacheback/issues/53","number":53,"state":"open","locked":false,"title":"Having issues getting tests to run out of the box.","user":{"login":"Kobold","id":36694,"avatar_url":"https://avatars.githubusercontent.com/u/36694?v=3","gravatar_id":"","url":"https://api.github.com/users/Kobold","html_url":"https://github.com/Kobold","followers_url":"https://api.github.com/users/Kobold/followers","following_url":"https://api.github.com/users/Kobold/following{/other_user}","gists_url":"https://api.github.com/users/Kobold/gists{/gist_id}","starred_url":"https://api.github.com/users/Kobold/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kobold/subscriptions","organizations_url":"https://api.github.com/users/Kobold/orgs","repos_url":"https://api.github.com/users/Kobold/repos","events_url":"https://api.github.com/users/Kobold/events{/privacy}","received_events_url":"https://api.github.com/users/Kobold/received_events","type":"User","site_admin":false},"body":"\r\nHi, first of all I love the library. Thank you! It's the exact caching abstraction I'm looking for 99% of the time!\r\n\r\nI'm looking to add a capability to bulk get cached keys—in the informal testing I've run, repeated calls to Django's `cache.get` don't even close to keep up with `cache.get_many`.\r\n\r\nIn working on that, I've had issues getting started contributing. Here's a pull request with a sketch of changes to get those issues addressed, along with a blow-by-blow of me trying set it up.\r\n\r\nFor reference, Mac OS and python version info:\r\n\r\n    System Version: OS X 10.11.4 (15E65)\r\n    Kernel Version: Darwin 15.4.0\r\n    Python 2.7.11\r\n\r\n\r\n**Issue 1 and 2: django_nose and spec missing**\r\n\r\n```\r\n<git clone and cd into django-cacheback>\r\n$ mkvirtualenv django-cacheback\r\n$ make\r\n```\r\n\r\nAll good well until I try to run tests.\r\n\r\n```\r\n$ ./runtests.py\r\nTraceback (most recent call last):\r\n  File \"./runtests.py\", line 36, in <module>\r\n    from django_nose import NoseTestSuiteRunner\r\nImportError: No module named django_nose\r\n```\r\n\r\nNo prob, `pip install django_nose`.\r\n\r\nNext try:\r\n\r\n```\r\n$ ./runtests.py\r\nnosetests tests -s --with-spec --verbosity=1\r\nUsage: runtests.py [options]\r\n\r\nruntests.py: error: no such option: --with-spec\r\n```\r\n\r\nNo prob, `pip install spec`.\r\n\r\nI've added both of these to the makefile, but where would they go best?\r\n\r\n\r\n**Issue 3: nosetests spec flag**\r\n\r\nNext try:\r\n\r\n```\r\n$ ./runtests.py\r\nnosetests tests -s --with-spec --verbosity=1\r\nUsage: runtests.py [options]\r\n\r\nruntests.py: error: ambiguous option: --with-spec (--with-specplugin, --with-specselector?)\r\n```\r\n\r\nI presume this is a version issue, but I couldn't figure out if it was a change in `nose` or in `spec`. In any case, I just changed the NOSE_ARGS flag in runtests.py to use `--with-specplugin`. Maybe adding version pinning or a frozen requirements can prevent this for other people?\r\n\r\n\r\n**Issue 4: RQ_QUEUES in settings**\r\n\r\nNext try:\r\n\r\n```\r\n$ ./runtests.py \r\nnosetests tests -s --with-specplugin --verbosity=1\r\nCreating test database for alias 'default'...\r\n\r\nUnloadable or unexecutable test.\r\n\r\n    A Failure case is placed in a test suite to indicate the presence of a\r\n    test that could not be loaded or executed. A common example is a test\r\n    module that fails to import.\r\n- runTest\r\n- runTest\r\n- runTest\r\n- runTest\r\n- runTest\r\n- runTest\r\n- runTest\r\n- runTest\r\n\r\n======================================================================\r\nERROR: Failure: ImproperlyConfigured (You have to define RQ_QUEUES in settings.py)\r\n----------------------------------------------------------------------\r\nTraceback (most recent call last):\r\n  File \"/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py\", line 329, in run\r\n    testMethod()\r\n  File \"/Users/agkish/.virtualenvs/django-cacheback/lib/python2.7/site-packages/nose/loader.py\", line 418, in loadTestsFromName\r\n    addr.filename, addr.module)\r\n  File \"/Users/agkish/.virtualenvs/django-cacheback/lib/python2.7/site-packages/nose/importer.py\", line 47, in importFromPath\r\n    return self.importFromDir(dir_path, fqname)\r\n  File \"/Users/agkish/.virtualenvs/django-cacheback/lib/python2.7/site-packages/nose/importer.py\", line 94, in importFromDir\r\n    mod = load_module(part_fqname, fh, filename, desc)\r\n  File \"/Users/agkish/django-cacheback/tests/async_tests.py\", line 8, in <module>\r\n    from cacheback.base import Job\r\n  File \"/Users/agkish/django-cacheback/cacheback/base.py\", line 10, in <module>\r\n    from cacheback.utils import enqueue_task, get_cache, get_job_class\r\n  File \"/Users/agkish/django-cacheback/cacheback/utils.py\", line 19, in <module>\r\n    from .rq_tasks import refresh_cache as rq_refresh_cache\r\n  File \"/Users/agkish/django-cacheback/cacheback/rq_tasks.py\", line 4, in <module>\r\n    @job\r\n  File \"/Users/agkish/.virtualenvs/django-cacheback/lib/python2.7/site-packages/django_rq/decorators.py\", line 30, in job\r\n    queue = get_queue(queue)\r\n  File \"/Users/agkish/.virtualenvs/django-cacheback/lib/python2.7/site-packages/django_rq/queues.py\", line 109, in get_queue\r\n    from .settings import QUEUES\r\n  File \"/Users/agkish/.virtualenvs/django-cacheback/lib/python2.7/site-packages/django_rq/settings.py\", line 10, in <module>\r\n    raise ImproperlyConfigured(\"You have to define RQ_QUEUES in settings.py\")\r\nImproperlyConfigured: You have to define RQ_QUEUES in settings.py\r\n\r\n... then a bunch more of these ...\r\n```\r\n\r\nFor some reason, it appears that `tests/settings.py` isn't being used. I'm not sure why, but as a stopgap I've copied the RQ_QUEUES setting into `runtests.py`'s call to `settings.configure`.\r\n\r\n\r\n**Issue 5: py.test fixtures aren't working**\r\n\r\nI turned on a redis server in the background as well. Next try:\r\n\r\n```\r\n$ ./runtests.py\r\nnosetests tests -s --with-specplugin --verbosity=1\r\nCreating test database for alias 'default'...\r\n\r\nJob with stale sync refresh attribute set\r\n- hits cache within cache lifetime\r\n- triggers async refresh after lifetime but before stale threshold\r\n- triggers sync refresh after stale threshold\r\n\r\n... lots more tests run ...\r\n\r\nGet job class\r\n- class\r\n- invalid class\r\n- invalid module\r\n\r\n======================================================================\r\nERROR: tests.test_base_job.TestJob.test_async_refresh\r\n----------------------------------------------------------------------\r\nTraceback (most recent call last):\r\n  File \"/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py\", line 329, in run\r\n    testMethod()\r\n  File \"/Users/agkish/.virtualenvs/django-cacheback/lib/python2.7/site-packages/nose/case.py\", line 197, in runTest\r\n    self.test(*self.arg)\r\nTypeError: test_async_refresh() takes exactly 2 arguments (1 given)\r\n\r\n======================================================================\r\nERROR: tests.test_base_job.TestJob.test_get_hit\r\n----------------------------------------------------------------------\r\nTraceback (most recent call last):\r\n  File \"/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py\", line 329, in run\r\n    testMethod()\r\n  File \"/Users/agkish/.virtualenvs/django-cacheback/lib/python2.7/site-packages/nose/case.py\", line 197, in runTest\r\n    self.test(*self.arg)\r\nTypeError: test_get_hit() takes exactly 2 arguments (1 given)\r\n\r\n======================================================================\r\nERROR: tests.test_base_job.TestJob.test_get_miss_empty_async\r\n----------------------------------------------------------------------\r\nTraceback (most recent call last):\r\n  File \"/usr/local/Cellar/python/2.7.11/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py\", line 329, in run\r\n    testMethod()\r\n  File \"/Users/agkish/.virtualenvs/django-cacheback/lib/python2.7/site-packages/nose/case.py\", line 197, in runTest\r\n    self.test(*self.arg)\r\nTypeError: test_get_miss_empty_async() takes exactly 2 arguments (1 given)\r\n\r\n... bunch more like this ...\r\n```\r\n\r\nThe issue appears to be that the py.test fixtures, `rq_worker` for example, aren't passed to the nose test cases. In fact, it appears that none of the fixtures are being called at all. For example, the `cleared_cache` fixture is set up in couple of places like this:\r\n\r\n```python\r\n@pytest.mark.usefixtures('cleared_cache', scope='function')\r\nclass TestJob:\r\n    ...\r\n```\r\n\r\nTo test whether it was working, I modified it just create a text file to indicate that it'd been called (so I didn't have to worry about nose eating stdout):\r\n\r\n```\r\n@pytest.fixture()\r\ndef cleared_cache(request):\r\n    with file('~/django-cacheback/sentinel.txt', 'w') as f:\r\n        f.write('cleared_cache called')\r\n    cache.clear()\r\n```\r\n\r\n`sentinel.txt` never got created. At this point I got totally stumped. Ideas?\r\n\r\n\r\nThanks!\r\n\r\n\r\n\r\n\r\n","created_at":"2016-05-06T20:55:19Z","updated_at":"2016-05-06T20:55:20Z","closed_at":null,"merged_at":null,"merge_commit_sha":null,"assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/codeinthehole/django-cacheback/pulls/53/commits","review_comments_url":"https://api.github.com/repos/codeinthehole/django-cacheback/pulls/53/comments","review_comment_url":"https://api.github.com/repos/codeinthehole/django-cacheback/pulls/comments{/number}","comments_url":"https://api.github.com/repos/codeinthehole/django-cacheback/issues/53/comments","statuses_url":"https://api.github.com/repos/codeinthehole/django-cacheback/statuses/e15815bbb7acd3b53616bd6d79769164f662cbb2","head":{"label":"Kobold:test-fixes","ref":"test-fixes","sha":"e15815bbb7acd3b53616bd6d79769164f662cbb2","user":{"login":"Kobold","id":36694,"avatar_url":"https://avatars.githubusercontent.com/u/36694?v=3","gravatar_id":"","url":"https://api.github.com/users/Kobold","html_url":"https://github.com/Kobold","followers_url":"https://api.github.com/users/Kobold/followers","following_url":"https://api.github.com/users/Kobold/following{/other_user}","gists_url":"https://api.github.com/users/Kobold/gists{/gist_id}","starred_url":"https://api.github.com/users/Kobold/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kobold/subscriptions","organizations_url":"https://api.github.com/users/Kobold/orgs","repos_url":"https://api.github.com/users/Kobold/repos","events_url":"https://api.github.com/users/Kobold/events{/privacy}","received_events_url":"https://api.github.com/users/Kobold/received_events","type":"User","site_admin":false},"repo":{"id":54253653,"name":"django-cacheback","full_name":"Kobold/django-cacheback","owner":{"login":"Kobold","id":36694,"avatar_url":"https://avatars.githubusercontent.com/u/36694?v=3","gravatar_id":"","url":"https://api.github.com/users/Kobold","html_url":"https://github.com/Kobold","followers_url":"https://api.github.com/users/Kobold/followers","following_url":"https://api.github.com/users/Kobold/following{/other_user}","gists_url":"https://api.github.com/users/Kobold/gists{/gist_id}","starred_url":"https://api.github.com/users/Kobold/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Kobold/subscriptions","organizations_url":"https://api.github.com/users/Kobold/orgs","repos_url":"https://api.github.com/users/Kobold/repos","events_url":"https://api.github.com/users/Kobold/events{/privacy}","received_events_url":"https://api.github.com/users/Kobold/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Kobold/django-cacheback","description":"Smart caching for Django using Celery to refresh cached items asynchronously.  ","fork":true,"url":"https://api.github.com/repos/Kobold/django-cacheback","forks_url":"https://api.github.com/repos/Kobold/django-cacheback/forks","keys_url":"https://api.github.com/repos/Kobold/django-cacheback/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Kobold/django-cacheback/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Kobold/django-cacheback/teams","hooks_url":"https://api.github.com/repos/Kobold/django-cacheback/hooks","issue_events_url":"https://api.github.com/repos/Kobold/django-cacheback/issues/events{/number}","events_url":"https://api.github.com/repos/Kobold/django-cacheback/events","assignees_url":"https://api.github.com/repos/Kobold/django-cacheback/assignees{/user}","branches_url":"https://api.github.com/repos/Kobold/django-cacheback/branches{/branch}","tags_url":"https://api.github.com/repos/Kobold/django-cacheback/tags","blobs_url":"https://api.github.com/repos/Kobold/django-cacheback/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Kobold/django-cacheback/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Kobold/django-cacheback/git/refs{/sha}","trees_url":"https://api.github.com/repos/Kobold/django-cacheback/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Kobold/django-cacheback/statuses/{sha}","languages_url":"https://api.github.com/repos/Kobold/django-cacheback/languages","stargazers_url":"https://api.github.com/repos/Kobold/django-cacheback/stargazers","contributors_url":"https://api.github.com/repos/Kobold/django-cacheback/contributors","subscribers_url":"https://api.github.com/repos/Kobold/django-cacheback/subscribers","subscription_url":"https://api.github.com/repos/Kobold/django-cacheback/subscription","commits_url":"https://api.github.com/repos/Kobold/django-cacheback/commits{/sha}","git_commits_url":"https://api.github.com/repos/Kobold/django-cacheback/git/commits{/sha}","comments_url":"https://api.github.com/repos/Kobold/django-cacheback/comments{/number}","issue_comment_url":"https://api.github.com/repos/Kobold/django-cacheback/issues/comments{/number}","contents_url":"https://api.github.com/repos/Kobold/django-cacheback/contents/{+path}","compare_url":"https://api.github.com/repos/Kobold/django-cacheback/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Kobold/django-cacheback/merges","archive_url":"https://api.github.com/repos/Kobold/django-cacheback/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Kobold/django-cacheback/downloads","issues_url":"https://api.github.com/repos/Kobold/django-cacheback/issues{/number}","pulls_url":"https://api.github.com/repos/Kobold/django-cacheback/pulls{/number}","milestones_url":"https://api.github.com/repos/Kobold/django-cacheback/milestones{/number}","notifications_url":"https://api.github.com/repos/Kobold/django-cacheback/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Kobold/django-cacheback/labels{/name}","releases_url":"https://api.github.com/repos/Kobold/django-cacheback/releases{/id}","deployments_url":"https://api.github.com/repos/Kobold/django-cacheback/deployments","created_at":"2016-03-19T07:37:26Z","updated_at":"2016-03-19T07:37:27Z","pushed_at":"2016-05-06T20:51:12Z","git_url":"git://github.com/Kobold/django-cacheback.git","ssh_url":"git@github.com:Kobold/django-cacheback.git","clone_url":"https://github.com/Kobold/django-cacheback.git","svn_url":"https://github.com/Kobold/django-cacheback","homepage":"http://codeinthehole.com/writing/cacheback-asynchronous-cache-refreshing-for-django/","size":512,"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":"master"}},"base":{"label":"codeinthehole:master","ref":"master","sha":"563d79388abc053445a0169060830c21476fa783","user":{"login":"codeinthehole","id":80975,"avatar_url":"https://avatars.githubusercontent.com/u/80975?v=3","gravatar_id":"","url":"https://api.github.com/users/codeinthehole","html_url":"https://github.com/codeinthehole","followers_url":"https://api.github.com/users/codeinthehole/followers","following_url":"https://api.github.com/users/codeinthehole/following{/other_user}","gists_url":"https://api.github.com/users/codeinthehole/gists{/gist_id}","starred_url":"https://api.github.com/users/codeinthehole/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codeinthehole/subscriptions","organizations_url":"https://api.github.com/users/codeinthehole/orgs","repos_url":"https://api.github.com/users/codeinthehole/repos","events_url":"https://api.github.com/users/codeinthehole/events{/privacy}","received_events_url":"https://api.github.com/users/codeinthehole/received_events","type":"User","site_admin":false},"repo":{"id":5217936,"name":"django-cacheback","full_name":"codeinthehole/django-cacheback","owner":{"login":"codeinthehole","id":80975,"avatar_url":"https://avatars.githubusercontent.com/u/80975?v=3","gravatar_id":"","url":"https://api.github.com/users/codeinthehole","html_url":"https://github.com/codeinthehole","followers_url":"https://api.github.com/users/codeinthehole/followers","following_url":"https://api.github.com/users/codeinthehole/following{/other_user}","gists_url":"https://api.github.com/users/codeinthehole/gists{/gist_id}","starred_url":"https://api.github.com/users/codeinthehole/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codeinthehole/subscriptions","organizations_url":"https://api.github.com/users/codeinthehole/orgs","repos_url":"https://api.github.com/users/codeinthehole/repos","events_url":"https://api.github.com/users/codeinthehole/events{/privacy}","received_events_url":"https://api.github.com/users/codeinthehole/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/codeinthehole/django-cacheback","description":"Smart caching for Django using Celery to refresh cached items asynchronously.  ","fork":false,"url":"https://api.github.com/repos/codeinthehole/django-cacheback","forks_url":"https://api.github.com/repos/codeinthehole/django-cacheback/forks","keys_url":"https://api.github.com/repos/codeinthehole/django-cacheback/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codeinthehole/django-cacheback/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codeinthehole/django-cacheback/teams","hooks_url":"https://api.github.com/repos/codeinthehole/django-cacheback/hooks","issue_events_url":"https://api.github.com/repos/codeinthehole/django-cacheback/issues/events{/number}","events_url":"https://api.github.com/repos/codeinthehole/django-cacheback/events","assignees_url":"https://api.github.com/repos/codeinthehole/django-cacheback/assignees{/user}","branches_url":"https://api.github.com/repos/codeinthehole/django-cacheback/branches{/branch}","tags_url":"https://api.github.com/repos/codeinthehole/django-cacheback/tags","blobs_url":"https://api.github.com/repos/codeinthehole/django-cacheback/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codeinthehole/django-cacheback/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codeinthehole/django-cacheback/git/refs{/sha}","trees_url":"https://api.github.com/repos/codeinthehole/django-cacheback/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codeinthehole/django-cacheback/statuses/{sha}","languages_url":"https://api.github.com/repos/codeinthehole/django-cacheback/languages","stargazers_url":"https://api.github.com/repos/codeinthehole/django-cacheback/stargazers","contributors_url":"https://api.github.com/repos/codeinthehole/django-cacheback/contributors","subscribers_url":"https://api.github.com/repos/codeinthehole/django-cacheback/subscribers","subscription_url":"https://api.github.com/repos/codeinthehole/django-cacheback/subscription","commits_url":"https://api.github.com/repos/codeinthehole/django-cacheback/commits{/sha}","git_commits_url":"https://api.github.com/repos/codeinthehole/django-cacheback/git/commits{/sha}","comments_url":"https://api.github.com/repos/codeinthehole/django-cacheback/comments{/number}","issue_comment_url":"https://api.github.com/repos/codeinthehole/django-cacheback/issues/comments{/number}","contents_url":"https://api.github.com/repos/codeinthehole/django-cacheback/contents/{+path}","compare_url":"https://api.github.com/repos/codeinthehole/django-cacheback/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codeinthehole/django-cacheback/merges","archive_url":"https://api.github.com/repos/codeinthehole/django-cacheback/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codeinthehole/django-cacheback/downloads","issues_url":"https://api.github.com/repos/codeinthehole/django-cacheback/issues{/number}","pulls_url":"https://api.github.com/repos/codeinthehole/django-cacheback/pulls{/number}","milestones_url":"https://api.github.com/repos/codeinthehole/django-cacheback/milestones{/number}","notifications_url":"https://api.github.com/repos/codeinthehole/django-cacheback/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codeinthehole/django-cacheback/labels{/name}","releases_url":"https://api.github.com/repos/codeinthehole/django-cacheback/releases{/id}","deployments_url":"https://api.github.com/repos/codeinthehole/django-cacheback/deployments","created_at":"2012-07-28T21:39:30Z","updated_at":"2016-04-11T11:37:16Z","pushed_at":"2016-05-06T20:55:20Z","git_url":"git://github.com/codeinthehole/django-cacheback.git","ssh_url":"git@github.com:codeinthehole/django-cacheback.git","clone_url":"https://github.com/codeinthehole/django-cacheback.git","svn_url":"https://github.com/codeinthehole/django-cacheback","homepage":"http://codeinthehole.com/writing/cacheback-asynchronous-cache-refreshing-for-django/","size":557,"stargazers_count":230,"watchers_count":230,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":53,"mirror_url":null,"open_issues_count":3,"forks":53,"open_issues":3,"watchers":230,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/codeinthehole/django-cacheback/pulls/53"},"html":{"href":"https://github.com/codeinthehole/django-cacheback/pull/53"},"issue":{"href":"https://api.github.com/repos/codeinthehole/django-cacheback/issues/53"},"comments":{"href":"https://api.github.com/repos/codeinthehole/django-cacheback/issues/53/comments"},"review_comments":{"href":"https://api.github.com/repos/codeinthehole/django-cacheback/pulls/53/comments"},"review_comment":{"href":"https://api.github.com/repos/codeinthehole/django-cacheback/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/codeinthehole/django-cacheback/pulls/53/commits"},"statuses":{"href":"https://api.github.com/repos/codeinthehole/django-cacheback/statuses/e15815bbb7acd3b53616bd6d79769164f662cbb2"}},"merged":false,"mergeable":null,"mergeable_state":"unknown","merged_by":null,"comments":0,"review_comments":0,"commits":1,"additions":9,"deletions":1,"changed_files":2}}