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

Alexandre Chagas alexandre.acs em gmail.com
Segunda Março 11 11:35:00 BRT 2019


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


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