Show a cover letter.

GET /api/covers/367/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 367,
    "url": "http://patches.dpdk.org/api/covers/367/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/cover/20231106171601.160749-1-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": "<20231106171601.160749-1-juraj.linkes@pantheon.tech>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20231106171601.160749-1-juraj.linkes@pantheon.tech",
    "date": "2023-11-06T17:15:38",
    "name": "[v5,00/23] dts: add dts api docs",
    "submitter": {
        "id": 1626,
        "url": "http://patches.dpdk.org/api/people/1626/?format=api",
        "name": "Juraj Linkeš",
        "email": "juraj.linkes@pantheon.tech"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/cover/20231106171601.160749-1-juraj.linkes@pantheon.tech/mbox/",
    "series": [
        {
            "id": 30173,
            "url": "http://patches.dpdk.org/api/series/30173/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=30173",
            "date": "2023-11-06T17:15:38",
            "name": "dts: add dts api docs",
            "version": 5,
            "mbox": "http://patches.dpdk.org/series/30173/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/covers/367/comments/",
    "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 B06B7432BB;\n\tMon,  6 Nov 2023 18:16:06 +0100 (CET)",
            "from mails.dpdk.org (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 83A0240689;\n\tMon,  6 Nov 2023 18:16:06 +0100 (CET)",
            "from mail-ed1-f48.google.com (mail-ed1-f48.google.com\n [209.85.208.48]) by mails.dpdk.org (Postfix) with ESMTP id EAD29402F2\n for <dev@dpdk.org>; Mon,  6 Nov 2023 18:16:04 +0100 (CET)",
            "by mail-ed1-f48.google.com with SMTP id\n 4fb4d7f45d1cf-5437269a661so11359557a12.0\n for <dev@dpdk.org>; Mon, 06 Nov 2023 09:16:04 -0800 (PST)",
            "from jlinkes-PT-Latitude-5530.. (ip-46.34.243.197.o2inet.sk.\n [46.34.243.197]) by smtp.gmail.com with ESMTPSA id\n s10-20020a170906354a00b009b947aacb4bsm47016eja.191.2023.11.06.09.16.02\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Mon, 06 Nov 2023 09:16:04 -0800 (PST)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=pantheon.tech; s=google; t=1699290964; x=1699895764; darn=dpdk.org;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n :message-id:reply-to;\n bh=yF8Psogq88OG2hB9Ft0F1HqhdjlXBuqeOeBQf1u1u/M=;\n b=f6CW5j0bj9ZMsweLElaZ89JBRbJ0O9TUx+o/Qb3Ls2bd+4l2IOWQe+Hq+tnIWNF98V\n iDkHbbP9miw+pdDrhLFFQDgLpaKnhG3QIduo17qeCKoSIPXluKMzf4NWsYy9R40+vPQa\n GBsQejVvRPKRcnLMdV4NModTmtCRI9L9iKD/PGS2lkZOKLr2pQO6Ps6kZ+AriV3Fz5n1\n 3BdwZAAZEovVyQMcd+uujV9GlS2r7HzXhvabrud/YFE9OZ1LUeqqCvjE7S5A9IrYs0qr\n OPqh7cpDdv0SQRfONIRc/ps33PSR9LWkw37HFS0h3AA450A5bzAf+oqE0nMvPbXiQMAy\n vKQQ==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20230601; t=1699290964; x=1699895764;\n h=content-transfer-encoding:mime-version:references:in-reply-to\n :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=yF8Psogq88OG2hB9Ft0F1HqhdjlXBuqeOeBQf1u1u/M=;\n b=GVSjQiZgv76uOH49ad9loc5ZAXmgylWGA7wUV62H6IsyyS0MELAzAxsNKb3fKGAu8C\n JLrPCrHY2lMfdnNXv8/sybrSJQIJGa9ALkMsCcPQD5pQTImsFAPT++WM2heeAw0E/Knp\n VkXxGf/Q+wgWYytz52jzWmchN4isRNUdQLTRqU3gJJJbuxMrbp1mUTLacB2wTAx2rB14\n NpDZevUIugZvwlM3j5oh149L2DvJvwP7ItYfWpTJnKyU7he9UCM7p3HZMFS6ojzGWadu\n QheYwxk/UdveVLTGDnMEClm1ncuHZ++YtOQZeLN/9mFZvKN+7ow9ES9SPifBJaRWlHgX\n SV4Q==",
        "X-Gm-Message-State": "AOJu0Yyp/RJz8XoUv88IxB4TcLjNRyKJhSn4LMaTNl2UgC3zxNU7Xl1u\n 4fsHP/Lf4gFMes0XrCdoltajyA==",
        "X-Google-Smtp-Source": "\n AGHT+IH/jSgsVaxRteqxb0JPOVtHLrPNpMQOu3HyQcZi2rVhVm2a/1ibf0LgIgwd9P2Jvk8eRjdjyA==",
        "X-Received": "by 2002:a17:907:2d27:b0:9a2:295a:9bbc with SMTP id\n gs39-20020a1709072d2700b009a2295a9bbcmr101378ejc.37.1699290964560;\n Mon, 06 Nov 2023 09:16:04 -0800 (PST)",
        "From": "=?utf-8?q?Juraj_Linke=C5=A1?= <juraj.linkes@pantheon.tech>",
        "To": "thomas@monjalon.net, Honnappa.Nagarahalli@arm.com,\n bruce.richardson@intel.com, jspewock@iol.unh.edu, probb@iol.unh.edu,\n paul.szczepanek@arm.com, yoan.picchi@foss.arm.com",
        "Cc": "dev@dpdk.org, =?utf-8?q?Juraj_Linke=C5=A1?= <juraj.linkes@pantheon.tech>",
        "Subject": "[PATCH v5 00/23] dts: add dts api docs",
        "Date": "Mon,  6 Nov 2023 18:15:38 +0100",
        "Message-Id": "<20231106171601.160749-1-juraj.linkes@pantheon.tech>",
        "X-Mailer": "git-send-email 2.34.1",
        "In-Reply-To": "<20230831100407.59865-1-juraj.linkes@pantheon.tech>",
        "References": "<20230831100407.59865-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 commits can be split into groups.\n\nThe first commit makes changes to the code. These code changes mainly\nchange the structure of the code so that the actual API docs generation\nworks. There are also some code changes which get reflected in the\ndocumentation, such as making functions/methods/attributes private or\npublic.\n\nThe second set of commits (2-21) deal with the actual docstring\ndocumentation (from which the API docs are generated). The format of\ndocstrings is the Google format [0] with PEP257 [1] and some guidelines\ncaptured in the last commit of this group covering what the Google\nformat doesn't.\nThe docstring updates are split into many commits to make review\npossible. When accepted, these may be squashed (commits 4-21).\nThe docstrings have been composed in anticipation of [2], adhering to\nmaximum line length of 100. We don't have a tool for automatic docstring\nformatting, hence the usage of 100 right away to save time.\n\nNOTE: The logger.py module is not fully documented, as it's being\nrefactored and the refactor will be submitted in the near future.\nDocumenting it now seems unnecessary.\n\nThe last two commits comprise the final group, enabling the actual\ngeneration of documentation.\nThe generation is done with Sphinx, which DPDK already uses, with\nslightly modified configuration (the sidebar: unlimited depth and better\ncollapsing - I need comment on this).\n\nThe first two groups are the most important to merge, as future\ndevelopment can't proceed without them. The third group may be\nfinished/accepted at a later date, as it's fairly independent.\n\nThe build requires the same Python version and dependencies as DTS,\nbecause Sphinx imports the Python modules. The modules are imported\nindividually, requiring the code refactoring mentioned above.\nDependencies are installed\nusing Poetry from the dts directory:\n\npoetry install --with docs\n\nAfter installing, enter the Poetry shell:\n\npoetry shell\n\nAnd then run the build:\nninja -C <meson_build_dir> dts-doc\n\n[0] https://google.github.io/styleguide/pyguide.html#s3.8.4-comments-in-classes\n[1] https://peps.python.org/pep-0257/\n[2] https://patches.dpdk.org/project/dpdk/list/?series=29844\n\nJuraj Linkeš (23):\n  dts: code adjustments for doc generation\n  dts: add docstring checker\n  dts: add basic developer docs\n  dts: exceptions docstring update\n  dts: settings docstring update\n  dts: logger and settings docstring update\n  dts: dts runner and main docstring update\n  dts: test suite docstring update\n  dts: test result docstring update\n  dts: config docstring update\n  dts: remote session docstring update\n  dts: interactive remote session docstring update\n  dts: port and virtual device docstring update\n  dts: cpu docstring update\n  dts: os session docstring update\n  dts: posix and linux sessions docstring update\n  dts: node docstring update\n  dts: sut and tg nodes docstring update\n  dts: base traffic generators docstring update\n  dts: scapy tg docstring update\n  dts: test suites docstring update\n  dts: add doc generation dependencies\n  dts: add doc generation\n\n buildtools/call-sphinx-build.py               |  29 +-\n doc/api/meson.build                           |   1 +\n doc/guides/conf.py                            |  34 +-\n doc/guides/meson.build                        |   1 +\n doc/guides/tools/dts.rst                      | 103 ++++\n dts/doc/conf_yaml_schema.json                 |   1 +\n dts/doc/index.rst                             |  17 +\n dts/doc/meson.build                           |  49 ++\n dts/framework/__init__.py                     |  12 +-\n dts/framework/config/__init__.py              | 379 ++++++++++---\n dts/framework/config/types.py                 | 132 +++++\n dts/framework/dts.py                          | 161 +++++-\n dts/framework/exception.py                    | 156 +++---\n dts/framework/logger.py                       |  72 ++-\n dts/framework/remote_session/__init__.py      |  80 ++-\n .../interactive_remote_session.py             |  36 +-\n .../remote_session/interactive_shell.py       | 152 ++++++\n dts/framework/remote_session/os_session.py    | 284 ----------\n dts/framework/remote_session/python_shell.py  |  32 ++\n .../remote_session/remote/__init__.py         |  27 -\n .../remote/interactive_shell.py               | 133 -----\n .../remote_session/remote/python_shell.py     |  12 -\n .../remote_session/remote/remote_session.py   | 172 ------\n .../remote_session/remote/testpmd_shell.py    |  49 --\n .../remote_session/remote_session.py          | 232 ++++++++\n .../{remote => }/ssh_session.py               |  28 +-\n dts/framework/remote_session/testpmd_shell.py |  86 +++\n dts/framework/settings.py                     | 188 +++++--\n dts/framework/test_result.py                  | 296 +++++++---\n dts/framework/test_suite.py                   | 230 ++++++--\n dts/framework/testbed_model/__init__.py       |  28 +-\n dts/framework/testbed_model/{hw => }/cpu.py   | 209 +++++--\n dts/framework/testbed_model/hw/__init__.py    |  27 -\n dts/framework/testbed_model/hw/port.py        |  60 ---\n .../testbed_model/hw/virtual_device.py        |  16 -\n .../linux_session.py                          |  69 ++-\n dts/framework/testbed_model/node.py           | 217 +++++---\n dts/framework/testbed_model/os_session.py     | 425 +++++++++++++++\n dts/framework/testbed_model/port.py           |  93 ++++\n .../posix_session.py                          |  85 ++-\n dts/framework/testbed_model/sut_node.py       | 227 +++++---\n dts/framework/testbed_model/tg_node.py        |  70 +--\n .../testbed_model/traffic_generator.py        |  72 ---\n .../traffic_generator/__init__.py             |  44 ++\n .../capturing_traffic_generator.py            |  52 +-\n .../{ => traffic_generator}/scapy.py          | 114 ++--\n .../traffic_generator/traffic_generator.py    |  87 +++\n dts/framework/testbed_model/virtual_device.py |  29 +\n dts/framework/utils.py                        | 136 +++--\n dts/main.py                                   |  17 +-\n dts/meson.build                               |  16 +\n dts/poetry.lock                               | 509 +++++++++++++++++-\n dts/pyproject.toml                            |  13 +-\n dts/tests/TestSuite_hello_world.py            |  16 +-\n dts/tests/TestSuite_os_udp.py                 |  16 +-\n dts/tests/TestSuite_smoke_tests.py            |  53 +-\n meson.build                                   |   1 +\n 57 files changed, 4181 insertions(+), 1704 deletions(-)\n create mode 120000 dts/doc/conf_yaml_schema.json\n create mode 100644 dts/doc/index.rst\n create mode 100644 dts/doc/meson.build\n create mode 100644 dts/framework/config/types.py\n rename dts/framework/remote_session/{remote => }/interactive_remote_session.py (76%)\n create mode 100644 dts/framework/remote_session/interactive_shell.py\n delete mode 100644 dts/framework/remote_session/os_session.py\n create mode 100644 dts/framework/remote_session/python_shell.py\n delete mode 100644 dts/framework/remote_session/remote/__init__.py\n delete mode 100644 dts/framework/remote_session/remote/interactive_shell.py\n delete mode 100644 dts/framework/remote_session/remote/python_shell.py\n delete mode 100644 dts/framework/remote_session/remote/remote_session.py\n delete mode 100644 dts/framework/remote_session/remote/testpmd_shell.py\n create mode 100644 dts/framework/remote_session/remote_session.py\n rename dts/framework/remote_session/{remote => }/ssh_session.py (83%)\n create mode 100644 dts/framework/remote_session/testpmd_shell.py\n rename dts/framework/testbed_model/{hw => }/cpu.py (50%)\n delete mode 100644 dts/framework/testbed_model/hw/__init__.py\n delete mode 100644 dts/framework/testbed_model/hw/port.py\n delete mode 100644 dts/framework/testbed_model/hw/virtual_device.py\n rename dts/framework/{remote_session => testbed_model}/linux_session.py (79%)\n create mode 100644 dts/framework/testbed_model/os_session.py\n create mode 100644 dts/framework/testbed_model/port.py\n rename dts/framework/{remote_session => testbed_model}/posix_session.py (74%)\n delete mode 100644 dts/framework/testbed_model/traffic_generator.py\n create mode 100644 dts/framework/testbed_model/traffic_generator/__init__.py\n rename dts/framework/testbed_model/{ => traffic_generator}/capturing_traffic_generator.py (66%)\n rename dts/framework/testbed_model/{ => traffic_generator}/scapy.py (71%)\n create mode 100644 dts/framework/testbed_model/traffic_generator/traffic_generator.py\n create mode 100644 dts/framework/testbed_model/virtual_device.py\n create mode 100644 dts/meson.build"
}