zope.principalannotation

ภาพหน้าจอของซอฟแวร์:
zope.principalannotation
รายละเอียดซอฟแวร์:
รุ่น: 4.0.0 Alpha 2
วันที่อัพโหลด: 14 Apr 15
ผู้พัฒนา: Zope Corporation and Contributors
การอนุญาต: ฟรี
ความนิยม: 0

Rating: 5.0/5 (Total Votes: 1)

zope.principalannotation เป็นโมดูลหลามที่ใช้คำอธิบายประกอบให้ผู้ว่าจ้าง zope.security & nbsp;. ที่จะทำให้มันชัดเจนที่สำคัญที่นี่เป็นวัตถุที่มีอินเตอร์เฟซ 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 (n​​adako)
เท็จ
เราจะได้รับ IAnnotations วัตถุใช้วัตถุที่สำคัญตัวเอง:
>>> util.getAnnotations (n​​adako)

หรือใช้ 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']
Traceback (โทรล่าสุดที่ผ่านมา):
...
KeyError: 'not.here'
>>> annots.get ('not.here') คือไม่มี
จริง
>>> annots.get ('not.here', 42)
42
ทราบว่าวัตถุ IAnnotations ได้รับการจัดเก็บไว้ในยูทิลิตี้เฉพาะเมื่อเราตั้งสำคัญสำหรับมัน นี่คือการเพิ่มประสิทธิภาพการง่ายๆที่ช่วยให้เราที่จะไม่เก็บข้อมูลใด ๆ เมื่อทุกสิ่งที่เราทำคือเพียงแค่การตรวจสอบ presense ของคำอธิบายประกอบ วิธี hasAnnotations จะกลับมาจริงหลังจากการจัดเก็บที่สำคัญในคำอธิบายประกอบ:
>>> util.hasAnnotations (n​​adako)
เท็จ
annots >>> ['its.here'] = 'ข้อมูลบาง'
>>> util.hasAnnotations (n​​adako)
จริง
นอกจากนี้เรายังสามารถลบคีย์ที่มีอยู่:
>>> annots เดล ['its.here']
แต่เราไม่สามารถลบคีย์ที่ (ไม่) existant:
>>> annots เดล ['its.here']
Traceback (โทรล่าสุดที่ผ่านมา):
...
KeyError: 'its.here'
สาธารณูปโภคบันทึกย่อหลาย
ลองจินตนาการว่าแอพลิเคชันของคุณมีวัตถุเว็บไซต์รากกับรีจิสทรีของส่วนประกอบ (ผู้จัดการเว็บไซต์ aka) และวัตถุที่มีวัตถุเว็บไซต์ย่อยกับรีจิสทรีส่วนประกอบของตัวเองและรีจิสทรีองค์ประกอบที่มีองค์ประกอบของรีจิสทรีรากเป็นฐาน
ในกรณีที่เราต้องการ 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 ให้โดยยูทิลิตี้ราก:
>>> annots util.getAnnotations = (nadako)
>>> annots ['root.number'] = 42
ยูทิลิตี้ไซต์ย่อยควรจะได้รับบันทึกย่อที่ประสบความสำเร็จ:
>>> annots2 = util2.getAnnotations (n​​adako)
>>> บูล (annots2)
จริง
>>> annots2 ['root.number']
42
ถ้าเรามีความสำคัญทั้งในคำอธิบายประกอบในระดับสูงและคนในระดับต่ำกว่าระดับต่ำกว่าจะมีความสำคัญ แต่ระดับที่สูงขึ้นจะไม่ถูกลบหรือ overriden:
>>> 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
& nbsp; >>> annots = IAnnotations (n​​adako)
& nbsp; >>> annots
& nbsp;
& nbsp; >>> annots ['root.number']
& nbsp; 42
โดยค่าเริ่มต้นอะแดปเตอร์ IAnnotation ใช้ยูทิลิตี้เว็บไซต์ปัจจุบัน:
>>> IAnnotations (n​​adako) เป็น util.getAnnotations (n​​adako)
จริง
>>> จาก zope.site.hooks นำเข้า SetSite
>>> SetSite (ไซต์ย่อย)
>>> IAnnotations (n​​adako) เป็น util2.getAnnotations (n​​adako)
จริง
howerver เราสามารถใช้อะแดปเตอร์หลายไบนารี IAnnotations เพื่อระบุวัตถุบริบทบางอย่างที่จะได้รับอรรถประโยชน์บันทึกย่อ:
>>> จากการนำเข้า zope.component getMultiAdapter
>>> annots getMultiAdapter = ((nadako ราก) IAnnotations)
>>> annots เป็น util.getAnnotations (n​​adako)
จริง
>>> annots getMultiAdapter = ((nadako, ไซต์ย่อย) IAnnotations)
>>> annots เป็น util2.getAnnotations (n​​adako)
True

มีอะไรใหม่ ในข่าวประชาสัมพันธ์ฉบับนี้.

  • แก้ไขแยกแยะ Trove

มีอะไรใหม่ ในรุ่น 3.6.1:

  • คงทดสอบความล้มเหลวในเว็บไซต์ที่ซ้อนกันในท้องถิ่นติดตั้งผู้จัดการ .
  • การพึ่งพาเอาออกบน zope.container.

ต้องการ

  • หลาม

ซอฟแวร์อื่น ๆ ของนักพัฒนา Zope Corporation and Contributors

ความคิดเห็นที่ zope.principalannotation

ความคิดเห็นที่ไม่พบ
เพิ่มความคิดเห็น
เปิดภาพ!