Souper

Software screenshot:
Souper
Dettagli del software:
Versione: 1.0.1
Data di caricamento: 20 Feb 15
Sviluppatore: BlueDynamics Alliance
Licenza: Libero
Popolarità: 33

Rating: nan/5 (Total Votes: 0)

Souper è uno strumento per i programmatori Python. Offre una storage integrato legati insieme con gli indici in un catalogo. I record di stoccaggio sono generici. È possibile memorizzare tutti i dati su un disco se è pickable persistente ZODB.
Souper può essere usato usato in qualsiasi applicazione Python usando il ZODB, come la Piramide o Plone.
Utilizzo Souper
Fornire un Locator
Minestre vengono ricercati adattando souper.interfaces.IStorageLocator a qualche contesto. Souper non fornisce alcuna locator default. Così prima va indicato. Supponiamo contesto è qualche esempio dict-like persistente:
>>> Da zope.interface import realizzatore
>>> Da zope.interface Interface import
>>> Da zope.component provideAdapter import
>>> Da souper.interfaces import IStorageLocator
>>> Da souper.soup SoupData importazione
>>>implementer (IStorageLocator)
... Class StorageLocator (oggetto):
...
... Def __init __ (self, context):
... Self.context = contesto
...
... Def archiviazione (self, soup_name):
... Se non in soup_name self.context:
... Self.context [soup_name] = SoupData ()
... Ritorno self.context [soup_name]
>>> ProvideAdapter (StorageLocator, si adatta = [Interface])
Così abbiamo locator creare zuppe per nome al volo. Ora è facile ottenere una zuppa per nome:
>>> Da souper.soup import get_soup
>>> Zuppa = get_soup ('mysoup', contesto)
>>> Zuppa

Fornire una fabbrica catalogo
A seconda delle esigenze del catalogo e dei suoi indici potrebbe essere diverso da caso d'uso da utilizzare caso. La fabbrica catalogo è responsabile di creare un catalogo per una zuppa. La fabbrica è un programma di utilità di nome attuazione souper.interfaces.ICatalogFactory. Il nome dell'utilità ha la stessa come la zuppa hanno.
Qui repoze.catalog viene utilizzato e per lasciare che gli indici accedere ai dati sui record per il tasto NodeAttributeIndexer viene utilizzato. Per i casi particolari si può scrivere le sue indicizzatori personalizzati, ma quello di default va bene la maggior parte del tempo:
>>> Da souper.interfaces import ICatalogFactory
>>> Da souper.soup import NodeAttributeIndexer
>>> Da zope.component provideUtility import
>>> Da repoze.catalog.catalog Catalogo import
>>> Da repoze.catalog.indexes.field import CatalogFieldIndex
>>> Da repoze.catalog.indexes.text CatalogTextIndex import
>>> Da repoze.catalog.indexes.keyword CatalogKeywordIndex import
>>>implementer (ICatalogFactory)
... Class MySoupCatalogFactory (oggetto):
...
... Def __call __ (self, context = None):
... Catalogo = Catalog ()
... Userindexer = NodeAttributeIndexer ('user')
... Catalogo [u'user '] = CatalogFieldIndex (userindexer)
... TextIndexer = NodeAttributeIndexer ('text')
... Catalogo [u'text '] = CatalogTextIndex (TextIndexer)
... keywordindexer = NodeAttributeIndexer ('parole chiave')
... Catalogo [u'keywords '] = CatalogKeywordIndex (keywordindexer)
... Catalogo ritorno
>>> ProvideUtility (MySoupCatalogFactory (), name = "mysoup")
La fabbrica catalogo viene utilizzato solo zuppa interno ma si potrebbe voler controllare se funziona bene:
>>> Catalogfactory = getUtility (ICatalogFactory, name = 'mysoup')
>>> Catalogfactory

>>> Catalogo = catalogfactory ()
>>> ordinati (catalog.items ())
[(u'keywords ', ),
(U'text ', ),
(U'user ', )]
Aggiunta di record
Come accennato in precedenza la souper.soup.Record è l'unico tipo di dati aggiunti alla zuppa. Un record ha attributi che contengono i dati:
>>> Da souper.soup import get_soup
>>> Da souper.soup import Record
>>> Zuppa = get_soup ('mysoup', contesto)
>>> Disco = Record ()
>>> record.attrs ['user'] = 'user1'
>>> record.attrs ['text'] = u'foo bar baz '
>>> record.attrs ['parole chiave'] = [u'1 ', u'2', u '& uuml;']
>>> Record_id = soup.add (record)
Un record può contiene altri record. Ma per loro indice di uno avrebbe bisogno di un indicizzatore personalizzato, record in modo usally conatined sono utili per la visualizzazione più tardi, non per la ricerca:
>>> Disco ['subrecord'] = Record ()
>>> registrare attrs ['homeAddress']. ['zip'] = '6020'
>>> registrare attrs ['homeAddress']. ['città'] = 'Innsbruck'
>>> Registrare attrs ['homeAddress']. ['Paese'] = 'Austria'
Dati di accesso
Anche senza alcuna richiesta di un record può essere recuperato da id:
>>> Da souper.soup import get_soup
>>> Zuppa = get_soup ('mysoup', contesto)
>>> Disco = soup.get (record_id)
Tutti i record sono accessibili utilizzando utilizzando il BTree container:
>>> soup.data.keys () [0] == record_id
Vero
Dati Query
Come interrogare un catalogo Repoze è documentato bene. Ordinamento funziona allo stesso troppo. Le query vengono passati alle zuppe metodo di query (che usa poi catalogo Repoze). Restituisce un generatore:
>>> Da repoze.catalog.query import Eq
>>> [R per r in soup.query (Eq ('utente', 'user1'))]
[]
>>> [R per r in soup.query (Eq ('utente', 'nonexists'))]
[]
Per ottenere anche le dimensioni del set di risultati passare un with_size = True alla query. Il primo elemento restituito dal generatore è la dimensione:
>>> [R per r in soup.query (Eq ('utente', 'user1'), with_size-True)]
[1, ]
Per ottimizzare la gestione di grandi set di risultati non si può andare a prendere il record, ma un generatore di restituire gli oggetti leggeri. I record sono prelevati su chiamata:
>>> Pigro = [l per l in soup.lazy (Eq ('name', 'name'))]
>>> Pigro
[,
>>> Pigro [0] ()

Qui la dimensione è passato come primo valore del geneartor anche se with_size = true viene passato.
Eliminare un record
Per rimuovere un record dal pitone zuppa del è usato come uno farebbe in qualsiasi dict:
>>> Del zuppa [record_id]
Reindicizza
Dopo un record di dati è cambiato ha bisogno di un reindex:
>>> record.attrs ['user'] = 'user1'
>>> Soup.reindex (record = [disco])
A volte si può volere reindicizzare tutti i dati. Poi Reindicizzare deve essere chiamato senza parametri. Si può prendere un po ':
>>> Soup.reindex ()
Ricostruire il catalogo
Solitamente dopo è stata fatta una modifica del catalogo fabbrica - è stato aggiunto pari a circa l'indice - una ricostruzione del catalogo di cui avevo bisogno. Si sostituisce il catalogo corrente con una nuova creata dalla fabbrica catalogo indicizzando di tutti i dati. Si può prendere mentre:
>>> Soup.rebuild ()
Reset (o deselezionare) la zuppa
Per eliminare tutti i dati dalla zuppa e vuota e ricostruire la chiamata catalogo chiaro. Attenzione: tutti i dati sono persi!
>>> Soup.clear ()
Note Installazione
Per poter utilizzare node.ext.zodb souper è necessario. Poiché questa beta è stata rilasciata non c'era rilascio (sarà fatto a breve). Si prega di verificare pypi se è lì, altrimenti si prega di fetch node.ext.zodb da GitHub

Cosa c'è di nuovo in questa versione:.

  • PEP-8. [Rnix, 2012/10/16]
  • Python 2.7 Support. [Rnix, 2012/10/16]
  • documentazione Fix.

Requisiti :

  • Python

Altri software di sviluppo BlueDynamics Alliance

lineage.registry
lineage.registry

14 Apr 15

node.ext.zodb
node.ext.zodb

20 Feb 15

Commenti a Souper

I commenti non trovato
Aggiungi commento
Accendere le immagini!