Skip to content
Snippets Groups Projects
Commit b84c888f authored by Martin Mareš's avatar Martin Mareš
Browse files

Import: Detekce chybějící hlavičky

Čtení souboru selže, pokud v hlavičce není ani jeden známý sloupec.
parent 3af0160b
Branches
No related tags found
No related merge requests found
This commit is part of merge request !15. Comments created here will be created in the context of that merge request.
...@@ -90,6 +90,10 @@ class Row: ...@@ -90,6 +90,10 @@ class Row:
odpovídají sloupečkům, musí být typu str a mít defaultní hodnotu.""" odpovídají sloupečkům, musí být typu str a mít defaultní hodnotu."""
class MissingHeaderError(RuntimeError):
pass
def write(file: IO, fmt: FileFormat, row_class: Type[Row], rows: Sequence[Row]): def write(file: IO, fmt: FileFormat, row_class: Type[Row], rows: Sequence[Row]):
writer = csv.writer(file, dialect=fmt.get_dialect()) writer = csv.writer(file, dialect=fmt.get_dialect())
...@@ -114,6 +118,8 @@ def read(file: IO, fmt: FileFormat, row_class: Type[Row]): ...@@ -114,6 +118,8 @@ def read(file: IO, fmt: FileFormat, row_class: Type[Row]):
# Excel's BOM # Excel's BOM
r[0] = r[0][1:] r[0] = r[0][1:]
header = r header = r
if not any(h in columns for h in header):
raise MissingHeaderError()
else: else:
row = row_class() row = row_class()
not_empty = False not_empty = False
... ...
......
...@@ -5,7 +5,7 @@ import re ...@@ -5,7 +5,7 @@ import re
from typing import List, Optional, Any, Dict, Type from typing import List, Optional, Any, Dict, Type
import mo.csv import mo.csv
from mo.csv import FileFormat from mo.csv import FileFormat, MissingHeaderError
import mo.db as db import mo.db as db
import mo.rights import mo.rights
import mo.users import mo.users
...@@ -330,7 +330,10 @@ class Import: ...@@ -330,7 +330,10 @@ class Import:
charset = 'utf-8' charset = 'utf-8'
try: try:
with open(path, encoding=charset) as file: with open(path, encoding=charset) as file:
try:
rows: List[mo.csv.Row] = mo.csv.read(file=file, fmt=self.fmt, row_class=self.row_class) rows: List[mo.csv.Row] = mo.csv.read(file=file, fmt=self.fmt, row_class=self.row_class)
except MissingHeaderError:
return self.error('Souboru chybí hlavička s názvy sloupců')
except UnicodeDecodeError: except UnicodeDecodeError:
return self.error(f'Soubor není v kódování {self.fmt.get_charset()}') return self.error(f'Soubor není v kódování {self.fmt.get_charset()}')
except Exception as e: except Exception as e:
... ...
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment