get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/139643/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 139643,
    "url": "http://patchwork.dpdk.org/api/patches/139643/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dpdk/patch/20240423122004.75240-1-juraj.linkes@pantheon.tech/",
    "project": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20240423122004.75240-1-juraj.linkes@pantheon.tech>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20240423122004.75240-1-juraj.linkes@pantheon.tech",
    "date": "2024-04-23T12:20:04",
    "name": "[v1] dts: clean up close in remote session",
    "commit_ref": null,
    "pull_url": null,
    "state": "new",
    "archived": false,
    "hash": "63f2fbc3c585d18f3c5649dfee7af6d43c266bfb",
    "submitter": {
        "id": 1626,
        "url": "http://patchwork.dpdk.org/api/people/1626/?format=api",
        "name": "Juraj Linkeš",
        "email": "juraj.linkes@pantheon.tech"
    },
    "delegate": {
        "id": 1,
        "url": "http://patchwork.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patchwork.dpdk.org/project/dpdk/patch/20240423122004.75240-1-juraj.linkes@pantheon.tech/mbox/",
    "series": [
        {
            "id": 31811,
            "url": "http://patchwork.dpdk.org/api/series/31811/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dpdk/list/?series=31811",
            "date": "2024-04-23T12:20:04",
            "name": "[v1] dts: clean up close in remote session",
            "version": 1,
            "mbox": "http://patchwork.dpdk.org/series/31811/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/139643/comments/",
    "check": "success",
    "checks": "http://patchwork.dpdk.org/api/patches/139643/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id A592443E82;\n\tTue, 23 Apr 2024 14:20:09 +0200 (CEST)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 63EB542E71;\n\tTue, 23 Apr 2024 14:20:09 +0200 (CEST)",
            "from mail-ej1-f46.google.com (mail-ej1-f46.google.com\n [209.85.218.46]) by mails.dpdk.org (Postfix) with ESMTP id 35F78402AB\n for <dev@dpdk.org>; Tue, 23 Apr 2024 14:20:08 +0200 (CEST)",
            "by mail-ej1-f46.google.com with SMTP id\n a640c23a62f3a-a5557e3ebcaso916364366b.1\n for <dev@dpdk.org>; Tue, 23 Apr 2024 05:20:08 -0700 (PDT)",
            "from jlinkes-PT-Latitude-5530.pantheon.local\n (81.89.53.154.host.vnet.sk. [81.89.53.154])\n by smtp.gmail.com with ESMTPSA id\n r12-20020a170906280c00b00a55a57712b0sm3575112ejc.178.2024.04.23.05.20.07\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Tue, 23 Apr 2024 05:20:07 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=pantheon.tech; s=google; t=1713874808; x=1714479608; darn=dpdk.org;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:from:to:cc:subject:date:message-id:reply-to;\n bh=+8Jlq4qrOC9z3+UDSiyHJ+YibaKADKMniHu1p/ZgiqU=;\n b=c8MH/Lnz5oeOhpC6GIlQsSB/cEDIiGEWkqP8+qJltDHO/z+l+0KZE4j6+C9w1IcMks\n 1KODWL8mnosrPvvKLMLHPZvOTsI32cxA5jrhkhGwQV4x9tppAFuVYeYBaYjzaWcjyjZ7\n XJ3Lrhi4TvVu2f9aS/3UrKfI1zYsfz4jze/335nF19s0V1tdjhWAGp0d66iWAy5x/F7H\n V1SZ2haja6l6byOWPvw6huqXoLn/f616TynrAMwqpasWm9oayp9q+aa/gIEHQQGK6hi1\n GWO2+2pO+3o4NXgSPSLMfviNVyJJqMP2+slpXAr91kmnUaQCt9EXViJ07K1QvtUOSWcb\n vm+w==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1713874808; x=1714479608;\n h=content-transfer-encoding:mime-version:message-id:date:subject:cc\n :to:from:x-gm-message-state:from:to:cc:subject:date:message-id\n :reply-to;\n bh=+8Jlq4qrOC9z3+UDSiyHJ+YibaKADKMniHu1p/ZgiqU=;\n b=jH7DfTU5kAm3kbjPvTqj+OaocBB0cscKjdj7rCiKJnsAOiib7jg1i2mnsh2glA9RTJ\n 57d/mnMk/Vk7vaxxHmEfZ9WCMEGa77Cd5NO1sb48bcKPioZ6cs8eN0PR8gK46FbBzsHL\n 2w9GmJS4kpRi+09131YtoR64ep08fKjbb9aLaiWNRQ7R62jjMUb572yslJwewtgwAXDH\n 9uaXP5glghVawTerUxmI6iXaXCOElyaywG4JDfOo9jy1eRsVu1I+6WjvbU4Z0r0hPWrk\n ISvEEubAYwCzAOOPSAQzqkXOYAtfwUhQkRz6Zr+D8z3LQSUgh7x/gZ0PF9bdD+rsY+TZ\n YbyQ==",
        "X-Gm-Message-State": "AOJu0YyprTtAzSiBYT/DTaZKZsshNExGN7qWGtgUPl8EZy+oE0W8otGW\n stYO4h30C/RpX8QmP73G575kVSpKskVBYPc2nruIWE1t+RvLNunpAn4Sl+AuqPQ=",
        "X-Google-Smtp-Source": "\n AGHT+IHs1YifFZ6ez55Cmf1WLzLq9/wW0DkOhBBQsfFwb2W64p+tVzrB2dxA8yKuEF+QF4t7lLqNvQ==",
        "X-Received": "by 2002:a17:906:52c2:b0:a55:b67c:bd04 with SMTP id\n w2-20020a17090652c200b00a55b67cbd04mr2653744ejn.4.1713874807777;\n Tue, 23 Apr 2024 05:20:07 -0700 (PDT)",
        "From": "=?utf-8?q?Juraj_Linke=C5=A1?= <juraj.linkes@pantheon.tech>",
        "To": "thomas@monjalon.net, Honnappa.Nagarahalli@arm.com, jspewock@iol.unh.edu,\n probb@iol.unh.edu, paul.szczepanek@arm.com, Luca.Vizzarro@arm.com,\n npratte@iol.unh.edu",
        "Cc": "dev@dpdk.org, =?utf-8?q?Juraj_Linke=C5=A1?= <juraj.linkes@pantheon.tech>",
        "Subject": "[PATCH v1] dts: clean up close in remote session",
        "Date": "Tue, 23 Apr 2024 14:20:04 +0200",
        "Message-Id": "<20240423122004.75240-1-juraj.linkes@pantheon.tech>",
        "X-Mailer": "git-send-email 2.34.1",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "Content-Transfer-Encoding": "8bit",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org"
    },
    "content": "The close method was split into two methods, one with common code and\none that's subclass specific. There wasn't any common code so the split\ndoesn't make sense. And if we ever need such a split, we can use super()\nin the future.\nThere was also an unused argument, force and the order of methods was\ncleaned up a little (close is usually the last thing we call in the\nlifecycle of a session object, so it was moved to the last place among\npublic methods).\n\nSigned-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>\n---\n .../remote_session/remote_session.py          | 21 ++++---------------\n dts/framework/remote_session/ssh_session.py   | 11 +++++-----\n dts/framework/testbed_model/os_session.py     | 12 ++++-------\n 3 files changed, 14 insertions(+), 30 deletions(-)",
    "diff": "diff --git a/dts/framework/remote_session/remote_session.py b/dts/framework/remote_session/remote_session.py\nindex ad0f53720a..8171f67849 100644\n--- a/dts/framework/remote_session/remote_session.py\n+++ b/dts/framework/remote_session/remote_session.py\n@@ -190,23 +190,6 @@ def _send_command(self, command: str, timeout: float, env: dict | None) -> Comma\n             * SSHTimeoutError if the command execution times out.\n         \"\"\"\n \n-    def close(self, force: bool = False) -> None:\n-        \"\"\"Close the remote session and free all used resources.\n-\n-        Args:\n-            force: Force the closure of the connection. This may not clean up all resources.\n-        \"\"\"\n-        self._close(force)\n-\n-    @abstractmethod\n-    def _close(self, force: bool = False) -> None:\n-        \"\"\"Protocol specific steps needed to close the session properly.\n-\n-        Args:\n-            force: Force the closure of the connection. This may not clean up all resources.\n-                This doesn't have to be implemented in the overloaded method.\n-        \"\"\"\n-\n     @abstractmethod\n     def is_alive(self) -> bool:\n         \"\"\"Check whether the remote session is still responding.\"\"\"\n@@ -242,3 +225,7 @@ def copy_to(\n             source_file: The file on the local filesystem.\n             destination_file: A file or directory path on the remote Node.\n         \"\"\"\n+\n+    @abstractmethod\n+    def close(self) -> None:\n+        \"\"\"Close the remote session and free all used resources.\"\"\"\ndiff --git a/dts/framework/remote_session/ssh_session.py b/dts/framework/remote_session/ssh_session.py\nindex 782220092c..107740790a 100644\n--- a/dts/framework/remote_session/ssh_session.py\n+++ b/dts/framework/remote_session/ssh_session.py\n@@ -74,10 +74,6 @@ def _connect(self) -> None:\n         else:\n             raise SSHConnectionError(self.hostname, errors)\n \n-    def is_alive(self) -> bool:\n-        \"\"\"Overrides :meth:`~.remote_session.RemoteSession.is_alive`.\"\"\"\n-        return self.session.is_connected\n-\n     def _send_command(self, command: str, timeout: float, env: dict | None) -> CommandResult:\n         \"\"\"Send a command and return the result of the execution.\n \n@@ -103,6 +99,10 @@ def _send_command(self, command: str, timeout: float, env: dict | None) -> Comma\n \n         return CommandResult(self.name, command, output.stdout, output.stderr, output.return_code)\n \n+    def is_alive(self) -> bool:\n+        \"\"\"Overrides :meth:`~.remote_session.RemoteSession.is_alive`.\"\"\"\n+        return self.session.is_connected\n+\n     def copy_from(\n         self,\n         source_file: str | PurePath,\n@@ -119,5 +119,6 @@ def copy_to(\n         \"\"\"Overrides :meth:`~.remote_session.RemoteSession.copy_to`.\"\"\"\n         self.session.put(str(source_file), str(destination_file))\n \n-    def _close(self, force: bool = False) -> None:\n+    def close(self) -> None:\n+        \"\"\"Overrides :meth:`~.remote_session.RemoteSession.close`.\"\"\"\n         self.session.close()\ndiff --git a/dts/framework/testbed_model/os_session.py b/dts/framework/testbed_model/os_session.py\nindex d5bf7e0401..7510760de6 100644\n--- a/dts/framework/testbed_model/os_session.py\n+++ b/dts/framework/testbed_model/os_session.py\n@@ -86,14 +86,6 @@ def __init__(\n         self.remote_session = create_remote_session(node_config, name, logger)\n         self.interactive_session = create_interactive_session(node_config, logger)\n \n-    def close(self, force: bool = False) -> None:\n-        \"\"\"Close the underlying remote session.\n-\n-        Args:\n-            force: Force the closure of the connection.\n-        \"\"\"\n-        self.remote_session.close(force)\n-\n     def is_alive(self) -> bool:\n         \"\"\"Check whether the underlying remote session is still responding.\"\"\"\n         return self.remote_session.is_alive()\n@@ -159,6 +151,10 @@ def create_interactive_shell(\n             timeout,\n         )\n \n+    def close(self) -> None:\n+        \"\"\"Close the underlying remote session.\"\"\"\n+        self.remote_session.close()\n+\n     @staticmethod\n     @abstractmethod\n     def _get_privileged_command(command: str) -> str:\n",
    "prefixes": [
        "v1"
    ]
}