plonegovbr/brasil.gov.tiles

Ao atualizar o IDG pra versão 1.5.1, dá erro em @@cover-settings, "ValueError: term values must be unique: u'collective.polls'"

idgserpro opened this issue · 0 comments

Ao atualizar versões antigas do IDG para o 1.5.1, dependendo da ordem que são executados os upgradeSteps, a tela @@cover-settings para de funcionar:

Traceback (innermost last):
  Module ZPublisher.Publish, line 138, in publish
  Module ZPublisher.mapply, line 77, in mapply
  Module ZPublisher.Publish, line 48, in call_object
  Module plone.z3cform.layout, line 66, in __call__
  Module plone.z3cform.layout, line 50, in update
  Module plone.z3cform.fieldsets.extensible, line 59, in update
  Module plone.z3cform.patch, line 30, in GroupForm_update
  Module z3c.form.group, line 132, in update
  Module collective.cover.controlpanel, line 74, in updateWidgets
  Module z3c.form.form, line 136, in updateWidgets
  Module z3c.form.field, line 277, in update
  Module z3c.form.browser.orderedselect, line 50, in update
  Module z3c.form.browser.widget, line 171, in update
  Module z3c.form.widget, line 233, in update
  Module z3c.form.widget, line 227, in updateTerms
  Module zope.component._api, line 107, in getMultiAdapter
  Module zope.component._api, line 120, in queryMultiAdapter
  Module zope.component.registry, line 238, in queryMultiAdapter
  Module zope.interface.adapter, line 532, in queryMultiAdapter
  Module z3c.form.term, line 239, in CollectionTerms
  Module zope.schema._field, line 352, in bind
  Module Zope2.App.schema, line 33, in get
  Module collective.cover.vocabularies, line 79, in __call__
  Module zope.schema.vocabulary, line 65, in __init__
ValueError: term values must be unique: u'collective.polls'

Isso ocorre quando o upgrade https://github.com/collective/collective.polls/blob/0555a22b54fc90bd199f47eb64fe475c935eae69/src/collective/polls/upgrades/v3/__init__.py#L6 é executado antes de https://github.com/plonegovbr/brasil.gov.tiles/blob/ff61592451844874f7e9571bab7b4760cf886ee3/src/brasil/gov/tiles/upgrades/v4004/__init__.py#L355. Isso acontece porque o upgradeStep do brasil.gov.tiles sempre adiciona o "collective.polls" como um tile sem antes verificar se ele já existe no registry, e aí dá erro na interface pois é um vocabulário que é montado nessa tela e um vocabulário não pode ter itens repetidos.

Dessa forma, é preciso corrigir o upgradeStep verificando essa situação.

Se isso aconteceu com você na sua instância, você precisará manualmente no terminal/debug ou via script remover o tile duplicado do registry (utilize o código do link postado aqui como referência) ou acessar URL_PORTAL/portal_registry/edit/plone.app.tiles para remover. Será feito um upgradeStep em brasil.gov.tiles que trata isso.