Souper

ソフトウェアのスクリーンショット:
Souper
ソフトウェアの詳細:
バージョン: 1.0.1
日付のアップロード: 20 Feb 15
ライセンス: 無料
人気: 4

Rating: nan/5 (Total Votes: 0)

SouperはプログラマのためのPythonツールです。これは、カタログ内のインデックスと一緒に結ば統合されたストレージを提供しています。ストレージ内のレコードは一般的なものです。それはZODBに永続pickableである場合には、レコード上のデータを記憶することが可能である。
Souperは、ピラミッドやPloneのように、ZODBを使用して、任意のPythonアプリケーションで使用することができます。
のSouperを使用して、
ロケータの提供
スープは、いくつかのコンテキストにsouper.interfaces.IStorageLocatorを適合させることにより検索されます。 Souperはすべてのデフォルトロケータを提供していません。そのように最初のものは提供される必要がある。のコンテキストは、いくつかの永続的な辞書のようなインスタンスであると仮定しましょう​​:
>>> zope.interfaceインポート実装者から
>>> zope.interfaceインポート·インターフェースから
>>> zope.component輸入provideAdapterから
>>> souper.interfacesインポートIStorageLocatorから
>>> souper.soupインポートSoupDataから
>>> @implementer(IStorageLocator)
...クラスStorageLocator(オブジェクト):
...
...デフ__init __(自己、コンテキスト):
... self.context =コンテキスト
...
... DEFストレージ(自己、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.interfaces.ICatalogFactoryを実装するというユーティリティです。ユーティリティの名前は持っているスープと同じにしています。
ここでrepoze.catalogが使用され、インデックスがNodeAttributeIndexerが使用されているキーによって、レコードのデータにアクセスできるようにする。特殊なケースでは、ほとんどの時間を1、そのカスタムインデクサを書くかもしれませんが、デフォルトの1は結構です。
>>> 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 __(自己、コンテキスト=なし):
...カタログ=カタログ()
... userindexer = NodeAttributeIndexer( 'ユーザー')
...カタログ[u'user '] = CatalogFieldIndex(userindexer)
... textindexer = NodeAttributeIndexer( 'テキスト')
...カタログ[u'text '] = CatalogTextIndex(textindexer)
... keywordindexer = NodeAttributeIndexer( 'キーワード')
...カタログ[u'keywords '] = CatalogKeywordIndex(keywordindexer)
...リターンカタログ
>>> provideUtility(MySoupCatalogFactory()、名= "mysoup」)
カタログ工場は使用スープ-内部のみであるが、1つは、それが正常に動作しているかどうかを確認することができます:
>>> catalogfactory = getUtility(ICatalogFactory、名= 'mysoup')
>>> catalogfactory

>>>カタログ= catalogfactory()
>>>ソート(catalog.items())
[(<の0x ...でrepoze.catalog.indexes.keyword.CatalogKeywordIndexオブジェクト> u'keywords '、)、
(u'text '、<の0x ...でrepoze.catalog.indexes.text.CatalogTextIndexオブジェクト>)、
(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'、U '&uuml;']
>>> RECORD_ID = soup.add(レコード)
レコード5月には、他のレコードが含まれています。しかし、一つは、カスタムインデクサを必要とする指標彼らに、そうusally conatinedレコードは、後で表示するために、しない検索のために価値がある:
>>>記録['サブレコード'] =レコード()
>>>記録['homeaddress']。attrsに['ジップ'] = '6020'
>>>記録['homeaddress']。attrsに['町'] = 'インスブルック」
>>>記録['homeaddress']。attrsに['国'] = 'オーストリア」
Accessデータ
でも、任意のクエリせずにレコードが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におけるRのR(式( 'ユーザー'、 'USER1'))]
[]
>>> [soup.queryにおけるRのR(式( 'ユーザー'、 'nonexists'))]
[]
また、結果セットのサイズを取得するには、クエリへの真のwith_sizeを=渡す。発電機によって返される最初の項目は、サイズです。
>>> [soup.queryにおけるRのR(式( 'ユーザー'、 'USER1')、with_size-真)]
[1、<...でRecordオブジェクト「なし」>]
大きな結果の取り扱いを最適化するには、1レコードが、軽量オブジェクトを返すジェネレータをフェッチしない場合があります設定します。記録は、コールにフェッチされます。
>>>怠惰= [soup.lazyにおけるLはL(式( '名前'、 '名前'))]
>>>怠惰
[<...でsouper.soup.LazyRecordオブジェクト>、
>>>怠惰[0]()

ここではサイズがwith_size = TRUEが渡されすぎている場合geneartorの最初の値として渡されます。
レコードを削除する
デルはどんな辞書に行うだろう1のように使用されているスープのpythonからレコードを削除するには:
>>>デルスープ[RECORD_ID]
再インデックス
レコードのデータが変更された後、それはREINDEXが必要です。
>>> record.attrs ['ユーザー'] = 'USER1」
>>> soup.reindex(レコード= [記録])
時には1は、すべてのデータのインデックスを再作成することができます。その後、REINDEXはパラメータなしで呼び出す必要があります。これは、しばらく時間がかかる場合があります。
>>> soup.reindex()
カタログを再構築
カタログ工場の変更が行われたUsally後に - すなわち、いくつかのインデックスが追加されました - 私が必要とカタログの再構築。これは、カタログファクトリによって作成された新しいものと現在のカタログを置き換え、すべてのデータを再度インデックスを付け。これは、しばらく時間がかかる場合があります。
>>> soup.rebuild()
スープをリセット(またはクリア)
スープと空からすべてのデータを削除し、明確なカタログコールを再構築するには。注意:すべてのデータが失われます!
>>> soup.clear()
のインストールノート
souper node.ext.zodbを使用するために必要とされている。このベータ版がリリースされたとおり(すぐに実行されます)がリリースはありませんでした。それがある場合にはそうではGitHubからnode.ext.zodbフェッチしてください、PyPIのを確認してください。

のこのリリースではの新機能:ます。

    <李> PEP-8。 [rnix、2012年10月16日]
  • はPython 2.7のサポート。 [rnix、2012年10月16日]
  • 修正の資料ます。

の要件

  • のPythonます。

開発者の他のソフトウェア BlueDynamics Alliance

vdexcsv
vdexcsv

11 May 15

lineage.registry
lineage.registry

14 Apr 15

へのコメント Souper

コメントが見つかりません
コメントを追加
画像をオンにする!