From 950f472e5f283ca43107c8647b74ef946069f2db Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 13 Dec 2025 01:46:47 +0000 Subject: [PATCH 2/6] Initial plan for Debian 13 compatibility fixes Co-authored-by: ShaYmez <76499782+ShaYmez@users.noreply.github.com> --- __pycache__/config_SAMPLE.cpython-312.pyc | Bin 0 -> 891 bytes __pycache__/hbmon-config.cpython-312.pyc | Bin 0 -> 878 bytes __pycache__/monitor.cpython-312.pyc | Bin 0 -> 55568 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 __pycache__/config_SAMPLE.cpython-312.pyc create mode 100644 __pycache__/hbmon-config.cpython-312.pyc create mode 100644 __pycache__/monitor.cpython-312.pyc diff --git a/__pycache__/config_SAMPLE.cpython-312.pyc b/__pycache__/config_SAMPLE.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6f7fa5a60854ac281fb9e2f2204c88ff2e87530b GIT binary patch literal 891 zcma)4!EVz)5Ovx#v7OjSolrnfAudIgz@}V~P=#bCo5aGgjpGP)g=9I|&>GS>vYkV6 zGGD=$e}#s5eo~5gGIzc0TrN#im-$P zSVkh;MI|VqGOVCoSVa=NHLV<0-NuYNdiGp?O72ncqs%Z1y4QkkfSFldR*;|g%1js! z29Xz_SbiUeqgf@M^x}RL^lpk$;txNZM&V?9ZM-`S`~J}Tm%Xws{W z&CtzPo^Ip92HKY6Vy@wU*Ii)NPOw-rbYQxktG9vGbun+*n%B?`(vP#Y>b5Xv1K>~z z;8Lfnb!v{TT?w4q)a&b-XjnDX@Q7pMUGp2wYvH=1KxcXmFf6r>*_E;D7+AdV2<5C{ zHNDj)D`cu|@R_-wpXE}Lm3}yS7o2(>wQU6d#45W=-E{*qcB&SE80lV}bMCo!u151s5O{{1UtbTL5z8nI7+CFo$?3pez(o4(5>n z3rK`Tl!p>3z!ECLGLqnp)6!1aYRrYbr~C5W6M6sfGkNck^P|8pOS;>VZh@J3MpjTi z=qqz!IvjeogM9hD?@s0=e|F>#Jm=`TCrK#&YoOh+4(&E^0JDp^ zR#j8=SGL;0*%j;@$wTfmF$I2V?Yt6B6)sdw$Z4+olrHH zRx_G*v`K{YN*jD(&gs{5FUZIkn+a literal 0 HcmV?d00001 diff --git a/__pycache__/monitor.cpython-312.pyc b/__pycache__/monitor.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..2e40480cba719dbf10d9b7b275a16aaf5b7356e0 GIT binary patch literal 55568 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∋YkOqzv0D10~VK@9mr9i6sdgqQr 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 F`oGKy!{Pt{ literal 0 HcmV?d00001 From bffebd764ac0ad92cc5a5241b6655a01eee84c95 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 13 Dec 2025 01:49:48 +0000 Subject: [PATCH 3/6] Fix Jinja2 3.x and Python 3.12 compatibility issues Co-authored-by: ShaYmez <76499782+ShaYmez@users.noreply.github.com> --- .gitignores => .gitignore | 1 + Dockerfile | 2 +- README.md | 17 +------------ __pycache__/config_SAMPLE.cpython-312.pyc | Bin 891 -> 0 bytes __pycache__/hbmon-config.cpython-312.pyc | Bin 878 -> 0 bytes __pycache__/monitor.cpython-312.pyc | Bin 55568 -> 0 bytes monitor.py | 28 +++++++++++----------- 7 files changed, 17 insertions(+), 31 deletions(-) rename .gitignores => .gitignore (69%) delete mode 100644 __pycache__/config_SAMPLE.cpython-312.pyc delete mode 100644 __pycache__/hbmon-config.cpython-312.pyc delete mode 100644 __pycache__/monitor.cpython-312.pyc diff --git a/.gitignores b/.gitignore similarity index 69% rename from .gitignores rename to .gitignore index 89b27c8..b65fedb 100644 --- a/.gitignores +++ b/.gitignore @@ -1,4 +1,5 @@ *.pyc +__pycache__/ config.py *.log *.json diff --git a/Dockerfile b/Dockerfile index 58365bd..a2d4241 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,7 +17,7 @@ # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ############################################################################### -FROM python:alpine3.17 +FROM python:alpine3.20 COPY entrypoint /entrypoint diff --git a/README.md b/README.md index beaa4d3..1e94583 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ The main difference between HBMonitor v1 and v2 is the layout, i.e. the main page shows condensed information and on the subpages, you can see the individual content that was shown on v1 -HBMonv2 is tested on Debian v10 & v11 +HBMonv2 is tested on Debian v10, v11, v12 & v13 This version of HBMonv2 requires a web server like apache2, lighttpd and php support running on the server. @@ -96,21 +96,6 @@ php support running on the server. ***************************************************************************************** --- -After update distribution of Linux jinja2 to version 3.x you can find problem with run HBMonitor with error: - - ValueError: The 'monitor' package was not installed in a way that PackageLoader understands. - - -You must uninstall jinja2 and reinstalling with this version Jinja2==2.11.3 - - pip3 uninstall jinja2 - -and - - pip3 install Jinja2==2.11.3 - ---- - **hbmonitor3 by KC1AWV** Python 3 implementation of N0MJS HBmonitor for HBlink https://github.com/kc1awv/hbmonitor3 diff --git a/__pycache__/config_SAMPLE.cpython-312.pyc b/__pycache__/config_SAMPLE.cpython-312.pyc deleted file mode 100644 index 6f7fa5a60854ac281fb9e2f2204c88ff2e87530b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 891 zcma)4!EVz)5Ovx#v7OjSolrnfAudIgz@}V~P=#bCo5aGgjpGP)g=9I|&>GS>vYkV6 zGGD=$e}#s5eo~5gGIzc0TrN#im-$P zSVkh;MI|VqGOVCoSVa=NHLV<0-NuYNdiGp?O72ncqs%Z1y4QkkfSFldR*;|g%1js! z29Xz_SbiUeqgf@M^x}RL^lpk$;txNZM&V?9ZM-`S`~J}Tm%Xws{W z&CtzPo^Ip92HKY6Vy@wU*Ii)NPOw-rbYQxktG9vGbun+*n%B?`(vP#Y>b5Xv1K>~z z;8Lfnb!v{TT?w4q)a&b-XjnDX@Q7pMUGp2wYvH=1KxcXmFf6r>*_E;D7+AdV2<5C{ zHNDj)D`cu|@R_-wpXE}Lm3}yS7o2(>wQU6d#45W=-E{*qcB&SE80lV}bMCo!u151s5O{{1UtbTL5z8nI7+CFo$?3pez(o4(5>n z3rK`Tl!p>3z!ECLGLqnp)6!1aYRrYbr~C5W6M6sfGkNck^P|8pOS;>VZh@J3MpjTi z=qqz!IvjeogM9hD?@s0=e|F>#Jm=`TCrK#&YoOh+4(&E^0JDp^ zR#j8=SGL;0*%j;@$wTfmF$I2V?Yt6B6)sdw$Z4+olrHH zRx_G*v`K{YN*jD(&gs{5FUZIkn+a diff --git a/__pycache__/monitor.cpython-312.pyc b/__pycache__/monitor.cpython-312.pyc deleted file mode 100644 index 2e40480cba719dbf10d9b7b275a16aaf5b7356e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55568 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∋YkOqzv0D10~VK@9mr9i6sdgqQr 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 F`oGKy!{Pt{ diff --git a/monitor.py b/monitor.py index 21bed31..316aafe 100644 --- a/monitor.py +++ b/monitor.py @@ -62,7 +62,7 @@ from collections import deque from time import time # Web templating environment -from jinja2 import Environment, PackageLoader, select_autoescape +from jinja2 import Environment, FileSystemLoader, select_autoescape # Utilities from K0USY Group sister project from dmr_utils3.utils import int_id, try_download, bytes_4 @@ -315,7 +315,7 @@ def add_hb_peer(_peer_conf, _ctable_loc, _peer): # if the Frequency is 000.xxx assume it's not an RF peer, otherwise format the text fields # (9 char, but we are just software) see https://wiki.brandmeister.network/index.php/Homebrew/example/php2 - if _peer_conf['TX_FREQ'].strip().isdigit() and _peer_conf['RX_FREQ'].strip().isdigit() and str(type(_peer_conf['TX_FREQ'])).find("bytes") != -1 and str(type(_peer_conf['RX_FREQ'])).find("bytes") != -1: + if isinstance(_peer_conf['TX_FREQ'], bytes) and isinstance(_peer_conf['RX_FREQ'], bytes) and _peer_conf['TX_FREQ'].strip().isdigit() and _peer_conf['RX_FREQ'].strip().isdigit(): if _peer_conf['TX_FREQ'][:3] == b'000' or _peer_conf['TX_FREQ'][:1] == b'0' or _peer_conf['RX_FREQ'][:3] == b'000' or _peer_conf['RX_FREQ'][:1] == b'0': _ctable_peer['TX_FREQ'] = 'N/A' _ctable_peer['RX_FREQ'] = 'N/A' @@ -338,37 +338,37 @@ def add_hb_peer(_peer_conf, _ctable_loc, _peer): _ctable_peer['SLOTS'] = 'Simplex' # Simple translation items - if str(type(_peer_conf['PACKAGE_ID'])).find("bytes") != -1: + if isinstance(_peer_conf['PACKAGE_ID'], bytes): _ctable_peer['PACKAGE_ID'] = _peer_conf['PACKAGE_ID'].decode('utf-8') else: _ctable_peer['PACKAGE_ID'] = _peer_conf['PACKAGE_ID'] - if str(type(_peer_conf['SOFTWARE_ID'])).find("bytes") != -1: + if isinstance(_peer_conf['SOFTWARE_ID'], bytes): _ctable_peer['SOFTWARE_ID'] = _peer_conf['SOFTWARE_ID'].decode('utf-8') else: _ctable_peer['SOFTWARE_ID'] = _peer_conf['SOFTWARE_ID'] - if str(type(_peer_conf['LOCATION'])).find("bytes") != -1: + if isinstance(_peer_conf['LOCATION'], bytes): _ctable_peer['LOCATION'] = _peer_conf['LOCATION'].decode('utf-8').strip() else: _ctable_peer['LOCATION'] = _peer_conf['LOCATION'] - if str(type(_peer_conf['DESCRIPTION'])).find("bytes") != -1: + if isinstance(_peer_conf['DESCRIPTION'], bytes): _ctable_peer['DESCRIPTION'] = _peer_conf['DESCRIPTION'].decode('utf-8').strip() else: _ctable_peer['DESCRIPTION'] = _peer_conf['DESCRIPTION'] - if str(type(_peer_conf['URL'])).find("bytes") != -1: + if isinstance(_peer_conf['URL'], bytes): _ctable_peer['URL'] = _peer_conf['URL'].decode('utf-8').strip() else: _ctable_peer['URL'] = _peer_conf['URL'] - if str(type(_peer_conf['CALLSIGN'])).find("bytes") != -1: + if isinstance(_peer_conf['CALLSIGN'], bytes): _ctable_peer['CALLSIGN'] = _peer_conf['CALLSIGN'].decode('utf-8').strip() else: _ctable_peer['CALLSIGN'] = _peer_conf['CALLSIGN'] - if str(type(_peer_conf['COLORCODE'])).find("bytes") != -1: + if isinstance(_peer_conf['COLORCODE'], bytes): _ctable_peer['COLORCODE'] = _peer_conf['COLORCODE'].decode('utf-8').strip() else: _ctable_peer['COLORCODE'] = _peer_conf['COLORCODE'] @@ -417,22 +417,22 @@ def build_hblink_table(_config, _stats_table): _stats_table['PEERS'][_hbp] = {} _stats_table['PEERS'][_hbp]['MODE'] = _hbp_data['MODE'] - if str(type(_hbp_data['LOCATION'])).find("bytes") != -1: + if isinstance(_hbp_data['LOCATION'], bytes): _stats_table['PEERS'][_hbp]['LOCATION'] = _hbp_data['LOCATION'].decode('utf-8').strip() else: _stats_table['PEERS'][_hbp]['LOCATION'] = _hbp_data['LOCATION'] - if str(type(_hbp_data['DESCRIPTION'])).find("bytes") != -1: + if isinstance(_hbp_data['DESCRIPTION'], bytes): _stats_table['PEERS'][_hbp]['DESCRIPTION'] = _hbp_data['DESCRIPTION'].decode('utf-8').strip() else: _stats_table['PEERS'][_hbp]['DESCRIPTION'] = _hbp_data['DESCRIPTION'] - if str(type(_hbp_data['URL'])).find("bytes") != -1: + if isinstance(_hbp_data['URL'], bytes): _stats_table['PEERS'][_hbp]['URL'] = _hbp_data['DESCRIPTION'].decode('utf-8').strip() else: _stats_table['PEERS'][_hbp]['URL'] = _hbp_data['DESCRIPTION'] - if str(type(_hbp_data['CALLSIGN'])).find("bytes") != -1: + if isinstance(_hbp_data['CALLSIGN'], bytes): _stats_table['PEERS'][_hbp]['CALLSIGN'] = _hbp_data['CALLSIGN'].decode('utf-8').strip() else: _stats_table['PEERS'][_hbp]['CALLSIGN'] = _hbp_data['CALLSIGN'] @@ -1028,7 +1028,7 @@ if __name__ == '__main__': # Jinja2 Stuff env = Environment( - loader=PackageLoader('monitor', 'templates'), + loader=FileSystemLoader(os.path.join(os.path.dirname(__file__), 'templates')), autoescape=select_autoescape(['html', 'xml']) ) From bbe572e3c8895151f7cc3183834c8839bd0ee314 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 13 Dec 2025 01:51:01 +0000 Subject: [PATCH 4/6] Update install.sh with apt-get update and upgrade pip packages Co-authored-by: ShaYmez <76499782+ShaYmez@users.noreply.github.com> --- install.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 2dc9e5a..53f57d0 100644 --- a/install.sh +++ b/install.sh @@ -1,6 +1,7 @@ #! /bin/bash # Install the required support programs +apt-get update apt-get install python3 python3-pip python3-dev libffi-dev libssl-dev cargo sed -y -pip3 install setuptools wheel +pip3 install --upgrade setuptools wheel pip3 install -r requirements.txt From cec71ea90b9ec28d0350453b4a1bffd88697912b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 13 Dec 2025 01:52:17 +0000 Subject: [PATCH 5/6] Fix bug: URL field was incorrectly assigned DESCRIPTION value Co-authored-by: ShaYmez <76499782+ShaYmez@users.noreply.github.com> --- monitor.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/monitor.py b/monitor.py index 316aafe..393afc4 100644 --- a/monitor.py +++ b/monitor.py @@ -428,9 +428,9 @@ def build_hblink_table(_config, _stats_table): _stats_table['PEERS'][_hbp]['DESCRIPTION'] = _hbp_data['DESCRIPTION'] if isinstance(_hbp_data['URL'], bytes): - _stats_table['PEERS'][_hbp]['URL'] = _hbp_data['DESCRIPTION'].decode('utf-8').strip() + _stats_table['PEERS'][_hbp]['URL'] = _hbp_data['URL'].decode('utf-8').strip() else: - _stats_table['PEERS'][_hbp]['URL'] = _hbp_data['DESCRIPTION'] + _stats_table['PEERS'][_hbp]['URL'] = _hbp_data['URL'] if isinstance(_hbp_data['CALLSIGN'], bytes): _stats_table['PEERS'][_hbp]['CALLSIGN'] = _hbp_data['CALLSIGN'].decode('utf-8').strip() From 3f23ef5efacda4b8aa40e9c5ecb3a4a4d38d06d6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 13 Dec 2025 01:53:39 +0000 Subject: [PATCH 6/6] Add exception handling for frequency parsing robustness Co-authored-by: ShaYmez <76499782+ShaYmez@users.noreply.github.com> --- monitor.py | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/monitor.py b/monitor.py index 393afc4..0972c50 100644 --- a/monitor.py +++ b/monitor.py @@ -315,14 +315,20 @@ def add_hb_peer(_peer_conf, _ctable_loc, _peer): # if the Frequency is 000.xxx assume it's not an RF peer, otherwise format the text fields # (9 char, but we are just software) see https://wiki.brandmeister.network/index.php/Homebrew/example/php2 - if isinstance(_peer_conf['TX_FREQ'], bytes) and isinstance(_peer_conf['RX_FREQ'], bytes) and _peer_conf['TX_FREQ'].strip().isdigit() and _peer_conf['RX_FREQ'].strip().isdigit(): - if _peer_conf['TX_FREQ'][:3] == b'000' or _peer_conf['TX_FREQ'][:1] == b'0' or _peer_conf['RX_FREQ'][:3] == b'000' or _peer_conf['RX_FREQ'][:1] == b'0': + try: + if isinstance(_peer_conf['TX_FREQ'], bytes) and isinstance(_peer_conf['RX_FREQ'], bytes) and \ + _peer_conf['TX_FREQ'].strip().isdigit() and _peer_conf['RX_FREQ'].strip().isdigit(): + if _peer_conf['TX_FREQ'][:3] == b'000' or _peer_conf['TX_FREQ'][:1] == b'0' or \ + _peer_conf['RX_FREQ'][:3] == b'000' or _peer_conf['RX_FREQ'][:1] == b'0': + _ctable_peer['TX_FREQ'] = 'N/A' + _ctable_peer['RX_FREQ'] = 'N/A' + else: + _ctable_peer['TX_FREQ'] = _peer_conf['TX_FREQ'][:3].decode('utf-8') + '.' + _peer_conf['TX_FREQ'][3:7].decode('utf-8') + ' MHz' + _ctable_peer['RX_FREQ'] = _peer_conf['RX_FREQ'][:3].decode('utf-8') + '.' + _peer_conf['RX_FREQ'][3:7].decode('utf-8') + ' MHz' + else: _ctable_peer['TX_FREQ'] = 'N/A' _ctable_peer['RX_FREQ'] = 'N/A' - else: - _ctable_peer['TX_FREQ'] = _peer_conf['TX_FREQ'][:3].decode('utf-8') + '.' + _peer_conf['TX_FREQ'][3:7].decode('utf-8') + ' MHz' - _ctable_peer['RX_FREQ'] = _peer_conf['RX_FREQ'][:3].decode('utf-8') + '.' + _peer_conf['RX_FREQ'][3:7].decode('utf-8') + ' MHz' - else: + except (AttributeError, ValueError, KeyError): _ctable_peer['TX_FREQ'] = 'N/A' _ctable_peer['RX_FREQ'] = 'N/A' # timeslots are kinda complicated too. 0 = none, 1 or 2 mean that one slot, 3 is both, and anything else it considered DMO