Souper

Скріншот програми:
Souper
Дані програми:
Версія: 1.0.1
Дата завантаження: 20 Feb 15
Розробник: BlueDynamics Alliance
Ліцензія: Безкоштовно
Популярність: 4

Rating: nan/5 (Total Votes: 0)

Souper є інструментом Python для програмістів. Він пропонує інтегровану зберігання пов'язані один з одним з індексами в каталозі. Записи в зберіганні є загальними. Це можна зберігати будь-які дані на запис, якщо вона є постійним pickable в ZODB.
Souper можуть бути використані використовуватися в будь-якому пітона програми за допомогою ZODB, наприклад, піраміди або Plone.
Використання Souper
Надання Locator
Супи подивився шляхом адаптації souper.interfaces.IStorageLocator в деякому контексті. Souper не надає ніяких локатор замовчуванням. Отже, спочатку один повинні бути надані. Давайте припустимо, що контекст деяких стійких екземпляр диктує, як:
>>> Від zope.interface виконавця імпорту
>>> Від zope.interface інтерфейсі імпорту
>>> Від zope.component імпорту provideAdapter
>>> Від souper.interfaces імпортувати IStorageLocator
>>> Від souper.soup SoupData імпортних
>>> Implementer (IStorageLocator)
... Клас StorageLocator (об'єкт):
...
... Def __init __ (сам, контекст):
... Self.context = контекст
...
... Def зберігання (я, soup_name):
... Якщо soup_name НЕ self.context:
... Self.context [soup_name] = SoupData ()
... Повернення self.context [soup_name]
>>> ProvideAdapter (StorageLocator, адаптує = [Interface])
Отже, ми маємо локатор, створюючи супи від імені на льоту. Тепер його легко отримати суп по імені:
>>> Від souper.soup get_soup імпорту
>>> Суп = get_soup ('mysoup', контекст)
>>> Суп

Надання Каталог завод
В залежності від ваших потреб каталогу і його показників може відрізнятися від сценарії використання прецедентів. Каталог завод відповідає створити каталог для супу. Завод є ім'ям утиліта реалізації 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 (об'єкт):
...
... Def __call __ (сам, контекст = None):
... Каталог = Каталог ()
... 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

>>> Каталог = 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 (запис)
Запис може містити інші записи. Але індексувати їх потрібно було б користувальницький індексатор, так Usally conatined записи цінні для наступного відображення, а не для пошуку:
>>> Запис ['subrecord'] = Запис ()
>>> Запис ['homeaddress']. ATTRS ['ZIP'] = '6020'
>>> Запис ['homeaddress']. ATTRS ['місто'] = 'Інсбрук'
>>> Запис ['homeaddress']. ATTRS ['країна'] = 'Австрія'
Доступ до даних
Навіть без запиту запис може бути витягнута по ID:
>>> Від 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'))]
[<Об'єкт Рекорд "None" в ...>]
>>> [При г в soup.query (EQ («користувач», «nonexists '))]
[]
Щоб також отримати розмір результуючого набору пройти with_size = True у запиті. Перший елемент повернутий генератора розмір:
>>> [При г в soup.query (рівняння ('користувач', 'user1'), with_size-True)]
[1, <Запис об'єкт "None" в ...>]
Для оптимізації обробки великих наборів результатів ніхто не може принести запис, але генератор відбите світло об'єкти ваги. Записи приніс за викликом:
>>> Лінивий = [л для L в soup.lazy (рівняння ('ім'я', 'ім'я'))]
>>> Лінивий
[<Об'єкт souper.soup.LazyRecord на ...>,
>>> Лінивий [0] ()
<Чи не об'єкт записи "None" в ...>
Тут розмір передається в якості першого значення geneartor теж, якщо with_size = True передається.
Видалити запис
Щоб видалити запис з супу пітона дель використовується як можна було б зробити на будь-якому Dict:
>>> - Дель-суп [record_id]
Reindex
Після запису даних змінився він потребує REINDEX:
>>> Record.attrs ['користувач'] = 'user1'
>>> Soup.reindex (запис = [запис])
Іноді може знадобитися проіндексувати всі дані. Тоді REINDEX повинен бути викликаний без параметрів. Це може зайняти деякий час:
>>> Soup.reindex ()
Перебудувати каталог
Usally після було прийнято зміна каталозі заводу - тобто деякі індекс був доданий - відновити каталогу мені було потрібно. Він замінює поточний каталог з новою, створеною каталозі фабрики та індексування всіх даних. Це може зайняти деякий час:
>>> Soup.rebuild ()
Reset (або зніміть) суп
Щоб видалити всі дані з супу та порожня, і відновити каталог виклик ясно. Увага: всі дані будуть втрачені!
>>> Soup.clear ()
Зауваження по встановленню
Для того щоб використовувати Souper node.ext.zodb необхідно. Як це бета була випущена не було відбою (буде зроблено найближчим часом). Будь ласка, перевірте PyPi, якщо вона є, в іншому випадку ласка вибірки node.ext.zodb з GitHub

Що нового У цьому випуску :.

  • PEP-8. [Rnix, 2012-10-16]
  • Python 2.7 Підтримка. [Rnix, 2012-10-16]
  • Fix документації.

Вимоги

  • Python

Інші програми розробника BlueDynamics Alliance

bdajax
bdajax

14 Apr 15

cone.ugm
cone.ugm

20 Feb 15

lineage.registry
lineage.registry

14 Apr 15

Souper

Коментар не знайдено
додати коментар
Включіть картинки!