mirror of
https://github.com/ARUP-CAS/aiscr-qgis-amcr-viewer.git
synced 2026-10-08 20:07:36 +02:00
chore: úklid nálezů z lintů
Bez změny chování. Kontroly, které pouští plugins.qgis.org (flake8), plus ruff. flake8: odstraněny koncové bílé znaky, srovnány nadbytečné prázdné řádky a zalomeno 12 řádků přes 79 znaků. Hlášku o HTTP chybě v login_to_api() si nešlo jen zalomit – tělo odpovědi je nově v proměnné `telo`, výsledný text je stejný. ruff: odstraněny zbytečné prefixy u'' u překládaných řetězců (6×), .format() nahrazen f-stringem, str() uvnitř f-stringu převedeno na !s, `k in dict.keys()` na `k in dict`, prázdný komentář; nepoužitá rozbalená proměnná `existing_cfg` nahrazena `_`. Vědomě neřešeno: - resources.py (5 zbylých nálezů flake8) je generovaný výstup pyrcc, nese hlavičku "All changes made in this file will be lost", není nikde importovaný a v repu k němu chybí zdrojový .qrc. - ruff BLE001 (10×) hlásí `except Exception`. Ty jsou v pluginu záměrné: drží pád mimo QGIS a chybu ukážou v liště zpráv. Změna by byla zásah do chování, ne úklid. - ruff SIM103 (2×) navrhuje sloučit strážní podmínky do jednoho výrazu. Obě místa mají ke každé větvi vysvětlující komentář, sloučením by se staly hůř čitelnými. - ruff UP009 a I001 (coding hlavička a řazení importů) jsou celoprojektová konvence; jejich změna patří do samostatného rozhodnutí, ne sem. Ověřeno v QGIS 3.44.13 (Qt5) i QGIS 4.2.1 (Qt6): importy, vytvoření tasku i všechny tři filtrační dialogy fungují shodně. Bandit, detect-secrets i pyqgis4-checker hlásí nula nálezů.
This commit is contained in:
1 parent
d398d2cd1b
commit
048ffe4e2a
5 files changed
+45
-34
No files matched your search
@@ -31,6 +31,5 @@ def classFactory(iface): # pylint: disable=invalid-name
|
||||
:param iface: A QGIS interface instance.
|
||||
:type iface: QgsInterface
|
||||
"""
|
||||
#
|
||||
from .amcr_viewer import AmcrViewer
|
||||
return AmcrViewer(iface)
|
||||
@@ -98,7 +98,7 @@ def parse_codelist_file(filename, target_dict=None):
|
||||
def load_all_data():
|
||||
"""Loads the codelist during plugin startup."""
|
||||
ensure_codelists_dir()
|
||||
categorized_data = {k: {} for k in slovnicek.keys()}
|
||||
categorized_data = {k: {} for k in slovnicek}
|
||||
parse_codelist_file('heslar.csv', categorized_data)
|
||||
return categorized_data
|
||||
|
||||
@@ -124,7 +124,9 @@ def fetch_set(base_url, internal_name, api_set, task=None):
|
||||
|
||||
try:
|
||||
if "digiarchiv" not in base_url:
|
||||
response = requests.get(base_url, params=params_amcr, timeout=30)
|
||||
response = requests.get(
|
||||
base_url, params=params_amcr, timeout=30
|
||||
)
|
||||
response.raise_for_status()
|
||||
root = ET.fromstring(response.content) # nosec
|
||||
|
||||
@@ -193,7 +195,7 @@ def fetch_set(base_url, internal_name, api_set, task=None):
|
||||
time.sleep(0.5)
|
||||
else:
|
||||
break
|
||||
|
||||
|
||||
else:
|
||||
response = requests.get(base_url, params=params_da, timeout=30)
|
||||
response.raise_for_status()
|
||||
@@ -210,8 +212,8 @@ def fetch_set(base_url, internal_name, api_set, task=None):
|
||||
'Kód': nazev,
|
||||
'Kategorie': internal_name
|
||||
})
|
||||
|
||||
break
|
||||
|
||||
break
|
||||
|
||||
except Exception as e:
|
||||
QgsMessageLog.logMessage(
|
||||
|
||||
@@ -13,7 +13,7 @@ from qgis.utils import iface
|
||||
from .amcr_codelists import (OBDOBI, TYP_AKCE, KRAJE, AREAL, ORGANIZACE,
|
||||
OKRESY, KATASTRY, VEDOUCI, PIAN_PRESNOST,
|
||||
TYP_LOKALITY, DRUH_LOKALITY, JISTOTA,
|
||||
LOKALITA_ZACHOVALOST, PRISTUPNOST,
|
||||
LOKALITA_ZACHOVALOST, PRISTUPNOST,
|
||||
NALEZ_KATEGORIE, DRUH_NALEZU, SPECIFIKACE,
|
||||
NALEZOVE_OKOLNOSTI, NALEZCE,
|
||||
download_heslare, refresh_globals)
|
||||
@@ -608,7 +608,7 @@ class AmcrFilterDialog(QDialog):
|
||||
# This will show exactly what went wrong (e.g. PermissionError)
|
||||
msg = (
|
||||
"Aktualizace selhala z důvodu chyby:\n"
|
||||
f"{str(task.exception)}"
|
||||
f"{task.exception!s}"
|
||||
)
|
||||
else:
|
||||
msg = "Aktualizace byla zrušena uživatelem."
|
||||
@@ -660,7 +660,7 @@ class AmcrFilterDialog(QDialog):
|
||||
filters['f_vedouci'] = self.selection_cache['vedouci']
|
||||
|
||||
if self.selection_cache['organizace']:
|
||||
filters['f_organizace'] = self.selection_cache['organizace']
|
||||
filters['f_organizace'] = self.selection_cache['organizace']
|
||||
|
||||
if self.selection_cache['typ_lokality']:
|
||||
filters['f_typ_lokality'] = self.selection_cache['typ_lokality']
|
||||
@@ -669,7 +669,9 @@ class AmcrFilterDialog(QDialog):
|
||||
if self.selection_cache['jistota']:
|
||||
filters['f_jistota'] = self.selection_cache['jistota']
|
||||
if self.selection_cache['lokalita_zachovalost']:
|
||||
filters['f_lokalita_zachovalost'] = self.selection_cache['lokalita_zachovalost']
|
||||
filters['f_lokalita_zachovalost'] = (
|
||||
self.selection_cache['lokalita_zachovalost']
|
||||
)
|
||||
|
||||
# Samostatné nálezy
|
||||
if self.selection_cache['nalez_kategorie']:
|
||||
@@ -679,7 +681,9 @@ class AmcrFilterDialog(QDialog):
|
||||
if self.selection_cache['specifikace']:
|
||||
filters['f_specifikace'] = self.selection_cache['specifikace']
|
||||
if self.selection_cache['nalezove_okolnosti']:
|
||||
filters['f_nalezove_okolnosti'] = self.selection_cache['nalezove_okolnosti']
|
||||
filters['f_nalezove_okolnosti'] = (
|
||||
self.selection_cache['nalezove_okolnosti']
|
||||
)
|
||||
if self.selection_cache['nalezce']:
|
||||
filters['f_nalezce'] = self.selection_cache['nalezce']
|
||||
|
||||
@@ -718,7 +722,8 @@ class LoginDialog(QDialog):
|
||||
- storeAuthenticationConfig() and loadAuthenticationConfig() both have
|
||||
SIP_INOUT on their config parameter, so Python bindings return a tuple
|
||||
(bool, QgsAuthMethodConfig) rather than just bool. Always unpack both.
|
||||
- loadAuthenticationConfig() with full=False loads only metadata (name, method,
|
||||
- loadAuthenticationConfig() with full=False loads only metadata
|
||||
(name, method,
|
||||
id) but NOT the config() values like username/password. Use full=True to
|
||||
access those.
|
||||
"""
|
||||
@@ -949,7 +954,7 @@ class LoginDialog(QDialog):
|
||||
# We skip hasConfigId() as it may return False
|
||||
# despite the config existing
|
||||
# (in-memory cache may not be populated yet in QGIS 4).
|
||||
ok_load, existing_cfg = (
|
||||
ok_load, _ = (
|
||||
self._load_config(existing_id, full=False)
|
||||
if existing_id
|
||||
else (False, None)
|
||||
@@ -978,7 +983,9 @@ class LoginDialog(QDialog):
|
||||
settings = QSettings()
|
||||
existing_id = settings.value(self.SETTINGS_KEY, "")
|
||||
if existing_id:
|
||||
QgsApplication.authManager().removeAuthenticationConfig(existing_id)
|
||||
QgsApplication.authManager().removeAuthenticationConfig(
|
||||
existing_id
|
||||
)
|
||||
settings.remove(self.SETTINGS_KEY)
|
||||
QMessageBox.information(
|
||||
self,
|
||||
@@ -1013,4 +1020,5 @@ class LoginDialog(QDialog):
|
||||
if not ok:
|
||||
return "", ""
|
||||
|
||||
return cfg.config("username", ""), cfg.config("password", "") # nosec B106
|
||||
return (cfg.config("username", ""),
|
||||
cfg.config("password", "")) # nosec B106
|
||||
+12
-11
@@ -109,8 +109,9 @@ def login_to_api(username: str, password: str):
|
||||
|
||||
except requests.exceptions.HTTPError as e:
|
||||
status = e.response.status_code if e.response is not None else None
|
||||
_log(f"CHYBA HTTP {status if status else '?'}: "
|
||||
f"{e.response.text[:300] if e.response is not None else 'žádná odpověď'}",
|
||||
telo = (e.response.text[:300] if e.response is not None
|
||||
else "žádná odpověď")
|
||||
_log(f"CHYBA HTTP {status if status else '?'}: {telo}",
|
||||
Qgis.MessageLevel.Critical)
|
||||
LAST_LOGIN_ERROR = 'auth' if status in (401, 403) else 'network'
|
||||
return None
|
||||
@@ -623,7 +624,8 @@ def load_amcr_data(canvas, bb, filters=None,
|
||||
|
||||
for dj in djs:
|
||||
# Skip negative evidence units if requested
|
||||
if skip_negativni and dj.get('dj_negativni_jednotka') is True:
|
||||
if (skip_negativni
|
||||
and dj.get('dj_negativni_jednotka') is True):
|
||||
continue
|
||||
|
||||
komps = dj.get('dj_komponenta', [])
|
||||
@@ -643,7 +645,8 @@ def load_amcr_data(canvas, bb, filters=None,
|
||||
dj_id = dj.get('ident_cely')
|
||||
dj_typ = dj.get('dj_typ')
|
||||
|
||||
# Merge shared metadata with documentation unit-specific fields
|
||||
# Merge shared metadata with documentation
|
||||
# unit-specific fields
|
||||
dj_meta = {
|
||||
**meta,
|
||||
'dj_id': dj_id,
|
||||
@@ -690,7 +693,8 @@ def load_amcr_data(canvas, bb, filters=None,
|
||||
or {}
|
||||
).get('value', ""),
|
||||
}
|
||||
pian_lookup[dj_pian_value].append(komp_meta)
|
||||
pian_lookup[dj_pian_value].append(
|
||||
komp_meta)
|
||||
target_pian_ids_count += 1
|
||||
else:
|
||||
# DJ without components — still include
|
||||
@@ -704,7 +708,8 @@ def load_amcr_data(canvas, bb, filters=None,
|
||||
'komponenta_areal': "",
|
||||
'komponenta_obdobi': "",
|
||||
}
|
||||
pian_lookup[dj_pian_value].append(empty_meta)
|
||||
pian_lookup[dj_pian_value].append(
|
||||
empty_meta)
|
||||
target_pian_ids_count += 1
|
||||
else:
|
||||
target_pian_ids_count += 1
|
||||
@@ -907,9 +912,6 @@ def load_amcr_data(canvas, bb, filters=None,
|
||||
)
|
||||
return
|
||||
|
||||
|
||||
|
||||
|
||||
# ==========================================
|
||||
# D) LAYER CREATION (QGIS Memory Layers)
|
||||
# ==========================================
|
||||
@@ -947,7 +949,6 @@ def load_amcr_data(canvas, bb, filters=None,
|
||||
QgsField("typ_dj", QMetaType.Type.QString),
|
||||
]
|
||||
|
||||
|
||||
cols += [
|
||||
QgsField(typ_dat, QMetaType.Type.QString),
|
||||
QgsField("definicni_body", QMetaType.Type.QString),
|
||||
@@ -1265,7 +1266,7 @@ def load_amcr_data(canvas, bb, filters=None,
|
||||
]
|
||||
feat.setAttributes(atributy)
|
||||
target_list.append(feat)
|
||||
|
||||
|
||||
except Exception as ex:
|
||||
QgsMessageLog.logMessage(
|
||||
f"Chyba při tvorbě feature: {ex}",
|
||||
|
||||
@@ -29,7 +29,7 @@ class AmcrViewer:
|
||||
locale_path = os.path.join(
|
||||
self.plugin_dir,
|
||||
'i18n',
|
||||
'AmcrViewer_{}.qm'.format(locale)
|
||||
f'AmcrViewer_{locale}.qm'
|
||||
)
|
||||
|
||||
# Install the translator if a translation file
|
||||
@@ -41,7 +41,7 @@ class AmcrViewer:
|
||||
|
||||
# Initialize internal state
|
||||
self.actions = []
|
||||
self.menu = self.tr(u'&AMČR Viewer')
|
||||
self.menu = self.tr('&AMČR Viewer')
|
||||
self.first_start = None
|
||||
|
||||
def tr(self, message):
|
||||
@@ -102,7 +102,7 @@ class AmcrViewer:
|
||||
# custom dropdown menu
|
||||
self.action_download_akce = self.add_action(
|
||||
icon_path=icon_akce_path,
|
||||
text=self.tr(u'Stáhnout data akcí | AMČR Viewer'),
|
||||
text=self.tr('Stáhnout data akcí | AMČR Viewer'),
|
||||
callback=lambda checked=False: self.run_download('akce'),
|
||||
parent=self.iface.mainWindow(),
|
||||
add_to_menu=False,
|
||||
@@ -112,8 +112,9 @@ class AmcrViewer:
|
||||
|
||||
self.action_download_pas = self.add_action(
|
||||
icon_path=icon_pas_path,
|
||||
text=self.tr(u'Stáhnout data samostatných nálezů | AMČR Viewer'),
|
||||
callback=lambda checked=False: self.run_download('samostatny_nalez'),
|
||||
text=self.tr('Stáhnout data samostatných nálezů | AMČR Viewer'),
|
||||
callback=lambda checked=False: self.run_download(
|
||||
'samostatny_nalez'),
|
||||
parent=self.iface.mainWindow(),
|
||||
add_to_menu=False,
|
||||
add_to_toolbar=False
|
||||
@@ -122,7 +123,7 @@ class AmcrViewer:
|
||||
|
||||
self.action_download_lokality = self.add_action(
|
||||
icon_path=icon_lokality_path,
|
||||
text=self.tr(u'Stáhnout data lokalit | AMČR Viewer'),
|
||||
text=self.tr('Stáhnout data lokalit | AMČR Viewer'),
|
||||
callback=lambda checked=False: self.run_download('lokalita'),
|
||||
parent=self.iface.mainWindow(),
|
||||
add_to_menu=False,
|
||||
@@ -132,7 +133,7 @@ class AmcrViewer:
|
||||
|
||||
self.action_login_dialog = self.add_action(
|
||||
icon_path=icon_pas_path,
|
||||
text=self.tr(u'Přihlásit se | AMČR Viewer'),
|
||||
text=self.tr('Přihlásit se | AMČR Viewer'),
|
||||
callback=lambda checked=False: self.login(),
|
||||
parent=self.iface.mainWindow(),
|
||||
add_to_menu=False,
|
||||
@@ -142,7 +143,7 @@ class AmcrViewer:
|
||||
|
||||
self.action_amcr_help = self.add_action(
|
||||
icon_path=icon_amcr_help_path,
|
||||
text=self.tr(u'Nápověda AMČR Help | AMČR Viewer'),
|
||||
text=self.tr('Nápověda AMČR Help | AMČR Viewer'),
|
||||
callback=lambda checked=False: self.open_help(),
|
||||
parent=self.iface.mainWindow(),
|
||||
add_to_menu=False,
|
||||
|
||||
Reference in new issue
Block a user