Souper

Screenshot Software:
Souper
Szczegóły programowe:
Wersja: 1.0.1
Filmu: 20 Feb 15
Wywoływacz: BlueDynamics Alliance
Licencja: Wolny
Popularność: 4

Rating: nan/5 (Total Votes: 0)

Souper to narzędzie dla programistów Pythona. Oferuje zintegrowane przechowywanie wiązanej wraz z indeksami w katalogu. Zapisy w pamięci są ogólne. Jest to możliwe do przechowywania wszystkich danych na płycie jest trwała pickable w ZODB.
Souper można stosować w dowolnej aplikacji pytona używając ZODB, takich jak piramida lub Plone.
Korzystanie souper
Zapewnienie Locator
Zupy są spojrzał przez dostosowanie w pewnym kontekście souper.interfaces.IStorageLocator. Souper nie zapewnia domyślny lokalizator. Więc pierwszy muszą być świadczone. Załóżmy, że kontekst jest pewne trwałe dict-jak wystąpienie:
>>> Z zope.interface importu realizatora
>>> Z zope.interface importu interfejsu
>>> Z zope.component importu provideAdapter
>>> Z souper.interfaces importować IStorageLocator
>>> Z souper.soup SoupData przywozowych
>>>implementer (IStorageLocator)
... Klasa StorageLocator (obiekt):
...
... Def __init __ (self, kontekst):
... Self.context = kontekstu
...
... Def przechowywania (self, soup_name):
... Jeśli nie self.context soup_name:
... Self.context [soup_name] = SoupData ()
... Powrót self.context [soup_name]
>>> ProvideAdapter (StorageLocator, dostosowuje = [Interfejs])
Więc mamy lokalizator tworząc zupy według nazwy w locie. Teraz łatwo jest dostać zupę po nazwie:
>>> Z souper.soup importu get_soup
>>> Zupa = get_soup ("mysoup", kontekst)
>>> Zupa

Zapewnienie Factory katalogowy
W zależności od potrzeb i jej indeksów katalogu mogą się różnić od przypadków użycia w użyciu-przypadek. Fabryka Katalog jest odpowiedzialny, aby utworzyć katalog dla zupy. Fabryka jest nazwany narzędzie realizacji souper.interfaces.ICatalogFactory. Nazwa narzędzia musi sama jak zup.
Tutaj repoze.catalog jest używany i pozwolić indeksy dostęp do danych w ewidencji według klucza NodeAttributeIndexer jest wykorzystywanych. W szczególnych przypadkach może napisać swoje własne indeksujących, ale jeden domyślny jest w porządku przez większość czasu:
>>> Z souper.interfaces importować ICatalogFactory
>>> Z souper.soup importu NodeAttributeIndexer
>>> Z zope.component importu provideUtility
>>> Z repoze.catalog.catalog importu Katalog
>>> Z repoze.catalog.indexes.field importu CatalogFieldIndex
>>> Z repoze.catalog.indexes.text importu CatalogTextIndex
>>> Z repoze.catalog.indexes.keyword importu CatalogKeywordIndex
>>>implementer (ICatalogFactory)
... Klasa MySoupCatalogFactory (obiekt):
...
... Def __call __ (self, context = None):
... Katalog = Katalog ()
... Userindexer = NodeAttributeIndexer ("użytkownik")
... Katalog [u'user '] = CatalogFieldIndex (userindexer)
... Textindexer = NodeAttributeIndexer ("tekst")
... Katalog [u'text '] = CatalogTextIndex (textindexer)
... keywordindexer = NodeAttributeIndexer ("słowa kluczowe")
... Katalog [u'keywords '] = CatalogKeywordIndex (keywordindexer)
... Katalog powrót
>>> ProvideUtility (MySoupCatalogFactory (), name = "mysoup")
Fabryka Katalog jest używany tylko wewnętrzne zupy, ale może chcieć sprawdzić, czy działa prawidłowo:
>>> Catalogfactory = getUtility (ICatalogFactory, name = "mysoup")
>>> Catalogfactory

>>> Katalog = catalogfactory ()
>>> sortowane (catalog.items ())
[(u'keywords ', ),
(U'text ", ),
(U'user ", )]
Dodawanie rekordów
Jak wspomniano powyżej, souper.soup.Record jest jedynym rodzajem danych dodawanych do zupy. Rekord ma atrybuty zawierające dane:
>>> Z souper.soup importu get_soup
>>> Z souper.soup importu Record
>>> Zupa = get_soup ("mysoup", kontekst)
>>> Rekord = Record ()
>>> record.attrs ['user'] = 'user1'
>>> record.attrs ['text'] = u'foo bar baz "
>>> record.attrs ['keywords'] = [u'1 ", u'2 ', u' & uuml; ']
>>> Record_id = soup.add (rekord)
Rekord może zawiera inne rekordy. Ale ich indeksowania należałoby własnego indeksowania, więc zwykle zatrzymujemy conatined zapisy są cenne dla późniejszej wyświetlacza, nie do wyszukiwania:
>>> Rekord ['subrecord'] = Record ()
>>> rekord ['homeaddress']. attrs ['zip'] = '6020'
>>> rekord ['homeaddress']. attrs ['miasto'] = "Innsbruck"
>>> Rekord ['homeaddress']. Attrs ['kraj'] = "Austria"
Dostęp do danych
Nawet bez zapytania rekord może być osiągane przez id:
>>> Z souper.soup importu get_soup
>>> Zupa = get_soup ("mysoup", kontekst)
>>> Rekord = soup.get (record_id)
Wszystkie zapisy można uzyskać za pomocą wykorzystania btree pojemnika:
>>> soup.data.keys () [0] == record_id
Prawdziwy
Dane Zapytanie
Jak kwerendy katalog repoze jest udokumentowana dobrze. Sortowanie działa sam. Zapytania są przekazywane do zupy metody query (który wykorzystuje to katalog repoze). Zwraca generator:
>>> Z repoze.catalog.query importu równania
>>> [R dla r w soup.query (równanie ("użytkownik", "user1"))]
[]
>>> [R dla r w soup.query (EQ ("użytkownik", "nonexists '))]
[]
Aby uzyskać także rozmiar wynikowej przekazać with_size = true do zapytania. Pierwszy element zwrócony przez generator jest rozmiar:
>>> [R dla r w soup.query (równanie ("użytkownik", "user1"), with_size-prawda)]
[1, ]
Aby zoptymalizować obsługę dużej wynikowych nie może pobrać rekord, ale generator powracającego lekkich przedmiotów wagi. Rekordy są pobierane na telefon:
>>> Leniwy = [l na l w soup.lazy (równanie ("nazwa", "nazwa"))]
>>> Leniwy
[,
>>> Leniwy [0] ()

Tutaj rozmiar jest przekazywana jako pierwszy wartości geneartor zbyt jeśli with_size = Prawda jest przekazywana.
Usuń rekord
Aby usunąć rekord z pytona zupy del służy jak ktoś zrobi na każdym dict:
>>> Del zupa [record_id]
Reindex
Po zmianie danych rekordy potrzebuje reindex:
>>> record.attrs ['user'] = 'user1'
>>> Soup.reindex (records = [zapis])
Czasami może chcieć reindex wszystkie dane. Następnie reindex musi zostać wywołana bez parametrów. To może trochę potrwać:
>>> Soup.reindex ()
Odbuduj katalog
Usally po zmianie fabryki Katalog powstał - czyli niektóre Indeks został dodany - przebudowa katalogu i potrzebne. Zastępuje on aktualny katalog na nowy stworzony przez fabrykę Katalog i reindexes wszystkie dane. To może potrwać chwilę:
>>> Soup.rebuild ()
Reset (lub usunąć) zupę
Aby usunąć wszystkie dane z zupy i pusta i odbudować połączenie Katalog jasne. Uwaga: wszystkie dane zostaną utracone!
>>> Soup.clear ()
Uwagi instalacji
W celu wykorzystania souper node.ext.zodb jest potrzebne. Ponieważ beta została wydana nie było zwolnienie (nastąpi wkrótce). Proszę sprawdzić PyPI jeśli jest tam, w przeciwnym razie należy pobrać node.ext.zodb z github

Co nowego w tym wydaniu:.

  • PEP-8. [Rnix, 16.10.2012]
  • Python 2.7 Wsparcie. [Rnix, 16.10.2012]
  • Dokumentacja Fix.

Wymagania :

  • Python

Inne programy z deweloperem BlueDynamics Alliance

lineage.registry
lineage.registry

14 Apr 15

cone.ugm
cone.ugm

20 Feb 15

Komentarze do Souper

Komentarze nie znaleziono
Dodaj komentarz
Włącz zdjęć!