0%

Eindproject: de leeslijstservice en -client

Neem het mee naar huis

Deze les heeft geen Check my work. De site kan het project zien dat je hier hebt opgeslagen, en niets van wat er op je eigen computer gebeurt. De run hieronder, je server in de ene en je client in een andere, is de run die de site je nooit kon laten zien, en die is helemaal van jou. De quizzen vragen waarom elke stap er is, en als je ze haalt, is de les voltooid.

Wat er meegaat

Open README.md in het tabblad Project en lees het nu. Het is de pagina die iemand anders als eerste zou lezen: wat de twee programma’s zijn, hoe je ze één keer opzet, hoe je ze in twee terminals draait, wat de exitcodes van de client betekenen, en wat er niet meegaat. Het is voor dit project geschreven en je mag het aanpassen; niets controleert het.

Als je het project aan iemand geeft, of aan jezelf op een andere computer, gaan deze bestanden mee:

  • de code: reading_server.py, reading_client.py, http_adapter.py, fakes.py en wire.py, de met de hand geschreven client uit de eerste hoofdstukken;

  • de tests in tests/;

  • SERVICE_CONTRACT.md, de afspraak die beide programma’s volgen;

  • README.md en requirements.txt.

Sommige dingen gaan nooit mee: .venv, __pycache__ en .pytest_cache, omdat elke computer die zelf maakt uit het recept en de code, zoals Python in Practice liet zien. reading_cache.json blijft ook achter. show schrijft het in de map waarin de client toevallig draait, het bevat je eigen kopieën van antwoorden van je eigen server, en je kunt het veilig verwijderen. pl_http.py speelde op de site de tweede terminal; als het in je download zit, heb je het niet nodig.

Welk van deze bestanden hoort in de map die je aan iemand anders geeft?

Open requirements.txt. Het legt twee pakketten vast: requests==2.34.2, dat de client importeert, en pytest==9.1.1, dat de tests uitvoert. De server heeft niets nodig buiten de standaardbibliotheek. Op de site kwamen beide mee met de Python van de les; op je computer installeer je ze zelf.

Downloaden en opnieuw opbouwen

Gebruik Download project in de werkbalk van het project terwijl je bent ingelogd, en pak het archief uit in een nieuwe, lege map. Open een terminal, ga met cd naar die map en bouw daar de omgeving op. De opdrachten zijn die uit README.md. Ze roepen de eigen Python van de rechtstreeks aan, dus er hoeft niets geactiveerd te worden:

python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python -m pytest -q

De tests die op de site slaagden, zouden hier ook moeten slagen: ze hebben geen netwerk en geen server nodig, en daar zorgde les 4 voor. Het project heeft Python 3.10 of nieuwer nodig, zoals README.md zegt.

De -opdrachten zijn de opdrachten die de cursus heeft uitgevoerd. De tabbladen voor Windows en volgen README.md en zijn nog niet op die systemen uitgevoerd. Als py op Windows niet wordt gevonden, gebruik dan python in plaats daarvan.

Twee terminals

Start in de eerste terminal, in de projectmap, de server. Zijn eerste regel is listening on 127.0.0.1: gevolgd door een , en dan wacht hij:

.venv/bin/python reading_server.py

De server handelt zes verbindingen af en stopt dan vanzelf. Hij wacht op elke verbinding hooguit 30 seconden, en een wachttijd die eindigt zonder client telt ook als een van de zes, dus houd de tweede terminal klaar. --max-connections (1 tot en met 10) en --idle-timeout (tot 60 seconden) veranderen beide, zoals README.md zegt.

Open een tweede terminal, ga naar dezelfde map en voer de zeven clientopdrachten uit README.md uit, met het getal uit de eerste regel van de server in plaats van PORT:

.venv/bin/python reading_client.py list --base-url http://127.0.0.1:PORT
.venv/bin/python reading_client.py add --base-url http://127.0.0.1:PORT --token tok-ana-writes-7Qx2 --title Piranesi --author "Susanna Clarke"
.venv/bin/python reading_client.py show 3 --base-url http://127.0.0.1:PORT
.venv/bin/python reading_client.py show 3 --base-url http://127.0.0.1:PORT
.venv/bin/python reading_client.py update 3 --base-url http://127.0.0.1:PORT/v0 --token tok-ana-writes-7Qx2 --title "Piranesi (paperback)" --author "Susanna Clarke"
.venv/bin/python reading_client.py delete 3 --base-url http://127.0.0.1:PORT --token tok-ana-writes-7Qx2
.venv/bin/python reading_client.py list --base-url http://127.0.0.1:PORT

Toen de eigen versie van het project van de cursus deze opdrachten op een Mac uitvoerde, eindigde elke opdracht met 0. De update ging via het oude pad: hij drukte followed 308 from http://127.0.0.1: met de poort en /v0/books/3 af op standard error, en zijn resultaat op standard output. De tweede show stuurde niets. Na de laatste list drukte de server served its connections and stopped af en stopte, na 7 verzoeken op 6 verbindingen te hebben afgehandeld, en reading_cache.json bleef achter in de map.

Zeven clientopdrachten, en de server, die na zes verbindingen stopt, stopte direct na de zevende opdracht. Waarom?

Wat de site niet kan zien

Niets van deze run komt terug bij Python Land. Er is geen token om te plakken en geen controle om te halen, en geen enkele les vraagt om een resultaat. De boeken die je toevoegde, leefden in het geheugen van je server en waren weg toen hij stopte.

De server luistert alleen op 127.0.0.1. Elk verzoek tussen je twee programma’s blijft binnen je computer, op het , dus geen andere machine kan er verbinding mee maken, en je hoeft er nooit een firewall voor open te zetten.

Wat weet Python Land na de run in twee terminals daarover?

Je hebt nu een geteste -service en -client, en je weet wat elke laag eronder doet. Het laatste hoofdstuk noemt waar die kennis naartoe leidt.