Eindproject: een uitleenprogramma dat gegevens bewaart · oefening
Verwerk de teruggave van een actieve uitlening
Een teruggave moet een actieve uitlening precies één keer veranderen. Als het ID ontbreekt of de uitlening al is afgerond, meldt de databasefunctie False; de CLI moet dat resultaat omzetten in één precieze fout zonder de eerdere geschiedenis te overschrijven.
Na de geslaagde uitleen doet de demo deze aanroep:
main(["return", str(database_path), "501", "2026-08-27"])
Voeg return_command(args) toe. Argparse geeft args.database, het gehele getal args.loan_id en de string args.returned_on door. Vereis eerst het databasepad. Verwijder de omringende witruimte met trimmed(args.returned_on, "RETURNED_ON"), maar houd de waarde als tekst. Een waarde die lijkt op SQL, een datum of een gewone notitie moet via dezelfde geparametriseerde functie worden opgeslagen.
Bereid de bestaande database voor, open haar met open_database en doe deze aanroep:
changed = return_loan(connection, args.loan_id, returned_on)
Sluit de applicatieverbinding in finally. return_loan werkt alleen een rij bij waarvan het uitleen-ID overeenkomt en waarvan returned_on nog SQL NULL is. De functie commit de nieuwe tekstwaarde en geeft True terug voor die ene wijziging. Een ontbrekend of al afgerond ID levert False op en verandert geen andere rij.
Bekijk changed pas nadat finally de verbinding heeft gesloten. Als de waarde onwaar is, geef je ValueError("No active loan has that ID.") door aan report_error. Dat schrijft Error: No active loan has that ID. naar stderr en geeft 1 terug, zonder iets op stdout. Een losstaande exception uit return_loan moet nog steeds doorgaan nadat de verbinding is gesloten.
Als changed waar is, druk je Loan returned: ID pas af na het sluiten en geef je 0 terug. Voeg de exacte tak if args.command == "return": return return_command(args) toe aan main. Voer geen UPDATE uit in lending.py, zoek niet op voorwerp-ID en vang geen losstaande programmeer- of databasefout op.
Druk op Run om het resultaat te zien nadat een nieuwe verbinding het bestand opnieuw heeft geopend:
== return ==
Status: 0
stdout: Loan returned: 501
stderr: <empty>
Returned label after reopening: 2026-08-27
Een grondige controle verwerkt de teruggave van één actieve uitlening, herhaalt de opdracht met een andere tekstwaarde en probeert een ontbrekend ID. De tweede aanroep moet de eerste tekstwaarde ongemoeid laten. De controle gebruikt ook witruimte en tekst die op SQL lijkt, controleert het gedrag bij een ontbrekend pad en bevestigt dat de applicatieverbinding zowel bij succes als bij weigering sluit.
Opdracht
Voeg return_command(args) toe of maak die af en zet deze tak in main:
if args.command == "return":
return return_command(args)
Weiger een ontbrekende database, verwijder de omringende witruimte uit RETURNED_ON, bereid de catalogus voor, open die en roep return_loan één keer aan. Sluit de applicatieverbinding in finally. Meld bij een onwaar resultaat No active loan has that ID. met status 1; druk anders Loan returned: ID af en geef 0 terug.