Souper는 프로그래머를위한 파이썬 도구입니다. 이 카탈로그의 인덱스와 함께 묶여 통합 스토리지를 제공합니다. 기억의 기록은 일반입니다. 그것은 ZODB 영구 pickable 인 경우에 기록 데이터를 저장하는 것이 가능하다.
Souper는 이러한 피라미드 또는 플론 (Plone)로 ZODB를 사용하는 파이썬 응용 프로그램에서 사용할 수 있습니다.
Souper 사용
위치를 제공
스프는 어떤 상황에 souper.interfaces.IStorageLocator을 적용하여 조회됩니다. Souper는 기본 로케이터를 제공하지 않습니다. 그래서 첫 번째는 제공 될 필요가있다. 의 문맥 일부 지속적 DICT 같은 예를 가정하자 :
>>> zope.interface 수입 구현에서
>>> zope.interface 가져 오기 인터페이스에서
>>> zope.component 수입 provideAdapter에서
>>> souper.interfaces가 IStorageLocator를 가져올에서
>>> souper.soup 수입 SoupData에서
>>> @implementer (IStorageLocator)
... 클래스 StorageLocator (객체) :
...
... 데프 __init __ (자기 컨텍스트) :
... self.context = 컨텍스트
...
... 데프 저장 (자기, soup_name) :
... soup_name하지 self.context의 경우 :
... self.context [soup_name] = SoupData ()
... 반환 self.context [soup_name]
>>> provideAdapter (StorageLocator는, 적응 = [인터페이스])
그래서 우리는 로케이터 즉석에서 이름으로 수프를 만들 수 있습니다. 이름으로 수프를 얻을 지금은 쉽게 :
>>> souper.soup 수입 get_soup에서
>>> 수프 = get_soup ( 'mysoup', 문맥)
>>> 수프
<0x로 ...에서 souper.soup.Soup 개체>
카탈로그 공장 제공
사용자의 요구 카탈로그 및 인덱스에 따라 사용의 경우를 할 유스 케이스 다르게 보일 수 있습니다. 카탈로그 공장은 수프에 대한 카탈로그를 만들 책임이있다. 공장 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 (객체) :
...
... 데프 __call __ (자기 컨텍스트 = 없음)
... 카탈로그 = 카탈로그 ()
... 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
<0x로 ...에서 MySoupCatalogFactory 개체>
>>> 카탈로그 = catalogfactory ()
>>> 정렬 (catalog.items ())
[(<0x로 ...에서 repoze.catalog.indexes.keyword.CatalogKeywordIndex 개체> u'keywords '),
(<0x로 ...에서 repoze.catalog.indexes.text.CatalogTextIndex 개체> u'text '),
(u'user ',
기록을 추가
상술 한 바와 같이 souper.soup.Record 수프에 첨가 된 데이터의 유일한 종류이다. 레코드는 데이터를 포함하는 속성이 있습니다
>>> souper.soup 수입 get_soup에서
>>> souper.soup 수입 기록에서
>>> 수프 = get_soup ( 'mysoup', 문맥)
>>> 기록 = 기록 ()
>>> record.attrs [ '사용자'] = '사용자 1'
>>> record.attrs [ '텍스트'] = u'foo 바 바즈 '
>>> record.attrs [ '키워드'] = [u'1 ', u'2'U '& uuml;']
>>> record_id = soup.add (기록)
수있는 레코드는 다른 레코드를 포함합니다. 그러나 색인을 한, 그래서 usally conatined 기록하지 검색을 위해, 나중에 표시를위한 가치있는 사용자 정의 인덱서를해야합니다 :
>>> 기록 [ 'subrecord'] = 레코드 ()
>>> 기록 [ 'homeaddress는']. 바인드합니다 [ '지퍼'] = '6020'
>>> 기록 [ 'homeaddress는']. 바인드합니다 [ '마을'] = '인스 브루 크'
>>> 기록 [ 'homeaddress는']. 바인드합니다 [ '국가'] = '오스트리아'
액세스 데이터
심지어 레코드 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 (식 ( '사용자', '사용자 1'))]
[<레코드 대상 ...에서 '없음'>]
>>> [soup.query의 연구에 대한 R (식 ( '사용자', 'nonexists'))]
[]
또한 결과 집합의 크기를 얻으려면 쿼리에 충실 with_size을 = 전달합니다. 발전기에 의해 반환 된 첫 번째 항목은 크기입니다 :
>>> [soup.query의 연구에 대한 R (식 ( '사용자', '사용자 1'), with_size - 순)]
[1, <녹화 대상 '없음'에서 ...>]
큰 결과의 처리를 최적화하려면 하나 기록하지만 경량 객체를 반환 발전기를 가져올 수 없습니다 설정합니다. 기록은 통화 인출됩니다
>>> 게으른 = [soup.lazy에서 L에 대한 L (식 ( '이름', '이름'))]
>>> 게으른
[<...에 souper.soup.LazyRecord 개체>
>>> 지연 [0] ()
<...에 기록 객체 '없음'>
with_size가 전달되는 진정한 = 경우 여기 크기가 너무 geneartor의 첫 번째 값으로 전달됩니다.
기록 삭제
델은 어떤 DICT에 할 것처럼 사용되는 수프 파이썬에서 레코드를 제거하려면 :
>>> 델 수프 [record_id]
색인화
기록 데이터가 변경된 후에는 인덱싱을 필요 :
>>> record.attrs [ '사용자'] = '사용자 1'
>>> soup.reindex (기록 = [기록])
때로는 한 모든 데이터를 색인화 할 수 있습니다. 다음 매개 변수없이 호출 할 수있다 색인화. 그것은 시간이 걸릴 수 있습니다 :
>>> soup.reindex ()
카탈로그를 다시 작성
카탈로그 공장의 변경 작업을 수행 한 Usally 후 - 즉, 어떤 인덱스가 추가되었습니다 - 내가 필요한 카탈로그 재 작성. 이 카탈로그 팩토리에 의해 작성된 새 것으로 현재 카탈로그를 대체하고 모든 데이터를 색인화합니다. 그것은 시간이 걸릴 수 있습니다 :
>>> soup.rebuild ()
수프를 재설정 (또는 취소)
수프와 빈의 모든 데이터를 제거하고 맑은 카탈로그 전화를 다시 작성합니다. 주의 : 모든 데이터가 손실됩니다!
>>> soup.clear ()
설치 정보
souper node.ext.zodb를 사용하기 위해 필요합니다. 이 베타가 더 방출이 없었다 출시 된 바와 같이 (곧 완료 될 것이다). 이있는 경우 그렇지 않으면, pypi 확인하시기 바랍니다 GitHub의에서 node.ext.zodb 가져 주시기 바랍니다
이 릴리스의 새로운 기능입니다.
이 PEP-8. [rnix, 2012년 10월 16일]
파이썬 2.7을 지원합니다. [rnix, 2012년 10월 16일]
문서를 수정합니다.
이 요구 사항 :
이 파이썬
댓글을 찾을 수 없습니다