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
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.pyenwire.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.mdenrequirements.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
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python -m pytest -q
py -m venv .venv
.venv\Scripts\python -m pip install -r requirements.txt
.venv\Scripts\python -m pytest -q
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 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
.venv/bin/python reading_server.py
.venv\Scripts\python reading_server.py
.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
.venv\Scripts\python reading_client.py list --base-url http://127.0.0.1:PORT
.venv\Scripts\python reading_client.py add --base-url http://127.0.0.1:PORT --token tok-ana-writes-7Qx2 --title Piranesi --author "Susanna Clarke"
.venv\Scripts\python reading_client.py show 3 --base-url http://127.0.0.1:PORT
.venv\Scripts\python reading_client.py show 3 --base-url http://127.0.0.1:PORT
.venv\Scripts\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\Scripts\python reading_client.py delete 3 --base-url http://127.0.0.1:PORT --token tok-ana-writes-7Qx2
.venv\Scripts\python reading_client.py list --base-url http://127.0.0.1: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
Wat weet Python Land na de run in twee terminals daarover?
Je hebt nu een geteste