Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/1.1/patches/2223885/?format=api
{ "id": 2223885, "url": "http://patchwork.ozlabs.org/api/1.1/patches/2223885/?format=api", "web_url": "http://patchwork.ozlabs.org/project/buildroot/patch/20260416102643.1347452-1-mooz@blockos.org/", "project": { "id": 27, "url": "http://patchwork.ozlabs.org/api/1.1/projects/27/?format=api", "name": "Buildroot development", "link_name": "buildroot", "list_id": "buildroot.buildroot.org", "list_email": "buildroot@buildroot.org", "web_url": "", "scm_url": "", "webscm_url": "" }, "msgid": "<20260416102643.1347452-1-mooz@blockos.org>", "date": "2026-04-16T10:24:21", "name": "[v2,1/1] package/python-libyang: new package", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "1d862b9bd9832c87cab638d0eff080c586a44963", "submitter": { "id": 92650, "url": "http://patchwork.ozlabs.org/api/1.1/people/92650/?format=api", "name": "Vincent Cruz", "email": "mooz@blockos.org" }, "delegate": null, "mbox": "http://patchwork.ozlabs.org/project/buildroot/patch/20260416102643.1347452-1-mooz@blockos.org/mbox/", "series": [ { "id": 500131, "url": "http://patchwork.ozlabs.org/api/1.1/series/500131/?format=api", "web_url": "http://patchwork.ozlabs.org/project/buildroot/list/?series=500131", "date": "2026-04-16T10:24:21", "name": "[v2,1/1] package/python-libyang: new package", "version": 2, "mbox": "http://patchwork.ozlabs.org/series/500131/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2223885/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2223885/checks/", "tags": {}, "headers": { "Return-Path": "<buildroot-bounces@buildroot.org>", "X-Original-To": [ "incoming-buildroot@patchwork.ozlabs.org", "buildroot@buildroot.org" ], "Delivered-To": [ "patchwork-incoming-buildroot@legolas.ozlabs.org", "buildroot@buildroot.org" ], "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=buildroot.org header.i=@buildroot.org\n header.a=rsa-sha256 header.s=default header.b=GCq1fs7s;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=buildroot.org\n (client-ip=2605:bc80:3010::138; helo=smtp1.osuosl.org;\n envelope-from=buildroot-bounces@buildroot.org; receiver=patchwork.ozlabs.org)" ], "Received": [ "from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fxDhq3926z1yCv\n\tfor <incoming-buildroot@patchwork.ozlabs.org>;\n Thu, 16 Apr 2026 20:27:05 +1000 (AEST)", "from localhost (localhost [127.0.0.1])\n\tby smtp1.osuosl.org (Postfix) with ESMTP id 9DEAB80C69;\n\tThu, 16 Apr 2026 10:27:02 +0000 (UTC)", "from smtp1.osuosl.org ([127.0.0.1])\n by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id J6bWu3J-u-LX; Thu, 16 Apr 2026 10:27:01 +0000 (UTC)", "from lists1.osuosl.org (lists1.osuosl.org [140.211.166.142])\n\tby smtp1.osuosl.org (Postfix) with ESMTP id 7767C80C71;\n\tThu, 16 Apr 2026 10:27:01 +0000 (UTC)", "from smtp1.osuosl.org (smtp1.osuosl.org [IPv6:2605:bc80:3010::138])\n by lists1.osuosl.org (Postfix) with ESMTP id E1705775\n for <buildroot@buildroot.org>; Thu, 16 Apr 2026 10:26:59 +0000 (UTC)", "from localhost (localhost [127.0.0.1])\n by smtp1.osuosl.org (Postfix) with ESMTP id C771780C71\n for <buildroot@buildroot.org>; Thu, 16 Apr 2026 10:26:59 +0000 (UTC)", "from smtp1.osuosl.org ([127.0.0.1])\n by localhost (smtp1.osuosl.org [127.0.0.1]) (amavis, port 10024) with ESMTP\n id chh-l3OQRarb for <buildroot@buildroot.org>;\n Thu, 16 Apr 2026 10:26:58 +0000 (UTC)", "from 8.mo533.mail-out.ovh.net (8.mo533.mail-out.ovh.net\n [54.36.140.183])\n by smtp1.osuosl.org (Postfix) with ESMTPS id 2337A80C69\n for <buildroot@buildroot.org>; Thu, 16 Apr 2026 10:26:56 +0000 (UTC)", "from director5.derp.mail-out.ovh.net\n (director5.derp.mail-out.ovh.net [51.68.94.138])\n by mo533.mail-out.ovh.net (Postfix) with ESMTPS id 4fxDhY52Flz65KR;\n Thu, 16 Apr 2026 10:26:53 +0000 (UTC)", "from director5.derp.mail-out.ovh.net\n (director5.derp.mail-out.ovh.net. [127.0.0.1])\n by director5.derp.mail-out.ovh.net (inspect_sender_mail_agent) with SMTP\n for <mooz@blockos.org>; Thu, 16 Apr 2026 10:26:53 +0000 (UTC)", "from mta7.priv.ovhmail-u1.ea.mail.ovh.net (unknown [10.110.43.242])\n by director5.derp.mail-out.ovh.net (Postfix) with ESMTPS id\n 4fxDhY31gcz7tnL; Thu, 16 Apr 2026 10:26:53 +0000 (UTC)", "from blockos.org (unknown [10.1.6.10])\n (Authenticated sender: mooz@blockos.org)\n by mta7.priv.ovhmail-u1.ea.mail.ovh.net (Postfix) with ESMTPSA id\n 5095EB80F0E;\n Thu, 16 Apr 2026 10:26:52 +0000 (UTC)" ], "X-Virus-Scanned": [ "amavis at osuosl.org", "amavis at osuosl.org" ], "X-Comment": "SPF check N/A for local connections - client-ip=140.211.166.142;\n helo=lists1.osuosl.org; envelope-from=buildroot-bounces@buildroot.org;\n receiver=<UNKNOWN> ", "DKIM-Filter": [ "OpenDKIM Filter v2.11.0 smtp1.osuosl.org 7767C80C71", "OpenDKIM Filter v2.11.0 smtp1.osuosl.org 2337A80C69" ], "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=buildroot.org;\n\ts=default; t=1776335221;\n\tbh=obktvIjhUshzUJnQaCtcUS1WxbzNzLf01rwqdDWEIW4=;\n\th=From:To:Date:Subject:List-Id:List-Unsubscribe:List-Archive:\n\t List-Post:List-Help:List-Subscribe:Cc:From;\n\tb=GCq1fs7sPAlA6ZKsj1asNjP0yLEKIQDU8YGqn6SCpVlHtVWGhwG9OInHlLbjGg5iI\n\t QjVewk1rwAPU1Ko7qjl9nROx+bkV5A3SrwJzPM1Q9aaseZWJ4PmHvGfwaPfOGtYG0H\n\t gKvSZx7s5Jkjl9Bxc0jkqpOK54PRby7QLJ02Ssg04iEs8bFWo8SysjFNRO+dzcLuWW\n\t zswDdxwZYWFsY171bDfmOTaVYChrbFb8vK5LZbhYHD380zCAOioNKI9iLartY5D0DW\n\t qRXYblKAW5GLCbgi1ycI2MRyT9TtBtvhoU6l7jeukXJgqYIsFaYUSqWHiHH9fzG566\n\t LuVhAepHEMY0A==", "Received-SPF": "Pass (mailfrom) identity=mailfrom; client-ip=54.36.140.183;\n helo=8.mo533.mail-out.ovh.net; envelope-from=mooz@blockos.org;\n receiver=<UNKNOWN>", "DMARC-Filter": "OpenDMARC Filter v1.4.2 smtp1.osuosl.org 2337A80C69", "X-OVh-ClientIp": "213.36.7.12", "From": "Vincent Cruz <mooz@blockos.org>", "To": "buildroot@buildroot.org", "Date": "Thu, 16 Apr 2026 12:24:21 +0200", "Message-ID": "<20260416102643.1347452-1-mooz@blockos.org>", "X-Mailer": "git-send-email 2.51.0", "MIME-Version": "1.0", "x-ovh-tracer-id": "13361335673238768546", "X-VR-SPAMSTATE": "OK", "X-VR-SPAMSCORE": "-100", "X-VR-SPAMCAUSE": "\n dmFkZTGkaxpFY5JCuZAUv+4uyoiSyrdUQHaBMR9c+0Y3n9V+/DoWcJwaIfEIcso0ZLxT3PdhNS9FhYsaEraESb5rpPd0zRc24g+CqJvNYXYXpm8O+lQURU08XWkQWHxHKzF8ueFQLluKvYqiCCxtrAQkFfkqMficQkjpcVHCe0jBVVA9Hsgzjezl0e+KQIaJ0BS35cNWzTYCvxMR65asCnYvhX9ylmgMcklsUWy/A29IbcVSWJI7TNpfH1fiGrfzwCqOSAf2NzV1AcboPvVS12JbjrvoBoi4Dd6nHmnnZfzhgqOmtgM0UEZx+Z9K8rXwvJnyjPoTzjiqKF/HlJzcajGlhMReLe9Fhs58FcyCe7ZVo+hDZIw0x/W6oDAm87VxugvTgsV/4oOPDkor2v12bdGwcwbTVVh6SJLGe9ca4XYxckEwXfmG5icbHZLgf9R6OImT2ldFCu9vebhNJyIiUpjgTwuire0KEm5zvBmx8CS+RRLMeCxgF1/7gYwfv/w83U02YBdAWxcQk3KoDhUqd081YnZ2v8TQ9d7Tca4f6Uc62yWJ0SCPUOyhZRk1CkfFUYckwkr3jeptTFWa+VjL7OyEc6td9UIJy/BIY4U41vtDxKuxZDyyP/WVvgBSmQ7sxKUY/KGsL9NwdPMZEA8ERC9YSdRsZBCYILvrmQ8QnAvg2wQdLg", "X-Mailman-Original-Authentication-Results": [ "smtp1.osuosl.org;\n dmarc=none (p=none dis=none)\n header.from=blockos.org", "garm.ovh; auth=pass\n (GARM-100R003ae0e15aa-dc9a-467c-8249-98ab4b15faac,\n 0D8B65AFD1E29AA9D52F941CF36BEFE6B8CD1347) smtp.auth=mooz@blockos.org" ], "Subject": "[Buildroot] [PATCH v2 1/1] package/python-libyang: new package", "X-BeenThere": "buildroot@buildroot.org", "X-Mailman-Version": "2.1.30", "Precedence": "list", "List-Id": "Discussion and development of buildroot <buildroot.buildroot.org>", "List-Unsubscribe": "<https://lists.buildroot.org/mailman/options/buildroot>,\n <mailto:buildroot-request@buildroot.org?subject=unsubscribe>", "List-Archive": "<http://lists.buildroot.org/pipermail/buildroot/>", "List-Post": "<mailto:buildroot@buildroot.org>", "List-Help": "<mailto:buildroot-request@buildroot.org?subject=help>", "List-Subscribe": "<https://lists.buildroot.org/mailman/listinfo/buildroot>,\n <mailto:buildroot-request@buildroot.org?subject=subscribe>", "Cc": "Vincent Jardin <vjardin@free.fr>,\n James Hilliard <james.hilliard1@gmail.com>,\n Thomas Petazzoni <thomas.petazzoni@bootlin.com>,\n Vincent Cruz <mooz@blockos.org>", "Content-Type": "text/plain; charset=\"us-ascii\"", "Content-Transfer-Encoding": "7bit", "Errors-To": "buildroot-bounces@buildroot.org", "Sender": "\"buildroot\" <buildroot-bounces@buildroot.org>" }, "content": "From: Vincent Jardin <vjardin@free.fr>\n\nPython CFFI bindings for the libyang YANG library, providing the\n'libyang' Python module for YANG data modeling operations.\n\nThis package is used by higher-level tooling such as python-sysrepo.\n\nhttps://github.com/CESNET/libyang-python\nSigned-off-by: Vincent Jardin <vjardin@free.fr>\nSigned-off-by: Vincent Cruz <mooz@blockos.org>\n\n---\nv1->v2:\n Remove python-sysrepo\n Fix Config.in dependencies\n Add test\n\nTested with Buildroot gitlab CI:\n https://gitlab.com/v_cz/buildroot/-/pipelines/2457352559\n\n---\n DEVELOPERS | 1 +\n package/Config.in | 1 +\n package/python-libyang/Config.in | 19 +++++++++\n package/python-libyang/python-libyang.hash | 5 +++\n package/python-libyang/python-libyang.mk | 21 ++++++++++\n .../tests/package/sample_python_libyang.py | 41 +++++++++++++++++++\n .../tests/package/test_python_libyang.py | 26 ++++++++++++\n 7 files changed, 114 insertions(+)\n create mode 100644 package/python-libyang/Config.in\n create mode 100644 package/python-libyang/python-libyang.hash\n create mode 100644 package/python-libyang/python-libyang.mk\n create mode 100644 support/testing/tests/package/sample_python_libyang.py\n create mode 100644 support/testing/tests/package/test_python_libyang.py", "diff": "diff --git a/DEVELOPERS b/DEVELOPERS\nindex b20cf7d93c..d8fe4e8093 100644\n--- a/DEVELOPERS\n+++ b/DEVELOPERS\n@@ -3372,6 +3372,7 @@ F:\tpackage/dpdk/\n F:\tpackage/libecoli/\n F:\tpackage/libnss-ato/\n F:\tpackage/libyang-cpp/\n+F:\tpackage/python-libyang/\n F:\tpackage/sysrepo-cpp/\n \n N:\tVincent Prince <vincent.prince.fr@gmail.com>\ndiff --git a/package/Config.in b/package/Config.in\nindex d0f148699b..de7900eefe 100644\n--- a/package/Config.in\n+++ b/package/Config.in\n@@ -1207,6 +1207,7 @@ menu \"External python modules\"\n \tsource \"package/python-libevdev/Config.in\"\n \tsource \"package/python-librt/Config.in\"\n \tsource \"package/python-libusb1/Config.in\"\n+\tsource \"package/python-libyang/Config.in\"\n \tsource \"package/python-lmdb/Config.in\"\n \tsource \"package/python-lockfile/Config.in\"\n \tsource \"package/python-log-rate-limit/Config.in\"\ndiff --git a/package/python-libyang/Config.in b/package/python-libyang/Config.in\nnew file mode 100644\nindex 0000000000..c314beb0ea\n--- /dev/null\n+++ b/package/python-libyang/Config.in\n@@ -0,0 +1,19 @@\n+config BR2_PACKAGE_PYTHON_LIBYANG\n+\tbool \"python-libyang\"\n+\tdepends on BR2_TOOLCHAIN_HAS_SYNC_4 # libyang\n+\tdepends on BR2_TOOLCHAIN_HAS_THREADS # libyang\n+\tdepends on !BR2_STATIC_LIBS # libyang\n+\tselect BR2_PACKAGE_LIBYANG\n+\tselect BR2_PACKAGE_PYTHON_CFFI # runtime\n+\thelp\n+\t Python CFFI bindings for the libyang YANG library.\n+\n+\t This package provides the 'libyang' Python module, used by\n+\t higher-level tooling such as python-sysrepo.\n+\n+\t https://github.com/CESNET/libyang-python\n+\n+comment \"python-libyang needs libyang\"\n+\tdepends on !BR2_TOOLCHAIN_HAS_SYNC_4\n+\tdepends on !BR2_TOOLCHAIN_HAS_THREADS\n+\tdepends on BR2_STATIC_LIBS\ndiff --git a/package/python-libyang/python-libyang.hash b/package/python-libyang/python-libyang.hash\nnew file mode 100644\nindex 0000000000..077d97cdd8\n--- /dev/null\n+++ b/package/python-libyang/python-libyang.hash\n@@ -0,0 +1,5 @@\n+# From https://pypi.org/pypi/libyang/3.3.0/json\n+sha256 97da2c908a8a3607ac834f2acec224ea53a4b9e9770c13e5598513641decf637 libyang-3.3.0.tar.gz\n+\n+# Locally computed\n+sha256 c8d554f918d32b1467f35829e1cfb753764dd683c6edcecc877a4d7e9f05b2a7 LICENSE\ndiff --git a/package/python-libyang/python-libyang.mk b/package/python-libyang/python-libyang.mk\nnew file mode 100644\nindex 0000000000..2e4d1f3b90\n--- /dev/null\n+++ b/package/python-libyang/python-libyang.mk\n@@ -0,0 +1,21 @@\n+################################################################################\n+#\n+# python-libyang\n+#\n+################################################################################\n+\n+PYTHON_LIBYANG_VERSION = 3.3.0\n+PYTHON_LIBYANG_SOURCE = libyang-$(PYTHON_LIBYANG_VERSION).tar.gz\n+PYTHON_LIBYANG_SITE = https://files.pythonhosted.org/packages/source/l/libyang\n+\n+PYTHON_LIBYANG_LICENSE = MIT\n+PYTHON_LIBYANG_LICENSE_FILES = LICENSE\n+\n+# pyproject.toml (PEP517)\n+PYTHON_LIBYANG_SETUP_TYPE = pep517\n+\n+PYTHON_LIBYANG_DEPENDENCIES = \\\n+\tlibyang \\\n+\thost-python-cffi\n+\n+$(eval $(python-package))\ndiff --git a/support/testing/tests/package/sample_python_libyang.py b/support/testing/tests/package/sample_python_libyang.py\nnew file mode 100644\nindex 0000000000..36ca8915cf\n--- /dev/null\n+++ b/support/testing/tests/package/sample_python_libyang.py\n@@ -0,0 +1,41 @@\n+# test from https://github.com/CESNET/libyang-python/blob/master/README.rst\n+\n+import libyang\n+\n+ctx = libyang.Context()\n+\n+module = ctx.parse_module_str('''\n+module example {\n+ namespace \"urn:example\";\n+ prefix \"ex\";\n+ container data {\n+ list interface {\n+ key name;\n+ leaf name {\n+ type string;\n+ }\n+ leaf address {\n+ type string;\n+ }\n+ }\n+ leaf hostname {\n+ type string;\n+ }\n+ }\n+}\n+''')\n+\n+node = module.parse_data_dict({\n+ 'data': {\n+ 'hostname': 'foobar',\n+ 'interface': [\n+ {'name': 'eth0', 'address': '1.2.3.4/24'},\n+ {'name': 'lo', 'address': '127.0.0.1'},\n+ ],\n+ },\n+})\n+\n+print(node.print_mem('xml', pretty=True))\n+\n+node.free()\n+ctx.destroy()\ndiff --git a/support/testing/tests/package/test_python_libyang.py b/support/testing/tests/package/test_python_libyang.py\nnew file mode 100644\nindex 0000000000..c485de2a67\n--- /dev/null\n+++ b/support/testing/tests/package/test_python_libyang.py\n@@ -0,0 +1,26 @@\n+import os\n+from xml.etree import ElementTree\n+from tests.package.test_python import TestPythonPackageBase\n+\n+\n+class TestPythonLibyang(TestPythonPackageBase):\n+ __test__ = True\n+ config = TestPythonPackageBase.config + \\\n+ \"\"\"\n+ BR2_PACKAGE_PYTHON3=y\n+ BR2_PACKAGE_PYTHON_LIBYANG=y\n+ \"\"\"\n+ sample_scripts = [\"tests/package/sample_python_libyang.py\"]\n+\n+ def test_run(self):\n+ self.login()\n+ self.check_sample_scripts_exist()\n+\n+ cmd = self.interpreter + \" \" + os.path.basename(self.sample_scripts[0])\n+ output, exit_code = self.emulator.run(cmd, timeout=15)\n+ self.assertEqual(exit_code, 0)\n+\n+ tree = ElementTree.fromstringlist(output)\n+ self.assertEqual(tree.tag, '{urn:example}data')\n+ self.assertEqual(tree.find('.//{*}hostname').text, 'foobar')\n+ self.assertEqual(len(tree.find('.//{*}interface')), 2)\n", "prefixes": [ "v2", "1/1" ] }