0%

Maak een schema, importeer gegevens en ontwikkel het verder · oefening

Valideer elke CSV-rij voordat je schrijft

De CSV-lezer heeft bewezen dat elke rij vijf cellen heeft, maar "0", " " en een herhaalde inventariscode hebben nog steeds de juiste structuur. Zet nu de volledige onbewerkte batch om in waarden die je veilig aan de database kunt aanbieden.

Maak validate_item_rows(rows) in catalog_import.py af. Run combineert de twee functies expliciet:

validate_item_rows(read_item_rows(Path("data/items.csv")))

Een geldige rij wordt een tuple met vijf waarden in deze volgorde: een geheel getal als ID, inventariscode zonder omringende witruimte, naam zonder omringende witruimte, categorie zonder omringende witruimte en uitleendagen als geheel getal. Run drukt dit af:

== validate every row ==
Call: validate_item_rows(read_item_rows(Path("data/items.csv")))
(1, 'TL-100', 'Cordless drill', 'tools', 7)
(2, 'EV-200', 'Folding table', 'events', 14)
(3, 'EL-300', 'Projector', 'electronics', 3)
Repeated TL-100 -> Error: CSV contains asset tag TL-100 more than once.

Verwijder bij id en loan_days de omringende witruimte en accepteer alleen decimale ASCII-cijfers waarvan het omgezette gehele getal groter is dan nul. Dit weigert bewust tekens voor plus of min, kommagetallen, nul, negatieve getallen en gelijkende Unicode-cijfers. Verwijder bij asset_tag, name en category de omringende witruimte en weiger een resultaat zonder tekens.

Houd afzonderlijke sets bij voor omgezette ID’s en codes zonder omringende witruimte. Vergelijk op duplicaten ná het omzetten en het verwijderen van de witruimte: "01" en "1" gebruiken hetzelfde ID, terwijl " TL-100 " en "TL-100" dezelfde code gebruiken. Vermeld de genormaliseerde waarde in de duplicaatfout.

Bouw het resultaat lokaal op en geef het pas terug nadat elke rij is goedgekeurd. Dit is een zuivere voorbereidingsstap: de functie ontvangt dictionaries en geeft tuples terug. Ze heeft geen databasepad of verbinding waarmee ze kan schrijven. Door die scheiding kan een latere ongeldige rij een import stoppen voordat de database ook maar is geopend.

Gebruik het getoonde rijnummer ook in fouten over waarden. Een melding zoals CSV row 4 loan days must be a positive integer. verwijst terug naar de bron en maakt tegelijk de regel expliciet. Sla nooit ongemerkt een ongeldige rij over: één twijfelachtig record maakt de hele meegegeven batch ongeschikt om te schrijven.

Opdracht

Maak validate_item_rows(rows) in catalog_import.py af.

Geef tuples met vijf waarden terug in invoervolgorde. Vereis positieve gehele ASCII-getallen voor ID’s en uitleendagen, niet-lege tekst zonder omringende witruimte en unieke omgezette ID’s en inventariscodes na het verwijderen van omringende witruimte. Valideer de volledige batch zonder een database te openen of te veranderen.