pyramid_assetgen er en pyramide udvidelse, der gør det muligt at integrere Assetgen med en Pyramid projekt.
Medtag pakken, angive en brugerdefineret forespørgsel fabrik (ved hjælp AssetGenRequestMixin som den første klasse, du arver fra):
klasse MyRequest (AssetGenRequestMixin, Request): pass
config.set_request_factory (MyRequest)
config.include (»pyramid_assetgen)
Brug direktivet om add_assetgen_manifest konfiguration til at knytte en Assetgen manifest fil med en statisk bibliotek:
config.add_static_view ('statisk', 'mypkg: statisk)
# defaults at lede efter en assets.json fil i samme mappe
config.add_assetgen_manifest (mypkg: statisk)
Og så bare bruge Pyramid indbyggede request.static_url (sti, ** kW) som normalt.
Grundlag
Assetgen er en statisk fil build værktøj. Ved brug i produktion, kan du aktivere sin hashing tilstand til uddatafiler med en hash i filnavnet. Det betyder, at når du ændrer en fil (for eksempel, måske opdatere dit websted stylesheet) navn vil ændre sig.
På den ene side er det en god nyhed, da det giver dig mulighed for at gennemføre en optimal HTTP caching strategi (fortæller browser-klienter at cache dine statiske filer for evigt). På den anden side betyder det, du har brug for at opdatere dine skabeloner og / eller visning kode til at tjene den rigtige url til beslutter at det hashed filnavn. Det er relativt nemt, når du bruger Pyramid som du allerede bruger en dynamisk funktion til at generere dine statiske webadresser: request.static_url.
Denne pakke, pyramid_assetgen udvider Pyramide maskiner til automatisk at opdatere dine statiske webadresser, så de løser de korrekte hashed filnavne. Du kan bruge det til at integrere Assetgen med din Pyramid ansøgning uden at skulle ændre nogen af dine skabeloner eller visning kode eller lære nye API'er.
Workflow
Hvis du kører en Pyramid ansøgning konfigureret til at kigge efter en åbenbar fil, så filen skal være der, ellers programmet vil kaste en undtagelse (ved konfiguration tid). Du bør derfor bygge din manifest fil ved hjælp noget lignende:
assetgen etc / assetgen.yaml --force
Før du kører din Pyramid app med noget lignende:
pserve etc / production.ini
Hvis du kører i udvikling tilstand ved hjælp [paste.reloader], fx:
pserve etc / development.ini --reload
Du kunne tilføje din manifest fil til listen over filer i Reloader bør se at bruge, fx:
fra paste.reloader import add_file_callback
def watch_manifest_files ():
& Nbsp; tilbage ['/var/www/static/assets.json «]
add_file_callback (watch_manifest_files)
Men du er usandsynligt at bruge denne, som du bør ikke automatisk reload i produktionen og i udvikling tilstand, bør du ikke hash dine assetgen filer.
Konfiguration
Hvis vi formoder config er en pyramid.config.Configurator eksempel (måske findes i dit primære / WSGI app fabrik funktion), kan vi tilføje direktivet enten ved hjælp af:
fra pyramid_assetgen import add_assetgen_manifest
config.add_directive (»add_assetgen_manifest«, add_assetgen_manifest)
Eller blot:
config.include (»pyramid_assetgen)
Derudover skal du udvide anmodningen standard fabrik hjælp, fx:
fra pyramid.request import Request
fra pyramid_assetgen import AssetGenRequestMixin
klasse MyRequest (AssetGenRequestMixin, Request):
& Nbsp; pass
config.set_request_factory (MyRequest)
(Bemærk, at AssetGenRequestMixin argument skal komme før Request i din anmodning fabrik klasse definition. Ellers static_url metode vil ikke tilsidesættes).
Anvendelse
Med denne konfiguration, når du udsætter en statisk bibliotek hjælp config.add_static_view, du kan nu knytte en Assetgen manifest med det:
config.add_static_view ('statisk', 'mypkg: statisk)
config.add_assetgen_manifest (mypkg: statisk)
Dette vil lede efter en åbenbar fil i mypkg: statisk / assets.json. Hvis filen er et andet sted brug:
config.add_assetgen_manifest (mypkg: statisk «, åbenbart = '/ foo / bar.json')
Du kan derefter bruge request.static_path og request.static_url som normalt. Så for eksempel, hvis du har registreret et manifest, der indeholder:
{'foo.js «:» Foo-fdsf465ds4f567ds4ds5674567f4s7.js'}
Opkald:
request.static_path ('mypkg: statisk / foo.js')
Vil vende tilbage:
'/static/foo-fdsf465ds4f567ds4ds5674567f4s7.js'
Tests
Jeg har kørt prøverne under Python2.6 og Python3.2 med f.eks:
$ ../bin/nosetests --cover-pakke = src / pyramid_assetgen --cover-slette --with-dækning --with-doctest
.......
Navn Stmts Miss Cover Mangler
-------------------------------------------------- -----------------
src / pyramid_assetgen / __ init__ 59 0 100%
src / pyramid_assetgen / tests / __ init__ 58 0 100%
-------------------------------------------------- -----------------
ALT 117 0 100%
-------------------------------------------------- --------------------
Ran 7 tests i 0.552s
OK
Krav :
- Python
- pyramide
Kommentarer ikke fundet