get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 105024,
    "url": "http://patchwork.dpdk.org/api/patches/105024/?format=api",
    "web_url": "http://patchwork.dpdk.org/project/dts/patch/1638955939-8759-1-git-send-email-juraj.linkes@pantheon.tech/",
    "project": {
        "id": 3,
        "url": "http://patchwork.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": "<1638955939-8759-1-git-send-email-juraj.linkes@pantheon.tech>",
    "list_archive_url": "https://inbox.dpdk.org/dts/1638955939-8759-1-git-send-email-juraj.linkes@pantheon.tech",
    "date": "2021-12-08T09:32:19",
    "name": "[v2] framework/virt_*: fix pylama errors",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": false,
    "hash": "4dd996860fdfceadefd86c70f0ac47aabafd969a",
    "submitter": {
        "id": 1626,
        "url": "http://patchwork.dpdk.org/api/people/1626/?format=api",
        "name": "Juraj Linkeš",
        "email": "juraj.linkes@pantheon.tech"
    },
    "delegate": null,
    "mbox": "http://patchwork.dpdk.org/project/dts/patch/1638955939-8759-1-git-send-email-juraj.linkes@pantheon.tech/mbox/",
    "series": [
        {
            "id": 20892,
            "url": "http://patchwork.dpdk.org/api/series/20892/?format=api",
            "web_url": "http://patchwork.dpdk.org/project/dts/list/?series=20892",
            "date": "2021-12-08T09:32:19",
            "name": "[v2] framework/virt_*: fix pylama errors",
            "version": 2,
            "mbox": "http://patchwork.dpdk.org/series/20892/mbox/"
        }
    ],
    "comments": "http://patchwork.dpdk.org/api/patches/105024/comments/",
    "check": "fail",
    "checks": "http://patchwork.dpdk.org/api/patches/105024/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 E577BA00C5;\n\tWed,  8 Dec 2021 10:32:22 +0100 (CET)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id AF5CE410E8;\n\tWed,  8 Dec 2021 10:32:22 +0100 (CET)",
            "from lb.pantheon.sk (lb.pantheon.sk [46.229.239.20])\n by mails.dpdk.org (Postfix) with ESMTP id 07495406FF\n for <dts@dpdk.org>; Wed,  8 Dec 2021 10:32:22 +0100 (CET)",
            "from localhost (localhost [127.0.0.1])\n by lb.pantheon.sk (Postfix) with ESMTP id 5F163137707;\n Wed,  8 Dec 2021 10:32:21 +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 PP0lO3pET5xN; Wed,  8 Dec 2021 10:32:19 +0100 (CET)",
            "from service-node1.lab.pantheon.local (unknown [46.229.239.141])\n by lb.pantheon.sk (Postfix) with ESMTP id 84551137705;\n Wed,  8 Dec 2021 10:32:19 +0100 (CET)"
        ],
        "X-Virus-Scanned": "amavisd-new at siecit.sk",
        "From": "=?utf-8?q?Juraj_Linke=C5=A1?= <juraj.linkes@pantheon.tech>",
        "To": "lijuan.tu@intel.com,\n\tohilyard@iol.unh.edu",
        "Cc": "dts@dpdk.org, =?utf-8?q?Juraj_Linke=C5=A1?= <juraj.linkes@pantheon.tech>",
        "Subject": "[PATCH v2] framework/virt_*: fix pylama errors",
        "Date": "Wed,  8 Dec 2021 10:32:19 +0100",
        "Message-Id": "<1638955939-8759-1-git-send-email-juraj.linkes@pantheon.tech>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "<1637761668-4060-1-git-send-email-juraj.linkes@pantheon.tech>",
        "References": "<1637761668-4060-1-git-send-email-juraj.linkes@pantheon.tech>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=UTF-8",
        "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": "Pylama found the following errors:\nframework/virt_base.py:271: [E] E1101 Instance of 'VirtBase' has no 'add_vm_login' member [pylint]\nframework/virt_base.py:274: [E] E1101 Instance of 'VirtBase' has no '_attach_vm' member [pylint]\nframework/virt_base.py:319: [E] E1101 Instance of 'VirtBase' has no '_quick_start_vm' member [pylint]\nframework/virt_base.py:413: [E] E1111 Assigning result of a function call, where the function has no return [pylint]\nframework/virt_base.py:416: [E] E1101 Instance of 'VirtBase' has no 'get_vm_login' member [pylint]\nframework/virt_base.py:88: [E] E1111 Assigning result of a function call, where the function has no return [pylint]\nframework/virt_dut.py:73: [E] E1003 Bad first argument 'Dut' given to super() [pylint]\n- unify the init function of VirtDut's parents\nframework/virt_resource.py:242: [E] E1101 Instance of 'VirtResource' has no '__port_isused' member [pylint]\nframework/virt_resource.py:246: [E] E0602 Undefined variable 'core' [pylint]\nframework/virt_resource.py:247: [E] E0602 Undefined variable 'core' [pylint]\nframework/virt_scene.py:350: [E] E1101 Instance of 'VirtScene' has no 'tester' member [pylint]\nframework/virt_scene.py:393: [E] E1101 Instance of 'VirtScene' has no 'vm_dut' member [pylint]\nframework/virt_scene.py:397: [E] E1101 Instance of 'VirtScene' has no 'tester' member [pylint]\nframework/virt_scene.py:458: [E] E1123 Unexpected keyword argument 'auto_portmap' in method call [pylint]\nframework/virt_scene.py:510: [E] E0102 class already defined line 38 [pylint]\nframework/virt_scene.py:517: [E] E1101 Instance of 'QEMUKvm' has no 'params' member [pylint]\n\nSigned-off-by: Juraj Linkeš <juraj.linkes@pantheon.tech>\n---\nLijuan, please add additional people to review if needed.\n---\n framework/crb.py           |  2 +-\n framework/dut.py           |  9 +++++----\n framework/project_dpdk.py  |  5 +++--\n framework/tester.py        |  2 +-\n framework/virt_base.py     | 28 ++++++++++++++++++++++++++--\n framework/virt_dut.py      | 10 +++++-----\n framework/virt_resource.py |  7 +++++--\n framework/virt_scene.py    | 13 +++++++------\n 8 files changed, 53 insertions(+), 23 deletions(-)",
    "diff": "diff --git a/framework/crb.py b/framework/crb.py\nindex c9909add..4ba7d033 100755\n--- a/framework/crb.py\n+++ b/framework/crb.py\n@@ -51,7 +51,7 @@ class Crb(object):\n     CPU/PCI/NIC on the board and setup running environment for DPDK.\n     \"\"\"\n \n-    def __init__(self, crb, serializer, name, alt_session=True, dut_id=0):\n+    def __init__(self, crb, serializer, dut_id=0, name=None, alt_session=True):\n         self.dut_id = dut_id\n         self.crb = crb\n         self.read_cache = False\ndiff --git a/framework/dut.py b/framework/dut.py\nindex dc3fc874..784a8375 100644\n--- a/framework/dut.py\n+++ b/framework/dut.py\n@@ -62,10 +62,11 @@ class Dut(Crb):\n     CORE_LIST_CACHE_KEY = 'dut_core_list'\n     PCI_DEV_CACHE_KEY = 'dut_pci_dev_info'\n \n-    def __init__(self, crb, serializer, dut_id):\n-        self.NAME = 'dut' + LOG_NAME_SEP + '%s' % crb['My IP']\n-        super(Dut, self).__init__(crb, serializer, self.NAME, alt_session=True, dut_id=dut_id)\n-\n+    def __init__(self, crb, serializer, dut_id=0, name=None, alt_session=True):\n+        if not name:\n+            name = 'dut' + LOG_NAME_SEP + '%s' % crb['My IP']\n+            self.NAME = name\n+        super(Dut, self).__init__(crb, serializer, dut_id, name, alt_session)\n         self.host_init_flag = False\n         self.number_of_cores = 0\n         self.tester = None\ndiff --git a/framework/project_dpdk.py b/framework/project_dpdk.py\nindex 9927bcc1..37fbc4e6 100644\n--- a/framework/project_dpdk.py\n+++ b/framework/project_dpdk.py\n@@ -60,8 +60,9 @@ class DPDKdut(Dut):\n     build, memory and kernel module.\n     \"\"\"\n \n-    def __init__(self, crb, serializer, dut_id):\n-        super(DPDKdut, self).__init__(crb, serializer, dut_id)\n+    def __init__(self, crb, serializer, dut_id=0, name=None, alt_session=True):\n+        super(DPDKdut, self).__init__(crb, serializer, dut_id, name,\n+                                      alt_session)\n         self.testpmd = None\n \n     def set_target(self, target, bind_dev=True):\ndiff --git a/framework/tester.py b/framework/tester.py\nindex 9dba4e4d..80e531ee 100644\n--- a/framework/tester.py\n+++ b/framework/tester.py\n@@ -80,7 +80,7 @@ class Tester(Crb):\n     def __init__(self, crb, serializer):\n         self.NAME = 'tester'\n         self.scapy_session = None\n-        super(Tester, self).__init__(crb, serializer, self.NAME)\n+        super(Tester, self).__init__(crb, serializer, name=self.NAME)\n         # check the python version of tester\n         check_crb_python_version(self)\n \ndiff --git a/framework/virt_base.py b/framework/virt_base.py\nindex 148a4d18..ef117062 100644\n--- a/framework/virt_base.py\n+++ b/framework/virt_base.py\n@@ -104,7 +104,7 @@ class VirtBase(object):\n         \"\"\"\n         Get the virtual type, such as KVM, XEN or LIBVIRT.\n         \"\"\"\n-        NotImplemented\n+        raise NotImplementedError\n \n     def has_virtual_ability(self):\n         \"\"\"\n@@ -118,6 +118,30 @@ class VirtBase(object):\n         \"\"\"\n         NotImplemented\n \n+    def get_vm_login(self):\n+        \"\"\"\n+        Get VM credentials.\n+        \"\"\"\n+        raise NotImplementedError\n+\n+    def add_vm_login(self):\n+        \"\"\"\n+        Add VM credentials.\n+        \"\"\"\n+        raise NotImplementedError\n+\n+    def _attach_vm(self):\n+        \"\"\"\n+        Attach VM.\n+        \"\"\"\n+        raise NotImplementedError\n+\n+    def _quick_start_vm(self):\n+        \"\"\"\n+        Quick start VM.\n+        \"\"\"\n+        raise NotImplementedError\n+\n     def load_global_config(self):\n         \"\"\"\n         Load global configure in the path DTS_ROOT_PATH/conf.\n@@ -230,7 +254,7 @@ class VirtBase(object):\n         \"\"\"\n         Get the VM IP.\n         \"\"\"\n-        NotImplemented\n+        raise NotImplementedError\n \n     def get_pci_mappings(self):\n         \"\"\"\ndiff --git a/framework/virt_dut.py b/framework/virt_dut.py\nindex bde65667..1afd90a9 100644\n--- a/framework/virt_dut.py\n+++ b/framework/virt_dut.py\n@@ -61,16 +61,16 @@ class VirtDut(DPDKdut):\n     \"\"\"\n \n     def __init__(self, hyper, crb, serializer, virttype, vm_name, suite, cpu_topo, dut_id):\n+        self.vm_ip = crb['IP']\n+        self.NAME = 'virtdut' + LOG_NAME_SEP + '%s' % self.vm_ip\n+        # do not create addition alt_session\n+        super(VirtDut, self).__init__(crb, serializer, dut_id,\n+                                      self.NAME, alt_session=False)\n         self.vm_name = vm_name\n         self.hyper = hyper\n         self.cpu_topo = cpu_topo\n-        self.dut_id = dut_id\n         self.migration_vm = False\n \n-        self.vm_ip = crb['IP']\n-        self.NAME = 'virtdut' + LOG_NAME_SEP + '%s' % self.vm_ip\n-        # do not create addition alt_session\n-        super(Dut, self).__init__(crb, serializer, self.NAME, alt_session=False, dut_id=self.dut_id)\n         # load port config from suite cfg\n         self.suite = suite\n \ndiff --git a/framework/virt_resource.py b/framework/virt_resource.py\nindex 8a19f1b2..3163372d 100644\n--- a/framework/virt_resource.py\n+++ b/framework/virt_resource.py\n@@ -70,6 +70,9 @@ class VirtResource(object):\n         # save allocated cores and related vm\n         self.allocated_info = {}\n \n+    def __port_isused(self, pci):\n+        return pci in self.used_ports\n+\n     def __port_used(self, pci):\n         index = self.ports.index(pci)\n         self.used_ports[index] = pci\n@@ -243,8 +246,8 @@ class VirtResource(object):\n                     print(\"Port %s has been used!!!\" % pci)\n                 else:\n                     if self.__port_on_socket(pci, socket) is True:\n-                        self.__port_used(core)\n-                        ports.append(core)\n+                        self.__port_used(pci)\n+                        ports.append(pci)\n \n         if vm not in self.allocated_info:\n             self.allocated_info[vm] = {}\ndiff --git a/framework/virt_scene.py b/framework/virt_scene.py\nindex cc36a09b..d82012b1 100644\n--- a/framework/virt_scene.py\n+++ b/framework/virt_scene.py\n@@ -347,7 +347,7 @@ class VirtScene(object):\n             elif cmd['type'] == 'host':\n                 crb = self.host_dut\n             elif cmd['type'] == 'tester':\n-                crb = self.tester\n+                crb = self.tester_dut\n             else:\n                 crb = self.host_dut\n \n@@ -390,11 +390,11 @@ class VirtScene(object):\n     def run_post_cmds(self):\n         for cmd in self.post_cmds:\n             if cmd['type'] == 'vm':\n-                crb = self.vm_dut\n+                crb = None\n             elif cmd['type'] == 'host':\n                 crb = self.host_dut\n             elif cmd['type'] == 'tester':\n-                crb = self.tester\n+                crb = self.tester_dut\n             else:\n                 crb = self.host_dut\n \n@@ -456,7 +456,6 @@ class VirtScene(object):\n                 topo = self.get_cputopo(scene_params)\n                 try:\n                     vm_dut = vm.start(load_config=False, set_target=False,\n-                                      auto_portmap=self.auto_portmap,\n                                       cpu_topo=topo)\n                     if vm_dut is None:\n                         raise Exception(\"Set up VM ENV failed!\")\n@@ -507,16 +506,18 @@ class VirtScene(object):\n \n if __name__ == \"__main__\":\n \n-    class QEMUKvm():\n+    class QEMUKvmTmp():\n \n         def __init__(self, dut, vm_name, suite_name):\n             print(vm_name)\n             print(suite_name)\n \n         def start(self):\n-            print(self.params)\n+            print(self.__dict__)\n             return True\n \n+    QEMUKvm = QEMUKvmTmp\n+\n     class simple_dev(object):\n \n         def __init__(self, pci):\n",
    "prefixes": [
        "v2"
    ]
}