本文整理汇总了Python中zope.annotation.interfaces.IAnnotations.append方法的典型用法代码示例。如果您正苦于以下问题:Python IAnnotations.append方法的具体用法?Python IAnnotations.append怎么用?Python IAnnotations.append使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类zope.annotation.interfaces.IAnnotations
的用法示例。
在下文中一共展示了IAnnotations.append方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: ListAppender
# 需要导入模块: from zope.annotation.interfaces import IAnnotations [as 别名]
# 或者: from zope.annotation.interfaces.IAnnotations import append [as 别名]
class ListAppender(object):
classProvides(ISectionBlueprint)
implements(ISection)
def __init__(self, transmogrifier, name, options, previous):
self.previous = previous
self.condition = Condition(options.get('condition', 'python:True'),
transmogrifier, name, options)
self.items = IAnnotations(transmogrifier)[LISTKEY][options['section']]
self.keys = Expression(
options.get('keys', 'nothing'), transmogrifier, name, options)
self.copykeys = Expression(
options.get('copy-keys', 'nothing'), transmogrifier, name, options)
def __iter__(self):
for item in self.previous:
if self.condition(item):
keys = self.keys(item)
copykeys = self.copykeys(item)
if keys or copykeys:
new_item = dict(
(key, item.pop(key)) for key in keys if key in item)
new_item.update(
(key, item[key]) for key in copykeys if key in item)
if new_item:
self.items.append(new_item)
yield item
else:
self.items.append(item)
else:
yield item
示例2: DexterityUpdateSection
# 需要导入模块: from zope.annotation.interfaces import IAnnotations [as 别名]
# 或者: from zope.annotation.interfaces.IAnnotations import append [as 别名]
class DexterityUpdateSection(object):
classProvides(ISectionBlueprint)
def __init__(self, transmogrifier, name, options, previous):
self.previous = previous
self.context = transmogrifier.context
self.name = name
self.pathkey = defaultMatcher(options, 'path-key', name, 'path')
self.fileskey = options.get('files-key', '_files').strip()
self.disable_constraints = Expression(
options.get('disable-constraints', 'python: False'),
transmogrifier,
name,
options,
)
# create logger
if options.get('logger'):
self.logger = logging.getLogger(options['logger'])
self.loglevel = getattr(logging, options['loglevel'], None)
if self.loglevel is None:
# Assume it's an integer:
self.loglevel = int(options['loglevel'])
self.logger.setLevel(self.loglevel)
self.log = lambda s: self.logger.log(self.loglevel, s)
else:
self.log = None
self.errored = IAnnotations(transmogrifier).setdefault(ERROREDKEY, [])
def __iter__(self):
for item in self.previous:
pathkey = self.pathkey(*item.keys())[0]
# not enough info
if not pathkey:
yield item
continue
path = item[pathkey]
# Skip the Plone site object itself
if not path:
yield item
continue
obj = self.context.unrestrictedTraverse(
path.encode().lstrip('/'), None)
# path doesn't exist
if obj is None:
yield item
continue
if IDexterityContent.providedBy(obj):
uuid = item.get('plone.uuid')
if uuid is not None:
try:
IMutableUUID(obj).set(str(uuid))
except:
self.errored.append(item['_original_path'])
files = item.setdefault(self.fileskey, {})
# For all fields in the schema, update in roughly the same way
# z3c.form.widget.py would
for schemata in iterSchemata(obj):
for name, field in getFieldsInOrder(schemata):
if name == 'id':
continue
if field.readonly:
continue
#setting value from the blueprint cue
value = item.get(name, _marker)
if value is not _marker:
# Value was given in pipeline, so set it
deserializer = IDeserializer(field)
value = deserializer(
value,
files,
item,
self.disable_constraints,
logger=self.log,
)
field.set(field.interface(obj), value)
continue
# Get the widget's current value, if it has one then leave
# it alone
value = getMultiAdapter(
(obj, field),
interfaces.IDataManager).query()
if not(value is field.missing_value
or value is interfaces.NO_VALUE):
continue
# Finally, set a default value if nothing is set so far
default = queryMultiAdapter((
obj,
obj.REQUEST, # request
None, # form
field,
#.........这里部分代码省略.........