Closed claytonc closed 7 years ago
a solução passa por ambos pacotes depender do collective.js.cycle2
@hvelarde o produto collective.js.cycle2 não resolve o problema completamente, pois o jquery.jplayer.min.js não esta incluso.
o produto brasil.gov.portlets utiliza o setuphandlers.py para registrar os javascripts e o brasil.gov.tiles utiliza o profiles via jsregistry.xml.
a minha sugestão é a seguinte modificar o setuphandlers.py do produto brasil.gov.portlet efetuando uma verificação no se o brasil.gov.portal existe, fazendo isso somente o produto brasil.gov.tiles registra os javascripts citados não duplicando os javascript.
E se alguém for utilizar somente o brasil.gov.portlet sem o brasil.gov.portal os javascripts serão registrados.
@idgserpro alguma sugestão ?
+import pkg_resources
+try:
+ pkg_resources.get_distribution('brasil.gov.portal')
+except pkg_resources.DistributionNotFound:
+ HAS_BRASIL_GOV_PORTAL = False
+else:
+ HAS_BRASIL_GOV_PORTAL = True
...
site = api.portal.get()
+ if not HAS_BRASIL_GOV_PORTAL:
- register_vendor_js(site)
+ register_vendor_js(site)
brasil.gov.portlets tem o brasil.gov.portal como dependência. brasil.gov.portal tem brasil.gov.portlets e brasil.gov.tiles como dependência.
Analisando friamente, esses recursos deveriam ser registrados apenas no brasil.gov.tiles, pois ele pode ser instalado "separado" (não tem brasil.gov.portal de dependência): mas sempre que você instalar o brasil.gov.portlets ou o próprio brasil.gov.portal o brasil.gov.tiles vem junto e, por tabela viriam esses javascripts que o brasil.gov.portlets precisa.
Portanto, a opção com menos código seria colocar o o collective.js.cycle2 de dependência de brasil.gov.tiles, e manter o ++resource++brasil.gov.portlets/js/jquery.jplayer.min.js: essa abordagem tem a desvantagem de ficar "confusa" a árvore de dependências, ter um js que é usado no seu pacote dentro de outro (ou seja, o brasil.gov.portlets tem um js necessário pra funcionar dentro do brasil.gov.tiles). Se for seguir por esse caminho recomendo uma documentação adicional no setup.py de todos os pacotes e no configure.zcml do brasil.gov.tiles pra mostrar que mais de um pacote utiliza aqueles recursos.
De qualquer forma, tem de se pesquisar no código e ver se é feita alguma chamada explícita para "++resource++brasil.gov.tiles/jquery.cycle2.js" por exemplo e verificar também se não será necessário um upgradeStep.
@idgserpro Nenhum dos dois produtos fazem chamadas explícitas para os javascripts citados, os dois produtos registram no portal_javascripts.
Então temos duas possíveis soluções:
1 - Remover do setuphandlers.py do brasil.gov.portlets e manter somente no brasil.gov.tiles, criando algo para remover os registros efetuados pelo brasil.gov.portlets em instalações existentes.
2 - Remover do setuphandlers.py do brasil.gov.portlets e alterar os registros do brasil.gov.tiles, pois o collective.js.cycle2 não registra automaticamente no portal_javacripts. Criar algo para remover e alterar os registros dos produtos brasil.gov.portlets e brasil.gov.tiles em instalações existentes.
@idgserpro
De qualquer forma removendo do brasil.gov.portlet o registro dos javascripts já resolve a parte de duplicidade depois abrimos uma outra issue para o brasil.gov.tiles para adicionar o collective.js.cycle2 como dependência.
Estou apanhando um pouco com os testes mas daqui a pouco consigo realizar o pull request
Os produtos brasil.gov.tiles e brasil.gov.portlets utilizam os mesmos javascripts, mas foram registrados no portal_javascripts duas vezes.
brasil.gov.portlets/src/brasil/gov/portlets/setuphandlers.py: 1 - ++resource++brasil.gov.portlets/js/jquery.cycle2.js 2 - ++resource++brasil.gov.portlets/js/jquery.cycle2.carousel.js 3 - ++resource++brasil.gov.portlets/js/jquery.jplayer.min.js
brasil.gov.tiles/brasil/gov/tiles/profiles/default/jsregistry.xml: 1 - ++resource++brasil.gov.tiles/jquery.cycle2.js 2 - ++resource++brasil.gov.tiles/jquery.cycle2.carousel.js 3 - ++resource++brasil.gov.tiles/jquery.jplayer.min.js
Encontrar uma solução para casos parecidos.