[plonegov-br] [Erro com código simples utilizando External Methods]

Alexandre Chagas alexandre.acs em gmail.com
Segunda Março 11 14:08:50 BRT 2019


Obrigado Davi, alem de esclarecer e ter funcionado... Muito rico esses
links, entendi a mudança e mais uma vez obrigado :D

Em seg, 11 de mar de 2019 às 12:02, Davi Lima <davilima6 em gmail.com>
escreveu:

> No Dexterity, alguns campos não vivem diretamente na classe do tipo de
> conteúdo, em vez disso tal código é compartilhado por múltiplos tipos de
> conteúdo através dos Behaviors, que adaptam a classe base para prover novas
> funcionalidades.
>
> Por esse motivo, no caso do corpo do texto, não se usa mais o setText no
> objeto de conteúdo, em vez disso você precisa fazer algo como:
>
> from plone.app.textfield import RichTextValue
> nn.text = RichTextValue(variavelComSeuTexto, 'text/html', 'text/html')
>
>
> Veja esta issue: https://github.com/plone/plone.api/issues/300
>
> Para saber quais campos vêm de onde, veja
> https://docs.plone.org/external/plone.app.dexterity/docs/reference/fields.html
>
> E aqui para entender melhor o RichTextValue:
> https://docs.plone.org/external/plone.app.dexterity/docs/advanced/rich-text-markup-transformations.html
>
> []s
> Davi
>
> Em seg, 11 de mar de 2019 às 15:35, Alexandre Chagas <
> alexandre.acs em gmail.com> escreveu:
>
>> Pessoal,
>>
>> Estou fazendo uma carga de dados lendo um arquivo CSV com External
>> Methods.
>>
>> Nas versões SEM o IDG o script funcionou perfeitamente, O problema é
>> quando tento rodar com o IDG instalado.
>>
>> Um colega da lista esclareceu que alguns métodos não são mais utilizados
>> com as novas versões de tipos Dexterity.
>>
>> A exemplo? setCreationDate fora substituído por “creation_date”,
>> funcionou perfeitamente, mas continuo com o mesmo problema para carregar o
>> corpo de texto, “setText”
>>
>> Executando no modo debug (Plone+IDG), aparece apenas erro de atributo:
>>
>> >>>
>> 2019-03-11 11:13:30 ERROR Zope.SiteErrorLog 1552313610.660.354521920732
>> http://10.1.10.26:8082/portal/ANA/noticias-antigas/migrarnoticias
>>
>> 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 Products.ExternalMethod.ExternalMethod, line 237, in __call__
>>    - __traceback_info__: ((<Folder at /portal/ANA/noticias-antigas>,),
>> {}, None)
>>   Module
>> /opt/Plone-4.3.11-portal-ana/zeocluster/parts/client1/Extensions/importcsv3.py,
>> line 49, in import_data
>>
>> AttributeError: setText
>>
>> <<<<
>>
>> Estudando a classe “DexterityContent”, vi o “format” como possível
>> substituto para “setText”. Apesar do código rodar sem erros, o corpo de
>> texto não é carregado.
>>
>> ///
>>
>> class DexterityContent(DAVResourceMixin, PortalContent, PropertyManager,
>> Contained):
>>     """Base class for Dexterity content    """
>> .......
>>     title = u''
>>     description = u''
>>     subject = ()
>>     creators = ()
>>     contributors = ()
>>     effective_date = None
>>     expiration_date = None
>>     format = 'text/html'
>>     language = ''
>>     rights = ''
>>
>> ///
>>
>> Meu código, tosco e de iniciante é este:
>>
>> import csv, sys, string, re
>> from DateTime import DateTime
>> from zope.component import queryUtility, createObject
>> from plone.i18n.normalizer.interfaces import IIDNormalizer
>>
>> def import_data(self):
>>
>>      reader = csv.reader(open('/tmp/noticias5.csv'), delimiter=';',
>> quotechar='"', doublequote=$
>>      fim = "fim."
>>      quant = 0
>>
>>      for row in reader:
>>            if row[0] != 'id':
>>               id = self.generateUniqueId('Document')
>>               stat=row
>>               self.invokeFactory('Document', id)
>>               nn = getattr(self, id)
>>               x_titulo = row[1]
>>               print x_titulo
>>               data = row[3]
>>               print data
>>               dia = str(int(data[:2]))
>>               if int(dia) < 10:
>>                  dia = "0"+dia
>>               mes = str(int(data[3:5]))
>>               if int(mes) < 10:
>>                  mes = "0"+mês
>>               ano = str(int(data[6:10]))
>>               datafinal = ano+"/"+mes+"/"+dia
>>               print datafinal
>>               autor = row[5]
>>               if autor == "":
>>                  autor = "ASCOM/ANA"
>>               nn.setCreators(autor)
>>               texto = row[6]
>>               nn.setEffectiveDate(DateTime(datafinal))
>>               nn.setModificationDate(DateTime(row[4]))
>>               nn.creation_date = DateTime(row[3])
>>               nn.setTitle(row[1])
>>               nn.setDescription(row[2])
>>               nn.setFormat(texto)
>>
>> #              nn.format = texto
>> #              nn.setText(row[6])
>> #              nn.setText(row[6], mimetype='text/html')
>>               nn.portal_workflow.doActionFor(nn,"publish", comment="")
>>               nn.reindexObject()
>>               quant = quant + 1
>>               print quant
>>      return fim
>>
>>
>>
>> Por favor, alguém poderia apontar onde estou errando?
>>
>> Pois não estou conseguindo carregar o corpo de texto.
>>
>> Em sex, 8 de mar de 2019 às 14:39, Davi Lima <davilima6 em gmail.com>
>> escreveu:
>>
>>> Por nada.
>>>
>>> Você pode inspecionar os objetos fazendo:
>>>
>>> ./bin/instance debug
>>>
>>> Em seguida, por exemplo:
>>>
>>> portal = app['Plone']
>>> fp = portal['front-page']
>>> [x for x in dir(fp) if x.startswith('set')]
>>> help(fp.setFormat)
>>>
>>> Mais infos em:
>>>
>>>    - https://docs.plone.org/develop/plone/misc/commandline.html
>>>
>>> []s
>>> Davi
>>>
>>> Em qui, 7 de mar de 2019 às 20:05, Alexandre Chagas <
>>> alexandre.acs em gmail.com> escreveu:
>>>
>>>> Obrigado Davi ;)
>>>>
>>>> Em qui, 7 de mar de 2019 às 15:48, Davi Lima <davilima6 em gmail.com>
>>>> escreveu:
>>>>
>>>>> Para simplificar, o metodo setCreationDate foi removido em tipos
>>>>> Dexterity. Tente alterar diretamente:
>>>>>
>>>>> *nn.creation_date = DateTime(row[3])*
>>>>>
>>>>> []s
>>>>> Davi
>>>>>
>>>>> Em qui, 7 de mar de 2019 às 18:53, Alexandre Chagas <
>>>>> alexandre.acs em gmail.com> escreveu:
>>>>>
>>>>>> Olá Pessoal,
>>>>>>
>>>>>> Estou fazendo uma migração de registros por meio de um arquivo CSV, e
>>>>>> está acontecendo algo que não tem lógica.
>>>>>>
>>>>>> O mesmo código Python com “External Methods” funciona numa instalação
>>>>>> e na outra aparece erro de atributo. Por favor, se alguém puder apontar
>>>>>> onde estou errando!
>>>>>>
>>>>>> Meu código é este: (não reparem o código super tosco, mas foi aonde
>>>>>> consegui chegar sem saber python)
>>>>>>
>>>>>>
>>>>>> *import csv, sys, string, re*
>>>>>> *from DateTime import DateTime*
>>>>>> *from zope.component import queryUtility, createObject*
>>>>>> *from plone.i18n.normalizer.interfaces import IIDNormalizer*
>>>>>> *def import_data(self):*
>>>>>> *     reader = csv.reader(open('/tmp/noticias5000-v2-completo.csv'),
>>>>>> delimiter=';', quotechar='"', doublequote=Fa$*
>>>>>> *     fim = "fim."*
>>>>>> *     quant = 0*
>>>>>> *     for row in reader:*
>>>>>> *           if row[0] != 'id':*
>>>>>> *              id = self.generateUniqueId('Document')*
>>>>>> *              stat=row*
>>>>>> *              self.invokeFactory('Document', id)*
>>>>>> *              nn = getattr(self, id)*
>>>>>>
>>>>>> *              x_titulo = row[1]*
>>>>>> *              print x_titulo*
>>>>>>
>>>>>> *              data = row[3]*
>>>>>> *              print data*
>>>>>> *              dia = str(int(data[:2]))*
>>>>>> *              if int(dia) < 10:*
>>>>>> *                 dia = "0"+dia*
>>>>>> *              mes = str(int(data[3:5]))*
>>>>>> *              if int(mes) < 10:*
>>>>>> *                 mes = "0"+mes*
>>>>>> *              ano = str(int(data[6:10]))*
>>>>>> *              datafinal = ano+"/"+mes+"/"+dia*
>>>>>> *              print datafinal*
>>>>>>
>>>>>> *              autor = row[5]*
>>>>>> *              if autor == "":*
>>>>>> *                 autor = "ASCOM/ANA"*
>>>>>>
>>>>>> *              nn.setCreators(autor)*
>>>>>> *              nn.setEffectiveDate(DateTime(datafinal))*
>>>>>> *              nn.setModificationDate(DateTime(row[4]))*
>>>>>> *              nn.setCreationDate(DateTime(row[3]))*
>>>>>> *              nn.setTitle(row[1])*
>>>>>> *              nn.setDescription(row[2])*
>>>>>> *              nn.setText(row[6])*
>>>>>> *              nn.portal_workflow.doActionFor(nn,"publish",
>>>>>> comment="")*
>>>>>> *              nn.reindexObject()*
>>>>>>
>>>>>> *              quant = quant + 1*
>>>>>> *              print quant*
>>>>>> *     return fim*
>>>>>>
>>>>>> *Na versão Plone, sem o IDG consigo efetuar a migração de dados.Sem
>>>>>> erro algum, *
>>>>>>
>>>>>> *Versão*
>>>>>> *• Plone 4.3.18 (4320)*
>>>>>> *• CMF 2.2.10*
>>>>>> *• Zope 2.13.28*
>>>>>> *• Python 2.7.12 (default, Feb 7 2019, 11:36:40) [GCC 4.7.2]*
>>>>>> *• PIL 3.3.1 (Pillow)*
>>>>>>
>>>>>> *E nessa versão Plone com o IDG, aparece erro de parâmetro:*
>>>>>> *Versão*
>>>>>> *. Portal Padrão 1.1.5.1*
>>>>>> *. Plone 4.3.9 (4313)*
>>>>>> *. CMF 2.2.9*
>>>>>> *. Zope 2.13.24*
>>>>>> *. Python 2.7.12 (default, Jul 27 2017, 09:49:26) [GCC 4.7.2]*
>>>>>> *. PIL 3.3.1 (Pillow)*
>>>>>>
>>>>>> MSG DE ERRO:
>>>>>>
>>>>>> 2019-03-07 14:21:48 ERROR Zope.SiteErrorLog
>>>>>> 1551979308.610.397350171831
>>>>>> http://10.1.10.26:8082/portal/ANA/noticias-antigas/migrarnoticias
>>>>>> 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 Products.ExternalMethod.ExternalMethod, line 237, in __call__
>>>>>>    - __traceback_info__: ((<Folder at
>>>>>> /portal/ANA/noticias-antigas>,), {}, None)
>>>>>>   Module
>>>>>> /opt/Plone-4.3.11-portal-ana/zeocluster/parts/client1/Extensions/importcsv3.py,
>>>>>> line 43, in import_data
>>>>>> AttributeError: setCreationDate
>>>>>> ///
>>>>>>
>>>>>> O que pode estar acontecendo? Agradeço muito qualquer ajuda.
>>>>>>
>>>>>> --
>>>>>> *Alexandre Chagas*
>>>>>>
>>>>>> --
>>>>>> Comunidade Plone no Governo
>>>>>> Site: http://www.softwarelivre.gov.br/plone
>>>>>> Wiki: http://colab.interlegis.leg.br/wiki/PloneGovBr
>>>>>> Histórico:
>>>>>> http://colab.interlegis.leg.br/search/?type=thread&order=latest&list=plonegov-br
>>>>>> Lista: https://listas.interlegis.gov.br/mailman/listinfo/plonegov-br
>>>>>
>>>>> --
>>>>> Comunidade Plone no Governo
>>>>> Site: http://www.softwarelivre.gov.br/plone
>>>>> Wiki: http://colab.interlegis.leg.br/wiki/PloneGovBr
>>>>> Histórico:
>>>>> http://colab.interlegis.leg.br/search/?type=thread&order=latest&list=plonegov-br
>>>>> Lista: https://listas.interlegis.gov.br/mailman/listinfo/plonegov-br
>>>>
>>>>
>>>>
>>>> --
>>>> *Alexandre Chagas*
>>>>
>>>> --
>>>> Comunidade Plone no Governo
>>>> Site: http://www.softwarelivre.gov.br/plone
>>>> Wiki: http://colab.interlegis.leg.br/wiki/PloneGovBr
>>>> Histórico:
>>>> http://colab.interlegis.leg.br/search/?type=thread&order=latest&list=plonegov-br
>>>> Lista: https://listas.interlegis.gov.br/mailman/listinfo/plonegov-br
>>>
>>> --
>>> Comunidade Plone no Governo
>>> Site: http://www.softwarelivre.gov.br/plone
>>> Wiki: http://colab.interlegis.leg.br/wiki/PloneGovBr
>>> Histórico:
>>> http://colab.interlegis.leg.br/search/?type=thread&order=latest&list=plonegov-br
>>> Lista: https://listas.interlegis.gov.br/mailman/listinfo/plonegov-br
>>
>>
>>
>> --
>> *Alexandre Chagas*
>>
>> --
>> Comunidade Plone no Governo
>> Site: http://www.softwarelivre.gov.br/plone
>> Wiki: http://colab.interlegis.leg.br/wiki/PloneGovBr
>> Histórico:
>> http://colab.interlegis.leg.br/search/?type=thread&order=latest&list=plonegov-br
>> Lista: https://listas.interlegis.gov.br/mailman/listinfo/plonegov-br
>
> --
> Comunidade Plone no Governo
> Site: http://www.softwarelivre.gov.br/plone
> Wiki: http://colab.interlegis.leg.br/wiki/PloneGovBr
> Histórico:
> http://colab.interlegis.leg.br/search/?type=thread&order=latest&list=plonegov-br
> Lista: https://listas.interlegis.gov.br/mailman/listinfo/plonegov-br



-- 
*Alexandre Chagas*
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.interlegis.gov.br/pipermail/plonegov-br/attachments/20190311/f4f96fa1/attachment.html>


Mais detalhes sobre a lista de discussão PloneGov-BR