astrololo: ekrany i eksport jako moduły, katalog z rejestracji (3/5) #81
Reference in New Issue
Block a user
Delete Branch "feat/ekrany-jako-moduly"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Trzeci z pięciu kroków. Zmieniłem jego zakres wobec planu i chcę, żebyś wiedział dlaczego: pierwotnie miała to być deduplikacja pięciu kopii
link_crypto.py, ale po zrobieniu PR 2 widać, że astroklienta blokuje co innego — ekrany, których nie ma mieć, siedzą wewnątrz jednegomain.py. Deduplikacja kryptografii to realny dług, ale niczego nie blokuje.Podział
main.py(1023 linie) rozpadł się napodstawa.py, jedenaście modułów wapp/ekrany/imain.py, który jest już samym złożeniem — lista importów jest definicją produktu. Podział zrobiony mechanicznie, z osobnym sprawdzeniem, że żadna sekcja nie wołała pomocnika z innej (nie wołała).Katalog z rejestracji
Dotąd wszystkie funkcje były wypisane w
features.py, więc obraz produktu, który części z nich nie ma, i tak niósł ich nazwy — spis funkcji, których nie ma jak włączyć. Teraz ekran zgłasza siebie, swoje trasy i swoje zasoby przy imporcie własnego modułu, afeatures.pynie wymienia ani jednego ekranu.To samo dotyczy nawigacji administratora: odsyłacz do ekranu kont był wpisany na sztywno w
base.html, więc w węższym produkcie zostawał martwy link i nazwa ekranu, którego nie ma.Eksport jako moduł
Zgodnie z ustaleniem eksport jest funkcją administracyjną, więc musi dać się usunąć.
app/moduly/eksport/zabiera arkusz, trasę PDF-a i akcję formularza. „Można, ale nie temu kontu" i „nie ma takiej możliwości" to dwie różne gwarancje — a eksport wynosi najwięcej treści baz naraz.Skoro modułów jest więcej niż jeden, most nie może ich znać z nazwy: przechodzi po podkatalogach
app/moduly/i pyta każdy, co wnosi.Znalezione przy okazji
Po wydzieleniu eksportu okazało się, że jego ścieżki szczęśliwej nie sprawdzał żaden test — badano wyłącznie odmowę dla konta bez uprawnienia. Moduł dostaje zależności z wywołania montującego, więc brak jednej z nich wyszedłby dopiero przy pierwszym kliknięciu użytkownika. Dopisałem test funkcjonalny (realny arkusz, sprawdzany aż do nagłówka ZIP-a) i brakujące zależności.
Cztery komentarze w plikach współdzielonych wymieniały zakładkę „Skompiluj", w tym
wheelzoom.jsze wzmianką o „przyszłej zakładce" — to samo zgłoszenie, które audyt podnosił wcześniej, a które przeżyło, bo wtedy bramkowałem tylko skrypt.Test złożenia
Buduje węższy produkt naprawdę: kopiuje drzewo, usuwa cztery ekrany i oba moduły, uruchamia aplikację w osobnym procesie (importy są zapamiętywane, więc sprawdzanie tego w procesie, który moduł już zaimportował, dawałoby wynik fałszywie pozytywny) i sprawdza, że wstaje, że zachowane ekrany oddają 200, że usunięte oddają 404, nie 403 i nie 500, że katalog opisuje ten obraz, i że w nawigacji nie ma martwych odsyłaczy.
Napisałem najpierw ostrzejszy test — „nazwa ekranu nie pada poza jego modułem" — i go wyrzuciłem: zgłaszał wzmianki o Horoskopie w plikach współdzielonych, choć astroklient Horoskop ma. Ślad ma znaczenie wyłącznie wobec konkretnego złożenia, więc to sprawdzenie należy do produktu, nie do mechanizmu — i trafi do PR 4.
Testy: presentation 368 · logic 342 · data 37 · render 41.
c1f5bea9f7tofd79513ce2