Eindproject: een uitleenprogramma dat gegevens bewaart · oefening
Druk de beschikbare voorwerpen af
Een opdracht voor beschikbare voorwerpen hoort het resultaat van de publieke query te tonen, zonder een tweede versie van die query te maken. De databasefunctie bepaalt al welke voorwerpen beschikbaar zijn en geeft ze terug op volgorde van inventariscode. available_command beheert alleen het pad, de verbinding en de teksttabel.
In de samenhangende demo is voorwerp 1 actief wanneer deze aanroep wordt uitgevoerd:
main(["available", str(database_path)])
Voeg available_command(args) toe. De namespace bevat naast de opdrachtnaam alleen args.database. Weiger een ontbrekend pad en roep daarna prepare_database aan om het bestaande bestand te controleren of te migreren. Open de applicatieverbinding en roep list_available_items(connection) precies één keer aan. Sla de teruggegeven lijst op voordat je de verbinding in finally sluit.
Voeg geen SQL, extra query of sortering aan de CLI toe. Elke teruggegeven waarde is een gewone dictionary met precies deze sleutels: id, asset_tag, name, category en loan_days. De lijst heeft al de publieke volgorde die de databasefunctie vastlegt.
Druk pas nadat de query slaagt en de verbinding sluit deze vaste kopregel af:
id | asset_tag | name | category | loan_days
Gebruik daarna een lus met for om één rij per dictionary af te drukken in dezelfde veldvolgorde, met | tussen de waarden. Een leeg resultaat drukt nog steeds de kopregel af en geeft 0 terug. Dat is een geslaagd antwoord op de vraag, geen applicatiefout.
De opdracht vangt gedocumenteerde ValueError-resultaten op uit de controles op een ontbrekend pad of een afwijkend schema. Ze laat stderr leeg bij elke geslaagde leesopdracht. Een onverwacht query- of verbindingsdefect moet doorgaan en een leesopdracht mag geen blijvend opgeslagen toestand veranderen.
Voeg de exacte tak if args.command == "available": return available_command(args) toe aan main en druk daarna op Run:
== available ==
Status: 0
id | asset_tag | name | category | loan_days
3 | EL-300 | Projector | electronics | 3
2 | EV-200 | Folding table | events | 14
stderr: <empty>
Merk op dat de rijen op inventariscode zijn geordend: EL-300 komt vóór EV-200, ook al is voorwerp 3 na voorwerp 2 ingevoegd. Die volgorde komt rechtstreeks uit list_available_items. Een grondige controle geeft nieuwe waarden met Unicode en spaties mee, een actief voorwerp en een bewust afwijkende invoegvolgorde. Die controleert ook een lege catalogus, het sluiten van de verbinding en het uitblijven van schrijfopdrachten.
Opdracht
Voeg available_command(args) toe of maak die af en zet deze tak in main:
if args.command == "available":
return available_command(args)
Weiger een ontbrekende database, bereid die voor, open die, roep list_available_items precies één keer aan en sluit de applicatieverbinding in finally. Druk de exacte kopregel met vijf kolommen af en één rij met pipes als scheidingstekens per teruggegeven dictionary, zonder opnieuw te sorteren of een query uit te voeren. Geef 0 terug bij een leeg of niet-leeg resultaat.