From 00fa1ba0ad77b809c8d28ed42f6afa0fb90c6cc4 Mon Sep 17 00:00:00 2001 From: Rasmi Teja Date: Thu, 6 Aug 2026 12:35:37 +0530 Subject: [PATCH 01/11] feat: add Python 3.13 compatibility CI --- .github/workflows/build-test-release.yml | 29 ++++++++++++++++++++++++ pyproject.toml | 1 + 2 files changed, 30 insertions(+) diff --git a/.github/workflows/build-test-release.yml b/.github/workflows/build-test-release.yml index c621410a7..33b6329ea 100644 --- a/.github/workflows/build-test-release.yml +++ b/.github/workflows/build-test-release.yml @@ -72,6 +72,9 @@ jobs: - uses: actions/checkout@v4 with: submodules: true + - uses: actions/setup-python@v5 + with: + python-version: "3.12" - name: Generate GitHub App Token id: app-token uses: actions/create-github-app-token@v3 @@ -87,6 +90,32 @@ jobs: poetry install poetry run pytest -v tests/unit + test-splunk-unit-python-313: + # Keep this advisory while Python 3.13 compatibility is being established. + continue-on-error: true + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + with: + submodules: true + - uses: actions/setup-python@v5 + with: + python-version: "3.13" + - name: Generate GitHub App Token + id: app-token + uses: actions/create-github-app-token@v3 + with: + client-id: ${{ secrets.GH_APP_CLIENT_ID }} + private-key: ${{ secrets.GH_APP_PRIVATE_KEY }} + owner: ${{ github.repository_owner }} + - name: Install dependencies and run unit tests + run: | + git config --global --add url."https://x-access-token:${{ steps.app-token.outputs.token }}@github.com".insteadOf https://github.com + git config --global --add url."https://x-access-token:${{ steps.app-token.outputs.token }}@github.com".insteadOf ssh://git@github.com + curl -sSL https://install.python-poetry.org | python3 - --version 1.5.1 + poetry install + poetry run pytest -v tests/unit + test-splunk-external: runs-on: ubuntu-22.04 diff --git a/pyproject.toml b/pyproject.toml index 0558636d8..c0a2463b9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,6 +26,7 @@ classifiers = [ "Topic :: Software Development :: Testing", "Programming Language :: Python", "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.13", "Operating System :: OS Independent", "License :: OSI Approved :: Apache Software License", ] From 311e6a8fe7bcd5b2a6bbca8f5d5ab5e065f354f9 Mon Sep 17 00:00:00 2001 From: Rasmi Teja Date: Mon, 10 Aug 2026 17:59:39 +0530 Subject: [PATCH 02/11] fix: upgrade Python and vulnerable test dependencies --- poetry.lock | 138 ++++++++++++++++--------------------------------- pyproject.toml | 6 +-- 2 files changed, 47 insertions(+), 97 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6629bc7f1..468a77f37 100644 --- a/poetry.lock +++ b/poetry.lock @@ -24,9 +24,6 @@ files = [ {file = "attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346"}, ] -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - [package.extras] benchmark = ["cloudpickle ; platform_python_implementation == \"CPython\"", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.9\"", "pympler", "pytest (>=4.3.0)", "pytest-codspeed", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.9\" and python_version < \"3.13\"", "pytest-xdist[psutil]"] cov = ["cloudpickle ; platform_python_implementation == \"CPython\"", "coverage[toml] (>=5.3)", "hypothesis", "mypy (>=1.11.1) ; platform_python_implementation == \"CPython\" and python_version >= \"3.9\"", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins ; platform_python_implementation == \"CPython\" and python_version >= \"3.9\" and python_version < \"3.13\"", "pytest-xdist[psutil]"] @@ -308,7 +305,7 @@ description = "Backport of PEP 654 (exception groups)" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version < \"3.11\"" +markers = "python_version == \"3.10\"" files = [ {file = "exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598"}, {file = "exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219"}, @@ -349,7 +346,6 @@ files = [ [package.dependencies] python-dateutil = ">=2.4" -typing-extensions = {version = ">=3.10.0.1", markers = "python_version < \"3.8\""} [[package]] name = "filelock" @@ -412,48 +408,6 @@ files = [ [package.extras] all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] -[[package]] -name = "importlib-metadata" -version = "6.7.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.7" -groups = ["main", "dev"] -markers = "python_version == \"3.7\"" -files = [ - {file = "importlib_metadata-6.7.0-py3-none-any.whl", hash = "sha256:cb52082e659e97afc5dac71e79de97d8681de3aa07ff18578330904a9d18e5b5"}, - {file = "importlib_metadata-6.7.0.tar.gz", hash = "sha256:1aaf550d4f73e5d6783e7acb77aec43d49da8017410afae93822cc9cca98c4d4"}, -] - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3) ; python_version < \"3.9\"", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\"", "pytest-perf (>=0.9.2)", "pytest-ruff"] - -[[package]] -name = "importlib-resources" -version = "5.12.0" -description = "Read resources from Python packages" -optional = false -python-versions = ">=3.7" -groups = ["main"] -markers = "python_version < \"3.9\"" -files = [ - {file = "importlib_resources-5.12.0-py3-none-any.whl", hash = "sha256:7b1deeebbf351c7578e09bf2f63fa2ce8b5ffec296e0d349139d43cca061a81a"}, - {file = "importlib_resources-5.12.0.tar.gz", hash = "sha256:4be82589bf5c1d7999aedf2a45159d10cb3ca4f19b2271f8792bc8e6da7b22f6"}, -] - -[package.dependencies] -zipp = {version = ">=3.1.0", markers = "python_version < \"3.10\""} - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7) ; platform_python_implementation != \"PyPy\"", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8 ; python_version < \"3.12\"", "pytest-mypy (>=0.9.1) ; platform_python_implementation != \"PyPy\""] - [[package]] name = "iniconfig" version = "2.0.0" @@ -480,11 +434,7 @@ files = [ [package.dependencies] attrs = ">=17.4.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} -importlib-resources = {version = ">=1.4.0", markers = "python_version < \"3.9\""} -pkgutil-resolve-name = {version = ">=1.3.10", markers = "python_version < \"3.9\""} pyrsistent = ">=0.14.0,<0.17.0 || >0.17.0,<0.17.1 || >0.17.1,<0.17.2 || >0.17.2" -typing-extensions = {version = "*", markers = "python_version < \"3.8\""} [package.extras] format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] @@ -515,36 +465,35 @@ files = [ ] [[package]] -name = "pkgutil-resolve-name" -version = "1.3.10" -description = "Resolve a name to an object." +name = "pluggy" +version = "1.6.0" +description = "plugin and hook calling mechanisms for python" optional = false -python-versions = ">=3.6" -groups = ["main"] -markers = "python_version < \"3.9\"" +python-versions = ">=3.9" +groups = ["main", "dev"] files = [ - {file = "pkgutil_resolve_name-1.3.10-py3-none-any.whl", hash = "sha256:ca27cc078d25c5ad71a9de0a7a330146c4e014c2462d9af19c6b828280649c5e"}, - {file = "pkgutil_resolve_name-1.3.10.tar.gz", hash = "sha256:357d6c9e6a755653cfd78893817c0853af365dd51ec97f3d358a819373bbd174"}, + {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, + {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, ] +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["coverage", "pytest", "pytest-benchmark"] + [[package]] -name = "pluggy" -version = "1.2.0" -description = "plugin and hook calling mechanisms for python" +name = "pygments" +version = "2.20.0" +description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.7" +python-versions = ">=3.9" groups = ["main", "dev"] files = [ - {file = "pluggy-1.2.0-py3-none-any.whl", hash = "sha256:c2fd55a7d7a3863cba1a013e4e2414658b1d07b6bc57b3919e0c63c9abb99849"}, - {file = "pluggy-1.2.0.tar.gz", hash = "sha256:d12f0c4b579b15f5e054301bb226ee85eeeba08ffec228092f8defbaa3a4c4b3"}, + {file = "pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176"}, + {file = "pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f"}, ] -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - [package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pyparsing" @@ -600,27 +549,27 @@ files = [ [[package]] name = "pytest" -version = "7.4.4" +version = "9.1.1" description = "pytest: simple powerful testing with Python" optional = false -python-versions = ">=3.7" +python-versions = ">=3.10" groups = ["main", "dev"] files = [ - {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, - {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, + {file = "pytest-9.1.1-py3-none-any.whl", hash = "sha256:37a86b45efb9a47a61a36449063e8e18d0cab3161329fc099eb21783169c4f0c"}, + {file = "pytest-9.1.1.tar.gz", hash = "sha256:1088fbde8f2b49d95a549a195707afa7a76a3ce9bcadc26b6d71f0ffda5fe313"}, ] [package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} +colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""} +iniconfig = ">=1.0.1" +packaging = ">=22" +pluggy = ">=1.5,<2" +pygments = ">=2.7.2" +tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] [[package]] name = "pytest-cov" @@ -815,7 +764,7 @@ files = [ {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, ] -markers = {main = "python_version < \"3.11\"", dev = "python_full_version <= \"3.11.0a6\""} +markers = {main = "python_version == \"3.10\"", dev = "python_full_version <= \"3.11.0a6\""} [[package]] name = "typing-extensions" @@ -824,7 +773,7 @@ description = "Backported and Experimental Type Hints for Python 3.7+" optional = false python-versions = ">=3.7" groups = ["main", "dev"] -markers = "python_version < \"3.11\"" +markers = "python_version == \"3.10\"" files = [ {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, @@ -832,20 +781,21 @@ files = [ [[package]] name = "urllib3" -version = "1.26.20" +version = "2.7.0" description = "HTTP library with thread-safe connection pooling, file post, and more." optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" +python-versions = ">=3.10" groups = ["main", "dev"] files = [ - {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, - {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, + {file = "urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897"}, + {file = "urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c"}, ] [package.extras] -brotli = ["brotli (==1.0.9) ; os_name != \"nt\" and python_version < \"3\" and platform_python_implementation == \"CPython\"", "brotli (>=1.0.9) ; python_version >= \"3\" and platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; (os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\"", "brotlipy (>=0.6.0) ; os_name == \"nt\" and python_version < \"3\""] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress ; python_version == \"2.7\"", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] [[package]] name = "xmlschema" @@ -885,7 +835,7 @@ version = "3.15.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false python-versions = ">=3.7" -groups = ["main", "dev"] +groups = ["main"] files = [ {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, @@ -897,5 +847,5 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.1" -python-versions = "^3.7" -content-hash = "263dbb8509dcbf025d2714a2c9ab79020918b476a6775aa4967dc118ebaac2d1" +python-versions = ">=3.10,<4.0" +content-hash = "85e54ec0a4ebce4bf02df99f5877fd12fba0ba0d6380896180531e7a4f053ff3" diff --git a/pyproject.toml b/pyproject.toml index c0a2463b9..785da27f9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,8 +33,8 @@ classifiers = [ include = ["pytest_splunk_addon/**/*.json", "pytest_splunk_addon/**/*.txt"] [tool.poetry.dependencies] -python = "^3.7" -pytest = ">5.4.0,<8" +python = ">=3.10,<4.0" +pytest = ">=9.0.3,<10" splunk-sdk = ">=1.6" requests = "^2.31.0" jsonschema = "^4.17.3" @@ -48,7 +48,7 @@ Faker = "^18.12.0" xmltodict = "^0.14.0" xmlschema = "^2.5.1" splunksplwrapper = "^1.1.1" -urllib3 = "<2" +urllib3 = ">=2.5.0,<3" certifi = ">=2024.7.4" zipp = "^3.6.0" From 837a510a4fb01d2b6de47e72788b3ef6b3d72271 Mon Sep 17 00:00:00 2001 From: Rasmi Teja Date: Mon, 10 Aug 2026 18:07:14 +0530 Subject: [PATCH 03/11] fix: require Python 3.13 --- poetry.lock | 54 ++------------------------------------------------ pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 53 deletions(-) diff --git a/poetry.lock b/poetry.lock index 468a77f37..e5877f467 100644 --- a/poetry.lock +++ b/poetry.lock @@ -250,9 +250,6 @@ files = [ {file = "coverage-7.2.7.tar.gz", hash = "sha256:924d94291ca674905fe9481f12294eb11f2d3d3fd1adb20314ba89e94f44ed59"}, ] -[package.dependencies] -tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} - [package.extras] toml = ["tomli ; python_full_version <= \"3.11.0a6\""] @@ -298,25 +295,6 @@ files = [ [package.extras] dev = ["Sphinx", "coverage", "flake8", "lxml", "lxml-stubs", "memory-profiler", "memray", "mypy", "tox", "xmlschema (>=2.0.0)"] -[[package]] -name = "exceptiongroup" -version = "1.3.1" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -groups = ["main", "dev"] -markers = "python_version == \"3.10\"" -files = [ - {file = "exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598"}, - {file = "exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} - -[package.extras] -test = ["pytest (>=6)"] - [[package]] name = "execnet" version = "2.0.2" @@ -561,12 +539,10 @@ files = [ [package.dependencies] colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1", markers = "python_version < \"3.11\""} iniconfig = ">=1.0.1" packaging = ">=22" pluggy = ">=1.5,<2" pygments = ">=2.7.2" -tomli = {version = ">=1", markers = "python_version < \"3.11\""} [package.extras] dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "requests", "setuptools", "xmlschema"] @@ -753,32 +729,6 @@ defusedxml = ">=0.7.1,<0.8.0" httplib2 = ">=0.20.0" splunk-sdk = ">=1.6.20" -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -groups = ["main", "dev"] -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] -markers = {main = "python_version == \"3.10\"", dev = "python_full_version <= \"3.11.0a6\""} - -[[package]] -name = "typing-extensions" -version = "4.7.1" -description = "Backported and Experimental Type Hints for Python 3.7+" -optional = false -python-versions = ">=3.7" -groups = ["main", "dev"] -markers = "python_version == \"3.10\"" -files = [ - {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, - {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, -] - [[package]] name = "urllib3" version = "2.7.0" @@ -847,5 +797,5 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.1" -python-versions = ">=3.10,<4.0" -content-hash = "85e54ec0a4ebce4bf02df99f5877fd12fba0ba0d6380896180531e7a4f053ff3" +python-versions = ">=3.13,<3.14" +content-hash = "cc8e0abe3f80c10321f04af91425b83e80def0ca60b55c952c6dadc715330bd0" diff --git a/pyproject.toml b/pyproject.toml index 785da27f9..04f19f82b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -33,7 +33,7 @@ classifiers = [ include = ["pytest_splunk_addon/**/*.json", "pytest_splunk_addon/**/*.txt"] [tool.poetry.dependencies] -python = ">=3.10,<4.0" +python = ">=3.13,<3.14" pytest = ">=9.0.3,<10" splunk-sdk = ">=1.6" requests = "^2.31.0" From 3cf2e33983182dec648e6a82bbcbac58d79e9cf1 Mon Sep 17 00:00:00 2001 From: Rasmi Teja Date: Tue, 11 Aug 2026 09:35:21 +0530 Subject: [PATCH 04/11] ci: run PSA workflows on Python 3.13 --- .github/workflows/build-test-release.yml | 35 +++--------------------- 1 file changed, 4 insertions(+), 31 deletions(-) diff --git a/.github/workflows/build-test-release.yml b/.github/workflows/build-test-release.yml index 33b6329ea..472e1e1b9 100644 --- a/.github/workflows/build-test-release.yml +++ b/.github/workflows/build-test-release.yml @@ -58,7 +58,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: - python-version: "3.12" + python-version: "3.13" - uses: pre-commit/action@v3.0.1 semgrep: @@ -90,33 +90,6 @@ jobs: poetry install poetry run pytest -v tests/unit - test-splunk-unit-python-313: - # Keep this advisory while Python 3.13 compatibility is being established. - continue-on-error: true - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - uses: actions/setup-python@v5 - with: - python-version: "3.13" - - name: Generate GitHub App Token - id: app-token - uses: actions/create-github-app-token@v3 - with: - client-id: ${{ secrets.GH_APP_CLIENT_ID }} - private-key: ${{ secrets.GH_APP_PRIVATE_KEY }} - owner: ${{ github.repository_owner }} - - name: Install dependencies and run unit tests - run: | - git config --global --add url."https://x-access-token:${{ steps.app-token.outputs.token }}@github.com".insteadOf https://github.com - git config --global --add url."https://x-access-token:${{ steps.app-token.outputs.token }}@github.com".insteadOf ssh://git@github.com - curl -sSL https://install.python-poetry.org | python3 - --version 1.5.1 - poetry install - poetry run pytest -v tests/unit - - test-splunk-external: runs-on: ubuntu-22.04 needs: @@ -211,7 +184,7 @@ jobs: owner: ${{ github.repository_owner }} - uses: actions/setup-python@v5 with: - python-version: 3.7 + python-version: "3.13" - run: | git config --global --add url."https://x-access-token:${{ steps.app-token.outputs.token }}@github.com".insteadOf https://github.com git config --global --add url."https://x-access-token:${{ steps.app-token.outputs.token }}@github.com".insteadOf ssh://git@github.com @@ -273,7 +246,7 @@ jobs: owner: ${{ github.repository_owner }} - uses: actions/setup-python@v5 with: - python-version: "3.7" + python-version: "3.13" - name: Install PSA with CIM models ${{ matrix.cim-models.label }} env: GH_TOKEN: ${{ steps.app-token.outputs.token }} @@ -336,7 +309,7 @@ jobs: owner: ${{ github.repository_owner }} - uses: actions/setup-python@v5 with: - python-version: "3.7" + python-version: "3.13" - uses: actions/download-artifact@v4 with: name: THIRDPARTY From 33f14babec8183a09851516f52d6a258fbca8423 Mon Sep 17 00:00:00 2001 From: Rasmi Teja Date: Tue, 11 Aug 2026 09:43:22 +0530 Subject: [PATCH 05/11] fix: run unit job on Python 3.13 --- .github/workflows/build-test-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build-test-release.yml b/.github/workflows/build-test-release.yml index 472e1e1b9..ad1afe94f 100644 --- a/.github/workflows/build-test-release.yml +++ b/.github/workflows/build-test-release.yml @@ -74,7 +74,7 @@ jobs: submodules: true - uses: actions/setup-python@v5 with: - python-version: "3.12" + python-version: "3.13" - name: Generate GitHub App Token id: app-token uses: actions/create-github-app-token@v3 From 4bf7bd45f46af78fbf901796dea4791cfe59f51d Mon Sep 17 00:00:00 2001 From: Rasmi Teja Date: Tue, 11 Aug 2026 09:53:59 +0530 Subject: [PATCH 06/11] fix: run external test container on Python 3.13 --- entrypoint.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/entrypoint.sh b/entrypoint.sh index 5efa88839..cbd27c461 100755 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -4,8 +4,8 @@ cd /work curl https://pyenv.run | bash export PATH="~/.pyenv/bin:$PATH" eval "$(pyenv init -)" -pyenv install 3.7.8 -pyenv local 3.7.8 +pyenv install 3.13.0 +pyenv local 3.13.0 curl -sSL https://install.python-poetry.org | python - --version 1.5.1 export PATH="/root/.local/bin:$PATH" source ~/.poetry/env From e02c2512929da49d321a085f8abff8453d447dd8 Mon Sep 17 00:00:00 2001 From: Rasmi Teja Date: Tue, 11 Aug 2026 10:19:46 +0530 Subject: [PATCH 07/11] test: tolerate pytest 9 empty parameter IDs --- tests/e2e/constants.py | 68 +++++++++++++++++++++--------------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/tests/e2e/constants.py b/tests/e2e/constants.py index 5f3eff38b..62b567153 100644 --- a/tests/e2e/constants.py +++ b/tests/e2e/constants.py @@ -248,8 +248,8 @@ ] TA_FICTION_SKIPPED = [ - "*test_splunk_app_fiction.py::Test_App::test_requirements_fields[splunk_searchtime_fields_requirements0* SKIPPED*", - "*test_splunk_app_fiction.py::Test_App::test_datamodels[splunk_searchtime_fields_datamodels0* SKIPPED*", + "*test_splunk_app_fiction.py::Test_App::test_requirements_fields[* SKIPPED*", + "*test_splunk_app_fiction.py::Test_App::test_datamodels[* SKIPPED*", ] """ @@ -390,8 +390,8 @@ ] TA_BROKEN_SKIPPED = [ - "*test_splunk_app_broken.py::Test_App::test_requirements_fields[splunk_searchtime_fields_requirements0* SKIPPED*", - "*test_splunk_app_broken.py::Test_App::test_datamodels[splunk_searchtime_fields_datamodels0* SKIPPED*", + "*test_splunk_app_broken.py::Test_App::test_requirements_fields[* SKIPPED*", + "*test_splunk_app_broken.py::Test_App::test_datamodels[* SKIPPED*", ] """ @@ -430,7 +430,7 @@ ] TA_CIM_FICTION_SKIPPED = [ - "*test_splunk_app_cim_fiction.py::Test_App::test_cim_fields_recommended[splunk_searchtime_cim_fields_recommended0* SKIPPED*" + "*test_splunk_app_cim_fiction.py::Test_App::test_cim_fields_recommended[* SKIPPED*" ] """ @@ -479,7 +479,7 @@ ] TA_CIM_BROKEN_SKIPPED = [ - "*test_splunk_app_cim_broken.py::Test_App::test_cim_fields_recommended[splunk_searchtime_cim_fields_recommended0* SKIPPED*" + "*test_splunk_app_cim_broken.py::Test_App::test_cim_fields_recommended[* SKIPPED*" ] """ @@ -669,14 +669,14 @@ Define the TA_fiction_indextime add-on skipped test case list. """ TA_FICTION_INDEXTIME_SKIPPED = [ - "*test_splunk_fiction_indextime.py::Test_App::test_cim_required_fields*splunk_searchtime_cim_fields0* SKIPPED*", - "*test_splunk_fiction_indextime.py::Test_App::test_cim_fields_not_allowed_in_search*splunk_searchtime_cim_fields_not_allowed_in_search0* SKIPPED*", - "*test_splunk_fiction_indextime.py::Test_App::test_tags*splunk_searchtime_fields_tags0* SKIPPED*", - "*test_splunk_fiction_indextime.py::Test_App::test_eventtype*splunk_searchtime_fields_eventtypes0* SKIPPED*", - "*test_splunk_fiction_indextime.py::Test_App::test_savedsearches*splunk_searchtime_fields_savedsearches0* SKIPPED*", - "*test_splunk_fiction_indextime.py::Test_App::test_datamodels[splunk_searchtime_fields_datamodels0* SKIPPED*", - "*test_splunk_fiction_indextime.py::Test_App::test_cim_fields_recommended[splunk_searchtime_cim_fields_recommended0* SKIPPED*", - "*test_splunk_fiction_indextime.py::Test_App::test_requirements_fields[splunk_searchtime_fields_requirements0* SKIPPED*", + "*test_splunk_fiction_indextime.py::Test_App::test_cim_required_fields* SKIPPED*", + "*test_splunk_fiction_indextime.py::Test_App::test_cim_fields_not_allowed_in_search* SKIPPED*", + "*test_splunk_fiction_indextime.py::Test_App::test_tags* SKIPPED*", + "*test_splunk_fiction_indextime.py::Test_App::test_eventtype* SKIPPED*", + "*test_splunk_fiction_indextime.py::Test_App::test_savedsearches* SKIPPED*", + "*test_splunk_fiction_indextime.py::Test_App::test_datamodels[* SKIPPED*", + "*test_splunk_fiction_indextime.py::Test_App::test_cim_fields_recommended[* SKIPPED*", + "*test_splunk_fiction_indextime.py::Test_App::test_requirements_fields[* SKIPPED*", ] """ @@ -760,16 +760,16 @@ Define the TA_fiction_indextime_broken add-on skipped test case list. """ TA_FICTION_INDEXTIME_BROKEN_SKIPPED = [ - "*test_splunk_fiction_indextime_broken.py::Test_App::test_cim_required_fields*splunk_searchtime_cim_fields0* SKIPPED*", - "*test_splunk_fiction_indextime_broken.py::Test_App::test_cim_fields_not_allowed_in_search*splunk_searchtime_cim_fields_not_allowed_in_search0* SKIPPED*", - "*test_splunk_fiction_indextime_broken.py::Test_App::test_props_fields*splunk_searchtime_fields_positive0* SKIPPED*", - "*test_splunk_fiction_indextime_broken.py::Test_App::test_props_fields_no_dash_not_empty*splunk_searchtime_fields_negative0* SKIPPED*", - "*test_splunk_fiction_indextime_broken.py::Test_App::test_tags*splunk_searchtime_fields_tags0* SKIPPED*", - "*test_splunk_fiction_indextime_broken.py::Test_App::test_eventtype*splunk_searchtime_fields_eventtypes0* SKIPPED*", - "*test_splunk_fiction_indextime_broken.py::Test_App::test_savedsearches*splunk_searchtime_fields_savedsearches0* SKIPPED*", - "*test_splunk_fiction_indextime_broken.py::Test_App::test_datamodels[splunk_searchtime_fields_datamodels0* SKIPPED*", - "*test_splunk_fiction_indextime_broken.py::Test_App::test_requirements_fields[splunk_searchtime_fields_requirements0* SKIPPED*", - "*test_splunk_fiction_indextime_broken.py::Test_App::test_cim_fields_recommended[splunk_searchtime_cim_fields_recommended0* SKIPPED*", + "*test_splunk_fiction_indextime_broken.py::Test_App::test_cim_required_fields* SKIPPED*", + "*test_splunk_fiction_indextime_broken.py::Test_App::test_cim_fields_not_allowed_in_search* SKIPPED*", + "*test_splunk_fiction_indextime_broken.py::Test_App::test_props_fields* SKIPPED*", + "*test_splunk_fiction_indextime_broken.py::Test_App::test_props_fields_no_dash_not_empty* SKIPPED*", + "*test_splunk_fiction_indextime_broken.py::Test_App::test_tags* SKIPPED*", + "*test_splunk_fiction_indextime_broken.py::Test_App::test_eventtype* SKIPPED*", + "*test_splunk_fiction_indextime_broken.py::Test_App::test_savedsearches* SKIPPED*", + "*test_splunk_fiction_indextime_broken.py::Test_App::test_datamodels[* SKIPPED*", + "*test_splunk_fiction_indextime_broken.py::Test_App::test_requirements_fields[* SKIPPED*", + "*test_splunk_fiction_indextime_broken.py::Test_App::test_cim_fields_recommended[* SKIPPED*", ] TA_REQ_TRANSITION_PASSED = [ "*test_splunk_app_req.py::Test_App::test_events_with_untokenised_values PASSED*", @@ -829,8 +829,8 @@ ] TA_REQ_TRANSITION_SKIPPED = [ - "*test_splunk_app_req.py::Test_App::test_savedsearches[splunk_searchtime_fields_savedsearches0* SKIPPED*", - "*test_splunk_app_req.py::Test_App::test_indextime_key_fields[splunk_indextime_key_fields0* SKIPPED*", + "*test_splunk_app_req.py::Test_App::test_savedsearches[* SKIPPED*", + "*test_splunk_app_req.py::Test_App::test_indextime_key_fields[* SKIPPED*", ] TA_REQ_TRANSITION_FAILED = [] @@ -935,10 +935,10 @@ Define the TA_broken add-on skipped test case list. """ TA_REQ_BROKEN_SKIPPED = [ - "*test_splunk_app_req_broken.py::Test_App::test_indextime_key_fields[splunk_indextime_key_fields0* SKIPPED*", - "*test_splunk_app_req_broken.py::Test_App::test_props_fields[splunk_searchtime_fields_positive0* SKIPPED*", - "*test_splunk_app_req_broken.py::Test_App::test_props_fields_no_dash_not_empty[splunk_searchtime_fields_negative0* SKIPPED*", - "*test_splunk_app_req_broken.py::Test_App::test_savedsearches[splunk_searchtime_fields_savedsearches0* SKIPPED*", + "*test_splunk_app_req_broken.py::Test_App::test_indextime_key_fields[* SKIPPED*", + "*test_splunk_app_req_broken.py::Test_App::test_props_fields[* SKIPPED*", + "*test_splunk_app_req_broken.py::Test_App::test_props_fields_no_dash_not_empty[* SKIPPED*", + "*test_splunk_app_req_broken.py::Test_App::test_savedsearches[* SKIPPED*", ] """ @@ -1290,8 +1290,8 @@ ] TA_FICTION_EP_SKIPPED = [ - "*test_splunk_app_fiction_with_ep.py::Test_App::test_requirements_fields[splunk_searchtime_fields_requirements0* SKIPPED*", - "*test_splunk_app_fiction_with_ep.py::Test_App::test_datamodels[splunk_searchtime_fields_datamodels0* SKIPPED*", + "*test_splunk_app_fiction_with_ep.py::Test_App::test_requirements_fields[* SKIPPED*", + "*test_splunk_app_fiction_with_ep.py::Test_App::test_datamodels[* SKIPPED*", ] TA_REQ_EP_TRANSITION_PASSED = [ @@ -1352,8 +1352,8 @@ ] TA_REQ_EP_TRANSITION_SKIPPED = [ - "*test_splunk_app_req_with_ep.py::Test_App::test_savedsearches[splunk_searchtime_fields_savedsearches0* SKIPPED*", - "*test_splunk_app_req_with_ep.py::Test_App::test_indextime_key_fields[splunk_indextime_key_fields0* SKIPPED*", + "*test_splunk_app_req_with_ep.py::Test_App::test_savedsearches[* SKIPPED*", + "*test_splunk_app_req_with_ep.py::Test_App::test_indextime_key_fields[* SKIPPED*", ] TA_REQ_EP_TRANSITION_FAILED = [] From caf0a6eac5243cf36d368d36f1422edf9a1a2c1f Mon Sep 17 00:00:00 2001 From: Rasmi Teja Date: Tue, 11 Aug 2026 10:41:34 +0530 Subject: [PATCH 08/11] test: update CIM E2E IDs for pytest 9 --- tests/e2e/constants.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/e2e/constants.py b/tests/e2e/constants.py index 62b567153..0d8273432 100644 --- a/tests/e2e/constants.py +++ b/tests/e2e/constants.py @@ -1008,8 +1008,8 @@ '*test_splunk_cim_model.py::Test_App::test_cim_fields_not_allowed_in_search[eventtype="test_ipv6"::All_Traffic* PASSED*', "*test_splunk_cim_model.py::Test_App::test_cim_fields_not_allowed_in_props[searchtime_cim_fields* PASSED*", "*test_splunk_cim_model.py::Test_App::test_eventtype_mapped_multiple_cim_datamodel[mapped_datamodel_tests* PASSED*", - "*test_splunk_cim_model.py::Test_App::test_cim_fields_recommended[Change-::sample_name::test_change.xml::host::so10* PASSED*", - "*test_splunk_cim_model.py::Test_App::test_cim_fields_recommended[Change-::sample_name::test_change.xml::host::so11* PASSED*", + "*test_splunk_cim_model.py::Test_App::test_cim_fields_recommended[Change-::sample_name::test_change.xml::host::so1_0* PASSED*", + "*test_splunk_cim_model.py::Test_App::test_cim_fields_recommended[Change-::sample_name::test_change.xml::host::so1_1* PASSED*", "*test_splunk_cim_model.py::Test_App::test_cim_fields_recommended[Change-Account_Management::sample_name::test_change.xml::host::so1* PASSED*", ] From 25a5fc6476ffd527b0f985a9113b7e7a4b2cc2d2 Mon Sep 17 00:00:00 2001 From: Rasmi Teja Date: Tue, 11 Aug 2026 11:05:32 +0530 Subject: [PATCH 09/11] test: update broken TA E2E IDs for pytest 9 --- tests/e2e/constants.py | 56 +++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/tests/e2e/constants.py b/tests/e2e/constants.py index 0d8273432..8252b9d96 100644 --- a/tests/e2e/constants.py +++ b/tests/e2e/constants.py @@ -840,13 +840,13 @@ """ TA_REQ_BROKEN_PASSED = [ "*test_splunk_app_req_broken.py::Test_App::test_events_with_untokenised_values PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[juniper:junos:firewall::10.0.0.30* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[juniper:junos:firewall::10.0.0.31* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[req:test:broken::so10* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[req:test:broken::so11* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[req:test:broken::so12* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[req:test:broken::so13* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[req:test:broken::so14* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[juniper:junos:firewall::10.0.0.3_0* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[juniper:junos:firewall::10.0.0.3_1* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[req:test:broken::so1_0* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[req:test:broken::so1_1* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[req:test:broken::so1_2* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[req:test:broken::so1_3* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_indextime_time[req:test:broken::so1_4* PASSED*", "*test_splunk_app_req_broken.py::Test_App::test_indextime_line_breaker[juniper:junos:firewall::syslog.xml* PASSED*", "*test_splunk_app_req_broken.py::Test_App::test_indextime_line_breaker[req:test:broken::sample_modinput.xml* PASSED*", '*test_splunk_app_req_broken.py::Test_App::test_cim_required_fields[eventtype="net"::All_Traffic* PASSED*', @@ -887,27 +887,27 @@ '*test_splunk_app_req_broken.py::Test_App::test_cim_fields_not_allowed_in_search[eventtype="test_auth"::Authentication* PASSED*', "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_not_allowed_in_props[searchtime_cim_fields* PASSED*", "*test_splunk_app_req_broken.py::Test_App::test_eventtype_mapped_multiple_cim_datamodel[mapped_datamodel_tests* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Authentication-::sample_name::sample_modinput.xml::host::so10* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Authentication-::sample_name::sample_modinput.xml::host::so12* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Authentication-::sample_name::sample_modinput.xml::host::so13* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Authentication-::sample_name::sample_modinput.xml::host::so14* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Network_Traffic-::sample_name::syslog.xml::host::10.0.0.30* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Network_Traffic-::sample_name::syslog.xml::host::10.0.0.31* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Authentication-::sample_name::sample_modinput.xml::host::so1_0* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Authentication-::sample_name::sample_modinput.xml::host::so1_2* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Authentication-::sample_name::sample_modinput.xml::host::so1_3* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Authentication-::sample_name::sample_modinput.xml::host::so1_4* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Network_Traffic-::sample_name::syslog.xml::host::10.0.0.3_0* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Network_Traffic-::sample_name::syslog.xml::host::10.0.0.3_1* PASSED*", "*test_splunk_app_req_broken.py::Test_App::test_splunk_internal_errors PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::sample_modinput.xml::host::so10* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::sample_modinput.xml::host::so11* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::sample_modinput.xml::host::so12* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::syslog.xml::host::10.0.0.30* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::syslog.xml::host::10.0.0.31* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::sample_modinput.xml::host::so1_0* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::sample_modinput.xml::host::so1_1* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::sample_modinput.xml::host::so1_2* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::syslog.xml::host::10.0.0.3_0* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::syslog.xml::host::10.0.0.3_1* PASSED*", '*test_splunk_app_req_broken.py::Test_App::test_tags[eventtype="net"::tag::communicate* PASSED*', '*test_splunk_app_req_broken.py::Test_App::test_tags[eventtype="net"::tag::network* PASSED*', '*test_splunk_app_req_broken.py::Test_App::test_tags[eventtype="test_auth"::tag::authentication* PASSED*', - "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Authentication::sample_name::sample_modinput.xml::host::so10* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Authentication::sample_name::sample_modinput.xml::host::so11* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Authentication::sample_name::sample_modinput.xml::host::so12* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Authentication::sample_name::sample_modinput.xml::host::so13* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Authentication::sample_name::sample_modinput.xml::host::so14* PASSED*", - "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Network_Traffic::sample_name::syslog.xml::host::10.0.0.30* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Authentication::sample_name::sample_modinput.xml::host::so1_0* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Authentication::sample_name::sample_modinput.xml::host::so1_1* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Authentication::sample_name::sample_modinput.xml::host::so1_2* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Authentication::sample_name::sample_modinput.xml::host::so1_3* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Authentication::sample_name::sample_modinput.xml::host::so1_4* PASSED*", + "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Network_Traffic::sample_name::syslog.xml::host::10.0.0.3_0* PASSED*", "*test_splunk_app_req_broken.py::Test_App::test_eventtype[eventtype::net* PASSED*", "*test_splunk_app_req_broken.py::Test_App::test_eventtype[eventtype::test_auth* PASSED*", ] @@ -925,10 +925,10 @@ '*test_splunk_app_req_broken.py::Test_App::test_cim_required_fields[eventtype="net"::All_Traffic::transport* FAILED*', '*test_splunk_app_req_broken.py::Test_App::test_cim_required_fields[eventtype="net"::Blocked_Traffic* FAILED*', '*test_splunk_app_req_broken.py::Test_App::test_cim_required_fields[eventtype="net"::All_Traffic::vendor_product* FAILED*', - "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::sample_modinput.xml::host::so13* FAILED*", - "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::sample_modinput.xml::host::so14* FAILED*", - "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Authentication-::sample_name::sample_modinput.xml::host::so11* FAILED*", - "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Network_Traffic::sample_name::syslog.xml::host::10.0.0.31* FAILED*", + "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::sample_modinput.xml::host::so1_3* FAILED*", + "*test_splunk_app_req_broken.py::Test_App::test_requirements_fields[sample_name::sample_modinput.xml::host::so1_4* FAILED*", + "*test_splunk_app_req_broken.py::Test_App::test_cim_fields_recommended[Authentication-::sample_name::sample_modinput.xml::host::so1_1* FAILED*", + "*test_splunk_app_req_broken.py::Test_App::test_datamodels[Network_Traffic::sample_name::syslog.xml::host::10.0.0.3_1* FAILED*", ] """ From 95e5d72ce835c8d802c6f175ed0512afa3693482 Mon Sep 17 00:00:00 2001 From: Rasmi Teja Date: Thu, 13 Aug 2026 12:02:50 +0530 Subject: [PATCH 10/11] fix: remediate PSA dependency vulnerabilities --- poetry.lock | 40 ++++++++++++++++++---------------------- pyproject.toml | 4 ++-- 2 files changed, 20 insertions(+), 24 deletions(-) diff --git a/poetry.lock b/poetry.lock index e5877f467..0ffbadc8f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -327,20 +327,16 @@ python-dateutil = ">=2.4" [[package]] name = "filelock" -version = "3.12.2" +version = "3.32.2" description = "A platform independent file lock." optional = false -python-versions = ">=3.7" +python-versions = ">=3.10" groups = ["main"] files = [ - {file = "filelock-3.12.2-py3-none-any.whl", hash = "sha256:cbb791cdea2a72f23da6ac5b5269ab0a0d161e9ef0100e653b69049a7706d1ec"}, - {file = "filelock-3.12.2.tar.gz", hash = "sha256:002740518d8aa59a26b0c76e10fb8c6e15eae825d34b6fdf670333fd7b938d81"}, + {file = "filelock-3.32.2-py3-none-any.whl", hash = "sha256:87dd94cf281e586d135fa51132b8e3d9a598b316e90377a288663c9321036c82"}, + {file = "filelock-3.32.2.tar.gz", hash = "sha256:c33351e1f49cae33414acbc6d56784e6ecee82514ec90795da1161fc4836b5b8"}, ] -[package.extras] -docs = ["furo (>=2023.5.20)", "sphinx (>=7.0.1)", "sphinx-autodoc-typehints (>=1.23,!=1.23.4)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "pytest (>=7.3.1)", "pytest-cov (>=4.1)", "pytest-mock (>=3.10)", "pytest-timeout (>=2.1)"] - [[package]] name = "freezegun" version = "1.5.1" @@ -373,18 +369,18 @@ pyparsing = ">=3.1,<4" [[package]] name = "idna" -version = "3.10" +version = "3.18" description = "Internationalized Domain Names in Applications (IDNA)" optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" groups = ["main", "dev"] files = [ - {file = "idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3"}, - {file = "idna-3.10.tar.gz", hash = "sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9"}, + {file = "idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2"}, + {file = "idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848"}, ] [package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] +all = ["mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] [[package]] name = "iniconfig" @@ -632,25 +628,25 @@ files = [ [[package]] name = "requests" -version = "2.31.0" +version = "2.34.2" description = "Python HTTP for Humans." optional = false -python-versions = ">=3.7" +python-versions = ">=3.10" groups = ["main", "dev"] files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, + {file = "requests-2.34.2-py3-none-any.whl", hash = "sha256:2a0d60c172f83ac6ab31e4554906c0f3b3588d37b5cb939b1c061f4907e278e0"}, + {file = "requests-2.34.2.tar.gz", hash = "sha256:f288924cae4e29463698d6d60bc6a4da69c89185ad1e0bcc4104f584e960b9ed"}, ] [package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" +certifi = ">=2023.5.7" +charset_normalizer = ">=2,<4" idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" +urllib3 = ">=1.26,<3" [package.extras] socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<8)"] [[package]] name = "requests-mock" @@ -798,4 +794,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more [metadata] lock-version = "2.1" python-versions = ">=3.13,<3.14" -content-hash = "cc8e0abe3f80c10321f04af91425b83e80def0ca60b55c952c6dadc715330bd0" +content-hash = "f46015a8497218b6527a432fcf71f90bc92b65827b165052d74ad73650809fa5" diff --git a/pyproject.toml b/pyproject.toml index 04f19f82b..0f4bedce6 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -36,10 +36,10 @@ include = ["pytest_splunk_addon/**/*.json", "pytest_splunk_addon/**/*.txt"] python = ">=3.13,<3.14" pytest = ">=9.0.3,<10" splunk-sdk = ">=1.6" -requests = "^2.31.0" +requests = ">=2.33.0,<3" jsonschema = "^4.17.3" pytest-xdist = "^3.5.0" -filelock = "^3.0" +filelock = ">=3.20.3,<4" pytest-ordering = "~0.6" junitparser = "^4.0.0" addonfactory-splunk-conf-parser-lib = "*" From 8e0ef433227708fb9ba232f528567568ab22ea0e Mon Sep 17 00:00:00 2001 From: Rasmi Teja Date: Thu, 13 Aug 2026 12:11:30 +0530 Subject: [PATCH 11/11] docs: align Python support with package metadata --- docs/index.md | 2 +- docs/troubleshoot.md | 2 +- pyproject.toml | 1 - 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/docs/index.md b/docs/index.md index f78ea188e..cf74cba89 100644 --- a/docs/index.md +++ b/docs/index.md @@ -12,7 +12,7 @@ which allows the user to test [knowledge objects](https://docs.splunk.com/Splexi ## Support -- **Python**: 3.7 +- **Python**: 3.13 - **Platforms**: Linux, Windows and MacOS ## Installation diff --git a/docs/troubleshoot.md b/docs/troubleshoot.md index 68b515003..6d57ad355 100644 --- a/docs/troubleshoot.md +++ b/docs/troubleshoot.md @@ -21,7 +21,7 @@ substitutions: **4. Getting Couldn't find a version that satisfies the requirement when installing pytest-splunk-addon using pip.** - - Use `pip3 install pytest-splunk-addon` and make sure you are using python 3.7 + - Use `python3.13 -m pip install pytest-splunk-addon` and make sure you are using Python 3.13. **5. While executing test cases on Docker, all the test cases abort with the following setup failure:** diff --git a/pyproject.toml b/pyproject.toml index 0f4bedce6..664397d11 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,6 @@ classifiers = [ "Intended Audience :: Developers", "Topic :: Software Development :: Testing", "Programming Language :: Python", - "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.13", "Operating System :: OS Independent", "License :: OSI Approved :: Apache Software License",