From 1ee7dbec5cb975cb4057f72938a9aea9e790c353 Mon Sep 17 00:00:00 2001 From: ross-spencer Date: Tue, 16 Dec 2025 23:56:55 +0100 Subject: [PATCH 1/5] Fix imports --- src/__init__.py | 0 src/demystify/demystify.py | 72 ++++++++++++++----- src/demystify/libs/AnalysisResultsClass.py | 10 ++- src/demystify/libs/DemystifyAnalysisClass.py | 36 +++++++--- .../libs/outputhandlers/htmloutputclass.py | 13 ++-- .../roguesgalleryoutputclass.py | 8 ++- .../libs/outputhandlers/textoutputclass.py | 14 ++-- src/demystify/pathlesstaken | 2 +- src/demystify/sqlitefid | 2 +- tox.ini | 2 +- 10 files changed, 115 insertions(+), 44 deletions(-) delete mode 100644 src/__init__.py diff --git a/src/__init__.py b/src/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/src/demystify/demystify.py b/src/demystify/demystify.py index 0de2d7f..ceeb86c 100644 --- a/src/demystify/demystify.py +++ b/src/demystify/demystify.py @@ -1,8 +1,4 @@ -# -*- coding: utf-8 -*- - -# pylint: disable=R0917 - -"""Demystify +"""Demystify. Demystify is a utility for static analysis of file format identification tool results. The utility analyses all aspects of a format @@ -27,6 +23,8 @@ rsync style lists for filtering on disk. """ +# pylint: disable=R0917 + import argparse import configparser as ConfigParser import logging @@ -36,17 +34,59 @@ import sys import time -from .denylist_template import denylist_template -from .libs import version -from .libs.DemystifyAnalysisClass import AnalysisError, DemystifyAnalysis -from .libs.HandleDenylistClass import HandleDenylist -from .libs.IdentifyDatabase import IdentifyDB - -# Custom output handlers -from .libs.outputhandlers.htmloutputclass import FormatAnalysisHTMLOutput -from .libs.outputhandlers.roguesgalleryoutputclass import rogueoutputclass -from .libs.outputhandlers.textoutputclass import FormatAnalysisTextOutput -from .sqlitefid.src.sqlitefid import sqlitefid +sys.dont_write_bytecode = True + +try: + from denylist_template import denylist_template + from libs import version + from libs.DemystifyAnalysisClass import AnalysisError, DemystifyAnalysis + from libs.HandleDenylistClass import HandleDenylist + from libs.IdentifyDatabase import IdentifyDB + from libs.outputhandlers.htmloutputclass import FormatAnalysisHTMLOutput + from libs.outputhandlers.roguesgalleryoutputclass import rogueoutputclass + from libs.outputhandlers.textoutputclass import FormatAnalysisTextOutput +except ModuleNotFoundError: + try: + from src.demystify.denylist_template import denylist_template + from src.demystify.libs import version + from src.demystify.libs.DemystifyAnalysisClass import ( + AnalysisError, + DemystifyAnalysis, + ) + from src.demystify.libs.HandleDenylistClass import HandleDenylist + from src.demystify.libs.IdentifyDatabase import IdentifyDB + from src.demystify.libs.outputhandlers.htmloutputclass import ( + FormatAnalysisHTMLOutput, + ) + from src.demystify.libs.outputhandlers.roguesgalleryoutputclass import ( + rogueoutputclass, + ) + from src.demystify.libs.outputhandlers.textoutputclass import ( + FormatAnalysisTextOutput, + ) + except ModuleNotFoundError: + from demystify.denylist_template import denylist_template + from demystify.libs import version + from demystify.libs.DemystifyAnalysisClass import ( + AnalysisError, + DemystifyAnalysis, + ) + from demystify.libs.HandleDenylistClass import HandleDenylist + from demystify.libs.IdentifyDatabase import IdentifyDB + from demystify.libs.outputhandlers.htmloutputclass import ( + FormatAnalysisHTMLOutput, + ) + from demystify.libs.outputhandlers.roguesgalleryoutputclass import ( + rogueoutputclass, + ) + from demystify.libs.outputhandlers.textoutputclass import ( + FormatAnalysisTextOutput, + ) + +# pylint: disable=E0401; unable to import (not needed for local tests). +# pylint: disable=C0413; import not at top of file. +sys.path.insert(0, "./src/demystify/sqlitefid/src/sqlitefid/") +import sqlitefid # noqa: E402 logging.basicConfig( format="%(asctime)-15s %(levelname)s :: %(filename)s:%(lineno)s:%(funcName)s() :: %(message)s", diff --git a/src/demystify/libs/AnalysisResultsClass.py b/src/demystify/libs/AnalysisResultsClass.py index 2308023..55750be 100644 --- a/src/demystify/libs/AnalysisResultsClass.py +++ b/src/demystify/libs/AnalysisResultsClass.py @@ -2,7 +2,13 @@ """Analysis results module.""" -from .version import get_version +try: + from libs import version +except ModuleNotFoundError: + try: + from src.demystify.libs import version + except ModuleNotFoundError: + from demystify.libs import version class AnalysisResults: @@ -119,4 +125,4 @@ def __init__(self): @staticmethod def __version__(): - return get_version() + return version.get_version() diff --git a/src/demystify/libs/DemystifyAnalysisClass.py b/src/demystify/libs/DemystifyAnalysisClass.py index 50b7248..03343f8 100644 --- a/src/demystify/libs/DemystifyAnalysisClass.py +++ b/src/demystify/libs/DemystifyAnalysisClass.py @@ -3,21 +3,37 @@ # pylint: disable=R0917; too-many positional args. import logging +import sys from collections import Counter from configparser import NoOptionError try: - # Required for imports calling from repository root. - from src.demystify.pathlesstaken.src.pathlesstaken import pathlesstaken + import AnalysisResultsClass + import version + from AnalysisQueriesClass import AnalysisQueries + from DenylistQueriesClass import DenylistQueries + from HandleDenylistClass import HandleDenylist + from RoguesQueriesClass import RogueQueries except ModuleNotFoundError: - # Required for Pypi install. - from ..pathlesstaken.src.pathlesstaken import pathlesstaken - -from . import AnalysisResultsClass, version -from .AnalysisQueriesClass import AnalysisQueries -from .DenylistQueriesClass import DenylistQueries -from .HandleDenylistClass import HandleDenylist -from .RoguesQueriesClass import RogueQueries + try: + from src.demystify.libs import AnalysisResultsClass, version + from src.demystify.libs.AnalysisQueriesClass import AnalysisQueries + from src.demystify.libs.DenylistQueriesClass import DenylistQueries + from src.demystify.libs.HandleDenylistClass import HandleDenylist + from src.demystify.libs.RoguesQueriesClass import RogueQueries + except ModuleNotFoundError: + from demystify.libs import AnalysisResultsClass, version + from demystify.libs.AnalysisQueriesClass import AnalysisQueries + from demystify.libs.DenylistQueriesClass import DenylistQueries + from demystify.libs.HandleDenylistClass import HandleDenylist + from demystify.libs.RoguesQueriesClass import RogueQueries + +# pylint: disable=E0401; unable to import (not needed for local tests). +# pylint: disable=C0413; import not at top of file. +sys.path.insert(0, "./src/demystify/pathlesstaken/src/pathlesstaken/") +import pathlesstaken # noqa: E402 + +# from src.demystify.pathlesstaken.src.pathlesstaken import pathlesstaken class AnalysisError(Exception): diff --git a/src/demystify/libs/outputhandlers/htmloutputclass.py b/src/demystify/libs/outputhandlers/htmloutputclass.py index d71ccb4..91b1d4c 100644 --- a/src/demystify/libs/outputhandlers/htmloutputclass.py +++ b/src/demystify/libs/outputhandlers/htmloutputclass.py @@ -6,12 +6,15 @@ import re try: - from src.demystify.i18n.internationalstrings import AnalysisStringsEN as IN_EN - from src.demystify.libs import DemystifyAnalysisClass + from i18n.internationalstrings import AnalysisStringsEN as IN_EN + from libs import DemystifyAnalysisClass except ModuleNotFoundError: - # Needed to run from root dir. - from demystify.i18n.internationalstrings import AnalysisStringsEN as IN_EN - from demystify.libs import DemystifyAnalysisClass + try: + from src.demystify.i18n.internationalstrings import AnalysisStringsEN as IN_EN + from src.demystify.libs import DemystifyAnalysisClass + except ModuleNotFoundError: + from demystify.i18n.internationalstrings import AnalysisStringsEN as IN_EN + from demystify.libs import DemystifyAnalysisClass # NONE_REPLACE_DEBUG is a logging prompt to help us to understand what # needs changing around 'None'/null values from the database. These diff --git a/src/demystify/libs/outputhandlers/roguesgalleryoutputclass.py b/src/demystify/libs/outputhandlers/roguesgalleryoutputclass.py index 19abc4b..951dcb1 100644 --- a/src/demystify/libs/outputhandlers/roguesgalleryoutputclass.py +++ b/src/demystify/libs/outputhandlers/roguesgalleryoutputclass.py @@ -4,10 +4,12 @@ import logging try: - from src.demystify.libs.HandleDenylistClass import HandleDenylist + from libs.HandleDenylistClass import HandleDenylist except ModuleNotFoundError: - # Needed for PyPi import. - from demystify.libs.HandleDenylistClass import HandleDenylist + try: + from src.demystify.libs.HandleDenylistClass import HandleDenylist + except ModuleNotFoundError: + from demystify.libs.HandleDenylistClass import HandleDenylist class rogueoutputclass: diff --git a/src/demystify/libs/outputhandlers/textoutputclass.py b/src/demystify/libs/outputhandlers/textoutputclass.py index f5d02e9..54a76f5 100644 --- a/src/demystify/libs/outputhandlers/textoutputclass.py +++ b/src/demystify/libs/outputhandlers/textoutputclass.py @@ -4,12 +4,16 @@ import re try: - from src.demystify.i18n.internationalstrings import AnalysisStringsEN as IN_EN - from src.demystify.libs import DemystifyAnalysisClass + from i18n.internationalstrings import AnalysisStringsEN as IN_EN + from libs import DemystifyAnalysisClass except ModuleNotFoundError: - # Needed to run from root dir. - from demystify.i18n.internationalstrings import AnalysisStringsEN as IN_EN - from demystify.libs import DemystifyAnalysisClass + try: + from src.demystify.i18n.internationalstrings import AnalysisStringsEN as IN_EN + from src.demystify.libs import DemystifyAnalysisClass + except ModuleNotFoundError: + # Needed to run from root dir. + from demystify.i18n.internationalstrings import AnalysisStringsEN as IN_EN + from demystify.libs import DemystifyAnalysisClass # NONE_REPLACE_DEBUG is a logging prompt to help us to understand what # needs changing around 'None'/null values from the database. These diff --git a/src/demystify/pathlesstaken b/src/demystify/pathlesstaken index be8c2ae..4cf6cce 160000 --- a/src/demystify/pathlesstaken +++ b/src/demystify/pathlesstaken @@ -1 +1 @@ -Subproject commit be8c2ae8d23da13ae3fc915f00dc78eaede54fbe +Subproject commit 4cf6ccec2e56ec98786286b4b39e9fb7e8cf05ae diff --git a/src/demystify/sqlitefid b/src/demystify/sqlitefid index 6745d7d..e13c096 160000 --- a/src/demystify/sqlitefid +++ b/src/demystify/sqlitefid @@ -1 +1 @@ -Subproject commit 6745d7de73a9414fc866f863f6284519cf32fe11 +Subproject commit e13c096e3120503e16026c5fcf4a383e32f11b2b diff --git a/tox.ini b/tox.ini index db29427..9dde62b 100644 --- a/tox.ini +++ b/tox.ini @@ -16,7 +16,7 @@ commands = pre-commit run --all-files [testenv:linting-show] basepython = python3 deps = pre-commit -commands = pre-commit run --all-files --show-diff-on-failure +commands = pre-commit run --all-files [testenv:coverage] deps = -r requirements/local.txt From cd326d3e53a7d9d52364c3acf032d79ffba61214 Mon Sep 17 00:00:00 2001 From: ross-spencer Date: Wed, 17 Dec 2025 10:03:38 +0100 Subject: [PATCH 2/5] Remove legacy encoding string --- src/demystify/denylist_template.py | 3 +-- src/demystify/i18n/internationalstrings.py | 2 +- src/demystify/libs/AnalysisQueriesClass.py | 4 +--- src/demystify/libs/AnalysisResultsClass.py | 2 -- src/demystify/libs/DemystifyAnalysisClass.py | 2 +- src/demystify/libs/DenylistQueriesClass.py | 2 -- src/demystify/libs/HandleDenylistClass.py | 2 -- src/demystify/libs/IdentifyDatabase.py | 6 ++---- src/demystify/libs/RoguesQueriesClass.py | 2 -- src/demystify/libs/outputhandlers/htmloutputclass.py | 2 +- .../libs/outputhandlers/roguesgalleryoutputclass.py | 2 +- src/demystify/libs/outputhandlers/textoutputclass.py | 2 +- src/demystify/libs/version.py | 2 -- 13 files changed, 9 insertions(+), 24 deletions(-) diff --git a/src/demystify/denylist_template.py b/src/demystify/denylist_template.py index e03001c..2f9dccf 100644 --- a/src/demystify/denylist_template.py +++ b/src/demystify/denylist_template.py @@ -1,5 +1,4 @@ -# -*- coding: utf-8 -*- - +"""Denylist template.""" denylist_template = """######################################################################## # Denylist and Rogues output configuration for demystify. diff --git a/src/demystify/i18n/internationalstrings.py b/src/demystify/i18n/internationalstrings.py index c7bf2a4..1fc3b4b 100644 --- a/src/demystify/i18n/internationalstrings.py +++ b/src/demystify/i18n/internationalstrings.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +"""Analysis strings for i18n.""" class AnalysisStringsEN: diff --git a/src/demystify/libs/AnalysisQueriesClass.py b/src/demystify/libs/AnalysisQueriesClass.py index 506e38e..dc7ae36 100644 --- a/src/demystify/libs/AnalysisQueriesClass.py +++ b/src/demystify/libs/AnalysisQueriesClass.py @@ -1,6 +1,4 @@ -# -*- coding: utf-8 -*- - -"""Analysis Queries to be used by Demystify to extract as much +"""Analysis Queries to be used by Demystify to extract as much information as possible from a format identification extract. """ diff --git a/src/demystify/libs/AnalysisResultsClass.py b/src/demystify/libs/AnalysisResultsClass.py index 55750be..050926b 100644 --- a/src/demystify/libs/AnalysisResultsClass.py +++ b/src/demystify/libs/AnalysisResultsClass.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - """Analysis results module.""" try: diff --git a/src/demystify/libs/DemystifyAnalysisClass.py b/src/demystify/libs/DemystifyAnalysisClass.py index 03343f8..2b7488f 100644 --- a/src/demystify/libs/DemystifyAnalysisClass.py +++ b/src/demystify/libs/DemystifyAnalysisClass.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +"""Demystify analysis class for collecting demystify results.""" # pylint: disable=R0917; too-many positional args. diff --git a/src/demystify/libs/DenylistQueriesClass.py b/src/demystify/libs/DenylistQueriesClass.py index ae71f22..27b325e 100644 --- a/src/demystify/libs/DenylistQueriesClass.py +++ b/src/demystify/libs/DenylistQueriesClass.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - """Denylist queries for filtering denylist items from a format identification extract. """ diff --git a/src/demystify/libs/HandleDenylistClass.py b/src/demystify/libs/HandleDenylistClass.py index d869a71..a7fb927 100644 --- a/src/demystify/libs/HandleDenylistClass.py +++ b/src/demystify/libs/HandleDenylistClass.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - """Denylist module.""" # [denylist] diff --git a/src/demystify/libs/IdentifyDatabase.py b/src/demystify/libs/IdentifyDatabase.py index 6645af7..6487c64 100644 --- a/src/demystify/libs/IdentifyDatabase.py +++ b/src/demystify/libs/IdentifyDatabase.py @@ -1,6 +1,4 @@ -# -*- coding: utf-8 -*- - -"""IdentifyDatabase +"""IdentifyDatabase Enables identification of a sqlite3 database to ensure that the input data for the calling application is correct. @@ -14,7 +12,7 @@ class IdentifyDB: UNKNOWN_DB = "unknown" # 'SQLite format 3' - sqlite3 = b"\x53\x51\x4C\x69\x74\x65\x20\x66\x6F\x72\x6D\x61\x74\x20\x33" + sqlite3 = b"\x53\x51\x4c\x69\x74\x65\x20\x66\x6f\x72\x6d\x61\x74\x20\x33" def identify_export(self, database_path): """Reads an input file and checks whether it is an sqlite3 diff --git a/src/demystify/libs/RoguesQueriesClass.py b/src/demystify/libs/RoguesQueriesClass.py index e162cc4..02fca2d 100644 --- a/src/demystify/libs/RoguesQueriesClass.py +++ b/src/demystify/libs/RoguesQueriesClass.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - """Rogue Queries for extracting information about Rogues and Heroes from a format identification extract. """ diff --git a/src/demystify/libs/outputhandlers/htmloutputclass.py b/src/demystify/libs/outputhandlers/htmloutputclass.py index 91b1d4c..bb4c251 100644 --- a/src/demystify/libs/outputhandlers/htmloutputclass.py +++ b/src/demystify/libs/outputhandlers/htmloutputclass.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +"""HTML Output Class for HTML formatted results.""" # pylint: disable=R0917; too-many positional args. diff --git a/src/demystify/libs/outputhandlers/roguesgalleryoutputclass.py b/src/demystify/libs/outputhandlers/roguesgalleryoutputclass.py index 951dcb1..7d0f699 100644 --- a/src/demystify/libs/outputhandlers/roguesgalleryoutputclass.py +++ b/src/demystify/libs/outputhandlers/roguesgalleryoutputclass.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +"""Rogue output.""" import configparser as ConfigParser import logging diff --git a/src/demystify/libs/outputhandlers/textoutputclass.py b/src/demystify/libs/outputhandlers/textoutputclass.py index 54a76f5..c96a034 100644 --- a/src/demystify/libs/outputhandlers/textoutputclass.py +++ b/src/demystify/libs/outputhandlers/textoutputclass.py @@ -1,4 +1,4 @@ -# -*- coding: utf-8 -*- +"""Text output for output formatted as plain-text.""" import logging import re diff --git a/src/demystify/libs/version.py b/src/demystify/libs/version.py index f04e893..eb08880 100644 --- a/src/demystify/libs/version.py +++ b/src/demystify/libs/version.py @@ -1,5 +1,3 @@ -# -*- coding: utf-8 -*- - """Version.py Helper class to return the version of this application to the caller. From 0a6df50e543e3727e6e9c9db71f88dcf3d457eff Mon Sep 17 00:00:00 2001 From: ross-spencer Date: Wed, 17 Dec 2025 10:53:04 +0100 Subject: [PATCH 3/5] Add Windows to test runners --- .github/workflows/unit-tests.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 7871bbe..7579052 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -12,7 +12,7 @@ jobs: continue-on-error: ${{ matrix.experimental }} strategy: matrix: - os: [ubuntu-latest] + os: [windows-latest, ubuntu-latest] python-version: ["3.10", "3.11", "3.12"] experimental: [false] # Include experimental or bleeding-edge releases. @@ -33,9 +33,6 @@ jobs: - os: macos-latest python-version: "3.13" experimental: true - - os: windows-latest - python-version: "3.13" - experimental: true steps: - name: "check out repository" uses: "actions/checkout@v4" From bdd2cdc00879cefbb90ce77e9194c9c5cf203f94 Mon Sep 17 00:00:00 2001 From: ross-spencer Date: Wed, 17 Dec 2025 10:53:33 +0100 Subject: [PATCH 4/5] Use Pathlib for import --- src/demystify/demystify.py | 4 +++- src/demystify/libs/DemystifyAnalysisClass.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/demystify/demystify.py b/src/demystify/demystify.py index ceeb86c..2b3dbc4 100644 --- a/src/demystify/demystify.py +++ b/src/demystify/demystify.py @@ -83,9 +83,11 @@ FormatAnalysisTextOutput, ) +from pathlib import Path + # pylint: disable=E0401; unable to import (not needed for local tests). # pylint: disable=C0413; import not at top of file. -sys.path.insert(0, "./src/demystify/sqlitefid/src/sqlitefid/") +sys.path.insert(0, str(Path("./src/demystify/sqlitefid/src/sqlitefid/"))) import sqlitefid # noqa: E402 logging.basicConfig( diff --git a/src/demystify/libs/DemystifyAnalysisClass.py b/src/demystify/libs/DemystifyAnalysisClass.py index 2b7488f..cf231ab 100644 --- a/src/demystify/libs/DemystifyAnalysisClass.py +++ b/src/demystify/libs/DemystifyAnalysisClass.py @@ -28,9 +28,11 @@ from demystify.libs.HandleDenylistClass import HandleDenylist from demystify.libs.RoguesQueriesClass import RogueQueries +from pathlib import Path + # pylint: disable=E0401; unable to import (not needed for local tests). # pylint: disable=C0413; import not at top of file. -sys.path.insert(0, "./src/demystify/pathlesstaken/src/pathlesstaken/") +sys.path.insert(0, str(Path("./src/demystify/pathlesstaken/src/pathlesstaken/"))) import pathlesstaken # noqa: E402 # from src.demystify.pathlesstaken.src.pathlesstaken import pathlesstaken From 3bcc7aa881ac7c35a852c14464ffdcc91453a474 Mon Sep 17 00:00:00 2001 From: ross-spencer Date: Wed, 17 Dec 2025 10:56:33 +0100 Subject: [PATCH 5/5] WIP: windows imports are a mess --- .github/workflows/unit-tests.yml | 7 +- src/__init__.py | 0 src/demystify/demystify.py | 118 ++++++++++-------- src/demystify/libs/AnalysisResultsClass.py | 15 ++- src/demystify/libs/DemystifyAnalysisClass.py | 71 +++++++---- .../libs/outputhandlers/htmloutputclass.py | 20 ++- .../roguesgalleryoutputclass.py | 14 ++- .../libs/outputhandlers/textoutputclass.py | 20 ++- src/demystify/pathlesstaken | 2 +- src/demystify/sqlitefid | 2 +- 10 files changed, 169 insertions(+), 100 deletions(-) create mode 100644 src/__init__.py diff --git a/.github/workflows/unit-tests.yml b/.github/workflows/unit-tests.yml index 7579052..5b6c477 100644 --- a/.github/workflows/unit-tests.yml +++ b/.github/workflows/unit-tests.yml @@ -12,8 +12,8 @@ jobs: continue-on-error: ${{ matrix.experimental }} strategy: matrix: - os: [windows-latest, ubuntu-latest] - python-version: ["3.10", "3.11", "3.12"] + os: [windows-latest] + python-version: ["3.10"] experimental: [false] # Include experimental or bleeding-edge releases. # Windows is not included as it can be unreliable, e.g. @@ -30,9 +30,6 @@ jobs: - os: ubuntu-latest python-version: "3.13" experimental: true - - os: macos-latest - python-version: "3.13" - experimental: true steps: - name: "check out repository" uses: "actions/checkout@v4" diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/demystify/demystify.py b/src/demystify/demystify.py index 2b3dbc4..2d6e8ef 100644 --- a/src/demystify/demystify.py +++ b/src/demystify/demystify.py @@ -33,62 +33,80 @@ import sqlite3 import sys import time +from pathlib import Path + sys.dont_write_bytecode = True -try: - from denylist_template import denylist_template - from libs import version - from libs.DemystifyAnalysisClass import AnalysisError, DemystifyAnalysis - from libs.HandleDenylistClass import HandleDenylist - from libs.IdentifyDatabase import IdentifyDB - from libs.outputhandlers.htmloutputclass import FormatAnalysisHTMLOutput - from libs.outputhandlers.roguesgalleryoutputclass import rogueoutputclass - from libs.outputhandlers.textoutputclass import FormatAnalysisTextOutput -except ModuleNotFoundError: +if os.name != "nt": try: - from src.demystify.denylist_template import denylist_template - from src.demystify.libs import version - from src.demystify.libs.DemystifyAnalysisClass import ( - AnalysisError, - DemystifyAnalysis, - ) - from src.demystify.libs.HandleDenylistClass import HandleDenylist - from src.demystify.libs.IdentifyDatabase import IdentifyDB - from src.demystify.libs.outputhandlers.htmloutputclass import ( - FormatAnalysisHTMLOutput, - ) - from src.demystify.libs.outputhandlers.roguesgalleryoutputclass import ( - rogueoutputclass, - ) - from src.demystify.libs.outputhandlers.textoutputclass import ( - FormatAnalysisTextOutput, - ) + from denylist_template import denylist_template + from libs import version + from libs.DemystifyAnalysisClass import AnalysisError, DemystifyAnalysis + from libs.HandleDenylistClass import HandleDenylist + from libs.IdentifyDatabase import IdentifyDB + from libs.outputhandlers.htmloutputclass import FormatAnalysisHTMLOutput + from libs.outputhandlers.roguesgalleryoutputclass import rogueoutputclass + from libs.outputhandlers.textoutputclass import FormatAnalysisTextOutput except ModuleNotFoundError: - from demystify.denylist_template import denylist_template - from demystify.libs import version - from demystify.libs.DemystifyAnalysisClass import ( - AnalysisError, - DemystifyAnalysis, - ) - from demystify.libs.HandleDenylistClass import HandleDenylist - from demystify.libs.IdentifyDatabase import IdentifyDB - from demystify.libs.outputhandlers.htmloutputclass import ( - FormatAnalysisHTMLOutput, - ) - from demystify.libs.outputhandlers.roguesgalleryoutputclass import ( - rogueoutputclass, - ) - from demystify.libs.outputhandlers.textoutputclass import ( - FormatAnalysisTextOutput, - ) - -from pathlib import Path + try: + from src.demystify.denylist_template import denylist_template + from src.demystify.libs import version + from src.demystify.libs.DemystifyAnalysisClass import ( + AnalysisError, + DemystifyAnalysis, + ) + from src.demystify.libs.HandleDenylistClass import HandleDenylist + from src.demystify.libs.IdentifyDatabase import IdentifyDB + from src.demystify.libs.outputhandlers.htmloutputclass import ( + FormatAnalysisHTMLOutput, + ) + from src.demystify.libs.outputhandlers.roguesgalleryoutputclass import ( + rogueoutputclass, + ) + from src.demystify.libs.outputhandlers.textoutputclass import ( + FormatAnalysisTextOutput, + ) + except ModuleNotFoundError: + from demystify.denylist_template import denylist_template + from demystify.libs import version + from demystify.libs.DemystifyAnalysisClass import ( + AnalysisError, + DemystifyAnalysis, + ) + from demystify.libs.HandleDenylistClass import HandleDenylist + from demystify.libs.IdentifyDatabase import IdentifyDB + from demystify.libs.outputhandlers.htmloutputclass import ( + FormatAnalysisHTMLOutput, + ) + from demystify.libs.outputhandlers.roguesgalleryoutputclass import ( + rogueoutputclass, + ) + from demystify.libs.outputhandlers.textoutputclass import ( + FormatAnalysisTextOutput, + ) + + # pylint: disable=E0401; unable to import (not needed for local tests). + # pylint: disable=C0413; import not at top of file. + sys.path.insert(0, str(Path("./src/demystify/sqlitefid/src/sqlitefid/"))) + print( + "PATH: %s %s", + os.path.exists(str(Path("./src/demystify/sqlitefid/src/sqlitefid/"))), + file=sys.stderr, + ) + import sqlitefid # noqa: E402 + +else: + from .denylist_template import denylist_template + from .libs import version + from .libs.DemystifyAnalysisClass import AnalysisError, DemystifyAnalysis + from .libs.HandleDenylistClass import HandleDenylist + from .libs.IdentifyDatabase import IdentifyDB + from .libs.outputhandlers.htmloutputclass import FormatAnalysisHTMLOutput + from .libs.outputhandlers.roguesgalleryoutputclass import rogueoutputclass + from .libs.outputhandlers.textoutputclass import FormatAnalysisTextOutput + from .sqlitefid.src.sqlitefid import sqlitefid -# pylint: disable=E0401; unable to import (not needed for local tests). -# pylint: disable=C0413; import not at top of file. -sys.path.insert(0, str(Path("./src/demystify/sqlitefid/src/sqlitefid/"))) -import sqlitefid # noqa: E402 logging.basicConfig( format="%(asctime)-15s %(levelname)s :: %(filename)s:%(lineno)s:%(funcName)s() :: %(message)s", diff --git a/src/demystify/libs/AnalysisResultsClass.py b/src/demystify/libs/AnalysisResultsClass.py index 050926b..d9a0d47 100644 --- a/src/demystify/libs/AnalysisResultsClass.py +++ b/src/demystify/libs/AnalysisResultsClass.py @@ -1,12 +1,17 @@ """Analysis results module.""" -try: - from libs import version -except ModuleNotFoundError: +import os + +if os.name != "nt": try: - from src.demystify.libs import version + from libs import version except ModuleNotFoundError: - from demystify.libs import version + try: + from src.demystify.libs import version + except ModuleNotFoundError: + from demystify.libs import version +else: + from .version import version class AnalysisResults: diff --git a/src/demystify/libs/DemystifyAnalysisClass.py b/src/demystify/libs/DemystifyAnalysisClass.py index cf231ab..84471b0 100644 --- a/src/demystify/libs/DemystifyAnalysisClass.py +++ b/src/demystify/libs/DemystifyAnalysisClass.py @@ -3,39 +3,56 @@ # pylint: disable=R0917; too-many positional args. import logging +import os import sys from collections import Counter from configparser import NoOptionError +from pathlib import Path -try: - import AnalysisResultsClass - import version - from AnalysisQueriesClass import AnalysisQueries - from DenylistQueriesClass import DenylistQueries - from HandleDenylistClass import HandleDenylist - from RoguesQueriesClass import RogueQueries -except ModuleNotFoundError: +if os.name != "nt": try: - from src.demystify.libs import AnalysisResultsClass, version - from src.demystify.libs.AnalysisQueriesClass import AnalysisQueries - from src.demystify.libs.DenylistQueriesClass import DenylistQueries - from src.demystify.libs.HandleDenylistClass import HandleDenylist - from src.demystify.libs.RoguesQueriesClass import RogueQueries + import AnalysisResultsClass + import version + from AnalysisQueriesClass import AnalysisQueries + from DenylistQueriesClass import DenylistQueries + from HandleDenylistClass import HandleDenylist + from RoguesQueriesClass import RogueQueries except ModuleNotFoundError: - from demystify.libs import AnalysisResultsClass, version - from demystify.libs.AnalysisQueriesClass import AnalysisQueries - from demystify.libs.DenylistQueriesClass import DenylistQueries - from demystify.libs.HandleDenylistClass import HandleDenylist - from demystify.libs.RoguesQueriesClass import RogueQueries - -from pathlib import Path - -# pylint: disable=E0401; unable to import (not needed for local tests). -# pylint: disable=C0413; import not at top of file. -sys.path.insert(0, str(Path("./src/demystify/pathlesstaken/src/pathlesstaken/"))) -import pathlesstaken # noqa: E402 - -# from src.demystify.pathlesstaken.src.pathlesstaken import pathlesstaken + try: + from src.demystify.libs import AnalysisResultsClass, version + from src.demystify.libs.AnalysisQueriesClass import AnalysisQueries + from src.demystify.libs.DenylistQueriesClass import DenylistQueries + from src.demystify.libs.HandleDenylistClass import HandleDenylist + from src.demystify.libs.RoguesQueriesClass import RogueQueries + except ModuleNotFoundError: + from demystify.libs import AnalysisResultsClass, version + from demystify.libs.AnalysisQueriesClass import AnalysisQueries + from demystify.libs.DenylistQueriesClass import DenylistQueries + from demystify.libs.HandleDenylistClass import HandleDenylist + from demystify.libs.RoguesQueriesClass import RogueQueries + + # pylint: disable=E0401; unable to import (not needed for local tests). + # pylint: disable=C0413; import not at top of file. + sys.path.insert(0, str(Path("./src/demystify/pathlesstaken/src/pathlesstaken/"))) + print( + "PATH: %s %s", + os.path.exists(str(Path("./src/demystify/pathlesstaken/src/pathlesstaken/"))), + file=sys.stderr, + ) + import pathlesstaken # noqa: E402 +else: + try: + # Required for imports calling from repository root. + from src.demystify.pathlesstaken.src.pathlesstaken import pathlesstaken + except ModuleNotFoundError: + # Required for Pypi install. + from ..pathlesstaken.src.pathlesstaken import pathlesstaken + + from . import AnalysisResultsClass, version + from .AnalysisQueriesClass import AnalysisQueries + from .DenylistQueriesClass import DenylistQueries + from .HandleDenylistClass import HandleDenylist + from .RoguesQueriesClass import RogueQueries class AnalysisError(Exception): diff --git a/src/demystify/libs/outputhandlers/htmloutputclass.py b/src/demystify/libs/outputhandlers/htmloutputclass.py index bb4c251..50c1015 100644 --- a/src/demystify/libs/outputhandlers/htmloutputclass.py +++ b/src/demystify/libs/outputhandlers/htmloutputclass.py @@ -3,16 +3,28 @@ # pylint: disable=R0917; too-many positional args. import logging +import os import re -try: - from i18n.internationalstrings import AnalysisStringsEN as IN_EN - from libs import DemystifyAnalysisClass -except ModuleNotFoundError: +if os.name != "nt": + try: + from i18n.internationalstrings import AnalysisStringsEN as IN_EN + from libs import DemystifyAnalysisClass + except ModuleNotFoundError: + try: + from src.demystify.i18n.internationalstrings import ( + AnalysisStringsEN as IN_EN, + ) + from src.demystify.libs import DemystifyAnalysisClass + except ModuleNotFoundError: + from demystify.i18n.internationalstrings import AnalysisStringsEN as IN_EN + from demystify.libs import DemystifyAnalysisClass +else: try: from src.demystify.i18n.internationalstrings import AnalysisStringsEN as IN_EN from src.demystify.libs import DemystifyAnalysisClass except ModuleNotFoundError: + # Needed to run from root dir. from demystify.i18n.internationalstrings import AnalysisStringsEN as IN_EN from demystify.libs import DemystifyAnalysisClass diff --git a/src/demystify/libs/outputhandlers/roguesgalleryoutputclass.py b/src/demystify/libs/outputhandlers/roguesgalleryoutputclass.py index 7d0f699..4ddf50e 100644 --- a/src/demystify/libs/outputhandlers/roguesgalleryoutputclass.py +++ b/src/demystify/libs/outputhandlers/roguesgalleryoutputclass.py @@ -2,13 +2,21 @@ import configparser as ConfigParser import logging +import os -try: - from libs.HandleDenylistClass import HandleDenylist -except ModuleNotFoundError: +if os.name != "nt": + try: + from libs.HandleDenylistClass import HandleDenylist + except ModuleNotFoundError: + try: + from src.demystify.libs.HandleDenylistClass import HandleDenylist + except ModuleNotFoundError: + from demystify.libs.HandleDenylistClass import HandleDenylist +else: try: from src.demystify.libs.HandleDenylistClass import HandleDenylist except ModuleNotFoundError: + # Needed for PyPi import. from demystify.libs.HandleDenylistClass import HandleDenylist diff --git a/src/demystify/libs/outputhandlers/textoutputclass.py b/src/demystify/libs/outputhandlers/textoutputclass.py index c96a034..c389711 100644 --- a/src/demystify/libs/outputhandlers/textoutputclass.py +++ b/src/demystify/libs/outputhandlers/textoutputclass.py @@ -1,12 +1,24 @@ """Text output for output formatted as plain-text.""" import logging +import os import re -try: - from i18n.internationalstrings import AnalysisStringsEN as IN_EN - from libs import DemystifyAnalysisClass -except ModuleNotFoundError: +if os.name != "nt": + try: + from i18n.internationalstrings import AnalysisStringsEN as IN_EN + from libs import DemystifyAnalysisClass + except ModuleNotFoundError: + try: + from src.demystify.i18n.internationalstrings import ( + AnalysisStringsEN as IN_EN, + ) + from src.demystify.libs import DemystifyAnalysisClass + except ModuleNotFoundError: + # Needed to run from root dir. + from demystify.i18n.internationalstrings import AnalysisStringsEN as IN_EN + from demystify.libs import DemystifyAnalysisClass +else: try: from src.demystify.i18n.internationalstrings import AnalysisStringsEN as IN_EN from src.demystify.libs import DemystifyAnalysisClass diff --git a/src/demystify/pathlesstaken b/src/demystify/pathlesstaken index 4cf6cce..bfe8dc6 160000 --- a/src/demystify/pathlesstaken +++ b/src/demystify/pathlesstaken @@ -1 +1 @@ -Subproject commit 4cf6ccec2e56ec98786286b4b39e9fb7e8cf05ae +Subproject commit bfe8dc606494a5044a7aeaadb62125addedcfe14 diff --git a/src/demystify/sqlitefid b/src/demystify/sqlitefid index e13c096..bd9060c 160000 --- a/src/demystify/sqlitefid +++ b/src/demystify/sqlitefid @@ -1 +1 @@ -Subproject commit e13c096e3120503e16026c5fcf4a383e32f11b2b +Subproject commit bd9060cac97fb78c0cb3f2829595a5bcfc28f84a