get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 119486,
    "url": "http://patches.dpdk.org/api/patches/119486/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20221104110523.511367-9-juraj.linkes@pantheon.tech/",
    "project": {
        "id": 1,
        "url": "http://patches.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": "<20221104110523.511367-9-juraj.linkes@pantheon.tech>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20221104110523.511367-9-juraj.linkes@pantheon.tech",
    "date": "2022-11-04T11:05:22",
    "name": "[v8,8/9] dts: add dts workflow module",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "b2a5358a33ff0c5ae6526eaef25aecc159a3e43d",
    "submitter": {
        "id": 1626,
        "url": "http://patches.dpdk.org/api/people/1626/?format=api",
        "name": "Juraj Linkeš",
        "email": "juraj.linkes@pantheon.tech"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20221104110523.511367-9-juraj.linkes@pantheon.tech/mbox/",
    "series": [
        {
            "id": 25575,
            "url": "http://patches.dpdk.org/api/series/25575/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=25575",
            "date": "2022-11-04T11:05:14",
            "name": "dts: ssh connection to a node",
            "version": 8,
            "mbox": "http://patches.dpdk.org/series/25575/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/119486/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/119486/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 85F01A00C5;\n\tFri,  4 Nov 2022 12:06:22 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 5DB0142D4F;\n\tFri,  4 Nov 2022 12:05:42 +0100 (CET)",
            "from lb.pantheon.sk (lb.pantheon.sk [46.229.239.20])\n by mails.dpdk.org (Postfix) with ESMTP id BCC5B42D42\n for <dev@dpdk.org>; Fri,  4 Nov 2022 12:05:40 +0100 (CET)",
            "from localhost (localhost [127.0.0.1])\n by lb.pantheon.sk (Postfix) with ESMTP id BF5811BA5AE;\n Fri,  4 Nov 2022 12:05:39 +0100 (CET)",
            "from lb.pantheon.sk ([127.0.0.1])\n by localhost (lb.pantheon.sk [127.0.0.1]) (amavisd-new, port 10024)\n with ESMTP id uVcao2E68788; Fri,  4 Nov 2022 12:05:38 +0100 (CET)",
            "from entguard.lab.pantheon.local (unknown [46.229.239.141])\n by lb.pantheon.sk (Postfix) with ESMTP id E06951BA5B5;\n Fri,  4 Nov 2022 12:05:29 +0100 (CET)"
        ],
        "X-Virus-Scanned": "amavisd-new at siecit.sk",
        "From": "=?utf-8?q?Juraj_Linke=C5=A1?= <juraj.linkes@pantheon.tech>",
        "To": "thomas@monjalon.net, Honnappa.Nagarahalli@arm.com, ohilyard@iol.unh.edu,\n lijuan.tu@intel.com, kda@semihalf.com, bruce.richardson@intel.com",
        "Cc": "dev@dpdk.org, =?utf-8?q?Juraj_Linke=C5=A1?= <juraj.linkes@pantheon.tech>",
        "Subject": "[PATCH v8 8/9] dts: add dts workflow module",
        "Date": "Fri,  4 Nov 2022 11:05:22 +0000",
        "Message-Id": "<20221104110523.511367-9-juraj.linkes@pantheon.tech>",
        "X-Mailer": "git-send-email 2.25.1",
        "In-Reply-To": "<20221104110523.511367-1-juraj.linkes@pantheon.tech>",
        "References": "<20221103151934.450887-1-juraj.linkes@pantheon.tech>\n <20221104110523.511367-1-juraj.linkes@pantheon.tech>",
        "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 module implements methods needed to run DTS. It handles the creation\nof objects and eventually the whole DTS workflow, such as running node\nsetups, test gathering, setup and execution and various cleanups.\n\nSigned-off-by: Owen Hilyard <ohilyard@iol.unh.edu>\nSigned-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>\n---\n dts/framework/dts.py   | 67 ++++++++++++++++++++++++++++++++++++++++++\n dts/framework/utils.py | 18 ++++++++++++\n 2 files changed, 85 insertions(+)\n create mode 100644 dts/framework/dts.py",
    "diff": "diff --git a/dts/framework/dts.py b/dts/framework/dts.py\nnew file mode 100644\nindex 0000000000..d23cfc4526\n--- /dev/null\n+++ b/dts/framework/dts.py\n@@ -0,0 +1,67 @@\n+# SPDX-License-Identifier: BSD-3-Clause\n+# Copyright(c) 2010-2019 Intel Corporation\n+# Copyright(c) 2022 PANTHEON.tech s.r.o.\n+# Copyright(c) 2022 University of New Hampshire\n+\n+import sys\n+import traceback\n+from collections.abc import Iterable\n+\n+from framework.testbed_model.node import Node\n+\n+from .config import CONFIGURATION\n+from .logger import DTSLOG, getLogger\n+from .utils import check_dts_python_version\n+\n+dts_logger: DTSLOG | None = None\n+\n+\n+def run_all() -> None:\n+    \"\"\"\n+    Main process of DTS, it will run all test suites in the config file.\n+    \"\"\"\n+\n+    global dts_logger\n+\n+    # check the python version of the server that run dts\n+    check_dts_python_version()\n+\n+    dts_logger = getLogger(\"dts\")\n+\n+    nodes = {}\n+    # This try/finally block means \"Run the try block, if there is an exception,\n+    # run the finally block before passing it upward. If there is not an exception,\n+    # run the finally block after the try block is finished.\" This helps avoid the\n+    # problem of python's interpreter exit context, which essentially prevents you\n+    # from making certain system calls. This makes cleaning up resources difficult,\n+    # since most of the resources in DTS are network-based, which is restricted.\n+    try:\n+        # for all Execution sections\n+        for execution in CONFIGURATION.executions:\n+            sut_config = execution.system_under_test\n+            if sut_config.name not in nodes:\n+                node = Node(sut_config)\n+                nodes[sut_config.name] = node\n+                node.send_command(\"echo Hello World\")\n+\n+    except Exception as e:\n+        # sys.exit() doesn't produce a stack trace, need to print it explicitly\n+        traceback.print_exc()\n+        raise e\n+\n+    finally:\n+        quit_execution(nodes.values())\n+\n+\n+def quit_execution(sut_nodes: Iterable[Node]) -> None:\n+    \"\"\"\n+    Close session to SUT and TG before quit.\n+    Return exit status when failure occurred.\n+    \"\"\"\n+    for sut_node in sut_nodes:\n+        # close all session\n+        sut_node.node_exit()\n+\n+    if dts_logger is not None:\n+        dts_logger.info(\"DTS execution has ended.\")\n+    sys.exit(0)\ndiff --git a/dts/framework/utils.py b/dts/framework/utils.py\nindex 9c1975a22f..c28c8f1082 100644\n--- a/dts/framework/utils.py\n+++ b/dts/framework/utils.py\n@@ -3,6 +3,24 @@\n # Copyright(c) 2022 PANTHEON.tech s.r.o.\n # Copyright(c) 2022 University of New Hampshire\n \n+import sys\n+\n+\n+def check_dts_python_version() -> None:\n+    if sys.version_info.major < 3 or (\n+        sys.version_info.major == 3 and sys.version_info.minor < 10\n+    ):\n+        print(\n+            RED(\n+                (\n+                    \"WARNING: DTS execution node's python version is lower than\"\n+                    \"python 3.10, is deprecated and will not work in future releases.\"\n+                )\n+            ),\n+            file=sys.stderr,\n+        )\n+        print(RED(\"Please use Python >= 3.10 instead\"), file=sys.stderr)\n+\n \n def GREEN(text: str) -> str:\n     return f\"\\u001B[32;1m{str(text)}\\u001B[0m\"\n",
    "prefixes": [
        "v8",
        "8/9"
    ]
}