Está en la página 1de 3

Interfaces Adapters

from zope.interface import Interface, Attribute class SomeAdapter(object):


class IExample(Interface): implements(IProvided)
""" Interface description """ adapts(IAdapted, IOtherAdapted)
Sample some_attribute = Attribute("Some value")
def __init__(self, context):
Adapter's class
def some_method(some_arg='default'): self.context = context
""" Method description """
def provided_method(self):
from zope.interface import implements
""" """
class Example(object):
...
""" Description """
implements(IExample) <adapter factory=".adapters.SomeAdapter"
Implementation provides=".interfaces.IProvided"
some_attribute = 1 Adapter's zcml for=".interfaces.IAdapted
.interfaces.IOtherAdapted"
def some_method(self, some_arg='default'): name="some" />
return some_arg
>>> adapted = Adapted()
Getting adapter
>>> IExample.implementedBy(Example) >>> some = IProvided(adapted)
... True
from zope.component import getMultiAdapter
Checking >>> obj = Example()
adapted, other = Adapted(), OtherAdapted()
>>> IExample.providedBy(obj) Getting multi adapter
getMultiAdapter((adapted, other), IProvided,
... True
name="some")
>>> from zope.interface import alsoProvides
from zope.component import adapter
>>> ISomeAnotherInterface.providedBy(obj)
from zope.interface import implementer
... False
Adding
>>> alsoProvides(obj, ISomeAnotherInterface)
class SomeAdapter(object):
>>> ISomeAnotherInterface.providedBy(obj)
implements(IProvided)
... True
Factory ...
result = context.portal_catalog(object_provides=
Catalog searching
IExample.__identifier__) @implementer(IProvided)
@adapter(IAdapted)
def some_adapter(context):
Events
return SomeAdapter(context)
class ISomeEvent(Interface):
""" some event """
Utilities
Class
class SomeEvent(object): class ISomeUtility(Interface):
implements(ISomeEvent) """ some utility """

@adapter(ISomeEvent)
class SomeUtility(object):
def react(some_event_object):
Subscriber implements(ISomeUtility)
""" subscriber description """
Global
...
def __init__(self, arg):
<subscriber handler=".events.react" self.arg = arg
Subscriber's zcml for=".interfaces.ISomeContentType
.interfaces.ISomeEvent"/> some1 = SomeUtility(1)

from zope.event import notify some2 = SomeUtility(2)


Notification
notify(SomeEvent()) <utility factory=".some.SomeUtility"
Unnamed utility zcml
provides=".interfaces.ISomeUtility"/>
Global variables <utility component=".some.some1"
Context Named utility zcml provides=".interfaces.ISomeUtility"
name="some1"/>
current_page_url string, current page url
from zope.component import getUtility
here_url string, current object url
some = getUtility(ISomeUtility, name="some")
hidecolumns string, portlets columns visibility
isContextDefaultPage bool, is current object default page? # or
Getting utility
bool, has member permission 'Modify portal content' from Products.CMFCore.utils import
is_editable getUtilityByInterfaceName
in context?
getUtilityByInterfaceName('Products.CMFCore.
isFolderish bool, context isPrincipiaFolderish attribute
interfaces.ISiteRoot')
isLocked bool, is current page locked by another user?
<componentregistry>
bool, does context is_folderish and also doesn't
isStructuralFolder <utilities>
provides INonStructuralFolder?
<utility interface="path.to.interface"
bool, is current page "view" or not ("edit", "sharing" object="/obj_name_in_zodb"/>
isViewTemplate
etc.)?
Local utility profile
navigation_root_url string, navigation root url <!-- or -->
(componentregistry.xml)
object_title string, current object title
<utility interface="path.to.interface"
sl, sr bool, true if has any left/right portlet factory="path.to.utility.class"/>
template_id string, current template id </utilities>
wf_state string, workflow state </componentregistry>
Portal Various utils... from some utils.py files
default_language string, default language Products.CMFCore.utils
language string, language getToolByName(obj, name, get tool object by it's name, eg.
isRTL bool, is right to left? default=_marker) getToolByName(self, 'portal_types')

portal Plone Site, portal root getUtilityByInterfaceName(dotted_name, get tool/utility object by it's full dotted interface
portal_tabs list, top level tabs default=_marker) name

portal_title string, portal title make a Zope-friendly ID from text (remove spaces
cookString(text)
and lowercase)
portal_url string, portal url
_getAuthenticatedUser() shortcut to getSecurityManager().getUser()
site_properties site_properties sheet of PropertiesTool
shortcut to
visible_ids 1 if user can edit ids, None otherwise
_checkPermission(permission, obj) getSecurityManager().checkPermission(permission,
User obj)
checkPermission method of MembershipTool
get all permissions not defined in ourself that are
_ac_inherited_permissions(ob, all=0)
isAnon bool, is user anonymous? inherited
member authenticated member _modifyPermissionMappings(ob, map) modifies multiple role to permission mappings
membersfolder members folder object ... and others

Tools Products.CMFDefault.utils
acl_users PAS, acl_users convert the key-value pairs in headers to valid
formatRFC822Headers(headers)
atool ActionsTool, portal_actions RFC822-style headers

ifacetool InterfaceTool, portal_interface parse any leading 'RFC-822'-ish headers from an


parseHeadersBody(body, headers=None,
uploaded document, returning a dictionary
mtool MembershipTool, portal_membership rc=re.compile( r'\n|\r\n' ))
containing the headers and the stripped body
portal_properties PropertiesTool, portal_properties
seq_strip(seq, stripper=lambda x:
putils PloneTool, portal_utils strip a sequence of strings
x.strip())
syntool SyndicationTool, portal_syndication
scrubHTML(html) strip illegal HTML tags from string text
utool URLTool, portal_url
isHTMLSafe(html) would current HTML be permitted to be saved?
wtool WorkflowTool, portal_workflow
translate(message, context) translate i18n message
Utils
getBrowserCharset(request) get charset preferred by the browser
normalizeString(text,
method, normalizes a title to an id makeEmail(mtext, context, headers={}) make email message
relaxed=False)
checkEmailAddress(address) check email address
toLocalizedTime(time,
method, convert time to localized time
long_format=None) ... and others

uniqueItemIndex RealIndexIterator, iterator used for tabindex attribute Products.CMFPlone.utils

ztu module ZTUtils (Batch, TreeMaker, LazyFilter etc) parent(obj) shortcut to aq_parent(aq_inner(obj))
Iterator IndexIterator, deprecated createBreadCrumbs(context, request) return bredcrumbs
tabindex IndexIterator, start at 30000, deprecated createNavTree(context, request,
return navtree
sitemap=False)
Actions
actions dict, all actions createSiteMap(context, request,
return sitemap
sitemap=False)
folder_actions list, actions with category folder
isDefaultPage(obj, request) is obj default page?
global_actions list, actions with category global
getDefaultPage(obj, request) get obj default page
keyed_actions dict of dicts with keys of categories and action ids
pretty_title_or_id(context, obj) return the best possible title or id of an item
user_actions list, actions with category user
workflow_actions list, actions with category workflow getSiteEncoding(context) return site encoding
portal_utf8(context, str, errors='strict') encode str from portal encoding to utf-8...

Global views utf8_portal(context, str, errors='strict') ... and reverse


Available as eg. portal_state = getMultiAdapter((context, request), list of types except
typesToList(context)
name=u"plone_portal_state") in code, or tal:define="portal_state navtree_properties.metaTypesNotToList
context/@@plone_portal_state" in template.
normalizeString(text, context=None,
normalize string
plone encoding=None)
cropText(text, length, ellipsis='...') crop text on a word boundary, displayContentsTab() _createObjectByType(type_name,
create an object without performing security checks
bool, show content tabs?, getCurrentFolder(), getCurrentFolderUrl(), container, id, *args, **kw)
getCurrentObjectUrl(), getCurrentUrl(), getIcon(item) return ContentIcon object for item,
safeToInt(value) convert value to integer or return 0
getParentObject() parent for context, getViewTemplateId(),
have_portlets(manager_name, view=None), icons_visible() bool, are item's icons transaction_note(note) write human legible note for transaction
visible?, isDefaultPageInFolder(), isFolderOrFolderDefaultPage(), safe_hasattr(obj, name) like hasattr but not mask exceptions
isPortalOrPortalDefaultPage(), isStructuralFolder(), navigationRootPath(),
base_hasattr(obj, name) like safe_hasattr but disable acquisition
navigationRootUrl(), showEditableBorder() bool, show border?, toLocalizedTime(time,
long_format=None), visibleIdsEnabled() check if user can edit object id, safe_callable(obj) callable safe for ConflictError

plone_portal_state converts a value to unicode, even it is already a


safe_unicode(value, encoding='utf-8')
unicode
anonymous(), default_language(), friendly_types() get types list except
site_properties/types_not_searched, is_rtl(), language(), locale(), member(), like zope.interface.directlyProvides but safe for
directlyProvides(obj, *interfaces)
navigation_root_path(), navigation_root_url(), portal(), portal_title(), portal_url() Zope2 interfaces

plone_tools like zope.interface.classImplements but safe for


classImplements(class_, *interfaces)
actions(), catalog(), interface(), membership(), properties(), syndication(), types(), url(), Zope2 interfaces
workflow() classDoesNotImplement(class_, like zope.interface.classImplementsOnly but safe
plone_context_state *interfaces) for Zope2 interfaces

actions() actions list except portal_workflow, folder_buttons and object_buttons, scale_image(image_file,


scales an image down
canonical_object() get 'self.is_default_page() and self.parent() or self', max_size=None, default_format=None)
canonical_object_url(), current_base_url() get request/ACTUAL_URL or ... and others
request/VIRTUAL_URL or request/URl or context.absolute_url, current_page_url() get Roles
page url with query string, folder(), is_default_page(), is_editable(), is_folderish(),
Plone
is_locked(), is_portal_root(), is_structural_folder(), is_view_template(), keyed_actions(),
object_title(), object_url(), parent(), portlet_assignable() bool, is ILocalPortletAssignable Member each logged in user
provided by context, view_template_id(), view_url() object_url with added "/view" for files
Reader can read
and images, workflow_state()
Editor can edit
plone_interface_info
class_provides(dotted_name) bool, is dotted_name interface provided by Contributor can add
aq_base(context).__class__ ?, provides(dotted_name) bool, is dotted_name interface Reviewer can review
provided by aq_base(context)?
Manager site admin

TAL and METAL

TAL (xmlns:tal="http://xml.zope.org/namespaces/tal) ... in order of execution Zope

define variable, eg. Anonymous not logged in


define
<div tal:define="global title here/title_or_id">
Authenticated logged in (this role can't be granted or revoked)
condition test condition, eg. <div tal:condition="not: here/title">
Owner owner, usually creator of object
loop iterable, eg. <div tal:repeat="row search_results">. Extra
use checkPermission to check rights, eg.
variables available in loop:
>>> from AccessControl import getSecurityManager
index int, iteration number, starting from 0 >>> getSecurityManager.checkPermission('ModifyPortalContent', context)
number method returning int, iteration number, starting from 1
Chosen events
even /
method returning bool, true for even / odd rows
odd Contents
start / end bool, true for first / last row Products.Archetypes.interfaces.IEditBegunEvent
repeat Products.Archetypes.interfaces.IEditCancelledEvent
length method returning int, number of iterations
Products.Archetypes.interfaces.IObjectInitializedEvent
letter / method returning str, iteration number as lower / Products.Archetypes.interfaces.IObjectEditedEvent
Letter uppercase letter (a, b, c... z, aa, ab...)

method returning str, iteration number as lowercase copying, moving and removing objects
roman zope.lifecycleevent.interfaces.IObjectCopiedEvent
roman number (i, ii, iii, iv...)
zope.app.container.interfaces.IObjectMovedEvent
method returning bool, true if value passed as argument
first / last OFS.interfaces.IObjectClonedEvent
occures first / last time in this iteration OFS.interfaces.IObjectWillBeRemovedEvent
zope.app.container.interfaces.IObjectRemovedEvent
content replace tag content, eg. <div tal:content="structure here/title"> zope.app.container.interfaces.IContainerModifiedEvent

replace tag content and remove tag, eg. other events triggered many times by portal_factory during object creation
replace
<div tal:replace="structure here/title"> zope.lifecycleevent.interfaces.IObjectCreatedEvent
set tag attribute, eg. OFS.interfaces.IObjectWillBeAddedEvent
attributes
<div tal:attributes="href here/absolute_url"> zope.app.container.interfaces.IObjectAddedEvent
zope.app.container.interfaces.IContainerModifiedEvent
remove tag but keep content, eg.
zope.lifecycleevent.interfaces.IObjectModifiedEvent
omit-tag <div tal:omit-tag="optional_condition">; if optional condition
OFS.interfaces.IObjectWillBeMovedEvent
evaluates to false tag won't be removed
zope.app.container.interfaces.IObjectMovedEvent
hendle error caused by any other tag, eg.
Workflow
on-error <div tal:on-error="optional_expression">; if optional expression is
provided it will be evaluated in case of errors Products.CMFCore.interfaces.IActionWillBeInvokedEvent
Products.DCWorkflow.interfaces.IBeforeTransitionEvent
METAL (xmlns:metal="http://xml.zope.org/namespaces/metal")
Products.DCWorkflow.interfaces.IAfterTransitionEvent
mark part of template to be referencable later, eg. Products.CMFCore.interfaces.IActionRaisedExceptionEvent
define:macro
<div metal:define-macro="box">...</div> Products.CMFCore.interfaces.IActionSucceededEvent

use macro defined in another template, eg. Login


use:macro
<div metal:use-macro="/path/to/template/macros/box" />
Products.PlonePAS.interfaces.events.IUserInitialLoginInEvent
part of template which should be filled later, eg. Products.PluggableAuthService.interfaces.events.IUserLoggedInEvent
define:slot
<div metal:define-slot="main" />; must be inside define-macro Products.PluggableAuthService.interfaces.events.IUserLoggedOutEvent

fill slot defined in another template, eg. Working copies (iterate)


fill:slot
<div metal:fill-slot="main">...</div>; must be inside use-macro
plone.app.iterate.interfaces.IBeforeCheckoutEvent
plone.app.iterate.interfaces.ICheckoutEvent
Installation plone.app.iterate.interfaces.ICancelCheckoutEvent
plone.app.iterate.interfaces.ICheckinEvent
$ wget http://peak.telecommunity.com/dist/ez_setup.py get ez_setup.py
plone.app.iterate.interfaces.IWorkingCopyDeletedEvent
$ python ez_setup.py install easy_install plone.app.iterate.interfaces.IAfterCheckinEvent
$ easy_install ZopeSkel install ZopeSkel Other
list of installed site configuration change
$ paster create --list-templates
templates plone.app.controlpanel.interfaces.IConfigurationChangedEvent
$ paster create -t plone3_buildout test create test project

$ cd test && python bootstrap.py bootstrap project

$ ./bin/buildout [-o offline]


build project
[-N non newest]

$ ./bin/instance start start instance

También podría gustarte