Show a patch.

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

{
    "id": 18666,
    "url": "https://patchwork.libcamera.org/api/patches/18666/?format=api",
    "web_url": "https://patchwork.libcamera.org/patch/18666/",
    "project": {
        "id": 1,
        "url": "https://patchwork.libcamera.org/api/projects/1/?format=api",
        "name": "libcamera",
        "link_name": "libcamera",
        "list_id": "libcamera_core",
        "list_email": "libcamera-devel@lists.libcamera.org",
        "web_url": "",
        "scm_url": "",
        "webscm_url": ""
    },
    "msgid": "<20230530120133.99033-5-tomi.valkeinen@ideasonboard.com>",
    "date": "2023-05-30T12:01:32",
    "name": "[libcamera-devel,v2,4/5] py: unittests.py: Add weakref helpers and use del",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": false,
    "hash": "d1d3f49fc7d825af2ccee97fa99e78bcc11fe18b",
    "submitter": {
        "id": 109,
        "url": "https://patchwork.libcamera.org/api/people/109/?format=api",
        "name": "Tomi Valkeinen",
        "email": "tomi.valkeinen@ideasonboard.com"
    },
    "delegate": null,
    "mbox": "https://patchwork.libcamera.org/patch/18666/mbox/",
    "series": [
        {
            "id": 3894,
            "url": "https://patchwork.libcamera.org/api/series/3894/?format=api",
            "web_url": "https://patchwork.libcamera.org/project/libcamera/list/?series=3894",
            "date": "2023-05-30T12:01:28",
            "name": "py: Misc changes & move to mainline pybind11",
            "version": 2,
            "mbox": "https://patchwork.libcamera.org/series/3894/mbox/"
        }
    ],
    "comments": "https://patchwork.libcamera.org/api/patches/18666/comments/",
    "check": "pending",
    "checks": "https://patchwork.libcamera.org/api/patches/18666/checks/",
    "tags": {},
    "headers": {
        "Return-Path": "<libcamera-devel-bounces@lists.libcamera.org>",
        "X-Original-To": "parsemail@patchwork.libcamera.org",
        "Delivered-To": "parsemail@patchwork.libcamera.org",
        "Received": [
            "from lancelot.ideasonboard.com (lancelot.ideasonboard.com\n\t[92.243.16.209])\n\tby patchwork.libcamera.org (Postfix) with ESMTPS id 3061BC31E9\n\tfor <parsemail@patchwork.libcamera.org>;\n\tTue, 30 May 2023 12:01:54 +0000 (UTC)",
            "from lancelot.ideasonboard.com (localhost [IPv6:::1])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTP id F06776287F;\n\tTue, 30 May 2023 14:01:53 +0200 (CEST)",
            "from perceval.ideasonboard.com (perceval.ideasonboard.com\n\t[213.167.242.64])\n\tby lancelot.ideasonboard.com (Postfix) with ESMTPS id 0EDAB60595\n\tfor <libcamera-devel@lists.libcamera.org>;\n\tTue, 30 May 2023 14:01:50 +0200 (CEST)",
            "from desky.lan (91-154-35-171.elisa-laajakaista.fi [91.154.35.171])\n\tby perceval.ideasonboard.com (Postfix) with ESMTPSA id 228529B4;\n\tTue, 30 May 2023 14:01:28 +0200 (CEST)"
        ],
        "DKIM-Signature": [
            "v=1; a=rsa-sha256; c=relaxed/simple; d=libcamera.org;\n\ts=mail; t=1685448114;\n\tbh=etUTNpglDs12cp0qIBTbbGRzSHyx4+IT4y7n3WHxxm8=;\n\th=To:Date:In-Reply-To:References:Subject:List-Id:List-Unsubscribe:\n\tList-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:\n\tFrom;\n\tb=ynu0xI+lkNqZ1CRJYxXlM5kNzhh6nIWrKkp3GU90iRgsSkzSTiNFKuPf2kkEXSVP0\n\t1HWYPrGIzEgrxFCcMalF9XUBHxNmEtdpwU2bjVUBrxUr2e6qNPfKTlZnKJ0AilkWd+\n\tagDAq6ExHFpQ2Si1drc9rpiw+NTpOKLEx5NKfPkhH40DSxOQk0RgMs4n6MF/H15HKZ\n\tD0P8hl7Hs9gnHLxxn/TVoBCoVTlVwMDm7YyJ6gf1wguvklXFIRqnKHeBcZ/ChqSxb6\n\tMf60S4kJ3jdyjTWjRr4oahtk8iVUgP05domdKa/Z0uJNOheq735Z4Uf7fSEj5e/0WW\n\tJwd2GDU3rX4/A==",
            "v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com;\n\ts=mail; t=1685448089;\n\tbh=etUTNpglDs12cp0qIBTbbGRzSHyx4+IT4y7n3WHxxm8=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=X9Oi9JzIT9LLdS5Z2WvH3Dyi+USr32uSY4vlY1RhAS8xNa7j00/QKf7daHAo/yRNW\n\tJ9FEOL2FqpQAwHehzVLRq+LfjfME48qsMmApfrSk/oZJ+vGI9JLxqBfg1uiTcgpR7S\n\tigf150vLCutO8GQOwDQxhM4xKW7krmVc0N+1z9RM="
        ],
        "Authentication-Results": "lancelot.ideasonboard.com; dkim=pass (1024-bit key; \n\tunprotected) header.d=ideasonboard.com\n\theader.i=@ideasonboard.com\n\theader.b=\"X9Oi9JzI\"; dkim-atps=neutral",
        "To": "libcamera-devel@lists.libcamera.org",
        "Date": "Tue, 30 May 2023 15:01:32 +0300",
        "Message-Id": "<20230530120133.99033-5-tomi.valkeinen@ideasonboard.com>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20230530120133.99033-1-tomi.valkeinen@ideasonboard.com>",
        "References": "<20230530120133.99033-1-tomi.valkeinen@ideasonboard.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[libcamera-devel] [PATCH v2 4/5] py: unittests.py: Add weakref\n\thelpers and use del",
        "X-BeenThere": "libcamera-devel@lists.libcamera.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "<libcamera-devel.lists.libcamera.org>",
        "List-Unsubscribe": "<https://lists.libcamera.org/options/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=unsubscribe>",
        "List-Archive": "<https://lists.libcamera.org/pipermail/libcamera-devel/>",
        "List-Post": "<mailto:libcamera-devel@lists.libcamera.org>",
        "List-Help": "<mailto:libcamera-devel-request@lists.libcamera.org?subject=help>",
        "List-Subscribe": "<https://lists.libcamera.org/listinfo/libcamera-devel>,\n\t<mailto:libcamera-devel-request@lists.libcamera.org?subject=subscribe>",
        "From": "Tomi Valkeinen via libcamera-devel\n\t<libcamera-devel@lists.libcamera.org>",
        "Reply-To": "Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>",
        "Errors-To": "libcamera-devel-bounces@lists.libcamera.org",
        "Sender": "\"libcamera-devel\" <libcamera-devel-bounces@lists.libcamera.org>"
    },
    "content": "Add helpers to check if a weakref or a list of weakrefs is alive or\ndead.\n\nAlso use 'del' for local variables instead of setting the variable to\nNone. This makes debugging the test easier as the locals will be gone\nfrom locals() dict.\n\nSigned-off-by: Tomi Valkeinen <tomi.valkeinen@ideasonboard.com>\nReviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>\n---\n test/py/unittests.py | 60 ++++++++++++++++++++++++++------------------\n 1 file changed, 36 insertions(+), 24 deletions(-)",
    "diff": "diff --git a/test/py/unittests.py b/test/py/unittests.py\nindex 0057ec92..fe1e8ef0 100755\n--- a/test/py/unittests.py\n+++ b/test/py/unittests.py\n@@ -18,6 +18,18 @@ class BaseTestCase(unittest.TestCase):\n     def assertZero(self, a, msg=None):\n         self.assertEqual(a, 0, msg)\n \n+    def assertIsAlive(self, wr, msg='object not alive'):\n+        self.assertIsNotNone(wr(), msg)\n+\n+    def assertIsDead(self, wr, msg='object not dead'):\n+        self.assertIsNone(wr(), msg)\n+\n+    def assertIsAllAlive(self, wr_list, msg='object not alive'):\n+        self.assertTrue(all([wr() for wr in wr_list]), msg)\n+\n+    def assertIsAllDead(self, wr_list, msg='object not dead'):\n+        self.assertTrue(all([not wr() for wr in wr_list]), msg)\n+\n \n class SimpleTestMethods(BaseTestCase):\n     def test_get_ref(self):\n@@ -28,14 +40,14 @@ class SimpleTestMethods(BaseTestCase):\n         self.assertIsNotNone(cam)\n         wr_cam = weakref.ref(cam)\n \n-        cm = None\n+        del cm\n         gc.collect()\n-        self.assertIsNotNone(wr_cm())\n+        self.assertIsAlive(wr_cm)\n \n-        cam = None\n+        del cam\n         gc.collect()\n-        self.assertIsNone(wr_cm())\n-        self.assertIsNone(wr_cam())\n+        self.assertIsDead(wr_cm)\n+        self.assertIsDead(wr_cam)\n \n     def test_acquire_release(self):\n         cm = libcam.CameraManager.singleton()\n@@ -93,8 +105,8 @@ class CameraTesterBase(BaseTestCase):\n         self.cam = None\n         self.cm = None\n \n-        self.assertIsNone(self.wr_cm())\n-        self.assertIsNone(self.wr_cam())\n+        self.assertIsDead(self.wr_cm)\n+        self.assertIsDead(self.wr_cam)\n \n \n class AllocatorTestMethods(CameraTesterBase):\n@@ -114,11 +126,11 @@ class AllocatorTestMethods(CameraTesterBase):\n         wr_stream = weakref.ref(stream)\n \n         # stream should keep streamconfig and camconfig alive\n-        streamconfig = None\n-        camconfig = None\n+        del streamconfig\n+        del camconfig\n         gc.collect()\n-        self.assertIsNotNone(wr_camconfig())\n-        self.assertIsNotNone(wr_streamconfig())\n+        self.assertIsAlive(wr_camconfig)\n+        self.assertIsAlive(wr_streamconfig)\n \n         allocator = libcam.FrameBufferAllocator(cam)\n         num_bufs = allocator.allocate(stream)\n@@ -127,29 +139,29 @@ class AllocatorTestMethods(CameraTesterBase):\n \n         buffers = allocator.buffers(stream)\n         self.assertIsNotNone(buffers)\n-        buffers = None\n+        del buffers\n \n         buffer = allocator.buffers(stream)[0]\n         self.assertIsNotNone(buffer)\n         wr_buffer = weakref.ref(buffer)\n \n-        allocator = None\n+        del allocator\n         gc.collect()\n-        self.assertIsNotNone(wr_buffer())\n-        self.assertIsNotNone(wr_allocator())\n-        self.assertIsNotNone(wr_stream())\n+        self.assertIsAlive(wr_buffer)\n+        self.assertIsAlive(wr_allocator)\n+        self.assertIsAlive(wr_stream)\n \n-        buffer = None\n+        del buffer\n         gc.collect()\n-        self.assertIsNone(wr_buffer())\n-        self.assertIsNone(wr_allocator())\n-        self.assertIsNotNone(wr_stream())\n+        self.assertIsDead(wr_buffer)\n+        self.assertIsDead(wr_allocator)\n+        self.assertIsAlive(wr_stream)\n \n-        stream = None\n+        del stream\n         gc.collect()\n-        self.assertIsNone(wr_stream())\n-        self.assertIsNone(wr_camconfig())\n-        self.assertIsNone(wr_streamconfig())\n+        self.assertIsDead(wr_stream)\n+        self.assertIsDead(wr_camconfig)\n+        self.assertIsDead(wr_streamconfig)\n \n \n class SimpleCaptureMethods(CameraTesterBase):\n",
    "prefixes": [
        "libcamera-devel",
        "v2",
        "4/5"
    ]
}