get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 110242,
    "url": "http://patches.dpdk.org/api/patches/110242/?format=api",
    "web_url": "http://patches.dpdk.org/project/dts/patch/20220426030711.6754-1-junx.dong@intel.com/",
    "project": {
        "id": 3,
        "url": "http://patches.dpdk.org/api/projects/3/?format=api",
        "name": "DTS",
        "link_name": "dts",
        "list_id": "dts.dpdk.org",
        "list_email": "dts@dpdk.org",
        "web_url": "",
        "scm_url": "git://dpdk.org/tools/dts",
        "webscm_url": "http://git.dpdk.org/tools/dts/",
        "list_archive_url": "https://inbox.dpdk.org/dts",
        "list_archive_url_format": "https://inbox.dpdk.org/dts/{}",
        "commit_url_format": ""
    },
    "msgid": "<20220426030711.6754-1-junx.dong@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dts/20220426030711.6754-1-junx.dong@intel.com",
    "date": "2022-04-26T03:07:11",
    "name": "[V1] framework/*: fix bug of excel/json report is empty",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "e997513ef6d1fd127c858b4f53039a9ca28946cc",
    "submitter": {
        "id": 2237,
        "url": "http://patches.dpdk.org/api/people/2237/?format=api",
        "name": "Jun Dong",
        "email": "junx.dong@intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dts/patch/20220426030711.6754-1-junx.dong@intel.com/mbox/",
    "series": [
        {
            "id": 22662,
            "url": "http://patches.dpdk.org/api/series/22662/?format=api",
            "web_url": "http://patches.dpdk.org/project/dts/list/?series=22662",
            "date": "2022-04-26T03:07:11",
            "name": "[V1] framework/*: fix bug of excel/json report is empty",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/22662/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/110242/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/110242/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dts-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 98555A0093;\n\tTue, 26 Apr 2022 05:07:22 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 6954D406A2;\n\tTue, 26 Apr 2022 05:07:22 +0200 (CEST)",
            "from mga09.intel.com (mga09.intel.com [134.134.136.24])\n by mails.dpdk.org (Postfix) with ESMTP id 9358040691\n for <dts@dpdk.org>; Tue, 26 Apr 2022 05:07:20 +0200 (CEST)",
            "from fmsmga008.fm.intel.com ([10.253.24.58])\n by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 25 Apr 2022 20:07:19 -0700",
            "from shwdenpg197.ccr.corp.intel.com ([10.253.109.70])\n by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 25 Apr 2022 20:07:17 -0700"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple;\n d=intel.com; i=@intel.com; q=dns/txt; s=Intel;\n t=1650942440; x=1682478440;\n h=from:to:cc:subject:date:message-id:mime-version:\n content-transfer-encoding;\n bh=FxiEgGpuuwmc2q0KSYyPeTEwfueynLr5qT2nS2E48KM=;\n b=JoAz4vl+FHpyzDSnypY2k/2r6NuyZtbYP8UIZ9db60TYsO2HdXxb2OBL\n dUBWsmT6ahPC1LnP/10DzbOiuSNMPgfALzHe9gu3Z3sXlE0kj5qVelEce\n f9hpcKYkh8hLqqql0x0ukyJoOjRujiDJ10LBoBrNjZH5Y9NkLpDl/ls6R\n uA1mb/bOP3Gy9D0TBxNJXGoD7nkENXsF4r2kwuRt5h/ukkQDJJi1zIWpc\n ex4fnnEpNKldv6rdD3GzgkOxujf++reyXJcg3FRO0LOAOxdOLUOQmFWkL\n 0ZdYeHN/LtW0PEt1DooZydOu1t1OfINlCuRoZ2pvsNUD9V0t1555Srt15 Q==;",
        "X-IronPort-AV": [
            "E=McAfee;i=\"6400,9594,10328\"; a=\"264953044\"",
            "E=Sophos;i=\"5.90,290,1643702400\"; d=\"scan'208\";a=\"264953044\"",
            "E=Sophos;i=\"5.90,290,1643702400\"; d=\"scan'208\";a=\"616792935\""
        ],
        "From": "Jun Dong <junx.dong@intel.com>",
        "To": "dts@dpdk.org",
        "Cc": "lijuan.tu@intel.com,\n\tqingx.sun@intel.com,\n\tjunx.dong@intel.com",
        "Subject": "[dts] [V1] framework/*: fix bug of excel/json report is empty",
        "Date": "Tue, 26 Apr 2022 11:07:11 +0800",
        "Message-Id": "<20220426030711.6754-1-junx.dong@intel.com>",
        "X-Mailer": "git-send-email 2.33.1.windows.1",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "X-BeenThere": "dts@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "test suite reviews and discussions <dts.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dts>,\n <mailto:dts-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dts/>",
        "List-Post": "<mailto:dts@dpdk.org>",
        "List-Help": "<mailto:dts-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dts>,\n <mailto:dts-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dts-bounces@dpdk.org"
    },
    "content": "In execution.cfg, assume that we defined multiple section\nof configs that they can have different driver,crbs,target\nand suite list. If one target seted failure(e.g.: driver\nloaded failure ), then the related dut and target will be\nrecorded in a failure target collect(like a blacklist),\nand the excel/json test result report about the dut and\ntarget that be in blacklist will be empty, even if other\nsection that have the same dut and target executed normally.\n\nso, if one dut and target related section executed normally,\nwe can try to removing it over from the blacklist, then the\nexcel/json report will generated normally.\n\nlast, if the lastted section's target seted failure, and\nframework try to generated the report again in the end\npoint of the process. the excel/json report also be empty, the\nempty report will replace that already normally generated\nreport, and the end point save operation actually is\nmeaningless because every suite have saved result to report.\n\nSigned-off-by: Jun Dong <junx.dong@intel.com>\n---\n framework/dts.py         |  8 +++++---\n framework/test_result.py | 15 +++++++++++++++\n 2 files changed, 20 insertions(+), 3 deletions(-)",
    "diff": "diff --git a/framework/dts.py b/framework/dts.py\nindex d31beccb..4003d5c3 100644\n--- a/framework/dts.py\n+++ b/framework/dts.py\n@@ -71,7 +71,7 @@ from .utils import (\n imp.reload(sys)\n \n requested_tests = None\n-result = None\n+result: Result = None\n excel_report = None\n json_report = None\n stats_report = None\n@@ -407,6 +407,8 @@ def dts_run_prerequisties(duts, tester, pkgName, patch, dts_commands, serializer\n         serializer.discard_cache()\n         settings.report_error(\"DUT_SETUP_ERR\")\n         return False\n+    else:\n+        result.remove_failed_dut(duts[0])\n \n \n def dts_run_target(duts, tester, targets, test_suites, subtitle):\n@@ -435,6 +437,8 @@ def dts_run_target(duts, tester, targets, test_suites, subtitle):\n             log_handler.error(\" !!! DEBUG IT: \" + traceback.format_exc())\n             result.add_failed_target(result.dut, target, str(ex))\n             continue\n+        else:\n+            result.remove_failed_target(result.dut, target)\n \n         dts_run_suite(duts, tester, test_suites, target, subtitle)\n \n@@ -675,8 +679,6 @@ def run_all(\n \n         dts_crbs_exit(duts, tester)\n \n-    save_all_results()\n-\n \n def show_speedup_options_messages(read_cache, skip_setup):\n     if read_cache:\ndiff --git a/framework/test_result.py b/framework/test_result.py\nindex abf8edb9..2d7cda4b 100644\n--- a/framework/test_result.py\n+++ b/framework/test_result.py\n@@ -386,6 +386,13 @@ class Result(object):\n         \"\"\"\n         self.__failed_duts[dut] = msg\n \n+    def remove_failed_dut(self, dut):\n+        \"\"\"\n+        Remove the given DUT from failed duts collection\n+        \"\"\"\n+        if dut in self.__failed_duts:\n+            self.__failed_duts.pop(dut)\n+\n     def is_dut_failed(self, dut):\n         \"\"\"\n         True if the given DUT was marked as failing\n@@ -404,6 +411,14 @@ class Result(object):\n         \"\"\"\n         self.__failed_targets[dut + target] = msg\n \n+    def remove_failed_target(self, dut, target):\n+        \"\"\"\n+        Remove the given DUT, target from failed targets collection\n+        \"\"\"\n+        key_word = dut + target\n+        if key_word in self.__failed_targets:\n+            self.__failed_targets.pop(key_word)\n+\n     def is_target_failed(self, dut, target):\n         \"\"\"\n         True if the given DUT,target were marked as failing\n",
    "prefixes": [
        "V1"
    ]
}