zope.principalannotation

Software screenshot:
zope.principalannotation
Rincian Software:
Versi: 4.0.0 Alpha 2
Tanggal Upload: 14 Apr 15
Lisensi: Gratis
Popularitas: 0

Rating: 5.0/5 (Total Votes: 1)

zope.principalannotation adalah modul Python yang mengimplementasikan penjelasan untuk kepala zope.security & nbsp;. Untuk membuat jelas, pokok di sini adalah objek yang menyediakan zope.security.interfaces.IPrincipal antarmuka dan penjelasan adalah obyek menyediakan zope. annotation.interfaces.IAnnotations.
Masalahnya adalah bahwa kepala sekolah adalah dinamis, benda-benda non-persistent dibuat on the fly untuk setiap partisipasi keamanan (request atau sesuatu), sehingga teknik penjelasan umum, seperti AttributeAnnotations tidak dapat diterapkan kepada mereka.
Paket ini menyediakan penyimpanan persisten penjelasan pokok, menyimpan penjelasan oleh kepala sekolah ID serta adaptor dari IPrincipal ke IAnnotations.
PrincipalAnnotationUtility
Inti dari paket ini adalah kelas PrincipalAnnotationUtility yang menyimpan penjelasan untuk kepala sekolah dan memungkinkan untuk mendapatkan mereka dengan mudah.
Ini menyediakan antarmuka IPrincipalAnnotationUtility:
>>> Dari zope.principalannotation.interfaces impor IPrincipalAnnotationUtility
>>> Dari zope.principalannotation.utility impor PrincipalAnnotationUtility
>>> Dari zope.interface.verify impor verifyObject
>>> Util = PrincipalAnnotationUtility ()
>>> VerifyObject (IPrincipalAnnotationUtility, util)
Benar
Ini menyediakan tiga metode: getAnnotations, getAnnotationsById dan hasAnnotations. Mari kita membuat kepala pengujian dan memeriksa metode ini:
>>> Dari zope.security.testing impor Principal
>>> Nadako = Kepala Sekolah ('nadako')
>>> Nadako.id
'Nadako'
Kita bisa memeriksa apakah kepala sekolah kami mempunyai penjelasan. Tentu saja, saat ini tidak memiliki:
>>> Util.hasAnnotations (nadako)
Palsu
Kita bisa mendapatkan IAnnotations objek menggunakan objek dasar itu sendiri:
>>> Util.getAnnotations (nadako)

Atau menggunakan id utama:
>>> Util.getAnnotationsById (nadako.id)

Mari kita mendapatkan IAnnotations objek pokok dan bermain dengan itu:
>>> Annots = util.getAnnotations (nadako)
>>> Dari zope.interface.verify impor verifyObject
>>> Dari IAnnotations zope.annotation.interfaces impor
>>> VerifyObject (IAnnotations, annots)
Benar
Mari kita periksa kontrak IAnnotation:
>>> Bool (annots)
Palsu
>>> Annots ['not.here']
Traceback (paling panggilan terakhir terakhir):
...
KeyError: 'not.here'
>>> Annots.get ('not.here') adalah None
Benar
>>> Annots.get ('not.here', 42)
42
Perhatikan, bahwa objek IAnnotations akan disimpan dalam utilitas hanya ketika kita menetapkan kunci untuk itu. Ini adalah optimasi sederhana yang memungkinkan kita untuk tidak menyimpan data ketika semua yang kita lakukan adalah hanya memeriksa Hadirnya penjelasan. Metode hasAnnotations akan kembali Benar setelah menyimpan kunci dalam penjelasan:
>>> Util.hasAnnotations (nadako)
Palsu
>>> Annots ['its.here'] = 'beberapa info'
>>> Util.hasAnnotations (nadako)
Benar
Kami juga dapat menghapus kunci yang ada:
>>> Del annots ['its.here']
Tapi kita tidak bisa menghapus kunci yang (tidak lebih) punah:
>>> Del annots ['its.here']
Traceback (paling panggilan terakhir terakhir):
...
KeyError: 'its.here'
Utilitas Beberapa penjelasan
Bayangkan bahwa aplikasi Anda memiliki akar objek situs dengan registri komponen (alias pengelola situs) dan objek yang memiliki objek sub-situs dengan komponen registri sendiri, dan bahwa komponen registri memiliki komponen registri akar sebagai basisnya.
Dalam hal ini, kami ingin IAnnotations objek akan tersedia untuk mengambil penjelasan dari utilitas-tingkat yang lebih tinggi.
Mari kita mendaftar utilitas kami di situs akar dan membuat sub-situs dengan IPrincipalAnnotationUtility sendiri:
>>> Akar ['util'] = util
>>> Rootsm = root.getSiteManager ()
>>> Rootsm.registerUtility (util, IPrincipalAnnotationUtility)
>>> Dari zope.site.folder impor Folder
>>> Dari zope.site.site impor LocalSiteManager
>>> Subsite = Folder ()
>>> Akar ['subsite'] = subsite
>>> Subsm = LocalSiteManager (subsite)
>>> Subsm .__ bases__ = (rootsm,)
>>> Subsite.setSiteManager (subsm)
>>> Util2 = PrincipalAnnotationUtility ()
>>> Subsite ['util2'] = util2
>>> Subsm.registerUtility (util2, IPrincipalAnnotationUtility)
Sekarang, mari kita membuat kunci dalam IAnnotations, yang disediakan oleh utilitas root:
>>> Annots = util.getAnnotations (nadako)
>>> Annots ['root.number'] = 42
Utilitas subsite harus mendapatkan penjelasan yang berhasil:
>>> Annots2 = util2.getAnnotations (nadako)
>>> Bool (annots2)
Benar
>>> Annots2 ['root.number']
42
Jika kita memiliki kunci baik dalam penjelasan-tingkat yang lebih tinggi dan yang tingkat rendah, tingkat-rendah akan memiliki prioritas, tetapi tingkat yang lebih tinggi tidak akan dihapus atau override:
>>> Annots ['another.number'] = 1
>>> Annots2 ['another.number'] = 42
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
42
Jika kita akan menghapus kunci dari tingkat yang lebih rendah, tidak akan dihapus dari utilitas tingkat yang lebih tinggi:
>>> Del annots2 ['another.number']
>>> Annots ['another.number']
1
>>> Annots2 ['another.number']
1
IPrincipal -> IAnnotations adapter
Tentu saja, fitur yang paling bagus adalah bahwa kita hanya dapat beradaptasi objek utama kami untuk IAnnotations dan mendapatkan orang-penjelasan menggunakan cara standar didokumentasikan dalam paket zope.annotation.
& Nbsp; >>> annots = IAnnotations (nadako)
& Nbsp; >>> annots
& Nbsp;
& Nbsp; >>> annots ['root.number']
& Nbsp; 42
Secara default, adaptor IAnnotation menggunakan utilitas situs saat ini:
>>> IAnnotations (nadako) adalah util.getAnnotations (nadako)
Benar
>>> Dari zope.site.hooks impor setSite
>>> SetSite (subsite)
>>> IAnnotations (nadako) adalah util2.getAnnotations (nadako)
Benar
Howerver, kita dapat menggunakan biner multi-adaptor untuk IAnnotations untuk menentukan beberapa objek konteks dari mana untuk mendapatkan utilitas penjelasan:
>>> Dari zope.component impor getMultiAdapter
>>> Annots = getMultiAdapter ((nadako, akar), IAnnotations)
>>> Annots adalah util.getAnnotations (nadako)
Benar
>>> Annots = getMultiAdapter ((nadako, subsite), IAnnotations)
>>> Annots adalah util2.getAnnotations (nadako)
Benar

Apa yang baru dalam rilis ini:.

  • Dikoreksi pengklasifikasi Trove

Apa yang baru dalam versi 3.6.1:

  • Tetap kegagalan tes di setup manager situs lokal bersarang
  • .
  • Dihapus ketergantungan pada zope.container.

Persyaratan :

  • Python

Perangkat lunak lain dari pengembang Zope Corporation and Contributors

zc.resourcelibrary
zc.resourcelibrary

15 Apr 15

zope.fanstatic
zope.fanstatic

11 May 15

zope.location
zope.location

14 Apr 15

zope.configuration
zope.configuration

14 Apr 15

Komentar untuk zope.principalannotation

Komentar tidak ditemukan
Tambahkan komentar
Aktifkan gambar!