pyramid_assetgen jest rozszerzenie piramidy, które pozwala na integrację Assetgen z projektem Pyramid.
Dołącz pakiet ustaw fabrykę żądanie (przy użyciu niestandardowego jako pierwszy AssetGenRequestMixin dziedziczyć z klasy):
Klasa MyRequest (AssetGenRequestMixin, zapytania): karnet
config.set_request_factory (MyRequest)
config.include ("pyramid_assetgen ')
Użyj dyrektywy konfiguracji add_assetgen_manifest powiązać plik manifestu Assetgen z katalogu statycznego:
config.add_static_view ("statyczne", "mypkg: statyczne")
# domyślnie szukać pliku assets.json w tym samym katalogu
config.add_assetgen_manifest ("mypkg: statyczne")
A potem po prostu korzystać z wbudowanego request.static_url piramidy (ścieżka, ** kW), jak zwykle.
Uzasadnienie
Assetgen jest statyczna narzędzie kompilacji. Podczas używania w produkcji, można włączyć w tryb mieszający do plików wyjściowych z mieszania w nazwie. Oznacza to, że po zmianie pliku (na przykład, może aktualizowanie Twojej strony arkusz stylów), jego nazwa zmieni.
Z jednej strony jest to dobra wiadomość, ponieważ pozwala na wdrożenie optymalnej strategii buforowania HTTP (informujący klientów przeglądarki buforować swoje statycznych plików wiecznie). Z drugiej strony, oznacza to, że musisz zaktualizować szablony i / lub widok kodu służyć właściwej url do postanawia nazwy pliku hashed. Jest to stosunkowo łatwe, gdy używasz Pyramid, jak już używasz dynamicznych funkcji do generowania adresów statyczny: request.static_url.
Pakiet ten, pyramid_assetgen rozciąga maszyny Pyramid automatycznego aktualizowania swoich statycznych adresów tak, że rozwiązania do poprawnych nazw plików zakodowanego. Można go używać do integracji Assetgen z aplikacją Pyramid bez konieczności zmiany któregokolwiek z szablonów lub widoku kodu i uczyć nowych interfejsów API.
Workflow
Po uruchomieniu aplikacji Pyramid skonfigurowane szukać pliku manifestu, plik musi tam być, w przeciwnym wypadku aplikacja wygeneruje wyjątek (w czasie konfiguracji). Należy zatem budować swój oczywisty plik, używając coś takiego:
assetgen etc / assetgen.yaml force
Zanim uruchomisz aplikację Pyramid z czymś takim:
pserve etc / production.ini
W przypadku pracy w trybie rozwoju za pomocą [paste.reloader], np:
pserve etc / development.ini --reload
Możesz dodać plik manifestu do listy plików Reloader powinny oglądać za pomocą, np:
z paste.reloader importu add_file_callback
watch_manifest_files def ():
& Nbsp; powrót ['/var/www/static/assets.json ",]
add_file_callback (watch_manifest_files)
Jednak jest mało prawdopodobne, aby to potrzebne, gdyż nie należy auto-reload w produkcji oraz w trybie rozwoju nie należy hash plików assetgen.
Konfiguracja
Jeśli założymy, config jest wystąpienie pyramid.config.Configurator, (być może dostępne w głównym / funkcji WSGI aplikacji fabrycznych), możemy dodać dyrektywę albo za pomocą:
z pyramid_assetgen importu add_assetgen_manifest
config.add_directive ("add_assetgen_manifest", add_assetgen_manifest)
Albo prościej:
config.include ("pyramid_assetgen ')
Ponadto, trzeba rozszerzyć fabrykę domyślne zapytanie za pomocą, np:
z pyramid.request importu Zamówienie
z pyramid_assetgen importu AssetGenRequestMixin
Klasa MyRequest (AssetGenRequestMixin, zapytania):
& Nbsp; karnet
config.set_request_factory (MyRequest)
(Należy pamiętać, że argument AssetGenRequestMixin musi przyjść przed żądanie w swojej definicji wniosek klasy fabryki. W przeciwnym razie metoda static_url nie zostaną nadpisane).
Zastosowanie
Dzięki takiej konfiguracji, kiedy wystawiać katalogu statycznego za pomocą config.add_static_view, można teraz powiązać z nim manifest Assetgen:
config.add_static_view ("statyczne", "mypkg: statyczne")
config.add_assetgen_manifest ("mypkg: statyczne")
Będzie to szukać pliku manifestu w mypkg: static / assets.json. Jeśli plik jest gdzie indziej zastosowanie:
config.add_assetgen_manifest ("mypkg: statyczne", manifest = "/ foo / bar.json")
Następnie można użyć request.static_path i request.static_url normalnie. Tak więc, na przykład, jeśli zarejestrujesz manifest zawierający:
{'foo.js ":" bla-fdsf465ds4f567ds4ds5674567f4s7.js'}
Wywołanie:
request.static_path ("mypkg: static / foo.js")
Powróci:
"/static/foo-fdsf465ds4f567ds4ds5674567f4s7.js"
Testy
Zabrakło mi testy pod Python2.6 i Python3.2 za pomocą, np:
$ ../bin/nosetests --cover-pakiet = src / pyramid_assetgen --cover kasowanie --with-pokrycia --with-doctest
.......
Imię Stmts panna Brak okładki
-------------------------------------------------- -----------------
src / pyramid_assetgen / __ init__ 59 0 100%
src / pyramid_assetgen / testy / __ init__ 58 0 100%
-------------------------------------------------- -----------------
RAZEM 117 0 100%
-------------------------------------------------- --------------------
Ran 7 testów w 0.552s
OK
Wymagania :
- Python
- piramida
Komentarze nie znaleziono