Souper

Tela Software:
Souper
Detalhes de Software:
Versão: 1.0.1
Data de upload: 20 Feb 15
Licença: Livre
Popularidade: 4

Rating: nan/5 (Total Votes: 0)

Souper é uma ferramenta Python para programadores. Ele oferece um armazenamento integrado amarrado junto com índices em um catálogo. Os registros no armazenamento são genéricos. É possível armazenar todos os dados em um registro, se for pickable persistente no ZODB.
Souper pode ser usado usado em qualquer aplicação python usando o ZODB, como pirâmide ou Plone.
Usando Souper
Fornecendo um Localizador
Sopas são procurados pela adaptação souper.interfaces.IStorageLocator a algum contexto. Não Souper não presta qualquer localizador padrão. Então, primeiro precisa ser fornecido. Vamos supor que o contexto é alguma instância dict-like persistente:
>>> From zope.interface importação implementador
>>> From zope.interface interface de importação
>>> From zope.component provideAdapter importação
>>> From souper.interfaces importar IStorageLocator
>>> From SoupData importação souper.soup
>>>implementer (IStorageLocator)
... Class StorageLocator (objeto):
...
... Def __init __ (self, contexto):
... Self.context = contexto
...
... Def armazenamento (self, soup_name):
... Se soup_name não em self.context:
... Self.context [soup_name] = SoupData ()
... Retorno self.context [soup_name]
>>> ProvideAdapter (StorageLocator, adapta = [Interface])
Portanto, temos locator criando sopas por nome na mosca. Agora é fácil obter uma sopa por nome:
>>> From souper.soup importação get_soup
>>> Sopa = get_soup ('mysoup', o contexto)
>>> Sopa

Fornecendo uma fábrica Catalog
Dependendo de suas necessidades o catálogo e seus índices podem ser diferentes a partir de casos de uso para usar caso. A fábrica de catálogo é responsável por criar um catálogo para uma sopa. A fábrica é um utilitário chamado execução souper.interfaces.ICatalogFactory. O nome da utilidade tem a mesma que a da sopa ter.
Aqui repoze.catalog é usado e para deixar os índices de acessar os dados sobre os registros por tecla NodeAttributeIndexer é usado. Para casos especiais pode-se escrever seus indexadores de costume, mas o padrão é muito bem a maior parte do tempo:
>>> From souper.interfaces importar ICatalogFactory
>>> From souper.soup importação NodeAttributeIndexer
>>> From zope.component provideUtility importação
>>> From Catalog importação repoze.catalog.catalog
>>> From repoze.catalog.indexes.field importação CatalogFieldIndex
>>> From repoze.catalog.indexes.text CatalogTextIndex importação
>>> From repoze.catalog.indexes.keyword CatalogKeywordIndex importação
>>>implementer (ICatalogFactory)
... Class MySoupCatalogFactory (objeto):
...
... Def __call __ (self, context = None):
... Catálogo Catalog = ()
... Userindexer = NodeAttributeIndexer ('user')
... Catálogo [u'user '] = CatalogFieldIndex (userindexer)
... Textindexer = NodeAttributeIndexer ('texto')
... Catálogo [u'text '] = CatalogTextIndex (textindexer)
... keywordindexer = NodeAttributeIndexer ("palavras-chave")
... Catálogo [u'keywords '] = CatalogKeywordIndex (keywordindexer)
... Catálogo retorno
>>> ProvideUtility (MySoupCatalogFactory (), name = "mysoup")
A fábrica de catálogo é usado apenas interno sopa, mas um pode querer verificar se ele funciona bem:
>>> Catalogfactory = getUtility (ICatalogFactory, name = 'mysoup')
>>> Catalogfactory

>>> Catálogo = catalogfactory ()
>>> ordenados (catalog.items ())
[(u'keywords ', ),
(U'text ', ),
(U'user ', )]
Adicionando registros
Como mencionado acima, o souper.soup.Record é o único tipo de dados adicionados à sopa. Um registro tem atributos contendo os dados:
>>> From souper.soup importação get_soup
>>> From souper.soup importação Gravar
>>> Sopa = get_soup ('mysoup', o contexto)
>>> Record = Record ()
>>> record.attrs ['user'] = 'user1'
>>> record.attrs ['text'] = u'foo bar baz '
>>> record.attrs ['palavras-chave'] = [u'1 ', u'2', u '& uuml;']
>>> Record_id = soup.add (record)
Um registro pode conter outros registros. Mas para indexá-los seria necessário um indexador de costume, para que registros usally conatined são valiosos para exibição mais tarde, e não para a pesquisa:
>>> Registro ['subregistro'] = Record ()
>>> recordes attrs ['HomeAddress']. ['zip'] = '6020'
>>> recordes attrs ['HomeAddress']. ['cidade'] = 'Innsbruck'
>>> Recordes attrs ['HomeAddress']. ['País'] = 'Áustria'
Dados de acesso
Mesmo sem qualquer consulta um registro podem ser buscados por id:
>>> From souper.soup importação get_soup
>>> Sopa = get_soup ('mysoup', o contexto)
>>> Record = soup.get (record_id)
Todos os registros podem ser acessados ​​usando utilizando o BTree recipiente:
>>> soup.data.keys () [0] == record_id
Verdadeiro
De dados de consulta
Como consultar um catálogo repoze está documentado bem. Seleção funciona da mesma também. As consultas são passados ​​para sopas método de consulta (que usa então catálogo repoze). Ele retorna um gerador:
>>> From repoze.catalog.query importação Eq
>>> [R para r em soup.query (Eq ('user', 'user1'))]
[]
>>> [R para r em soup.query (Eq ('user', 'nonexists'))]
[]
Para também obter o tamanho do conjunto de resultados passar um with_size = True à consulta. O primeiro item devolvido pelo gerador é o tamanho:
>>> [R para r em soup.query (Eq ('user', 'user1'), with_size-True)]
[1, ]
Para otimizar o manuseio de grandes conjuntos de resultados não se pode buscar o registro, mas um gerador de retornar objetos leves. Os registros são buscados de plantão:
>>> Lazy = [l para l em soup.lazy (Eq ('name', 'name'))]
>>> Preguiçoso
[,
>>> Preguiçoso [0] ()

Aqui o tamanho é passada como primeiro valor da geneartor também se with_size = true é passado.
Excluir um registro
Para remover um registro do python sopa del é usado como um faria em qualquer dict:
>>> Del sopa [record_id]
Reindex
Depois de uma dados registros alterados ele precisa de um reindex:
>>> record.attrs ['user'] = 'user1'
>>> Soup.reindex (registros = [registro])
Às vezes um pode querer reindexar todos os dados. Então reindexar tem de ser chamado sem parâmetros. Pode demorar um pouco:
>>> Soup.reindex ()
Reconstruir catálogo
Usally após uma mudança de catálogo fábrica foi feito - ou seja, algum índice foi adicionado - uma reconstrução do catálogo que eu precisava. Ele substitui o catálogo atual por um novo criado pela fábrica de catálogo e reindexa todos os dados. Pode levar tempo:
>>> Soup.rebuild ()
Reset (ou desmarque) a sopa
Para remover todos os dados da sopa e vazio e reconstruir a chamada catálogo clara. Atenção: todos os dados são perdidos!
>>> Soup.clear ()
Notas Instalação
A fim de usar node.ext.zodb souper é necessária. Como este beta foi lançado não houve liberação (será feito em breve). Por favor, verifique pypi se ele está lá, caso contrário, por favor buscar node.ext.zodb de github

O que é novo nesta versão:.

  • PEP-8. [Rnix, 2012/10/16]
  • Python 2.7 Suporte. [Rnix, 2012/10/16]
  • documentação Fix.

Requisitos :

  • Python

Outro software de desenvolvedor BlueDynamics Alliance

cone.ugm
cone.ugm

20 Feb 15

node.ext.zodb
node.ext.zodb

20 Feb 15

Comentário para Souper

Comentários não encontrado
Adicionar comentário
Ligue imagens!