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