{"action":"created","comment":{"url":"https://api.github.com/repos/n1analytics/anonlink/pulls/comments/199698120","pull_request_review_id":133865800,"id":199698120,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5OTY5ODEyMA==","diff_hunk":"@@ -0,0 +1,221 @@\n+import array as _array\n+import heapq as _heapq\n+import io as _io\n+import struct as _struct\n+import typing as _typing\n+\n+from . import typechecking as _typechecking\n+\n+# https://docs.python.org/3/library/struct.html#format-characters\n+_STRUCT_UINT_LEN_TO_FMT = {1: 'B', 2: 'H', 4: 'L', 8: 'Q'}\n+_STRUCT_FLOAT_LEN_TO_FMT = {2: 'e', 4: 'f', 8: 'd'}\n+\n+# https://docs.python.org/3/library/array.html#module-array\n+_ARRAY_UINT_TYPES = 'BIHLQ'\n+_ARRAY_FLOAT_TYPES = 'df'\n+_ARRAY_UINT_LEN_TO_FMT = {_array.array(t).itemsize: t\n+                          for t in _ARRAY_UINT_TYPES}\n+_ARRAY_FLOAT_LEN_TO_FMT = {_array.array(t).itemsize: t\n+                           for t in _ARRAY_FLOAT_TYPES}\n+\n+_HEADER_STRUCT = _struct.Struct('<BBBB')\n+\n+\n+_CandidatePair = _typing.Tuple[float, int, int, int, int]\n+_CandidatePairIter = _typing.Iterable[_CandidatePair]\n+\n+# This is subject to change.\n+# The format is composed of a header and a sequence of entries.\n+# The header is composed of:  version (1 byte), number of bytes in\n+# similarity (1 byte), number of bytes in dataset index (1 byte), number\n+# of bytes in record index (1 byte).\n+# Every entry is composed of a similarity as a IEEE floating point\n+# value, a two datset indices, and two record indices. Their sizes as\n+# determined by the header.\n+# All integers are unsigned. All values are *little-endian* (yes, this\n+# breaks convention). The number of candidate matchings is not included\n+# on purpose: if needed, it can be computed from the length of the file.\n+\n+\n+def _entry_struct(\n+    sim_t_size: int,\n+    dset_i_t_size: int,\n+    rec_i_t_size: int\n+) -> _struct.Struct:\n+    try:\n+        sim_t = _STRUCT_FLOAT_LEN_TO_FMT[sim_t_size]\n+    except KeyError:\n+        msg = f'floats of {sim_t_size} bytes are not supported'\n+        raise ValueError(msg) from None\n+    try:\n+        dset_i_t = _STRUCT_UINT_LEN_TO_FMT[dset_i_t_size]\n+    except KeyError:\n+        msg = f'indices of {dset_i_t_size} bytes are not supported'\n+        raise ValueError(msg) from None\n+    try:\n+        rec_i_t = _STRUCT_UINT_LEN_TO_FMT[rec_i_t_size]\n+    except KeyError:\n+        msg = f'indices of {rec_i_t_size} bytes are not supported'\n+        raise ValueError(msg) from None\n+    return _struct.Struct(f\"<{sim_t}2{dset_i_t}2{rec_i_t}\")\n+    \n+\n+def _dump_from_iterable(\n+    f: _typing.BinaryIO,\n+    sim_t_size: int,\n+    dset_i_t_size: int,\n+    rec_i_t_size: int,\n+    iterable: _CandidatePairIter\n+) -> None:\n+    # Fail without writing if the parameters are incorrect.\n+    entry_struct = _entry_struct(\n+        sim_t_size, dset_i_t_size, rec_i_t_size)\n+    \n+    # Write header.\n+    f.write(_HEADER_STRUCT.pack(1, sim_t_size, dset_i_t_size, rec_i_t_size))\n+    \n+    for entry in iterable:\n+        f.write(entry_struct.pack(*entry))\n+\n+\n+def _entries_iterable(\n+    f: _typing.BinaryIO,\n+    entry_struct: _struct.Struct\n+) -> _CandidatePairIter:\n+    buffer = f.read(entry_struct.size)\n+    while buffer:\n+        if len(buffer) != entry_struct.size:\n+            raise ValueError('ran out of input')\n+        yield _typing.cast(_CandidatePair, entry_struct.unpack(buffer))\n+        buffer = f.read(entry_struct.size)\n+\n+\n+def _load_to_iterable(\n+    f: _typing.BinaryIO\n+) -> _typing.Tuple[_CandidatePairIter, int, int, int]:\n+    # Make sure that f.read(n) returns exactly n bytes.","path":"anonlink/serialization.py","position":98,"original_position":96,"commit_id":"2471e8f15237f8cbebfa70bf679371a55937f627","original_commit_id":"99f66cd952fa7932abe08c78f1e6a82056bc6f42","user":{"login":"hardbyte","id":855189,"node_id":"MDQ6VXNlcjg1NTE4OQ==","avatar_url":"https://avatars0.githubusercontent.com/u/855189?v=4","gravatar_id":"","url":"https://api.github.com/users/hardbyte","html_url":"https://github.com/hardbyte","followers_url":"https://api.github.com/users/hardbyte/followers","following_url":"https://api.github.com/users/hardbyte/following{/other_user}","gists_url":"https://api.github.com/users/hardbyte/gists{/gist_id}","starred_url":"https://api.github.com/users/hardbyte/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hardbyte/subscriptions","organizations_url":"https://api.github.com/users/hardbyte/orgs","repos_url":"https://api.github.com/users/hardbyte/repos","events_url":"https://api.github.com/users/hardbyte/events{/privacy}","received_events_url":"https://api.github.com/users/hardbyte/received_events","type":"User","site_admin":false},"body":"Interesting, looks like the Python docs are a bit ambiguous here. Good work checking up","created_at":"2018-07-03T06:44:33Z","updated_at":"2018-07-03T06:44:33Z","html_url":"https://github.com/n1analytics/anonlink/pull/117#discussion_r199698120","pull_request_url":"https://api.github.com/repos/n1analytics/anonlink/pulls/117","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/n1analytics/anonlink/pulls/comments/199698120"},"html":{"href":"https://github.com/n1analytics/anonlink/pull/117#discussion_r199698120"},"pull_request":{"href":"https://api.github.com/repos/n1analytics/anonlink/pulls/117"}},"in_reply_to_id":199683018},"pull_request":{"url":"https://api.github.com/repos/n1analytics/anonlink/pulls/117","id":198815962,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk4ODE1OTYy","html_url":"https://github.com/n1analytics/anonlink/pull/117","diff_url":"https://github.com/n1analytics/anonlink/pull/117.diff","patch_url":"https://github.com/n1analytics/anonlink/pull/117.patch","issue_url":"https://api.github.com/repos/n1analytics/anonlink/issues/117","number":117,"state":"open","locked":false,"title":"Api new serialisation","user":{"login":"nbgl","id":12507513,"node_id":"MDQ6VXNlcjEyNTA3NTEz","avatar_url":"https://avatars1.githubusercontent.com/u/12507513?v=4","gravatar_id":"","url":"https://api.github.com/users/nbgl","html_url":"https://github.com/nbgl","followers_url":"https://api.github.com/users/nbgl/followers","following_url":"https://api.github.com/users/nbgl/following{/other_user}","gists_url":"https://api.github.com/users/nbgl/gists{/gist_id}","starred_url":"https://api.github.com/users/nbgl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nbgl/subscriptions","organizations_url":"https://api.github.com/users/nbgl/orgs","repos_url":"https://api.github.com/users/nbgl/repos","events_url":"https://api.github.com/users/nbgl/events{/privacy}","received_events_url":"https://api.github.com/users/nbgl/received_events","type":"User","site_admin":false},"body":"Serialise candidate pairs into binary format. This will help us get this code out of the Entity Service.\r\n\r\nI realise this is a big pull request, but 70% of the code is testing. This code has a lot of unpleasant edge cases.\r\n\r\n@hardbyte is probably in the best position to review this, but since this is a big PR, it would be great if @unzvfu could have a look also.","created_at":"2018-07-02T23:44:55Z","updated_at":"2018-07-03T06:44:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"2c30cd54f70db07ca5f7e9d0ef2c30ba13d251b2","assignee":{"login":"nbgl","id":12507513,"node_id":"MDQ6VXNlcjEyNTA3NTEz","avatar_url":"https://avatars1.githubusercontent.com/u/12507513?v=4","gravatar_id":"","url":"https://api.github.com/users/nbgl","html_url":"https://github.com/nbgl","followers_url":"https://api.github.com/users/nbgl/followers","following_url":"https://api.github.com/users/nbgl/following{/other_user}","gists_url":"https://api.github.com/users/nbgl/gists{/gist_id}","starred_url":"https://api.github.com/users/nbgl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nbgl/subscriptions","organizations_url":"https://api.github.com/users/nbgl/orgs","repos_url":"https://api.github.com/users/nbgl/repos","events_url":"https://api.github.com/users/nbgl/events{/privacy}","received_events_url":"https://api.github.com/users/nbgl/received_events","type":"User","site_admin":false},"assignees":[{"login":"nbgl","id":12507513,"node_id":"MDQ6VXNlcjEyNTA3NTEz","avatar_url":"https://avatars1.githubusercontent.com/u/12507513?v=4","gravatar_id":"","url":"https://api.github.com/users/nbgl","html_url":"https://github.com/nbgl","followers_url":"https://api.github.com/users/nbgl/followers","following_url":"https://api.github.com/users/nbgl/following{/other_user}","gists_url":"https://api.github.com/users/nbgl/gists{/gist_id}","starred_url":"https://api.github.com/users/nbgl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/nbgl/subscriptions","organizations_url":"https://api.github.com/users/nbgl/orgs","repos_url":"https://api.github.com/users/nbgl/repos","events_url":"https://api.github.com/users/nbgl/events{/privacy}","received_events_url":"https://api.github.com/users/nbgl/received_events","type":"User","site_admin":false}],"requested_reviewers":[{"login":"unzvfu","id":426294,"node_id":"MDQ6VXNlcjQyNjI5NA==","avatar_url":"https://avatars1.githubusercontent.com/u/426294?v=4","gravatar_id":"","url":"https://api.github.com/users/unzvfu","html_url":"https://github.com/unzvfu","followers_url":"https://api.github.com/users/unzvfu/followers","following_url":"https://api.github.com/users/unzvfu/following{/other_user}","gists_url":"https://api.github.com/users/unzvfu/gists{/gist_id}","starred_url":"https://api.github.com/users/unzvfu/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/unzvfu/subscriptions","organizations_url":"https://api.github.com/users/unzvfu/orgs","repos_url":"https://api.github.com/users/unzvfu/repos","events_url":"https://api.github.com/users/unzvfu/events{/privacy}","received_events_url":"https://api.github.com/users/unzvfu/received_events","type":"User","site_admin":false},{"login":"hardbyte","id":855189,"node_id":"MDQ6VXNlcjg1NTE4OQ==","avatar_url":"https://avatars0.githubusercontent.com/u/855189?v=4","gravatar_id":"","url":"https://api.github.com/users/hardbyte","html_url":"https://github.com/hardbyte","followers_url":"https://api.github.com/users/hardbyte/followers","following_url":"https://api.github.com/users/hardbyte/following{/other_user}","gists_url":"https://api.github.com/users/hardbyte/gists{/gist_id}","starred_url":"https://api.github.com/users/hardbyte/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hardbyte/subscriptions","organizations_url":"https://api.github.com/users/hardbyte/orgs","repos_url":"https://api.github.com/users/hardbyte/repos","events_url":"https://api.github.com/users/hardbyte/events{/privacy}","received_events_url":"https://api.github.com/users/hardbyte/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[],"milestone":{"url":"https://api.github.com/repos/n1analytics/anonlink/milestones/13","html_url":"https://github.com/n1analytics/anonlink/milestone/13","labels_url":"https://api.github.com/repos/n1analytics/anonlink/milestones/13/labels","id":3451639,"node_id":"MDk6TWlsZXN0b25lMzQ1MTYzOQ==","number":13,"title":"Sprint 2018-07-13","description":"","creator":{"login":"gusmith","id":10216186,"node_id":"MDQ6VXNlcjEwMjE2MTg2","avatar_url":"https://avatars3.githubusercontent.com/u/10216186?v=4","gravatar_id":"","url":"https://api.github.com/users/gusmith","html_url":"https://github.com/gusmith","followers_url":"https://api.github.com/users/gusmith/followers","following_url":"https://api.github.com/users/gusmith/following{/other_user}","gists_url":"https://api.github.com/users/gusmith/gists{/gist_id}","starred_url":"https://api.github.com/users/gusmith/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gusmith/subscriptions","organizations_url":"https://api.github.com/users/gusmith/orgs","repos_url":"https://api.github.com/users/gusmith/repos","events_url":"https://api.github.com/users/gusmith/events{/privacy}","received_events_url":"https://api.github.com/users/gusmith/received_events","type":"User","site_admin":false},"open_issues":1,"closed_issues":0,"state":"open","created_at":"2018-06-26T03:47:34Z","updated_at":"2018-07-02T23:44:55Z","due_on":"2018-07-13T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/n1analytics/anonlink/pulls/117/commits","review_comments_url":"https://api.github.com/repos/n1analytics/anonlink/pulls/117/comments","review_comment_url":"https://api.github.com/repos/n1analytics/anonlink/pulls/comments{/number}","comments_url":"https://api.github.com/repos/n1analytics/anonlink/issues/117/comments","statuses_url":"https://api.github.com/repos/n1analytics/anonlink/statuses/2471e8f15237f8cbebfa70bf679371a55937f627","head":{"label":"n1analytics:api-new-serialisation","ref":"api-new-serialisation","sha":"2471e8f15237f8cbebfa70bf679371a55937f627","user":{"login":"n1analytics","id":13109968,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzMTA5OTY4","avatar_url":"https://avatars0.githubusercontent.com/u/13109968?v=4","gravatar_id":"","url":"https://api.github.com/users/n1analytics","html_url":"https://github.com/n1analytics","followers_url":"https://api.github.com/users/n1analytics/followers","following_url":"https://api.github.com/users/n1analytics/following{/other_user}","gists_url":"https://api.github.com/users/n1analytics/gists{/gist_id}","starred_url":"https://api.github.com/users/n1analytics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/n1analytics/subscriptions","organizations_url":"https://api.github.com/users/n1analytics/orgs","repos_url":"https://api.github.com/users/n1analytics/repos","events_url":"https://api.github.com/users/n1analytics/events{/privacy}","received_events_url":"https://api.github.com/users/n1analytics/received_events","type":"Organization","site_admin":false},"repo":{"id":92788255,"node_id":"MDEwOlJlcG9zaXRvcnk5Mjc4ODI1NQ==","name":"anonlink","full_name":"n1analytics/anonlink","owner":{"login":"n1analytics","id":13109968,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzMTA5OTY4","avatar_url":"https://avatars0.githubusercontent.com/u/13109968?v=4","gravatar_id":"","url":"https://api.github.com/users/n1analytics","html_url":"https://github.com/n1analytics","followers_url":"https://api.github.com/users/n1analytics/followers","following_url":"https://api.github.com/users/n1analytics/following{/other_user}","gists_url":"https://api.github.com/users/n1analytics/gists{/gist_id}","starred_url":"https://api.github.com/users/n1analytics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/n1analytics/subscriptions","organizations_url":"https://api.github.com/users/n1analytics/orgs","repos_url":"https://api.github.com/users/n1analytics/repos","events_url":"https://api.github.com/users/n1analytics/events{/privacy}","received_events_url":"https://api.github.com/users/n1analytics/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/n1analytics/anonlink","description":"Python implementation of anonymous linkage using cryptographic linkage keys","fork":false,"url":"https://api.github.com/repos/n1analytics/anonlink","forks_url":"https://api.github.com/repos/n1analytics/anonlink/forks","keys_url":"https://api.github.com/repos/n1analytics/anonlink/keys{/key_id}","collaborators_url":"https://api.github.com/repos/n1analytics/anonlink/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/n1analytics/anonlink/teams","hooks_url":"https://api.github.com/repos/n1analytics/anonlink/hooks","issue_events_url":"https://api.github.com/repos/n1analytics/anonlink/issues/events{/number}","events_url":"https://api.github.com/repos/n1analytics/anonlink/events","assignees_url":"https://api.github.com/repos/n1analytics/anonlink/assignees{/user}","branches_url":"https://api.github.com/repos/n1analytics/anonlink/branches{/branch}","tags_url":"https://api.github.com/repos/n1analytics/anonlink/tags","blobs_url":"https://api.github.com/repos/n1analytics/anonlink/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/n1analytics/anonlink/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/n1analytics/anonlink/git/refs{/sha}","trees_url":"https://api.github.com/repos/n1analytics/anonlink/git/trees{/sha}","statuses_url":"https://api.github.com/repos/n1analytics/anonlink/statuses/{sha}","languages_url":"https://api.github.com/repos/n1analytics/anonlink/languages","stargazers_url":"https://api.github.com/repos/n1analytics/anonlink/stargazers","contributors_url":"https://api.github.com/repos/n1analytics/anonlink/contributors","subscribers_url":"https://api.github.com/repos/n1analytics/anonlink/subscribers","subscription_url":"https://api.github.com/repos/n1analytics/anonlink/subscription","commits_url":"https://api.github.com/repos/n1analytics/anonlink/commits{/sha}","git_commits_url":"https://api.github.com/repos/n1analytics/anonlink/git/commits{/sha}","comments_url":"https://api.github.com/repos/n1analytics/anonlink/comments{/number}","issue_comment_url":"https://api.github.com/repos/n1analytics/anonlink/issues/comments{/number}","contents_url":"https://api.github.com/repos/n1analytics/anonlink/contents/{+path}","compare_url":"https://api.github.com/repos/n1analytics/anonlink/compare/{base}...{head}","merges_url":"https://api.github.com/repos/n1analytics/anonlink/merges","archive_url":"https://api.github.com/repos/n1analytics/anonlink/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/n1analytics/anonlink/downloads","issues_url":"https://api.github.com/repos/n1analytics/anonlink/issues{/number}","pulls_url":"https://api.github.com/repos/n1analytics/anonlink/pulls{/number}","milestones_url":"https://api.github.com/repos/n1analytics/anonlink/milestones{/number}","notifications_url":"https://api.github.com/repos/n1analytics/anonlink/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/n1analytics/anonlink/labels{/name}","releases_url":"https://api.github.com/repos/n1analytics/anonlink/releases{/id}","deployments_url":"https://api.github.com/repos/n1analytics/anonlink/deployments","created_at":"2017-05-30T01:26:46Z","updated_at":"2018-06-12T21:22:17Z","pushed_at":"2018-07-03T06:40:48Z","git_url":"git://github.com/n1analytics/anonlink.git","ssh_url":"git@github.com:n1analytics/anonlink.git","clone_url":"https://github.com/n1analytics/anonlink.git","svn_url":"https://github.com/n1analytics/anonlink","homepage":"","size":2093,"stargazers_count":3,"watchers_count":3,"language":"Python","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":23,"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":0,"open_issues":23,"watchers":3,"default_branch":"master"}},"base":{"label":"n1analytics:api-new","ref":"api-new","sha":"470a0f48898be2cfd8842a5de71e731324648443","user":{"login":"n1analytics","id":13109968,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzMTA5OTY4","avatar_url":"https://avatars0.githubusercontent.com/u/13109968?v=4","gravatar_id":"","url":"https://api.github.com/users/n1analytics","html_url":"https://github.com/n1analytics","followers_url":"https://api.github.com/users/n1analytics/followers","following_url":"https://api.github.com/users/n1analytics/following{/other_user}","gists_url":"https://api.github.com/users/n1analytics/gists{/gist_id}","starred_url":"https://api.github.com/users/n1analytics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/n1analytics/subscriptions","organizations_url":"https://api.github.com/users/n1analytics/orgs","repos_url":"https://api.github.com/users/n1analytics/repos","events_url":"https://api.github.com/users/n1analytics/events{/privacy}","received_events_url":"https://api.github.com/users/n1analytics/received_events","type":"Organization","site_admin":false},"repo":{"id":92788255,"node_id":"MDEwOlJlcG9zaXRvcnk5Mjc4ODI1NQ==","name":"anonlink","full_name":"n1analytics/anonlink","owner":{"login":"n1analytics","id":13109968,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEzMTA5OTY4","avatar_url":"https://avatars0.githubusercontent.com/u/13109968?v=4","gravatar_id":"","url":"https://api.github.com/users/n1analytics","html_url":"https://github.com/n1analytics","followers_url":"https://api.github.com/users/n1analytics/followers","following_url":"https://api.github.com/users/n1analytics/following{/other_user}","gists_url":"https://api.github.com/users/n1analytics/gists{/gist_id}","starred_url":"https://api.github.com/users/n1analytics/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/n1analytics/subscriptions","organizations_url":"https://api.github.com/users/n1analytics/orgs","repos_url":"https://api.github.com/users/n1analytics/repos","events_url":"https://api.github.com/users/n1analytics/events{/privacy}","received_events_url":"https://api.github.com/users/n1analytics/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/n1analytics/anonlink","description":"Python implementation of anonymous linkage using cryptographic linkage keys","fork":false,"url":"https://api.github.com/repos/n1analytics/anonlink","forks_url":"https://api.github.com/repos/n1analytics/anonlink/forks","keys_url":"https://api.github.com/repos/n1analytics/anonlink/keys{/key_id}","collaborators_url":"https://api.github.com/repos/n1analytics/anonlink/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/n1analytics/anonlink/teams","hooks_url":"https://api.github.com/repos/n1analytics/anonlink/hooks","issue_events_url":"https://api.github.com/repos/n1analytics/anonlink/issues/events{/number}","events_url":"https://api.github.com/repos/n1analytics/anonlink/events","assignees_url":"https://api.github.com/repos/n1analytics/anonlink/assignees{/user}","branches_url":"https://api.github.com/repos/n1analytics/anonlink/branches{/branch}","tags_url":"https://api.github.com/repos/n1analytics/anonlink/tags","blobs_url":"https://api.github.com/repos/n1analytics/anonlink/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/n1analytics/anonlink/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/n1analytics/anonlink/git/refs{/sha}","trees_url":"https://api.github.com/repos/n1analytics/anonlink/git/trees{/sha}","statuses_url":"https://api.github.com/repos/n1analytics/anonlink/statuses/{sha}","languages_url":"https://api.github.com/repos/n1analytics/anonlink/languages","stargazers_url":"https://api.github.com/repos/n1analytics/anonlink/stargazers","contributors_url":"https://api.github.com/repos/n1analytics/anonlink/contributors","subscribers_url":"https://api.github.com/repos/n1analytics/anonlink/subscribers","subscription_url":"https://api.github.com/repos/n1analytics/anonlink/subscription","commits_url":"https://api.github.com/repos/n1analytics/anonlink/commits{/sha}","git_commits_url":"https://api.github.com/repos/n1analytics/anonlink/git/commits{/sha}","comments_url":"https://api.github.com/repos/n1analytics/anonlink/comments{/number}","issue_comment_url":"https://api.github.com/repos/n1analytics/anonlink/issues/comments{/number}","contents_url":"https://api.github.com/repos/n1analytics/anonlink/contents/{+path}","compare_url":"https://api.github.com/repos/n1analytics/anonlink/compare/{base}...{head}","merges_url":"https://api.github.com/repos/n1analytics/anonlink/merges","archive_url":"https://api.github.com/repos/n1analytics/anonlink/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/n1analytics/anonlink/downloads","issues_url":"https://api.github.com/repos/n1analytics/anonlink/issues{/number}","pulls_url":"https://api.github.com/repos/n1analytics/anonlink/pulls{/number}","milestones_url":"https://api.github.com/repos/n1analytics/anonlink/milestones{/number}","notifications_url":"https://api.github.com/repos/n1analytics/anonlink/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/n1analytics/anonlink/labels{/name}","releases_url":"https://api.github.com/repos/n1analytics/anonlink/releases{/id}","deployments_url":"https://api.github.com/repos/n1analytics/anonlink/deployments","created_at":"2017-05-30T01:26:46Z","updated_at":"2018-06-12T21:22:17Z","pushed_at":"2018-07-03T06:40:48Z","git_url":"git://github.com/n1analytics/anonlink.git","ssh_url":"git@github.com:n1analytics/anonlink.git","clone_url":"https://github.com/n1analytics/anonlink.git","svn_url":"https://github.com/n1analytics/anonlink","homepage":"","size":2093,"stargazers_count":3,"watchers_count":3,"language":"Python","has_issues":true,"has_projects":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":23,"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":0,"open_issues":23,"watchers":3,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/n1analytics/anonlink/pulls/117"},"html":{"href":"https://github.com/n1analytics/anonlink/pull/117"},"issue":{"href":"https://api.github.com/repos/n1analytics/anonlink/issues/117"},"comments":{"href":"https://api.github.com/repos/n1analytics/anonlink/issues/117/comments"},"review_comments":{"href":"https://api.github.com/repos/n1analytics/anonlink/pulls/117/comments"},"review_comment":{"href":"https://api.github.com/repos/n1analytics/anonlink/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/n1analytics/anonlink/pulls/117/commits"},"statuses":{"href":"https://api.github.com/repos/n1analytics/anonlink/statuses/2471e8f15237f8cbebfa70bf679371a55937f627"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"hardbyte"}}