Zřetelné hlášení síťových chyb během stahování

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.
This commit is contained in:
Claude
2026-06-12 10:32:37 +00:00
committed by David Spáčil
parent 64ec1ea7fd
commit 93ed0ca810
+43 -1
View File
@@ -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}). "