From 127f9dca7dbb6b3463240bcb3a92692d9532f6d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20Ha=C3=9Fel?= Date: Sat, 27 Sep 2025 15:43:06 +0200 Subject: [PATCH] code clean: pomodules --- po_runner.py | 21 +++++++++++---------- pomodules/po_history.py | 4 ++-- pomodules/po_stations.py | 5 +++-- pomodules/po_stations_qgs.py | 5 +++-- pomodules/po_waterlevels.py | 21 ++++++++------------- pomodules/po_waterlevels_qgs.py | 22 ++++++++++++++-------- pomodules/urlreader.py | 4 ++++ 7 files changed, 45 insertions(+), 37 deletions(-) diff --git a/po_runner.py b/po_runner.py index a291b7b..f056621 100644 --- a/po_runner.py +++ b/po_runner.py @@ -7,8 +7,8 @@ from qgis._core import QgsVectorLayer, QgsProject, QgsLayerTreeLayer, QgsPalLaye from .pegelonline_dockwidget import PegelonlineDockWidget from .pomodules.po_history import PoHistory from .pomodules.po_stations import PoStations -from .pomodules.po_stations_qgs import PoQgsStations -from .pomodules.po_waterlevels_qgs import PoQgsCurrentW +from .pomodules.po_stations_qgs import PoStationsQgs +from .pomodules.po_waterlevels_qgs import PoWaterlevelsQgs INFIX = ", ' - ', " @@ -16,17 +16,18 @@ INFIX = ", ' - ', " # noinspection PyMethodMayBeStatic class PoRunner(object): - def __init__(self, ui: PegelonlineDockWidget, iface): - self.ui: PegelonlineDockWidget = ui + def __init__(self, ui, iface): + self.ui = ui self.iface = iface self.local_dir = os.path.dirname(os.path.realpath(__file__)) - # Layer Variablen + # Layer self.stations = None self.waterlevels = None self.lines = None self.areas = None + # ui Signale verbinden self.connect_basemap_signals() self.connect_stations_signals() self.connect_waterlevels_signals() @@ -54,7 +55,7 @@ class PoRunner(object): # zum LayerTree hinzufügen layer_tree = self.iface.layerTreeCanvasBridge().rootGroup() - layer_tree.insertChildNode(-1, QgsLayerTreeLayer(basemap)) + layer_tree.insertChildNode(-1, QgsLayerTreeLayer(basemap)) # am unteren Ende anhängen → liegt somit unter stations/waterlevels return basemap @@ -114,7 +115,7 @@ class PoRunner(object): print("cbStationsVisibleToggled: %s" % (visible,)) if self.stations is None and visible: - reader = PoQgsStations() + reader = PoStationsQgs() features = reader.getStationsFeatures() self.stations = self._layerFromReader(reader.fields, reader.crs, features, "Stationen") self._layerAdd(self.stations, "styles/label_stations.qml", self.disconnectStations) @@ -192,8 +193,8 @@ class PoRunner(object): print("cbWaterlevelsVisibleToggled: %s" % (visible,)) if self.waterlevels is None and visible: - reader = PoQgsCurrentW() - features = reader.getCurrentWFeatures() + reader = PoWaterlevelsQgs() + features = reader.getWaterlevelsFeatures() self.waterlevels = self._layerFromReader(reader.fields, reader.crs, features, "Wasserstandinformationen") self._layerAdd(self.waterlevels, "styles/label_currentw.qml", self.disconnectWaterlevels) @@ -314,7 +315,7 @@ class PoRunner(object): # zum LayerTree hinzufügen layer_tree = self.iface.layerTreeCanvasBridge().rootGroup() - layer_tree.insertChildNode(0, QgsLayerTreeLayer(layer)) + layer_tree.insertChildNode(0, QgsLayerTreeLayer(layer)) # am oberen Ende anhängen → liegt somit über basemap def _layerUpdateLabeling(self, layer, fields): labeling = QgsVectorLayerSimpleLabeling(QgsPalLayerSettings()) diff --git a/pomodules/po_history.py b/pomodules/po_history.py index 3bd3137..7b6c643 100644 --- a/pomodules/po_history.py +++ b/pomodules/po_history.py @@ -10,12 +10,12 @@ class PoHistory(UrlReader): super().__init__(poBaseURL + 'stations/%s/W/measurements.png?start=P%dD' % (quote(station), days)) def download(self): - print("download: Getting data...") + print("download: Lade Bild herunter...") image_data = self.getDataResponse() if image_data is None or len(image_data) == 0: print("download: Fehler: Keine Daten erhalten") return None - print("download: Complete") + print("download: Vollständig") return image_data diff --git a/pomodules/po_stations.py b/pomodules/po_stations.py index d1009bc..f41b48d 100644 --- a/pomodules/po_stations.py +++ b/pomodules/po_stations.py @@ -8,7 +8,7 @@ class PoStations(UrlReader): super().__init__(poBaseURL + 'stations.json') def getStations(self): - print("getStations: Getting data...") + print("getStations: Lade Stationen herunter...") stations_json = self.getJsonResponse() if stations_json is None or len(stations_json) == 0: @@ -37,5 +37,6 @@ class PoStations(UrlReader): } ) - print("getStations: %d / %d Stationen überführt" % (len(stations), len(stations_json))) + print("getStations: %d Stationen erhalten" % (len(stations),)) + return stations diff --git a/pomodules/po_stations_qgs.py b/pomodules/po_stations_qgs.py index 53d1759..76619ac 100644 --- a/pomodules/po_stations_qgs.py +++ b/pomodules/po_stations_qgs.py @@ -5,7 +5,7 @@ from qgis.core import QgsFields, QgsFeature, QgsField from .po_stations import PoStations -class PoQgsStations(PoStations): +class PoStationsQgs(PoStations): def __init__(self): super().__init__() @@ -28,7 +28,7 @@ class PoQgsStations(PoStations): stations = self.getStations() if stations is None or len(stations) == 0: - print("getStations: Fehler: Keine Stationen erhalten") + print("getStationsFeatures: Fehler: Keine Stationen erhalten") return None for station in stations: @@ -40,6 +40,7 @@ class PoQgsStations(PoStations): return features def _getFeatureForStation(self, station) -> None | QgsFeature: + # noinspection DuplicatedCode if station['geometry']['longitude'] is None or station['geometry']['latitude'] is None: print("_getFeatureForStation: WARN: Station hat fehlende Koordinaten: %s" % (station['attributes']['shortname'],)) return None diff --git a/pomodules/po_waterlevels.py b/pomodules/po_waterlevels.py index a24dfe2..e8bea98 100644 --- a/pomodules/po_waterlevels.py +++ b/pomodules/po_waterlevels.py @@ -2,32 +2,26 @@ from . import poBaseURL from .urlreader import UrlReader -class PoCurrentW(UrlReader): +class PoWaterlevels(UrlReader): def __init__(self): super().__init__(poBaseURL + 'stations.json?timeseries=W&includeTimeseries=true&includeCurrentMeasurement=true') - def getCurrentW(self): - print("getCurrentW: Getting data...") + def getWaterlevels(self): + print("getWaterlevels: Lade Pegelstände herunter...") stations_json = self.getJsonResponse() if stations_json is None or len(stations_json) == 0: - print("getCurrentW: FEHLER: Keine Stationen erhalten") + print("getWaterlevels: FEHLER: Keine Pegelstände erhalten") return None - print("getCurrentW: %d Stationen erhalten" % (len(stations_json),)) - stations = [] for station_json in stations_json: - if 'longitude' not in station_json or 'latitude' not in station_json: - print("getCurrentW: WARN: Station hat fehlende Koordinaten: %s" % (station_json['longname'],)) - continue - stations.append( { 'geometry': { - 'longitude': station_json['longitude'], - 'latitude': station_json['latitude'], + 'longitude': station_json['longitude'] if 'longitude' in station_json else None, + 'latitude': station_json['latitude'] if 'latitude' in station_json else None, }, 'attributes': { 'uuid': station_json['uuid'], @@ -42,5 +36,6 @@ class PoCurrentW(UrlReader): } ) - print("getCurrentW: %d / %d Stationen überführt" % (len(stations), len(stations_json))) + print("getWaterlevels: %d Pegelstände erhalten" % (len(stations),)) + return stations diff --git a/pomodules/po_waterlevels_qgs.py b/pomodules/po_waterlevels_qgs.py index 9037d14..811bc57 100644 --- a/pomodules/po_waterlevels_qgs.py +++ b/pomodules/po_waterlevels_qgs.py @@ -2,18 +2,18 @@ from PyQt5.QtCore import QVariant from qgis._core import QgsCoordinateReferenceSystem, QgsGeometry, QgsPointXY from qgis.core import QgsFields, QgsFeature, QgsField -from .po_waterlevels import PoCurrentW +from .po_waterlevels import PoWaterlevels -class PoQgsCurrentW(PoCurrentW): +class PoWaterlevelsQgs(PoWaterlevels): def __init__(self): super().__init__() self.fields = None self.crs = QgsCoordinateReferenceSystem(4326, QgsCoordinateReferenceSystem.EpsgCrsId) - def getCurrentWFeatures(self): - print("getCurrentWFeatures: Erzeuge Features...") + def getWaterlevelsFeatures(self): + print("getWaterlevelsFeatures: Erzeuge Features...") self.fields = QgsFields() self.fields.append(QgsField('shortname', QVariant.String)) @@ -25,19 +25,25 @@ class PoQgsCurrentW(PoCurrentW): self.fields.append(QgsField('stateNswHsw', QVariant.String)) features = [] - waterlevels = self.getCurrentW() + waterlevels = self.getWaterlevels() if waterlevels is None or len(waterlevels) > 0: - print("getCurrentW: Fehler: Keine Pegelstände erhalten") + print("getWaterlevelsFeatures: Fehler: Keine Pegelstände erhalten") return None for station in waterlevels: feature = self._getFeatureForStation(station) - features.append(feature) + if feature is not None: + features.append(feature) - print("getCurrentWFeatures: %d Features erzeugt" % (len(features),)) + print("getWaterlevelsFeatures: %d Features erzeugt" % (len(features),)) return features def _getFeatureForStation(self, station): + # noinspection DuplicatedCode + if station['geometry']['longitude'] is None or station['geometry']['latitude'] is None: + print("_getFeatureForStation: WARN: Station hat fehlende Koordinaten: %s" % (station['attributes']['shortname'],)) + return None + feature = QgsFeature(self.fields) longitude = station['geometry']['longitude'] diff --git a/pomodules/urlreader.py b/pomodules/urlreader.py index 70d441b..b8b0957 100644 --- a/pomodules/urlreader.py +++ b/pomodules/urlreader.py @@ -9,6 +9,10 @@ from urllib.request import Request, urlopen class UrlReader(object): def __init__(self, _url): + """ + Erzeugt einen neuen UrlReader für gegebene url + :param _url: zu öffnende URL + """ self.url = _url def openUrl(self):