From c80857d68ba8ad8663c56eae2f6e87ddc4f3e696 Mon Sep 17 00:00:00 2001 From: andres-h Date: Thu, 4 Dec 2025 17:59:00 +0100 Subject: [PATCH 1/2] [fdsnws] Add PyJWT version check --- apps/fdsnws/fdsnws.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/fdsnws/fdsnws.py b/apps/fdsnws/fdsnws.py index fe985049e..8be5af7f4 100644 --- a/apps/fdsnws/fdsnws.py +++ b/apps/fdsnws/fdsnws.py @@ -72,13 +72,17 @@ ) from seiscomp.fdsnws.log import Log +_jwtSupported = False + try: + import jwt from seiscomp.fdsnws.jwt import JWT - _jwtSupported = True + if int(jwt.__version__.split(".")[0]) >= 2: + _jwtSupported = True except ImportError: - _jwtSupported = False + pass def logSC3(entry): @@ -999,7 +1003,7 @@ def _site(self): if self._jwtEnabled: if not _jwtSupported: seiscomp.logging.error( - "JWT is not supported due to missing dependencies" + "JWT support requires PyJWT 2.0.0 or newer. Please install PyJWT with \"pip\" or install the required version of the python3-PyJWT package if available." ) return None From 9d0d61713460f7d3087d35c104212f3ba5ce2fc7 Mon Sep 17 00:00:00 2001 From: andres-h Date: Fri, 5 Dec 2025 15:20:00 +0100 Subject: [PATCH 2/2] [fdsnws] Reformat with black --- apps/fdsnws/fdsnws.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/apps/fdsnws/fdsnws.py b/apps/fdsnws/fdsnws.py index 8be5af7f4..f4209b423 100644 --- a/apps/fdsnws/fdsnws.py +++ b/apps/fdsnws/fdsnws.py @@ -424,7 +424,10 @@ def __init__(self, argc, argv): self._checker = None self._jwtEnabled = False - self._jwtIssuers = ["https://geofon.gfz.de/eas2", "https://login.earthscope.org/"] + self._jwtIssuers = [ + "https://geofon.gfz.de/eas2", + "https://login.earthscope.org/", + ] self._jwtAudience = ["eas", "fdsn"] self._jwtAlgorithms = ["RS256"] self._jwtUpdateMin = 300 @@ -710,10 +713,8 @@ def initConfiguration(self): # dataSelect filter try: - self._dataSelectFilter = ( - seiscomp.system.Environment.Instance().absolutePath( - self.configGetString("dataSelectFilter") - ) + self._dataSelectFilter = seiscomp.system.Environment.Instance().absolutePath( + self.configGetString("dataSelectFilter") ) except Exception: pass @@ -1003,12 +1004,18 @@ def _site(self): if self._jwtEnabled: if not _jwtSupported: seiscomp.logging.error( - "JWT support requires PyJWT 2.0.0 or newer. Please install PyJWT with \"pip\" or install the required version of the python3-PyJWT package if available." + "JWT support requires PyJWT 2.0.0 or newer. Please install PyJWT " + 'with "pip" or install the required version of the python3-PyJWT ' + "package if available." ) return None self._jwt = JWT( - self._jwtIssuers, self._jwtAudience, self._jwtAlgorithms, self._jwtUpdateMin, self._jwtUpdateMax + self._jwtIssuers, + self._jwtAudience, + self._jwtAlgorithms, + self._jwtUpdateMin, + self._jwtUpdateMax, ) # access logger if requested @@ -1019,9 +1026,9 @@ def _site(self): stationInv = dataSelectInv = None if self._serveDataSelect or self._serveStation: retn = False - stationInv = dataSelectInv = ( - seiscomp.client.Inventory.Instance().inventory() - ) + stationInv = ( + dataSelectInv + ) = seiscomp.client.Inventory.Instance().inventory() seiscomp.logging.info("inventory loaded") if self._serveDataSelect and self._serveStation: