وSouper هو أداة بايثون للمبرمجين. ويقدم تخزين متكاملة مرتبطة ببعضها البعض مع الفهارس في الكتالوج. السجلات في التخزين هي عامة. فمن الممكن لتخزين أي بيانات على سجل إذا كان pickable المستمر في ZODB.
Souper يمكن استخدامها استخدامها في أي تطبيق الثعبان باستخدام ZODB، مثل الهرم أو بلون.
باستخدام Souper
توفير محدد
وبدا حساء تصل عن طريق تكييف souper.interfaces.IStorageLocator لبعض السياق. Souper لا تقدم أي المواقع الافتراضية. حتى أول واحد تحتاج إلى المقدمة. دعونا نفترض السياق هو بعض المثال تشبه ديكت المستمر:
>>> من zope.interface المنفذ الواردات
>>> من واجهة استيراد zope.interface
>>> من zope.component provideAdapter استيراد
>>> من souper.interfaces استيراد IStorageLocator
>>> من SoupData استيراد souper.soup
>>>implementer (IStorageLocator)
... الدرجة StorageLocator (كائن):
...
... مواطنه __init __ (النفس، السياق):
... self.context = السياق
...
... مواطنه التخزين (النفس، soup_name):
... إذا soup_name ليس في self.context:
... self.context [soup_name] = SoupData ()
... عودة self.context [soup_name]
>>> provideAdapter (StorageLocator، تتكيف = [واجهة])
لذلك لدينا لتحديد المواقع خلق الحساء بالاسم على الطاير. الآن من السهل للحصول على حساء بالاسم:
>>> من souper.soup get_soup استيراد
>>> الحساء = get_soup ('mysoup "، السياق)
>>> حساء
<كائن souper.soup.Soup في 0X ...>
توفير مصنع كتالوج
اعتمادا على احتياجاتك كتالوج ومؤشراتها قد تبدو مختلفة من استخدام حالة استخدام حدة. المصنع كتالوج مسؤولا عن إنشاء كتالوج لالحساء. المصنع هو أداة اسمه تنفيذ souper.interfaces.ICatalogFactory. اسم الأداة المساعدة له لنفس الحساء ديك.
هنا يستخدم repoze.catalog والسماح للمؤشرات الوصول إلى البيانات على السجلات بواسطة مفتاح يتم استخدام NodeAttributeIndexer. للحالات الخاصة يجوز لأحد أن إرسال مصنفين المخصصة لها، وأما التقصير على ما يرام أكثر من مرة:
>>> من souper.interfaces استيراد ICatalogFactory
>>> من souper.soup NodeAttributeIndexer استيراد
>>> من zope.component provideUtility استيراد
>>> من كتالوج استيراد repoze.catalog.catalog
>>> من repoze.catalog.indexes.field CatalogFieldIndex استيراد
>>> من repoze.catalog.indexes.text CatalogTextIndex استيراد
>>> من repoze.catalog.indexes.keyword CatalogKeywordIndex استيراد
>>>implementer (ICatalogFactory)
... الدرجة MySoupCatalogFactory (كائن):
...
... مواطنه __call __ (النفس، والسياق = لا يوجد):
... كتالوج = كتالوج ()
... userindexer = NodeAttributeIndexer ('المستخدم')
... كتالوج [u'user '] = CatalogFieldIndex (userindexer)
... textindexer = NodeAttributeIndexer ('النص')
... كتالوج [u'text '] = CatalogTextIndex (textindexer)
... keywordindexer = NodeAttributeIndexer ('كلمات')
... كتالوج [u'keywords '] = CatalogKeywordIndex (keywordindexer)
... عودة كتالوج
>>> provideUtility (MySoupCatalogFactory ()، واسم = "mysoup")
ويستخدم المصنع كتالوج حساء-الداخلي فحسب، بل واحد قد ترغب في معرفة ما اذا كان يعمل بشكل جيد:
>>> catalogfactory = getUtility (ICatalogFactory، اسم = 'mysoup')
>>> catalogfactory
<كائن MySoupCatalogFactory في 0X ...>
>>> كتالوج = catalogfactory ()
>>> مرتبة (catalog.items ())
[(u'keywords، <كائن repoze.catalog.indexes.keyword.CatalogKeywordIndex في 0X ...>)،
(u'text، <كائن repoze.catalog.indexes.text.CatalogTextIndex في 0X ...>)،
(u'user،
إضافة سجلات
وكما ذكر أعلاه وsouper.soup.Record هو نوع واحد وفقط من البيانات تضاف إلى الحساء. سجل ديه سمات تحتوي على البيانات:
>>> من souper.soup get_soup استيراد
>>> من سجل استيراد souper.soup
>>> الحساء = get_soup ('mysoup "، السياق)
>>> سجل = سجل ()
>>> record.attrs ['المستخدم'] = 'USER1 "
>>> record.attrs ['النص'] = u'foo شريط الباز "
>>> record.attrs ['كلمات'] = [u'1، u'2 '، ش' & uuml، ']
>>> record_id = soup.add (رقم قياسي)
سجل قد يحتوي على سجلات أخرى. ولكن لمؤشر واحد منهم في حاجة الى مفهرس العرف، والسجلات حتى conatined Usally وذات قيمة للعرض في وقت لاحق، وليس من أجل البحث:
>>> سجل ['subrecord'] = سجل ()
>>> سجل ['homeaddress']. attrs ['الرمز'] = '6020'
>>> سجل ['homeaddress']. attrs ['المدينة'] = 'انسبروك "
>>> سجل ['homeaddress']. attrs ['بلد'] = 'النمسا'
الوصول إلى البيانات
حتى من دون أي استفسار سجل يمكن جلب عن الهوية:
>>> من souper.soup get_soup استيراد
>>> الحساء = get_soup ('mysoup "، السياق)
>>> سجل = soup.get (record_id)
جميع السجلات يمكن الوصول إليها باستخدام الاستفادة من BTree الحاويات:
>>> soup.data.keys () [0] == record_id
صح والله
الاستعلام عن البيانات
كيفية الاستعلام كتالوج repoze موثقة بشكل جيد. الفرز يعمل نفس الشيء أيضا. يتم تمرير الاستعلامات إلى الحساء طريقة الاستعلام (الذي يستخدم ثم كتالوج repoze). تقوم بإرجاع مولد:
>>> من repoze.catalog.query المعادلة استيراد
>>> [ص ل(ص) في soup.query (المعادلة ('المستخدم'، 'USER1'))]
[
ما هو الجديد في هذا الإصدار:.
PEP-8. [rnix، 2012/10/16]
بيثون 2.7 الدعم. [rnix، 2012/10/16]
تحديد الوثائق.
المتطلبات:
بيثون
لم يتم العثور على التعليقات