[plonegov-br] RES: Dúvida Correios.

Tarcísio Ribeiro Freire Junior tarcisiofreire em correios.com.br
Segunda Abril 18 17:09:22 BRT 2016


Nada feito.
Coloquei o import e implementei deste jeito:

def configuraDestaque(destaque,event):
    """configuracoes do Destaque"""

    import pdb; pdb.set_trace();

    catalog = getToolByName(destaque,'portal_catalog')
    # cria pasta com mesmo id e titulo do destaque para conter todo seu conteudo
    id = destaque.id
    titulo = destaque.Title()
    pastaPai = aq_parent(aq_inner(destaque))
    objetoPreExistente = destaqueExistente(destaque)

    if not objetoPreExistente:
        pastaPai.manage_renameObject(id, id + '-pagina')
        destaque.setTitle(titulo + SUFIXO_DESTAQUE)
        pastaPai.invokeFactory("Folder",id,title=titulo)
        pastaDestaque = pastaPai[id]
        #habilita restricoes de tipos
        addable_types = ["Destaque","Image"]
        pastaDestaque.setConstrainTypesMode(constraintypes.ENABLED)
        pastaDestaque.setLocallyAllowedTypes(addable_types)
        pastaDestaque.setImmediatelyAddableTypes(addable_types)
        # Will finish Archetypes content item creation process,
        # rename-after-creation and such
        pastaDestaque.unmarkCreationFlag()

        objetosDoDestaque = catalog(path = { "query" : "/".join(pastaPai.getPhysicalPath()), "depth" : 1},
                                portal_type = addable_types)

        for objeto in objetosDoDestaque:
            pastaDestaque.manage_pasteObjects(pastaPai.manage_cutObjects(objeto.id))
            if objeto.portal_type == 'Destaque':
                pastaDestaque.default_page = objeto.id
    else:
        api.portal.show_message(message='Blueberries!', request=event.object.REQUEST)
        pastaPai.manage_delObjects([id])

def destaqueExistente(destaque):
    """Verifica se já há desataques na pasta pai. Se houver lança execeção e aborta a criação."""
    pastaPai = aq_parent(aq_inner(destaque))
    itens = pastaPai.items()
    # import pdb; pdb.set_trace();
    for item in itens:
        # item é uma lista filha da lista itens: (título do objeto , objeto)
        if IDestaque.providedBy(item[1]) and item[0] != destaque.Title():

            logger.warn(destaque)
            logger.warn(pastaPai)
            logger.warn(item[1])

            item[1].plone_utils.addPortalMessage(_(u'Não é possível cadastrar mais de um destaque em uma pasta. Por favor, volte até a pasta /Destaques e adicione o item pretendido.'), 'error')
            return item[1]




Tarcísio Ribeiro Freire Junior
Analista de Correios / ANALISTA IX



AC/VICOR/DECOR/GSSU
tarcisiofreire em correios.com.br
(61) 3207-1775

[cid:image001.jpg em 01D19995.0D060450]


De: plonegov-br-bounces em listas.interlegis.gov.br [mailto:plonegov-br-bounces em listas.interlegis.gov.br] Em nome de Idg Serpro
Enviada em: segunda-feira, 18 de abril de 2016 16:53
Para: plonegov-br em listas.interlegis.gov.br
Assunto: Re: [plonegov-br] Dúvida Correios.

Você pode tentar utilizar o plone.api:

http://docs.plone.org/develop/plone.api/docs/portal.html#show-notification-message

--
Wesley Barroso Lopes
Analista de Desenvolvimento
SERPRO/SUPDE/DEDES/DECVF
Tel: 31 3311 6838



Em 18/04/2016 16:26:50, Tarcísio Ribeiro Freire Junior escreveu:
Pessoal, boa tarde!

Tenho um tipo de conteúdo chamado destaque que, devido a necessidade do requisito, só deve ter um por pasta. Deste modo, o código completo mais abaixo, além de criar elementos necessários ao funcionamento da instância do tipo, controla uma adição secundária deste. E, ao término do processo, tenta apresentar uma mensagem para o usuário, ponto que estou enfrentando o problema.

Já olhei a documentação http://docs.plone.org/develop/plone/sessions/statusmessages.html, mas não foi muito esclarecedora quanto ao erro que estou inserindo no código.

Estou com um dúvida nesta linha, creio:
item[1].plone_utils.addPortalMessage(_(u'Não é possível cadastrar mais de um destaque em uma pasta. Por favor, volte até a pasta /Destaques e adicione o item pretendido.'), 'error')

**O que está sendo curioso em todo esse processo de tentativa e erro é que já consegui apresentar a mensagem quando estava dando um erro de permissão de adição de itens. Creio que meu código esteja se perdendo com o contexto.

***Desculpem pela qualidade do código, pois já fiz tantas tentativas que acabei bagunçado por demais. Pretendo organizá-lo ao final, após descobrir o que está ocorrendo.


Antecipadamente, agradeço o apoio.
Obrigado!

####################################
Código completo
####################################


# -*- coding: utf-8 -*-
"""Definition of the Destaque content type
"""
from Acquisition import aq_inner, aq_parent
from zope.interface import implements
from zope.component import getUtility
HAS_LINGUAPLONE = True
try:
    from Products.LinguaPlone.I18NBaseBTreeFolder import I18NOnlyBaseBTreeFolder
    from Products.LinguaPlone import public as atapi
except ImportError:
    HAS_LINGUAPLONE = False
    from Products.Archetypes import atapi

from plone.app.folder.folder import ATFolder
from plone.i18n.normalizer.interfaces import IIDNormalizer

from Products.CMFCore.utils import getToolByName
from Products.ATContentTypes.content.document import ATDocument, ATDocumentSchema
from Products.ATContentTypes.content import schemata
from Products.ATContentTypes.configuration import zconf
from Products.ATContentTypes.lib import constraintypes

# -*- Message Factory Imported Here -*-
from pci.conteudo import conteudoMessageFactory as _
from pci.conteudo.interfaces import IDestaque
from pci.conteudo.config import PROJECTNAME, SUFIXO_DESTAQUE
import logging
from pci.policy import config
logger = logging.getLogger(config.PROJECTNAME)

def configuraDestaque(destaque,event):
    """configuracoes do Destaque"""

    import pdb; pdb.set_trace();

    catalog = getToolByName(destaque,'portal_catalog')
    # cria pasta com mesmo id e titulo do destaque para conter todo seu conteudo
    id = destaque.id<http://destaque.id>
    titulo = destaque.Title()
    pastaPai = aq_parent(aq_inner(destaque))
    objetoPreExistente = destaqueExistente(destaque)

    if not objetoPreExistente:
        pastaPai.manage_renameObject(id, id + '-pagina')
        destaque.setTitle(titulo + SUFIXO_DESTAQUE)
        pastaPai.invokeFactory("Folder",id,title=titulo)
        pastaDestaque = pastaPai[id]
        #habilita restricoes de tipos
        addable_types = ["Destaque","Image"]
        pastaDestaque.setConstrainTypesMode(constraintypes.ENABLED)
        pastaDestaque.setLocallyAllowedTypes(addable_types)
        pastaDestaque.setImmediatelyAddableTypes(addable_types)
        # Will finish Archetypes content item creation process,
        # rename-after-creation and such
        pastaDestaque.unmarkCreationFlag()

        objetosDoDestaque = catalog(path = { "query" : "/".join(pastaPai.getPhysicalPath()), "depth" : 1},
                                portal_type = addable_types)

        for objeto in objetosDoDestaque:
            pastaDestaque.manage_pasteObjects(pastaPai.manage_cutObjects(objeto.id<http://objeto.id>))
            if objeto.portal_type == 'Destaque':
                pastaDestaque.default_page = objeto.id<http://objeto.id>
    else:
        pastaPai.manage_delObjects([id])

def destaqueExistente(destaque):
    """Verifica se já há desataques na pasta pai. Se houver lança execeção e aborta a criação."""
    pastaPai = aq_parent(aq_inner(destaque))
    itens = pastaPai.items()
    # import pdb; pdb.set_trace();
    for item in itens:
        # item é uma lista filha da lista itens: (título do objeto , objeto)
        if IDestaque.providedBy(item[1]) and item[0] != destaque.Title():

            logger.warn(destaque)
            logger.warn(pastaPai)
            logger.warn(item[1])

            item[1].plone_utils.addPortalMessage(_(u'Não é possível cadastrar mais de um destaque em uma pasta. Por favor, volte até a pasta /Destaques e adicione o item pretendido.'), 'error')
            return item[1]



DestaqueSchema = ATDocumentSchema.copy() + atapi.Schema((

    # -*- Your Archetypes field definitions here ... -*-

))

# Set storage on fields copied from ATFolderSchema, making sure
# they work well with the python bridge properties.

DestaqueSchema['title'].storage = atapi.AnnotationStorage()
DestaqueSchema['description'].storage = atapi.AnnotationStorage()

schemata.finalizeATCTSchema(
    DestaqueSchema,
    folderish=False,
    moveDiscussion=False
)

class Destaque(ATDocument):
    """Unidade Destaque dos Correios"""

    implements(IDestaque)
    meta_type = "Destaque"
    schema = DestaqueSchema

    _at_rename_after_creation = True


    title = atapi.ATFieldProperty('title')
    description = atapi.ATFieldProperty('description')
    # -*- Your ATSchema to Python Property Bridges Here ... -*-

atapi.registerType(Destaque, PROJECTNAME)



Tarcísio Ribeiro Freire Junior
Analista de Correios / ANALISTA IX



AC/VICOR/DECOR/GSSU
tarcisiofreire em correios.com.br
(61) 3207-1775

[cid:image001.jpg em 01D19995.0D060450]



________________________________

AVISO LEGAL

“Esta mensagem é destinada exclusivamente para a(s) pessoa(s) a quem é dirigida, podendo conter informação confidencial e/ou legalmente privilegiada. Se você não for destinatário desta mensagem, desde já fica notificado de abster-se a divulgar, copiar, distribuir, examinar ou, de qualquer forma, utilizar a informação contida nesta mensagem, por ser ilegal. Caso você tenha recebido esta mensagem por engano, peço que me retorne este e-mail, promovendo, desde logo, a eliminação do seu conteúdo em sua base de dados, registros ou sistema de controle. Fica desprovida de eficácia e validade a mensagem que contiver opiniões particulares e vínculos obrigacionais, expedida por quem não detenha poderes de representação por parte da ECT.”

"This message is intended only for the person to whom it is addressed and may contain confidential and/or legally privileged. If you are not a recipient of this message, it is now notified of refraining to disclose; copy; distribute; examine; or in any way use the information contained in this message because it is illegal. If you have received this message in error, please I ask to return this email, promoting as soon as possible the elimination of its content in database, records or system control. It is devoid of effective and valid message that contains the private opinions and dividend bonds, issued by those not holding powers of attorney by the ECT."

--

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

-


"Esta mensagem do SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO), empresa pública federal regida pelo disposto na Lei Federal nº 5.615, é enviada exclusivamente a seu destinatário e pode conter informações confidenciais, protegidas por sigilo profissional. Sua utilização desautorizada é ilegal e sujeita o infrator às penas da lei. Se você a recebeu indevidamente, queira, por gentileza, reenviá-la ao emitente, esclarecendo o equívoco."

"This message from SERVIÇO FEDERAL DE PROCESSAMENTO DE DADOS (SERPRO) -- a government company established under Brazilian law (5.615/70) -- is directed exclusively to its addressee and may contain confidential data, protected under professional secrecy rules. Its unauthorized use is illegal and may subject the transgressor to the law's penalties. If you're not the addressee, please send it back, elucidating the failure."

________________________________

AVISO LEGAL

“Esta mensagem é destinada exclusivamente para a(s) pessoa(s) a quem é dirigida, podendo conter informação confidencial e/ou legalmente privilegiada. Se você não for destinatário desta mensagem, desde já fica notificado de abster-se a divulgar, copiar, distribuir, examinar ou, de qualquer forma, utilizar a informação contida nesta mensagem, por ser ilegal. Caso você tenha recebido esta mensagem por engano, peço que me retorne este e-mail, promovendo, desde logo, a eliminação do seu conteúdo em sua base de dados, registros ou sistema de controle. Fica desprovida de eficácia e validade a mensagem que contiver opiniões particulares e vínculos obrigacionais, expedida por quem não detenha poderes de representação por parte da ECT.”

"This message is intended only for the person to whom it is addressed and may contain confidential and/or legally privileged. If you are not a recipient of this message, it is now notified of refraining to disclose; copy; distribute; examine; or in any way use the information contained in this message because it is illegal. If you have received this message in error, please I ask to return this email, promoting as soon as possible the elimination of its content in database, records or system control. It is devoid of effective and valid message that contains the private opinions and dividend bonds, issued by those not holding powers of attorney by the ECT."
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.interlegis.gov.br/pipermail/plonegov-br/attachments/20160418/84d54992/attachment.html>
-------------- Próxima Parte ----------
Um anexo não-texto foi limpo...
Nome: image001.jpg
Tipo: image/jpeg
Tamanho: 13693 bytes
Descrição: image001.jpg
URL: <http://listas.interlegis.gov.br/pipermail/plonegov-br/attachments/20160418/84d54992/attachment.jpg>


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