0%

Een project dat iemand anders kan uitvoeren · oefening

Toon aan dat opnieuw opbouwen werkt

Een overdracht is sterker wanneer die vanuit een schone hoofdmap werkt. Volg de macOS/Linux-commando’s uit de README in deze sessie met intern netwerk. Installeer vanuit de gecontroleerde mirror, voer de tests met nagebootste HTTP uit en toon CLI-hulp. Doe geen echte API-aanroep.

python3 -m venv .venv
./.venv/bin/python -m pip install -r requirements-dev.txt
./.venv/bin/python -m pytest -q
./.venv/bin/python api_catalog.py --help

Kopieer daarna alleen de zes geschreven bestanden naar een nieuwe tijdelijke map onder /workspace, met een naam die een spatie en niet-ASCII-tekst bevat. Deze locatie ondersteunt de native bibliotheken die in een virtuele omgeving worden geïnstalleerd; de /tmp-mount op de site niet.

mktemp -d maakt een unieke map, zodat een bestaande map van een cursist nooit wordt hergebruikt. Een shellvariabele is een naam die tekst opslaat: proof_dir=... slaat het pad op, $(...) levert de uitvoer van het ingesloten commando en $proof_dir leest de waarde terug. De aanhalingstekens behouden spaties. Kopieer alleen de genoemde bestanden, maak een nieuwe omgeving in de kopie en herhaal de controles. Kopieer geen bestaande .venv en kopieer /workspace niet recursief naar een eigen submap.

proof_dir=$(mktemp -d "/workspace/Fresh Café Project.XXXXXX")
mkdir "$proof_dir/tests"
cp API_CONTRACT.md README.md api_catalog.py requirements.txt requirements-dev.txt "$proof_dir/"
cp tests/test_api_catalog.py "$proof_dir/tests/"
cd "$proof_dir"
python3 -m venv .venv
./.venv/bin/python -m pip install -r requirements-dev.txt
./.venv/bin/python -m pytest -q
./.venv/bin/python api_catalog.py --help
cd /workspace
rm -r "$proof_dir"

De lastige mapnaam is bewust gekozen. Een spatie en een niet-ASCII-teken zijn precies de dingen die een project stukmaken als het ongemerkt van zijn eigen locatie afhangt. Ze komen heel vaak voor in de echte mapnamen die mensen gebruiken.

Controleer of pytest slaagt en hulp wordt afgedrukt zonder dependencywaarschuwingen. De laatste twee commando’s gaan terug naar het oorspronkelijke project en verwijderen alleen de unieke kopie die mktemp maakte, inclusief de afgeleide omgeving. rm verwijdert bestanden; de optie -r verwijdert ook de genoemde map en haar inhoud. Dit verplaatst niets naar de prullenmand, dus gebruik precies het pad $proof_dir dat hierboven is gemaakt. Je oorspronkelijke zes geschreven bestanden blijven in /workspace. Verwijder deze controlemap vóór het inleveren; .venv, caches, bytecode en de kopie zijn afgeleide toestand en horen niet bij de overdracht.

Wat bewijst de tweede schone hoofdmap?

Opdracht

Gebruik het gedocumenteerde ontwikkelrecept om tests met nagebootste HTTP en --help uit te voeren. Herhaal dat daarna vanuit een tijdelijke gekopieerde hoofdmap onder /workspace, met een spatie en een niet-ASCII-teken in de naam. Gebruik een unieke nieuwe map en een nieuwe omgeving, ga daarna terug naar de oorspronkelijke hoofdmap en verwijder alleen die controlekopie. Lever alleen de exacte zes geschreven bestanden in; geen omgevingen, caches, kopie of gegenereerde uitvoer.