pyramid_assetgen является расширение пирамиды, который позволяет вам интегрировать Assetgen с проектом Пирамиды.
Включите пакет, установить пользовательский запрос завод (с помощью AssetGenRequestMixin в качестве первого класса вы наследуют от):
класс MyRequest (AssetGenRequestMixin, Запрос): проход
config.set_request_factory (MyRequest)
config.include ('pyramid_assetgen')
Используйте директиву конфигурации add_assetgen_manifest связать файл манифеста Assetgen со статическим каталоге:
config.add_static_view ("статический", "мойпакет: статический")
# По умолчанию ищет файл assets.json в той же директории,
config.add_assetgen_manifest ('мойпакет: статический ")
А потом просто использовать встроенный в request.static_url Пирамиды (путь, ** кВт), как обычно.
Обоснование
Assetgen является статическим инструментом файл сборки. При использовании в производство, вы можете включить его хеширования режим для выходных файлов с хэш в имени файла. Это означает, что, когда вы измените файл (например, может быть обновление стилей вашего сайта) его имя будет меняться.
С одной стороны, это отличная новость, так как она позволяет реализовать оптимальную стратегию кэширования HTTP (рассказывал клиентам браузера, чтобы кэшировать статические файлы навсегда). С другой стороны, это означает, что вы должны обновить шаблоны и / или вид кода, чтобы служить правильный адрес, чтобы решает хэшированных файла. Это относительно легко, когда вы используете пирамиду, как вы уже используете функцию динамического генерировать статические адреса: request.static_url.
Этот пакет, pyramid_assetgen расширяет Pyramid оборудование для автоматического обновления статические адреса, чтобы они решить на правильные имена файлов хешированная. Вы можете использовать его для интеграции Assetgen с приложением Пирамида без изменения любой из ваших шаблонов или вид кода или узнать новые API.
Workflow
Если вы запустите приложение пирамиды, выполненный искать файл манифеста, то файл должен быть там, в противном случае заявка будет бросать исключение (на момент конфигурации). Таким образом, Вы должны построить свой файл манифеста, используя нечто вроде:
assetgen т.д. / assetgen.yaml --force
Прежде чем запустить пирамиду приложение с чем-то вроде:
pserve т.д. / production.ini
Если работает в режиме развития, используя [paste.reloader], например:
pserve т.д. / development.ini --reload
Вы можете добавить свой файл манифеста в список файлов, перегружатель должны смотреть с помощью, например,
от paste.reloader add_file_callback импорта
четкости watch_manifest_files ():
& NBSP; вернуться ['' /var/www/static/assets.json,]
add_file_callback (watch_manifest_files)
Тем не менее, вы вряд ли нужно это, как вы не должны автоперезагрузки в производстве и в режиме разработки, вы должны не хэш файлов assetgen.
Конфигурация
Если мы исходим из конфигурации является экземпляром pyramid.config.Configurator, (возможно, имеется в основной / WSGI приложение функции завод), мы можем добавить директиву либо с помощью:
от pyramid_assetgen импорта add_assetgen_manifest
config.add_directive ('add_assetgen_manifest ", add_assetgen_manifest)
Или проще:
config.include ('pyramid_assetgen')
Кроме того, вы должны будете расширить запрос по умолчанию фабрики в использовании, например,
от pyramid.request импорта запрос
от pyramid_assetgen импорта AssetGenRequestMixin
класс MyRequest (AssetGenRequestMixin, Запрос):
& NBSP; пас
config.set_request_factory (MyRequest)
(Обратите внимание, что аргумент AssetGenRequestMixin должны прийти до запроса в определении ваш запрос фабрика класса. В противном случае метод static_url не будет отменено).
Использование
С этой конфигурации, когда вы подвергаете статический каталог, используя config.add_static_view, теперь вы можете связать манифест Assetgen с ним:
config.add_static_view ("статический", "мойпакет: статический")
config.add_assetgen_manifest ('мойпакет: статический ")
Это будет выглядеть для файла манифеста в мойпакет: статический / assets.json. Если файл находится где-то еще использовать:
config.add_assetgen_manifest ('мойпакет: статический ", проявляется =' / Foo / bar.json ')
Вы можете использовать request.static_path и request.static_url как обычно. Так, например, если вы зарегистрированы манифест, содержащий:
{'foo.js': 'фу-fdsf465ds4f567ds4ds5674567f4s7.js'}
Вызов:
request.static_path ('мойпакет: статический / foo.js')
Вернется:
"/static/foo-fdsf465ds4f567ds4ds5674567f4s7.js"
Тесты
Я запускать тесты под python2.6 и Python3.2 используя, например:
$ ../bin/nosetests --cover-Пакет = SRC / pyramid_assetgen --cover стирания --with-покрытие --with-doctest
.......
Имя Stmts Мисс Обложка пропавших без вести
-------------------------------------------------- -----------------
SRC / pyramid_assetgen / __ init__ 59 0 100%
SRC / pyramid_assetgen / тесты / __ init__ 58 0 100%
-------------------------------------------------- -----------------
ВСЕГО 117 0 100%
-------------------------------------------------- --------------------
Ран 7 испытаний в 0.552s
ОК
Требования
- Python
- пирамида
Комментарии не найдены