From fc7d8b8be221874f8dac0dcedf6ca02a45beca22 Mon Sep 17 00:00:00 2001 From: Markus Heiser Date: Mon, 13 Oct 2025 07:37:42 +0200 Subject: [PATCH] [fix] !weather crashes - cls.TURN 'member_descriptor' isn't a float (#5309) The class method ``Compass.point`` is converted into an instance method to circumvent the problem described in [1] (without understanding the cause). [1] https://github.com/searxng/searxng/issues/5304#issuecomment-3394140820 Signed-off-by: Markus Heiser --- searx/weather.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/searx/weather.py b/searx/weather.py index 429758055..3bd7f93cb 100644 --- a/searx/weather.py +++ b/searx/weather.py @@ -506,15 +506,14 @@ class Compass(msgspec.Struct): return self.val raise ValueError(f"unknown unit: {unit}") - @classmethod - def point(cls, azimuth: float | int) -> CompassPoint: + def point(self, azimuth: float | int) -> CompassPoint: """Returns the compass point to an azimuth value.""" - azimuth = azimuth % cls.TURN + azimuth = azimuth % self.TURN # The angle sector of a compass point starts 1/2 sector range before # and after compass point (example: "N" goes from -11.25° to +11.25°) - azimuth = azimuth - cls.RANGE / 2 - idx = int(azimuth // cls.RANGE) - return cls.POINTS[idx] + azimuth = azimuth - self.RANGE / 2 + idx = int(azimuth // self.RANGE) + return self.POINTS[idx] def l10n( self,