zope.principalannotation

软件截图:
zope.principalannotation
软件详细信息:
版本: 4.0.0 Alpha 2
上传日期: 14 Apr 15
许可: 免费
人气: 0

Rating: 5.0/5 (Total Votes: 1)

zope.principalannotation是实现注释zope.security校长Python模块 要清楚,这里主要是提供zope.security.interfaces.IPrincipal接口和注解对象提供的Zope对象。 annotation.interfaces.IAnnotations。
问题在于,主体是在为每一个安全参与(请求或东西)动态创建动态的,非持久对象,所以共同注解的技术,如AttributeAnnotations不能适用于它们。
该软件包提供了主要注解的持久存储,存储由主ID标注,以及从的IPrincipal到IAnnotations适配器。
PrincipalAnnotationUtility
这个包的核心是存储注解为校长,并允许轻松地获得他们的PrincipalAnnotationUtility类。
它提供了IPrincipalAnnotationUtility接口:
>>>从zope.principalannotation.interfaces进口IPrincipalAnnotationUtility
>>>从zope.principalannotation.utility进口PrincipalAnnotationUtility
>>>从zope.interface.verify进口verifyObject
>>> UTIL = PrincipalAnnotationUtility()
>>> verifyObject(IPrincipalAnnotationUtility,UTIL)

它提供了三种方法:getAnnotations,getAnnotationsById和hasAnnotations。让我们创建一个测试本金,并检查了这些方法:
>>>从zope.security.testing进口校长
>>> nadako =本金('nadako“)
>>> nadako.id
“nadako”
我们可以检查我们的主要有任何注解。当然,目前没有任何:
>>> util.hasAnnotations(nadako)

我们可以使用的主要对象本身IAnnotations对象:
>>> util.getAnnotations(nadako)

或者采用主ID:
>>> util.getAnnotationsById(nadako.id)

让我们的IAnnotations反对我们的本金和它玩:
>>> annots = util.getAnnotations(nadako)
>>>从zope.interface.verify进口verifyObject
>>>从zope.annotation.interfaces进口IAnnotations
>>> verifyObject(IAnnotations,annots)

让我们来检查IAnnotation合同:
>>>布尔(annots)

>>> annots ['not.here']
回溯(最近通话最后一个):
...
KeyError异常:“not.here”
>>> annots.get('not.here')是无

>>> annots.get('not.here',42)
42
请注意,该IAnnotations对象被存储在只有当我们设置一个关键点的实用程序。这是一个简单的优化,让我们不要存储在所有我们要做的就是简单地检查标注presense任何数据。该hasAnnotations方法将存储在一个注解键后返回True:
>>> util.hasAnnotations(nadako)

>>> annots ['its.here'] ='一些信息“
>>> util.hasAnnotations(nadako)

我们也可以删除现有关键:
>>>德尔annots ['its.here']
但是,我们不能删除的(没有更多)existant的关键:
>>>德尔annots ['its.here']
回溯(最近通话最后一个):
...
KeyError异常:“its.here”
多标注公用事业
试想一下,你的应用有其组件注册表根站点对象(即站点管理器)和对象都​​有其自己的组件注册表中的一个子站点对象,而该组件注册表有根的组件注册为基地。
在这种情况下,我们希望IAnnotations反对可检索来自更高级别的实用程序的注释。
让我们登记在公用事业根网站并创建一个子网站有自己的IPrincipalAnnotationUtility:
>>>根['util的'] = UTIL
>>> rootsm = root.getSiteManager()
>>> rootsm.registerUtility(UTIL,IPrincipalAnnotationUtility)
>>>从zope.site.folder导入文件夹
>>>从zope.site.site进口LocalSiteManager
>>>子网站=文件夹()
>>>根['子网站'] =子网站
>>> subsm = LocalSiteManager(子网站)
>>> subsm .__ bases__ =(rootsm,)
>>> subsite.setSiteManager(subsm)
>>> util2 = PrincipalAnnotationUtility()
>>>子网站['util2'] = util2
>>> subsm.registerUtility(util2,IPrincipalAnnotationUtility)
现在,让我们创建的IAnnotations的关键,由root工具提供:
>>> annots = util.getAnnotations(nadako)
>>> annots ['root.number'] = 42
子网站程序应该得到注解成功:
>>> annots2 = util2.getAnnotations(nadako)
>>>布尔(annots2)

>>> annots2 ['root.number']
42
如果我们有两个在更高级别的注解和更低级别的那些键,低级将具有优先级,但是更高级的也不会被删除或重写:
>>> annots ['another.number'] = 1
>>> annots2 ['another.number'] = 42
>>> annots ['another.number']
1
>>> annots2 ['another.number']
42
如果我们将删除较低级别的密钥,它也不会从较高级别辅助删除:
>>>德尔annots2 ['another.number']
>>> annots ['another.number']
1
>>> annots2 ['another.number']
1
的IPrincipal - > IAnnotations适配器
当然,最不错的功能是,我们可以简单地调整我们的主要目的在于IAnnotations并获得使用记录在zope.annotation包装标准方法的注释。
  >>> annots = IAnnotations(nadako)
  >>> annots
 
  >>> annots ['root.number']
  42
默认情况下,IAnnotation适配器使用当前网站的实用工具:
>>> IAnnotations(nadako)是util.getAnnotations(nadako)

>>>从zope.site.hooks进口setSite
>>> setSite(子网站)
>>> IAnnotations(nadako)是util2.getAnnotations(nadako)

Howerver,我们可以使用二进制多适配器IAnnotations指定从中获取注释工具的一些上下文对象:
>>>从zope.component进口getMultiAdapter
>>> annots = getMultiAdapter((nadako,根),IAnnotations)
>>> annots是util.getAnnotations(nadako)

>>> annots = getMultiAdapter((nadako,子网站),IAnnotations)
>>> annots是util2.getAnnotations(nadako)
真正的

什么在此版本中是新的

  • 在修正特罗韦分类

什么是3.6.1版本,新的

  • 在固定嵌套本地站点管理器安装测试失败。

  • 在zope.container
  • 删除依赖。

要求

  • 在Python中

显影剂的其他软件 Zope Corporation and Contributors

zope.app.rotterdam
zope.app.rotterdam

14 Apr 15

zc.resourcelibrary
zc.resourcelibrary

15 Apr 15

zope.session
zope.session

11 May 15

zope.security
zope.security

12 May 15

意见 zope.principalannotation

评论没有发现
添加评论
打开图片!