From 93ed0ca810767f5eead7866b93064a85da589f8b Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 12 Jun 2026 10:32:37 +0000 Subject: [PATCH] =?UTF-8?q?Z=C5=99eteln=C3=A9=20hl=C3=A1=C5=A1en=C3=AD=20s?= =?UTF-8?q?=C3=AD=C5=A5ov=C3=BDch=20chyb=20b=C4=9Bhem=20stahov=C3=A1n?= =?UTF-8?q?=C3=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Při výpadku sítě uprostřed stahování se dosud chyba jen zapsala do logu: stránkování se tiše ukončilo s částečnými daty a smyčka PIAN zkoušela marně všechny zbývající dávky, takže uživatel skončil u hlášky 'Žádná data k zobrazení' bez vysvětlení. - Síťové chyby (requests.RequestException) se v obou smyčkách chytají zvlášť a stahování PIAN se po první z nich ihned ukončí. - Pokud selže už stahování metadat, zobrazí se červená lišta 'Stahování selhalo: chyba sítě'. - Pokud se stihla vykreslit část dat, zobrazí se varování, že výsledek je neúplný a je třeba stahování zopakovat. --- amcr_viewer/amcr_tools.py | 44 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/amcr_viewer/amcr_tools.py b/amcr_viewer/amcr_tools.py index cc484d2..e872cbf 100644 --- a/amcr_viewer/amcr_tools.py +++ b/amcr_viewer/amcr_tools.py @@ -308,6 +308,10 @@ def load_amcr_data(canvas, bb, filters=None, filter_areal = "f_areal" in filters if filters else False filter_datace = "f_obdobi" in filters if filters else False + # Set when a network error interrupts the download – the user + # gets an explicit error/warning instead of a silent partial result + network_error = False + # --- API PAGINATION LOOP --- while True: base_params['rows'] = BATCH_DOCS @@ -358,6 +362,14 @@ def load_amcr_data(canvas, bb, filters=None, current_page += 1 QApplication.processEvents() # Keep UI responsive + except requests.exceptions.RequestException as e: + network_error = True + QgsMessageLog.logMessage( + f"Chyba sítě při stránkování na straně " + f"{current_page}: {e}", + "AMČR", Qgis.MessageLevel.Critical + ) + break except Exception as e: QgsMessageLog.logMessage( f"Chyba při stránkování na straně {current_page}: {e}", @@ -365,6 +377,15 @@ def load_amcr_data(canvas, bb, filters=None, ) break + if network_error and not docs: + iface.messageBar().pushMessage( + "AMCR", + "Stahování selhalo: chyba sítě. " + "Zkontrolujte připojení k internetu.", + level=Qgis.MessageLevel.Critical + ) + return + if not docs: iface.messageBar().pushMessage( "AMCR", @@ -640,6 +661,15 @@ def load_amcr_data(canvas, bb, filters=None, QApplication.processEvents() r_json = _api_get_json(url, params=params_pian, timeout=15) docs_pian.extend(r_json.get('response', {}).get('docs', [])) + except requests.exceptions.RequestException as e: + # Network is down – stop immediately instead of + # uselessly retrying every remaining batch + network_error = True + QgsMessageLog.logMessage( + f"Chyba sítě při stahování geometrií PIAN: {e}", + "AMČR", Qgis.MessageLevel.Critical + ) + break except Exception as e: QgsMessageLog.logMessage( f"Chyba PIAN: {e}", @@ -920,7 +950,19 @@ def load_amcr_data(canvas, bb, filters=None, proj.addMapLayer(l) added += len(f) - if added > 0: + if network_error: + iface.messageBar().pushMessage( + "AMCR", + "Stahování bylo přerušeno chybou sítě – " + f"výsledek je neúplný (vykresleno {added} prvků). " + "Zkontrolujte připojení a spusťte stahování znovu.", + level=( + Qgis.MessageLevel.Warning + if added > 0 + else Qgis.MessageLevel.Critical + ) + ) + elif added > 0: iface.messageBar().pushMessage( "AMCR", f"Hotovo. Záznamů: {len(docs)} (s geom: {actions_with_geom}). "