quinta-feira, 25 de novembro de 2010

Alterar configuração do FCK editor via python

  portal_properties = getToolByName(site, 'portal_properties')
fckeditor_properties = getToolByName(portal_properties,
'fckeditor_properties')
fck_menu_styles = fckeditor_properties.manage_changeProperties(
fck_menu_styles = """bla bla bla"""
)

sexta-feira, 19 de novembro de 2010

Rechachear css/javascript via programação

from Products.CMFCore.utils import getToolByName

css_registry = getToolByName(context, 'portal_css')
css_registry.cookResources()

quarta-feira, 17 de novembro de 2010

Como remover portlets pelo python

from zope.component import getUtility
from zope.component import getMultiAdapter
from plone.portlets.interfaces import IPortletManager
from plone.portlets.interfaces import IPortletAssignmentMapping

def setupPortlets(context):
    site = context.getSite()
    column = getUtility(IPortletManager, name='plone.leftcolumn', context=site)
    manager = getMultiAdapter((site, column,), IPortletAssignmentMapping)
    del manager["Assignment2"]
    del manager["Assignment3"]  

sexta-feira, 12 de novembro de 2010

Adicionando indices no portal_catalog

portal_catalog = getToolByName(site,'portal_catalog')    

indexes = [('getConteudo','FieldIndex'),]

class Extra:
    pass

idsIndexes = portal_catalog.Indexes.objectIds()

for index in indexes:
    if index[0] not in idsIndexes:
        extra = None
    if index[1] == 'ZCTextIndex':
        extra = Extra()
    extra.lexicon_id = 'plone_lexicon'
    extra.index_type = 'Okapi BM25 Rank'
    portal_catalog.addIndex(index[0], index[1],extra)  

Adicionar Papel em Grupo

groupstool = getToolByName(portal, 'portal_groups')
objgrupo = groupstool.getGroupById(id_grupo)
rolesgrupo = objgrupo.getRoles()
if papel not in rolesgrupo:
    rolesgrupo.append(papel)
groupstool.editGroup(id=id_grupo, roles=rolesgrupo)

Pegando exceções em um doctest de integração

# Logar como manager

>>> self.loginAsPortalOwner()

# Vamos criar uma pasta 

>>> portal.invokeFactory('Folder','pasta')
'pasta'

# vamos tirar a permissão local de adicionar tipos de conteudo

>>> portal.pasta.setConstrainTypesMode(1)
>>> portal.pasta.setLocallyAllowedTypes((''))

# agora tentamos adicionar uma pasta e testamos se vai dar a exception esperada

>>> portal.pasta.invokeFactory('Folder','pasta-aqui-nao-pode')
Traceback (most recent call last):
...
Unauthorized: Disallowed subobject type: Folder

Upload de arquivo em um doctest funcional com testbrowser

>>> from Products.Five.testbrowser import Browser
>>> from Products.PloneTestCase.setup import portal_owner, default_password
>>> import os
>>> from Products.ATContentTypes.tests.utils import dcEdit, PACKAGE_HOME
>>> browser = Browser()
>>> portal_url = self.portal.absolute_url()

# Pegando um arquivo de imagem para usar no formulario
TEST_JPEG_FILENAME = 'canoneye.jpg'
TEST_JPEG_FILE = open(os.path.join(PACKAGE_HOME, 'input', TEST_JPEG_FILENAME), 'rb')
TEST_JPEG_FILE.seek(0)

# logar como Manager
>>>  browser.open(self.portal_url+'/login_form')
>>>  browser.getControl(name='__ac_name').value = usuario
>>>  browser.getControl(name='__ac_password').value = senha
>>>  browser.getControl(name='submit').click()
>>>  "You are now logged in" in browser.contents

# Adicionar uma Imagem
>>> browser.open(portal_url + '/createObject?type_name=Image')
>>> browser.getControl(name='title').value = 'image Sample'

# Adiciona um arquivo válido no campo imagem
>>> campo_imagem = browser.getControl(name='image_file')
>>> campo_imagem.filename = TEST_JPEG_FILENAME
>>> campo_imagem.value = TEST_JPEG_FILE
>>> browser.getControl('Save').click()
>>> 'Changes saved' in browser.contents
True

quinta-feira, 11 de novembro de 2010

Consulta com operadores lógicos com advancedQuery

query=dict()
query['review_state'] = 'published'  
query['portal_type'] = ['Event',]
query['sort_order'] = 'descending'
query['sort_on'] = 'start'
aq = portal_catalog.makeAdvancedQuery(query)
aq &= Ge('start',DateTime()) # Ge:maior ou igual; Le:menor ou igual
return portal_catalog.evalAdvancedQuery(aq)

Detelar objeto por id

folder.manage_delObjects(["list", "of", "ids", "to", "delete"])

Recuperar usuario

mtool = getToolByName(context,'portal_membership')
usr = mtool.searchMembers('cpf','0972813100')
> [{'username': 'admin', 'email': 'fulano@gmail.com'}]

Consulta irrestrita com portal_catalog

pc = getToolByName(context, 'portal_catalog')
query = dict()       
query['portal_type'] = ['Document,']
query['sort_order'] = 'descending'
query['sort_on'] = 'created'
results = pc.unrestrictedSearchResults(query)

Consulta simples com portal_catalog

from Products.CMFCore.utils import getToolByName

pc = getToolByName(context, 'portal_catalog')

query = dict()       
query['review_state'] = 'published'                  
query['portal_type'] = ['Document,']
query['sort_order'] = 'descending'
query['sort_on'] = 'created'
results = pc(query)

Adicionar propriedade em portal_properties

from Products.CMFCore.utils import getToolByName
pp = getToolByName(context, 'portal_properties')
site_properties = pp.site_properties
if not hasattr(site_properties,'nome_da_propriedade'):
site_properties.manage_addProperty('nome_da_propriedade', valor_inicial,tipo_da_propriedade)

Pegar propriedade do portal_properties

from Products.CMFCore.utils import getToolByName

pp = getToolByName(context, 'portal_properties')
#site_properties eh um container de properties padrão do portal_properties
pp.site_properties.[nome_da_propriedade]

Pegar o objeto Plone Site

portal = getToolByName(context, 'portal_url').getPortalObject()