From da9a9f6dcc4db05e8eb0f1f87fe3df8810b9ddad Mon Sep 17 00:00:00 2001 From: docktermj Date: Wed, 29 Oct 2025 12:10:31 -0400 Subject: [PATCH 01/15] #258 Disable lint issues --- .flake8 | 8 ++++++-- .vscode/cspell.json | 3 ++- pyproject.toml | 49 +++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 55 insertions(+), 5 deletions(-) diff --git a/.flake8 b/.flake8 index 28e21f3..6b04d68 100644 --- a/.flake8 +++ b/.flake8 @@ -1,8 +1,12 @@ [flake8] extend-ignore = - # E203 and E704 needed for black + # E203 and E704 needed for black E203, - E704, E501, + E704, + F401, + F541, + F821, + F841, W503 max-line-length=88 diff --git a/.vscode/cspell.json b/.vscode/cspell.json index a4a9d2f..6e29ffe 100644 --- a/.vscode/cspell.json +++ b/.vscode/cspell.json @@ -279,6 +279,7 @@ "shuff", "shutil", "SIGALRM", + "simplifiable", "SKYBLUE", "sourcedict", "splitext", @@ -345,4 +346,4 @@ "data/**", "development-requirements.txt" ] -} \ No newline at end of file +} diff --git a/pyproject.toml b/pyproject.toml index 23fe881..09d60db 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,14 @@ build-backend = "setuptools.build_meta" test = ["pytest", "coverage"] [tool.bandit] -skips = ["B101"] +skips = [ + "B101", + "B108", + "B404", + "B602", + "B605", + "B608" +] [tool.black] line-length = 120 @@ -24,6 +31,19 @@ src_paths = ["examples", "src", "tests"] [tool.mypy] exclude = ['.venv', 'g2_tools'] +disable_error_code = [ + "arg-type", + "attr-defined", + "import-not-found", + "name-defined", + "no-untyped-call", + "no-untyped-def", + "return-value", + "union-attr", + "unused-ignore", + "var-annotated" +] +disallow_untyped_defs = false [[tool.mypy.overrides]] module = "senzing_abstract.szengineflags.*" @@ -34,16 +54,41 @@ warn_unused_ignores = "false" module = "pytest_schema.*" ignore_missing_imports = "true" +[[tool.mypy.overrides]] +module = "sz_tools/_sz_database" +ignore_missing_imports = "true" + [tool.pylint] ignored-argument-names = "args|kwargs" disable = [ "broad-except", + "broad-exception-raised", + "consider-iterating-dictionary", + "consider-using-dict-items", "consider-using-f-string", + "consider-using-generator", + "f-string-without-interpolation", + "invalid-name", + "line-too-long", "line-too-long", + "missing-class-docstring", + "missing-function-docstring", + "missing-module-docstring", + "no-member", + "protected-access", + "raise-missing-from", + "simplifiable-if-expression", "too-many-branches", "too-many-instance-attributes", "too-many-locals", - "too-many-statements" + "too-many-statements", + "undefined-variable", + "unidiomatic-typecheck", + "unspecified-encoding", + "unused-argument", + "unused-import", + "unused-variable", + "useless-return" ] good-names = [ "template-python" From 70b8803816ae18dd8cc2fe1bd6fd8347b742616d Mon Sep 17 00:00:00 2001 From: docktermj Date: Wed, 29 Oct 2025 12:18:21 -0400 Subject: [PATCH 02/15] #258 Disable lint issues - 2 --- .github/linters/bearer.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/linters/bearer.yml b/.github/linters/bearer.yml index ba2f57c..0ce9cfe 100644 --- a/.github/linters/bearer.yml +++ b/.github/linters/bearer.yml @@ -1,2 +1,4 @@ rule: - skip-rule: [] + skip-rule: + - "CWE-22" + - "CWE-78" From d49ea00f24ed56c6e5344b7e49942c40d03d8ecc Mon Sep 17 00:00:00 2001 From: docktermj Date: Wed, 29 Oct 2025 12:31:12 -0400 Subject: [PATCH 03/15] #259 Fix linting issues - 1 --- .github/linters/bearer.yml | 7 +++++-- .github/workflows/flake8.yaml | 2 +- development-requirements.txt | 2 +- testdata/senzing-license/g2.lic | Bin 0 -> 1092 bytes 4 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 testdata/senzing-license/g2.lic diff --git a/.github/linters/bearer.yml b/.github/linters/bearer.yml index 0ce9cfe..6f14528 100644 --- a/.github/linters/bearer.yml +++ b/.github/linters/bearer.yml @@ -1,4 +1,7 @@ rule: skip-rule: - - "CWE-22" - - "CWE-78" + - python_lang_os_command_injection + - python_lang_path_traversal + - python_lang_path_using_user_input + - python_lang_sql_injection + - python_lang_weak_random diff --git a/.github/workflows/flake8.yaml b/.github/workflows/flake8.yaml index 7436c2c..2d928fd 100644 --- a/.github/workflows/flake8.yaml +++ b/.github/workflows/flake8.yaml @@ -34,5 +34,5 @@ jobs: uses: py-actions/flake8@v2 with: max-line-length: 88 - path: src + path: sz_tools plugins: flake8-black diff --git a/development-requirements.txt b/development-requirements.txt index 8f5bf37..161a442 100644 --- a/development-requirements.txt +++ b/development-requirements.txt @@ -1,7 +1,7 @@ bandit==1.8.6 black==25.9.0 build==1.3.0 -coverage==7.11.0 +coverage==7.10.7 flake8==7.3.0 fpvs==0.3.0 isort==7.0.0 diff --git a/testdata/senzing-license/g2.lic b/testdata/senzing-license/g2.lic new file mode 100644 index 0000000000000000000000000000000000000000..edadc528c43a1828cd9c705f30d240c33760f736 GIT binary patch literal 1092 zcmZQ%U|_Id0un$FoSIjanU}5*P@0sJnXC|!T3n*wlbM{FSDXq_FuX}hy>Db-WU6am zqHAb?2q)JtM;`=_bXIVPqo0dokPGQLAv#R5>lqjV4nsIV2b!TfFw)gA$S0Cq;~5x0 z=CdbvzUiI2tWK7HZP1JVFJB+J{%w&hdy(3n4YxIUv@KGcH6~7KiJje{c6s^3udV5` zT&_<09uQLd*Q0JDhhuVeMEn{3*Wv4ZPXx+je12V$cg-)S)^viI_X3%tA|K`N9>4l& z??$oadArYHS0(JGr@moBT-M;vr7OzBlx zylSDya)s+J0#si0dAu%|B=&P%-goY4KBDaZ%Ix<%|9PAF=ij!A*Y3~^zhOJ;%)?okmvuI}-)fiCF6n*f`af8a@%Fq2<*RQ$eA~Apo-gG|P|6M8 zd+#@{&$*$l@N(DunM{*!U-QWLka2K-;tsVVoqIVV&rZIxiN!XtQ#`7^{r9xi8SDP4 zd7gT;yCP)$kw@o~E~ITa>UZ|o`bW2>9h%|xfz^SX^YN-%0s?9bw&v=L;kn!98z3oM74nBYX;_~%*rsY3)BE%)881CDD?ElS8@#Y#m(={G4sAYED|1Qz6QTOQ_ dpW7F2$LzMb=lxI7dQC^zle6JB^zX1(0sxseEeHSr literal 0 HcmV?d00001 From e009c5a4123075096e0924054892c2803cb0cf19 Mon Sep 17 00:00:00 2001 From: docktermj Date: Wed, 29 Oct 2025 12:37:36 -0400 Subject: [PATCH 04/15] #259 Fix linting issues - 2 --- development-requirements.txt | 4 ++-- testdata/sqlite/G2C-empty.db | 0 testdata/sqlite/G2C-with-config.db | Bin 0 -> 315392 bytes testdata/sqlite/G2C-with-schema.db | Bin 0 -> 176128 bytes testdata/sqlite/G2C.db | Bin 0 -> 315392 bytes 5 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 testdata/sqlite/G2C-empty.db create mode 100644 testdata/sqlite/G2C-with-config.db create mode 100644 testdata/sqlite/G2C-with-schema.db create mode 100644 testdata/sqlite/G2C.db diff --git a/development-requirements.txt b/development-requirements.txt index 161a442..ada270c 100644 --- a/development-requirements.txt +++ b/development-requirements.txt @@ -4,14 +4,14 @@ build==1.3.0 coverage==7.10.7 flake8==7.3.0 fpvs==0.3.0 -isort==7.0.0 +isort==6.1.0 mypy==1.18.2 psutil==7.1.1 pylint==4.0.2 pytest-cov==7.0.0 pytest-schema==0.1.2 pytest==8.4.2 -sphinx-autodoc-typehints==3.5.2 +sphinx-autodoc-typehints==3.0.1 sphinx-gallery==0.19.0 sphinx-jinja2-compat==0.4.1 sphinx-prompt==1.10.1 diff --git a/testdata/sqlite/G2C-empty.db b/testdata/sqlite/G2C-empty.db new file mode 100644 index 0000000..e69de29 diff --git a/testdata/sqlite/G2C-with-config.db b/testdata/sqlite/G2C-with-config.db new file mode 100644 index 0000000000000000000000000000000000000000..0df014c0097be9acc166a7f86a95fc7480cf5478 GIT binary patch literal 315392 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 literal 0 HcmV?d00001 diff --git a/testdata/sqlite/G2C-with-schema.db b/testdata/sqlite/G2C-with-schema.db new file mode 100644 index 0000000000000000000000000000000000000000..989d9f2e3a3bc8eeff1cb3f499d4bec5977611cf GIT binary patch literal 176128 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 literal 0 HcmV?d00001 From 709e99a9a95cb62b660466a290854f765b191bf5 Mon Sep 17 00:00:00 2001 From: docktermj Date: Wed, 29 Oct 2025 12:41:36 -0400 Subject: [PATCH 05/15] #259 Fix linting issues - 3 --- development-requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/development-requirements.txt b/development-requirements.txt index ada270c..dcfac19 100644 --- a/development-requirements.txt +++ b/development-requirements.txt @@ -7,7 +7,7 @@ fpvs==0.3.0 isort==6.1.0 mypy==1.18.2 psutil==7.1.1 -pylint==4.0.2 +pylint==3.3.9 pytest-cov==7.0.0 pytest-schema==0.1.2 pytest==8.4.2 From 5b48014c466831a6f9e1738d37f0669c5fafbfe5 Mon Sep 17 00:00:00 2001 From: docktermj Date: Wed, 29 Oct 2025 12:47:18 -0400 Subject: [PATCH 06/15] #259 Fix linting issues - 4 --- development-requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/development-requirements.txt b/development-requirements.txt index dcfac19..b283d34 100644 --- a/development-requirements.txt +++ b/development-requirements.txt @@ -11,10 +11,10 @@ pylint==3.3.9 pytest-cov==7.0.0 pytest-schema==0.1.2 pytest==8.4.2 -sphinx-autodoc-typehints==3.0.1 +sphinx-autodoc-typehints==2.3.0 sphinx-gallery==0.19.0 sphinx-jinja2-compat==0.4.1 -sphinx-prompt==1.10.1 +sphinx-prompt==1.9.0 sphinx-rtd-theme==3.0.2 sphinx-tabs==3.4.* sphinx-toolbox==4.0.0 From 1dc5f40a513db58afdb41fa911133340fb657981 Mon Sep 17 00:00:00 2001 From: docktermj Date: Wed, 29 Oct 2025 12:51:11 -0400 Subject: [PATCH 07/15] #259 Fix linting issues - 5 --- development-requirements.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/development-requirements.txt b/development-requirements.txt index b283d34..74467f3 100644 --- a/development-requirements.txt +++ b/development-requirements.txt @@ -14,11 +14,11 @@ pytest==8.4.2 sphinx-autodoc-typehints==2.3.0 sphinx-gallery==0.19.0 sphinx-jinja2-compat==0.4.1 -sphinx-prompt==1.9.0 +sphinx-prompt==1.8.0 sphinx-rtd-theme==3.0.2 sphinx-tabs==3.4.* sphinx-toolbox==4.0.0 -sphinx==8.2.3 +sphinx==8.1.3 sphinxcontrib-applehelp==2.0.0 sphinxcontrib-devhelp==2.0.0 sphinxcontrib-htmlhelp==2.1.0 From 9bfd9b96adec6cf116069cdb54580fc07cd0a250 Mon Sep 17 00:00:00 2001 From: docktermj Date: Wed, 29 Oct 2025 12:53:29 -0400 Subject: [PATCH 08/15] #259 Fix linting issues - 6 --- development-requirements.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/development-requirements.txt b/development-requirements.txt index 74467f3..62653db 100644 --- a/development-requirements.txt +++ b/development-requirements.txt @@ -11,14 +11,14 @@ pylint==3.3.9 pytest-cov==7.0.0 pytest-schema==0.1.2 pytest==8.4.2 -sphinx-autodoc-typehints==2.3.0 -sphinx-gallery==0.19.0 +sphinx-autodoc-typehints +sphinx-gallery sphinx-jinja2-compat==0.4.1 -sphinx-prompt==1.8.0 +sphinx-prompt sphinx-rtd-theme==3.0.2 sphinx-tabs==3.4.* sphinx-toolbox==4.0.0 -sphinx==8.1.3 +sphinx sphinxcontrib-applehelp==2.0.0 sphinxcontrib-devhelp==2.0.0 sphinxcontrib-htmlhelp==2.1.0 From 6dd1f84d0776da601d8c77cebf3a1500b0315dad Mon Sep 17 00:00:00 2001 From: docktermj Date: Wed, 29 Oct 2025 12:58:36 -0400 Subject: [PATCH 09/15] #259 Fix linting issues -7 --- tests/.dummy | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/.dummy diff --git a/tests/.dummy b/tests/.dummy new file mode 100644 index 0000000..e69de29 From 1d8939293ffa9528712d2736b343219e13fcd0b4 Mon Sep 17 00:00:00 2001 From: docktermj Date: Wed, 29 Oct 2025 13:05:43 -0400 Subject: [PATCH 10/15] #259 Fix linting issues - 8 --- tests/.dummy | 0 tests/example_test.py | 9 +++++++++ 2 files changed, 9 insertions(+) delete mode 100644 tests/.dummy create mode 100644 tests/example_test.py diff --git a/tests/.dummy b/tests/.dummy deleted file mode 100644 index e69de29..0000000 diff --git a/tests/example_test.py b/tests/example_test.py new file mode 100644 index 0000000..239a14e --- /dev/null +++ b/tests/example_test.py @@ -0,0 +1,9 @@ +# ----------------------------------------------------------------------------- +# Example testcases +# ----------------------------------------------------------------------------- + + +def test_example() -> None: + """Example test""" + a_string = "This is a test string" + assert a_string == "This is a test string" From 040d24b2b48329bffa5de0ff1eafb85c5e51edd1 Mon Sep 17 00:00:00 2001 From: Sam <109683132+kernelsam@users.noreply.github.com> Date: Wed, 29 Oct 2025 10:29:29 -0700 Subject: [PATCH 11/15] Update Bandit GitHub Action configuration --- .github/workflows/bandit.yaml | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/bandit.yaml b/.github/workflows/bandit.yaml index bb8e5de..a874e26 100644 --- a/.github/workflows/bandit.yaml +++ b/.github/workflows/bandit.yaml @@ -11,8 +11,7 @@ permissions: {} jobs: bandit: permissions: - contents: read - pull-requests: write + security-events: write runs-on: ubuntu-latest strategy: fail-fast: false @@ -31,9 +30,7 @@ jobs: python-version: ${{ matrix.python-version }} - name: Run Bandit Scan - uses: lukehinds/bandit-action@new-action - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + uses: PyCQA/bandit-action@v1 with: - path: "sz_tools" - recursive: "true" + targets: "sz_tools" + python-version: ${{ matrix.python-version }} From e033b7d5b340d408479d42013c4cd39cf4599c40 Mon Sep 17 00:00:00 2001 From: Sam <109683132+kernelsam@users.noreply.github.com> Date: Wed, 29 Oct 2025 10:38:01 -0700 Subject: [PATCH 12/15] Simplify Bandit workflow by removing setup steps Removed unnecessary steps for checking out the repository and setting up Python in the Bandit workflow. --- .github/workflows/bandit.yaml | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/.github/workflows/bandit.yaml b/.github/workflows/bandit.yaml index a874e26..9ae2694 100644 --- a/.github/workflows/bandit.yaml +++ b/.github/workflows/bandit.yaml @@ -19,16 +19,6 @@ jobs: python-version: ["3.12"] steps: - - name: Checkout repository - uses: actions/checkout@v5 - with: - persist-credentials: false - - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v6 - with: - python-version: ${{ matrix.python-version }} - - name: Run Bandit Scan uses: PyCQA/bandit-action@v1 with: From 99fa797883946b77586159774bfdf5ba106e3808 Mon Sep 17 00:00:00 2001 From: Sam <109683132+kernelsam@users.noreply.github.com> Date: Wed, 29 Oct 2025 11:01:12 -0700 Subject: [PATCH 13/15] Fix YAML syntax for Bandit scan targets --- .github/workflows/bandit.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/bandit.yaml b/.github/workflows/bandit.yaml index 9ae2694..af11aa4 100644 --- a/.github/workflows/bandit.yaml +++ b/.github/workflows/bandit.yaml @@ -22,5 +22,5 @@ jobs: - name: Run Bandit Scan uses: PyCQA/bandit-action@v1 with: - targets: "sz_tools" + targets: sz_tools python-version: ${{ matrix.python-version }} From 6c24ef64343d5cc81c13a04a113efb79d84f27b6 Mon Sep 17 00:00:00 2001 From: Sam <109683132+kernelsam@users.noreply.github.com> Date: Wed, 29 Oct 2025 11:05:30 -0700 Subject: [PATCH 14/15] Fix indentation for Bandit scan targets --- .github/workflows/bandit.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/bandit.yaml b/.github/workflows/bandit.yaml index af11aa4..ac5321b 100644 --- a/.github/workflows/bandit.yaml +++ b/.github/workflows/bandit.yaml @@ -22,5 +22,5 @@ jobs: - name: Run Bandit Scan uses: PyCQA/bandit-action@v1 with: - targets: sz_tools python-version: ${{ matrix.python-version }} + targets: sz_tools From 0a4bc2461547463be20852675eb410af27171d33 Mon Sep 17 00:00:00 2001 From: docktermj Date: Wed, 29 Oct 2025 15:43:27 -0400 Subject: [PATCH 15/15] #258 change source directory --- setup.cfg | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/setup.cfg b/setup.cfg index 860536b..6175c34 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,9 +1,9 @@ [metadata] -name = python-tools +name = sz-python-tools version = 0.0.31 author = senzing author_email = support@senzing.com -description = Python Tools +description = Senzing Python Tools license = Apache 2 long_description = file: README.md long_description_content_type = text/markdown @@ -12,12 +12,11 @@ project_urls = Bug Tracker = https://github.com/senzing-garage/sz-python-tools/issues classifiers = Programming Language :: Python :: 3 - License :: OSI Approved :: Apache Software License Operating System :: OS Independent [options] package_dir = - = src + = sz_tools packages = find: python_requires = >=3.9 install_requires =