{"action":"created","comment":{"url":"https://api.github.com/repos/Parquery/lddwrap/pulls/comments/228227160","pull_request_review_id":168451242,"id":228227160,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyODIyNzE2MA==","diff_hunk":"@@ -0,0 +1,300 @@\n+#!/usr/bin/env python3\n+\"\"\"Wrap ldd *nix utility to determine shared libraries required by a program.\"\"\"\n+\n+import collections\n+import json\n+import pathlib\n+import subprocess\n+from typing import Dict, List, Optional, Tuple, TextIO, Mapping, Any  # pylint: disable=unused-import\n+\n+import icontract\n+\n+\n+@icontract.inv(\n+    lambda self: not (self.soname is None and self.found) or (self.path is not None and self.mem_address is not None)\n+)\n+@icontract.inv(\n+    lambda self: not (self.path is None and self.found) or (self.soname is not None and self.mem_address is not None)\n+)\n+@icontract.inv(\n+    lambda self: not (self.mem_address is None and self.found) or (self.soname is not None and self.path is not None)\n+)\n+class Dependency:\n+    \"\"\"\n+    Represent a shared library required by a program.\n+\n+    :ivar found: True if ``ldd`` could resolve the library\n+    :vartype found: bool\n+\n+    :ivar soname: library name\n+    :vartype soname: Optional[str]\n+\n+    :ivar path: path to the library\n+    :vartype path: Optional[pathlib.Path]\n+\n+    :ivar mem_address: hex memory location\n+    :vartype mem_address: Optional[str]\n+\n+    :ivar unused: library not used\n+    :vartype unused: Optional[bool]\n+    \"\"\"\n+\n+    def __init__(self,\n+                 found: bool,\n+                 soname: Optional[str] = None,\n+                 path: Optional[pathlib.Path] = None,\n+                 mem_address: Optional[str] = None,\n+                 unused: Optional[bool] = None) -> None:\n+        \"\"\"Initialize the dependency with the given values.\"\"\"\n+        # pylint: disable= too-many-arguments\n+        self.soname = soname\n+        self.path = path\n+        self.found = found\n+        self.mem_address = mem_address\n+        self.unused = unused\n+\n+    def __str__(self) -> str:\n+        \"\"\"Transform the dependency to a string that is in a human-readable format.\"\"\"\n+        return \"soname: {}, path: {}, found: {}, mem_address: {}, unused: {} \\n\".format(\n+            self.soname, self.path, self.found, self.mem_address, self.unused)\n+\n+    def as_mapping(self) -> Mapping[str, Any]:  # pylint: disable=unsubscriptable-object\n+        \"\"\"Transform the dependency to a mapping that can be converted to JSON and similar formats.\"\"\"\n+        return collections.OrderedDict([(\"soname\", self.soname),\n+                                        (\"path\", str(self.path)),\n+                                        (\"found\", self.found),\n+                                        (\"mem_address\", self.mem_address),\n+                                        (\"unused\", self.unused)])\n+\n+\n+def _parse_line(line: str) -> Optional[Dependency]:\n+    \"\"\"\n+    Parse single line of ldd output.\n+\n+    :param line: to parse\n+    :return: dependency or None if line was empty\n+\n+    \"\"\"\n+    found = not 'not found' in line\n+    parts = [part.strip() for part in line.split(' ')]\n+\n+    # There are two types of outputs for a dependency, with or without soname. For example:\n+    # with soname: 'libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9a19d8a000)'\n+    # without soname: '/lib64/ld-linux-x86-64.so.2 (0x00007f9a1a329000)'\n+    # with soname but not found: 'libboost_program_options.so.1.62.0 => not found'\n+    # with soname but without rpath: 'linux-vdso.so.1 =>  (0x00007ffd7c7fd000)'\n+    if '=>' in line:\n+        if len(parts) != 4:\n+            raise RuntimeError(\n+                \"Expected 4 parts in the line but found {}: {}\".format(\n+                    len(parts), line))\n+\n+        soname = None\n+        dep_path = None\n+        mem_address = None\n+        if found:\n+            soname = parts[0]\n+            if parts[2] != '':\n+                dep_path = pathlib.Path(parts[2])\n+            mem_address = parts[3]\n+        else:\n+            if \"/\" in parts[0]:\n+                dep_path = pathlib.Path(parts[0])\n+            else:\n+                soname = parts[0]\n+\n+        return Dependency(\n+            soname=soname, path=dep_path, found=found, mem_address=mem_address)\n+    else:\n+        if len(parts) != 2:\n+            raise RuntimeError(\n+                \"Expected 2 parts in the line but found {}: {}\".format(\n+                    len(parts), line))\n+\n+        return Dependency(\n+            soname=None,\n+            path=pathlib.Path(parts[0]),\n+            found=True,\n+            mem_address=parts[1])\n+\n+\n+@icontract.pre(lambda path: path.is_file())\n+def list_dependencies(path: pathlib.Path,\n+                      unused: bool = False,\n+                      env: Optional[Dict[str, str]] = None) -> List[Dependency]:\n+    \"\"\"\n+    Retrieve a list of dependencies of the given binary.\n+\n+    >>> path = pathlib.Path(\"/bin/ls\")\n+    >>> deps = list_dependencies(path=path)\n+    >>> deps[0].soname\n+    'linux-vdso.so.1'\n+    >>> deps[0].unused\n+\n+    >>> deps = list_dependencies(path=path, unused=True)\n+    >>> deps[1].soname\n+    'libselinux.so.1'\n+    >>> deps[1].unused\n+    True\n+\n+    :param path: path to a file\n+    :param unused: if set, check if dependencies are actually used by the program\n+    :param env: the environment to use\n+            If ``env`` is None, currently active env will be used. Otherwise specified env is used.\n+    :return: list of dependencies\n+    \"\"\"\n+    commands = [\"ldd\", path.as_posix()]  # type: List[str]\n+\n+    proc = subprocess.Popen(\n+        commands,\n+        stdout=subprocess.PIPE,\n+        stderr=subprocess.PIPE,\n+        universal_newlines=True,\n+        env=env)\n+\n+    out, err = proc.communicate()\n+    if proc.returncode != 0:\n+        raise RuntimeError(\n+            \"Failed ldd-ing external libraries of {} with code {}:\\nout:\\n{}\\n\\nerr:\\n{}\"\n+            .format(path, proc.returncode, out, err))\n+\n+    dependencies = _cmd_output_parser(cmd_out=out)  # type: List[Dependency]\n+\n+    if unused:\n+        commands = [\"ldd\", \"--unused\", path.as_posix()]\n+\n+        proc_unused = subprocess.Popen(\n+            commands,\n+            stdout=subprocess.PIPE,\n+            stderr=subprocess.PIPE,\n+            universal_newlines=True,\n+            env=env)\n+\n+        out_unused, err_unused = proc_unused.communicate()\n+        # return code = 0 -> no unused dependencies, return code = 1 -> some unused dependencies\n+        if proc_unused.returncode not in [0, 1]:\n+            raise RuntimeError(\n+                \"Failed ldd-ing external libraries of {} with code {}:\\nout:\\n{}\\n\\nerr:\\n{}\"\n+                .format(path, proc.returncode, out_unused, err_unused))\n+\n+        dependencies = _update_unused(\n+            dependencies=dependencies, out_unused=out_unused)\n+\n+    return dependencies\n+\n+\n+def _cmd_output_parser(cmd_out: str) -> List[Dependency]:\n+    \"\"\"\n+    Parse the command line output.\n+\n+    :param cmd_out: command line output\n+    :return: List of dependencies\n+    \"\"\"\n+    dependencies = []  # type: List[Dependency]\n+\n+    for line in [line.strip() for line in cmd_out.split('\\n') if line != '']:\n+","path":"lddwrap/__init__.py","position":196,"original_position":196,"commit_id":"68ab95ebe4f29cb0d9b3e8a3101737f1775308ed","original_commit_id":"68ab95ebe4f29cb0d9b3e8a3101737f1775308ed","user":{"login":"slimeth","id":32170546,"node_id":"MDQ6VXNlcjMyMTcwNTQ2","avatar_url":"https://avatars3.githubusercontent.com/u/32170546?v=4","gravatar_id":"","url":"https://api.github.com/users/slimeth","html_url":"https://github.com/slimeth","followers_url":"https://api.github.com/users/slimeth/followers","following_url":"https://api.github.com/users/slimeth/following{/other_user}","gists_url":"https://api.github.com/users/slimeth/gists{/gist_id}","starred_url":"https://api.github.com/users/slimeth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/slimeth/subscriptions","organizations_url":"https://api.github.com/users/slimeth/orgs","repos_url":"https://api.github.com/users/slimeth/repos","events_url":"https://api.github.com/users/slimeth/events{/privacy}","received_events_url":"https://api.github.com/users/slimeth/received_events","type":"User","site_admin":false},"body":"Thank you! You're right.","created_at":"2018-10-25T15:39:17Z","updated_at":"2018-10-25T15:39:17Z","html_url":"https://github.com/Parquery/lddwrap/pull/1#discussion_r228227160","pull_request_url":"https://api.github.com/repos/Parquery/lddwrap/pulls/1","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/Parquery/lddwrap/pulls/comments/228227160"},"html":{"href":"https://github.com/Parquery/lddwrap/pull/1#discussion_r228227160"},"pull_request":{"href":"https://api.github.com/repos/Parquery/lddwrap/pulls/1"}},"in_reply_to_id":227649497},"pull_request":{"url":"https://api.github.com/repos/Parquery/lddwrap/pulls/1","id":214878954,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE0ODc4OTU0","html_url":"https://github.com/Parquery/lddwrap/pull/1","diff_url":"https://github.com/Parquery/lddwrap/pull/1.diff","patch_url":"https://github.com/Parquery/lddwrap/pull/1.patch","issue_url":"https://api.github.com/repos/Parquery/lddwrap/issues/1","number":1,"state":"open","locked":false,"title":"Snaji/create ldd wrap","user":{"login":"slimeth","id":32170546,"node_id":"MDQ6VXNlcjMyMTcwNTQ2","avatar_url":"https://avatars3.githubusercontent.com/u/32170546?v=4","gravatar_id":"","url":"https://api.github.com/users/slimeth","html_url":"https://github.com/slimeth","followers_url":"https://api.github.com/users/slimeth/followers","following_url":"https://api.github.com/users/slimeth/following{/other_user}","gists_url":"https://api.github.com/users/slimeth/gists{/gist_id}","starred_url":"https://api.github.com/users/slimeth/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/slimeth/subscriptions","organizations_url":"https://api.github.com/users/slimeth/orgs","repos_url":"https://api.github.com/users/slimeth/repos","events_url":"https://api.github.com/users/slimeth/events{/privacy}","received_events_url":"https://api.github.com/users/slimeth/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-09-12T08:39:55Z","updated_at":"2018-10-25T15:39:17Z","closed_at":null,"merged_at":null,"merge_commit_sha":"965c0e5b8fc5f5e7eb81aa873eb14ed40979cf7b","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/Parquery/lddwrap/pulls/1/commits","review_comments_url":"https://api.github.com/repos/Parquery/lddwrap/pulls/1/comments","review_comment_url":"https://api.github.com/repos/Parquery/lddwrap/pulls/comments{/number}","comments_url":"https://api.github.com/repos/Parquery/lddwrap/issues/1/comments","statuses_url":"https://api.github.com/repos/Parquery/lddwrap/statuses/68ab95ebe4f29cb0d9b3e8a3101737f1775308ed","head":{"label":"Parquery:snaji/create-ldd-wrap","ref":"snaji/create-ldd-wrap","sha":"68ab95ebe4f29cb0d9b3e8a3101737f1775308ed","user":{"login":"Parquery","id":40167204,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQwMTY3MjA0","avatar_url":"https://avatars3.githubusercontent.com/u/40167204?v=4","gravatar_id":"","url":"https://api.github.com/users/Parquery","html_url":"https://github.com/Parquery","followers_url":"https://api.github.com/users/Parquery/followers","following_url":"https://api.github.com/users/Parquery/following{/other_user}","gists_url":"https://api.github.com/users/Parquery/gists{/gist_id}","starred_url":"https://api.github.com/users/Parquery/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Parquery/subscriptions","organizations_url":"https://api.github.com/users/Parquery/orgs","repos_url":"https://api.github.com/users/Parquery/repos","events_url":"https://api.github.com/users/Parquery/events{/privacy}","received_events_url":"https://api.github.com/users/Parquery/received_events","type":"Organization","site_admin":false},"repo":{"id":147685811,"node_id":"MDEwOlJlcG9zaXRvcnkxNDc2ODU4MTE=","name":"lddwrap","full_name":"Parquery/lddwrap","private":false,"owner":{"login":"Parquery","id":40167204,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQwMTY3MjA0","avatar_url":"https://avatars3.githubusercontent.com/u/40167204?v=4","gravatar_id":"","url":"https://api.github.com/users/Parquery","html_url":"https://github.com/Parquery","followers_url":"https://api.github.com/users/Parquery/followers","following_url":"https://api.github.com/users/Parquery/following{/other_user}","gists_url":"https://api.github.com/users/Parquery/gists{/gist_id}","starred_url":"https://api.github.com/users/Parquery/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Parquery/subscriptions","organizations_url":"https://api.github.com/users/Parquery/orgs","repos_url":"https://api.github.com/users/Parquery/repos","events_url":"https://api.github.com/users/Parquery/events{/privacy}","received_events_url":"https://api.github.com/users/Parquery/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Parquery/lddwrap","description":"Python 3 wrapper around ldd *nix utility to determine shared libraries of a program","fork":false,"url":"https://api.github.com/repos/Parquery/lddwrap","forks_url":"https://api.github.com/repos/Parquery/lddwrap/forks","keys_url":"https://api.github.com/repos/Parquery/lddwrap/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Parquery/lddwrap/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Parquery/lddwrap/teams","hooks_url":"https://api.github.com/repos/Parquery/lddwrap/hooks","issue_events_url":"https://api.github.com/repos/Parquery/lddwrap/issues/events{/number}","events_url":"https://api.github.com/repos/Parquery/lddwrap/events","assignees_url":"https://api.github.com/repos/Parquery/lddwrap/assignees{/user}","branches_url":"https://api.github.com/repos/Parquery/lddwrap/branches{/branch}","tags_url":"https://api.github.com/repos/Parquery/lddwrap/tags","blobs_url":"https://api.github.com/repos/Parquery/lddwrap/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Parquery/lddwrap/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Parquery/lddwrap/git/refs{/sha}","trees_url":"https://api.github.com/repos/Parquery/lddwrap/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Parquery/lddwrap/statuses/{sha}","languages_url":"https://api.github.com/repos/Parquery/lddwrap/languages","stargazers_url":"https://api.github.com/repos/Parquery/lddwrap/stargazers","contributors_url":"https://api.github.com/repos/Parquery/lddwrap/contributors","subscribers_url":"https://api.github.com/repos/Parquery/lddwrap/subscribers","subscription_url":"https://api.github.com/repos/Parquery/lddwrap/subscription","commits_url":"https://api.github.com/repos/Parquery/lddwrap/commits{/sha}","git_commits_url":"https://api.github.com/repos/Parquery/lddwrap/git/commits{/sha}","comments_url":"https://api.github.com/repos/Parquery/lddwrap/comments{/number}","issue_comment_url":"https://api.github.com/repos/Parquery/lddwrap/issues/comments{/number}","contents_url":"https://api.github.com/repos/Parquery/lddwrap/contents/{+path}","compare_url":"https://api.github.com/repos/Parquery/lddwrap/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Parquery/lddwrap/merges","archive_url":"https://api.github.com/repos/Parquery/lddwrap/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Parquery/lddwrap/downloads","issues_url":"https://api.github.com/repos/Parquery/lddwrap/issues{/number}","pulls_url":"https://api.github.com/repos/Parquery/lddwrap/pulls{/number}","milestones_url":"https://api.github.com/repos/Parquery/lddwrap/milestones{/number}","notifications_url":"https://api.github.com/repos/Parquery/lddwrap/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Parquery/lddwrap/labels{/name}","releases_url":"https://api.github.com/repos/Parquery/lddwrap/releases{/id}","deployments_url":"https://api.github.com/repos/Parquery/lddwrap/deployments","created_at":"2018-09-06T14:25:04Z","updated_at":"2018-09-17T09:00:09Z","pushed_at":"2018-10-23T12:53:23Z","git_url":"git://github.com/Parquery/lddwrap.git","ssh_url":"git@github.com:Parquery/lddwrap.git","clone_url":"https://github.com/Parquery/lddwrap.git","svn_url":"https://github.com/Parquery/lddwrap","homepage":"","size":17,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"base":{"label":"Parquery:master","ref":"master","sha":"67a1cde8d5f89e73c1b8ff9fb819531135b61585","user":{"login":"Parquery","id":40167204,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQwMTY3MjA0","avatar_url":"https://avatars3.githubusercontent.com/u/40167204?v=4","gravatar_id":"","url":"https://api.github.com/users/Parquery","html_url":"https://github.com/Parquery","followers_url":"https://api.github.com/users/Parquery/followers","following_url":"https://api.github.com/users/Parquery/following{/other_user}","gists_url":"https://api.github.com/users/Parquery/gists{/gist_id}","starred_url":"https://api.github.com/users/Parquery/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Parquery/subscriptions","organizations_url":"https://api.github.com/users/Parquery/orgs","repos_url":"https://api.github.com/users/Parquery/repos","events_url":"https://api.github.com/users/Parquery/events{/privacy}","received_events_url":"https://api.github.com/users/Parquery/received_events","type":"Organization","site_admin":false},"repo":{"id":147685811,"node_id":"MDEwOlJlcG9zaXRvcnkxNDc2ODU4MTE=","name":"lddwrap","full_name":"Parquery/lddwrap","private":false,"owner":{"login":"Parquery","id":40167204,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQwMTY3MjA0","avatar_url":"https://avatars3.githubusercontent.com/u/40167204?v=4","gravatar_id":"","url":"https://api.github.com/users/Parquery","html_url":"https://github.com/Parquery","followers_url":"https://api.github.com/users/Parquery/followers","following_url":"https://api.github.com/users/Parquery/following{/other_user}","gists_url":"https://api.github.com/users/Parquery/gists{/gist_id}","starred_url":"https://api.github.com/users/Parquery/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Parquery/subscriptions","organizations_url":"https://api.github.com/users/Parquery/orgs","repos_url":"https://api.github.com/users/Parquery/repos","events_url":"https://api.github.com/users/Parquery/events{/privacy}","received_events_url":"https://api.github.com/users/Parquery/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/Parquery/lddwrap","description":"Python 3 wrapper around ldd *nix utility to determine shared libraries of a program","fork":false,"url":"https://api.github.com/repos/Parquery/lddwrap","forks_url":"https://api.github.com/repos/Parquery/lddwrap/forks","keys_url":"https://api.github.com/repos/Parquery/lddwrap/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Parquery/lddwrap/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Parquery/lddwrap/teams","hooks_url":"https://api.github.com/repos/Parquery/lddwrap/hooks","issue_events_url":"https://api.github.com/repos/Parquery/lddwrap/issues/events{/number}","events_url":"https://api.github.com/repos/Parquery/lddwrap/events","assignees_url":"https://api.github.com/repos/Parquery/lddwrap/assignees{/user}","branches_url":"https://api.github.com/repos/Parquery/lddwrap/branches{/branch}","tags_url":"https://api.github.com/repos/Parquery/lddwrap/tags","blobs_url":"https://api.github.com/repos/Parquery/lddwrap/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Parquery/lddwrap/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Parquery/lddwrap/git/refs{/sha}","trees_url":"https://api.github.com/repos/Parquery/lddwrap/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Parquery/lddwrap/statuses/{sha}","languages_url":"https://api.github.com/repos/Parquery/lddwrap/languages","stargazers_url":"https://api.github.com/repos/Parquery/lddwrap/stargazers","contributors_url":"https://api.github.com/repos/Parquery/lddwrap/contributors","subscribers_url":"https://api.github.com/repos/Parquery/lddwrap/subscribers","subscription_url":"https://api.github.com/repos/Parquery/lddwrap/subscription","commits_url":"https://api.github.com/repos/Parquery/lddwrap/commits{/sha}","git_commits_url":"https://api.github.com/repos/Parquery/lddwrap/git/commits{/sha}","comments_url":"https://api.github.com/repos/Parquery/lddwrap/comments{/number}","issue_comment_url":"https://api.github.com/repos/Parquery/lddwrap/issues/comments{/number}","contents_url":"https://api.github.com/repos/Parquery/lddwrap/contents/{+path}","compare_url":"https://api.github.com/repos/Parquery/lddwrap/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Parquery/lddwrap/merges","archive_url":"https://api.github.com/repos/Parquery/lddwrap/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Parquery/lddwrap/downloads","issues_url":"https://api.github.com/repos/Parquery/lddwrap/issues{/number}","pulls_url":"https://api.github.com/repos/Parquery/lddwrap/pulls{/number}","milestones_url":"https://api.github.com/repos/Parquery/lddwrap/milestones{/number}","notifications_url":"https://api.github.com/repos/Parquery/lddwrap/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Parquery/lddwrap/labels{/name}","releases_url":"https://api.github.com/repos/Parquery/lddwrap/releases{/id}","deployments_url":"https://api.github.com/repos/Parquery/lddwrap/deployments","created_at":"2018-09-06T14:25:04Z","updated_at":"2018-09-17T09:00:09Z","pushed_at":"2018-10-23T12:53:23Z","git_url":"git://github.com/Parquery/lddwrap.git","ssh_url":"git@github.com:Parquery/lddwrap.git","clone_url":"https://github.com/Parquery/lddwrap.git","svn_url":"https://github.com/Parquery/lddwrap","homepage":"","size":17,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":1,"license":null,"forks":0,"open_issues":1,"watchers":0,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/Parquery/lddwrap/pulls/1"},"html":{"href":"https://github.com/Parquery/lddwrap/pull/1"},"issue":{"href":"https://api.github.com/repos/Parquery/lddwrap/issues/1"},"comments":{"href":"https://api.github.com/repos/Parquery/lddwrap/issues/1/comments"},"review_comments":{"href":"https://api.github.com/repos/Parquery/lddwrap/pulls/1/comments"},"review_comment":{"href":"https://api.github.com/repos/Parquery/lddwrap/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/Parquery/lddwrap/pulls/1/commits"},"statuses":{"href":"https://api.github.com/repos/Parquery/lddwrap/statuses/68ab95ebe4f29cb0d9b3e8a3101737f1775308ed"}},"author_association":"NONE"}}
{"actor":{"display_login":"slimeth"}}