[plonegov-br] [Erro com código simples utilizando External Methods]
Davi Lima
davilima6 em gmail.com
Segunda Março 11 12:02:16 BRT 2019
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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.interlegis.gov.br/pipermail/plonegov-br/attachments/20190311/efce52c8/attachment.html>
Mais detalhes sobre a lista de discussão PloneGov-BR