pyramid_assetgen é uma extensão pirâmide que lhe permite integrar Assetgen com um projeto Pyramid.
Incluir o pacote, defina uma fábrica pedido feito sob encomenda (usando AssetGenRequestMixin como a primeira classe você herda):
classe MyRequest (AssetGenRequestMixin, Request): passe
config.set_request_factory (MyRequest)
config.include ('pyramid_assetgen')
Use a diretiva de configuração add_assetgen_manifest para associar um arquivo de manifesto Assetgen com um diretório de estática:
config.add_static_view ('estático' 'mypkg: static')
defaults # procurar um arquivo assets.json no mesmo diretório
config.add_assetgen_manifest ('mypkg: static')
E depois é só usar embutidos request.static_url da Pyramid (caminho, ** kw) como normal.
Justificativa
Assetgen é uma ferramenta de construção de arquivo estático. Ao usar na produção, você pode ativar o modo de hash para arquivos de saída com um hash no nome do arquivo. Isto significa que quando você altera um arquivo (por exemplo, talvez a atualização de estilo do seu site) o seu nome vai mudar.
Por um lado, esta é uma excelente notícia, uma vez que permite a implementação de uma estratégia de cache HTTP ótima (contando clientes de navegador para armazenar em cache os arquivos estáticos para sempre). Por outro lado, isso significa que você precisa para atualizar seus modelos e / ou código de vista a servir a url direito à resolve para o nome do arquivo de hash. Isso é relativamente fácil quando você está usando Pirâmide como você já está usando uma função dinâmica para gerar suas urls estáticos: request.static_url.
Este pacote, pyramid_assetgen estende a Pyramid máquinas para atualizar automaticamente seus URLs estáticas para que eles resolvem os nomes de arquivo hash corretos. Você pode usá-lo para integrar Assetgen com sua aplicação Pyramid sem ter que mudar qualquer um dos seus modelos ou código vista ou aprender todas as novas APIs.
Fluxo de Trabalho
Se você executar um aplicativo Pyramid configurado para procurar um arquivo de manifesto, em seguida, o arquivo precisa estar lá, caso contrário, o aplicativo irá lançar uma exceção (no momento da configuração). Assim, você deve construir o seu arquivo de manifesto usando algo como:
assetgen etc / assetgen.yaml --force
Antes de executar o seu aplicativo Pyramid com algo como:
pserve etc / production.ini
Se estiver executando no modo de desenvolvimento, usando [paste.reloader], por exemplo:
pserve etc / development.ini --reload
Você pode adicionar seu arquivo de manifesto para a lista de arquivos a reloader deve prestar atenção utilizando, por exemplo:
de paste.reloader importação add_file_callback
watch_manifest_files def ():
& Nbsp; retornar ['/var/www/static/assets.json',]
add_file_callback (watch_manifest_files)
No entanto, é improvável que você precisa disso, como você não deve auto-reload na produção e no modo de desenvolvimento que você não deve botar seus arquivos assetgen.
Configuração
Se nós presumimos config é uma instância pyramid.config.Configurator, (talvez disponível em sua principal / WSGI função fábrica app), podemos adicionar a diretiva ou usando:
de pyramid_assetgen add_assetgen_manifest importação
config.add_directive ('add_assetgen_manifest', add_assetgen_manifest)
Ou, mais simplesmente:
config.include ('pyramid_assetgen')
Além disso, você vai precisar de alargar a fábrica pedido padrão usando, por exemplo:
de pyramid.request solicitação de importação
de pyramid_assetgen AssetGenRequestMixin importação
classe MyRequest (AssetGenRequestMixin, Request):
& Nbsp; passe
config.set_request_factory (MyRequest)
(Note-se que o argumento AssetGenRequestMixin deve vir antes Request em sua definição de solicitação de classe de fábrica. Caso contrário, o método static_url não vai ser substituído).
Uso
Com essa configuração, quando você expõe um diretório estático usando config.add_static_view, agora você pode associar um manifesto Assetgen com ele:
config.add_static_view ('estático' 'mypkg: static')
config.add_assetgen_manifest ('mypkg: static')
Isto irá procurar um arquivo de manifesto em mypkg: static / assets.json. Se o arquivo é o uso em outro lugar:
config.add_assetgen_manifest ('mypkg: static ", manifesto =' / foo / bar.json ')
Você pode então usar request.static_path e request.static_url como normal. Assim, por exemplo, se você tiver registrado um manifesto contendo:
{'foo.js': 'foo-fdsf465ds4f567ds4ds5674567f4s7.js'}
Chamando:
request.static_path ('mypkg: static / foo.js')
Retornará:
'/static/foo-fdsf465ds4f567ds4ds5674567f4s7.js'
testes
Eu executar os testes em python2.6 e Python3.2 utilizando, por exemplo:
$ ../bin/nosetests --cover-package = src / pyramid_assetgen --cover-apagar --with-cobertura --with-doctest
.......
Nome stmts senhorita Tampa Faltando
-------------------------------------------------- -----------------
src / pyramid_assetgen / __ init__ 59 0 100%
src / pyramid_assetgen / tests / __ init__ 58 0 100%
-------------------------------------------------- -----------------
TOTAL 117 0 100%
-------------------------------------------------- --------------------
Ran 7 testes em 0.552s
OK
Requisitos :
- Python
- pirâmide
Comentários não encontrado