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

Davi Lima davilima6 em gmail.com
Segunda Março 11 14:46:23 BRT 2019


Por nada! Fico feliz que funcionou :)



Em seg, 11 de mar de 2019 às 18:09, Alexandre Chagas <
alexandre.acs em gmail.com> escreveu:

> 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*
>
> --
> 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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.interlegis.gov.br/pipermail/plonegov-br/attachments/20190311/528802da/attachment.html>


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