コード例 #1
0
 def executeQuery(**kwargs):
     if not firstCall:
         firstCall.append(True)
         raise StopIteration(Response(total=5, hits=range(5)))
     else:
         raise StopIteration(Response(total=10, hits=range(10)))
     yield
コード例 #2
0
    def testHandleRequest(self):
        response = SolrResponse()
        response.hits = ['term0', 'term&/"']
        response.total = 2
        response.qtime = 5

        def prefixSearch(**kwargs):
            raise StopIteration(response)
            yield

        self.observer.methods['prefixSearch'] = prefixSearch

        header, body = asString(
            self.auto.handleRequest(path='/path',
                                    arguments={
                                        'prefix': ['te'],
                                        'limit': ['5'],
                                        'field': ['field.one']
                                    })).split('\r\n' * 2)

        self.assertTrue(
            "Content-Type: application/x-suggestions+json" in header, header)
        self.assertEquals("""["te", ["term0", "term&/\\""]]""", body)
        self.assertEquals(['prefixSearch'],
                          [m.name for m in self.observer.calledMethods])
        self.assertEquals(
            {
                'prefix': 'te',
                'fieldname': 'field.one',
                'limit': 5
            }, self.observer.calledMethods[0].kwargs)
コード例 #3
0
 def executeQuery(**kwargs):
     if not firstCall:
         firstCall.append(True)
         return Response(total=5, hits=list(range(5)))
     else:
         return Response(total=10, hits=list(range(10)))
     yield
コード例 #4
0
    def testOldStyleAutocomplete(self):
        queryTemplate = '/sru?version=1.1&operation=searchRetrieve&query={searchTerms}'
        self.auto = be((
            Autocomplete(
                host='localhost',
                port=8000,
                path='/some/path',
                templateQuery=queryTemplate,
                shortname="Web Search",
                description="Use this web search to search something",
                defaultLimit=50,
                defaultField='lom',
            ),
            (self.observer, ),
        ))
        response = SolrResponse()
        response.hits = ['term0', 'term&/"']
        response.total = 2
        response.qtime = 5

        def prefixSearch(**kwargs):
            raise StopIteration(response)
            yield

        self.observer.methods['prefixSearch'] = prefixSearch

        header, body = asString(
            self.auto.handleRequest(path='/path',
                                    arguments={
                                        'prefix': ['te'],
                                        'limit': ['5'],
                                        'field': ['field.one']
                                    })).split('\r\n' * 2)

        self.assertTrue(
            "Content-Type: application/x-suggestions+json" in header, header)
        self.assertEquals("""["te", ["term0", "term&/\\""]]""", body)
        self.assertEquals(['prefixSearch'],
                          [m.name for m in self.observer.calledMethods])
        self.assertEquals(
            {
                'prefix': 'te',
                'fieldname': 'field.one',
                'limit': 5
            }, self.observer.calledMethods[0].kwargs)

        result = asString(
            self.auto.handleRequest(path='/path/opensearchdescription.xml',
                                    arguments={}))
        header, body = result.split('\r\n' * 2)

        self.assertTrue("Content-Type: text/xml" in header, header)
        self.assertEqualsWS(
            """<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
    <ShortName>Web Search</ShortName>
    <Description>Use this web search to search something</Description>
    <Url type="text/xml" method="get" template="http://localhost:8000/sru?version=1.1&amp;operation=searchRetrieve&amp;query={searchTerms}"/>
    <Url type="application/x-suggestions+json" template="http://localhost:8000/some/path?prefix={searchTerms}"/>
</OpenSearchDescription>""", body)
コード例 #5
0
    def testSpecialCharacters(self):
        suggestions = Suggestion(count=1, field='afield')
        response = Response(total=0, hits=[])
        response.suggestions={'Éäéðĉ': ['Éäéðĉ']}
        responseData = ''.join(compose(suggestions.extraResponseData(response=response, sruArguments={'x-suggestionsQuery':['Éäéðĉ']})))
        self.assertXmlEquals("""<suggestions xmlns="http://meresco.org/namespace/suggestions">
    <suggestion>Éäéðĉ</suggestion>
</suggestions>
""", responseData)
コード例 #6
0
    def testHarriePoter(self):
        suggestions = Suggestion(count=1, field='afield')
        response = Response(total=0, hits=[])
        response.suggestions={'harrie': ['harry', 'marie'], 'poter': ['potter', 'peter'] }
        responseData = ''.join(compose(suggestions.extraResponseData(response=response, sruArguments={'x-suggestionsQuery':["harrie AND poter"]})))
        self.assertEqualsWS("""<suggestions xmlns="http://meresco.org/namespace/suggestions">
    <suggestion>harry AND potter</suggestion>
    <suggestion>marie AND peter</suggestion>
</suggestions>
""", responseData)
コード例 #7
0
    def testCreateExtraResponseDataWithMultipleSuggestions(self):
        suggestions = Suggestion(count=1, field='afield')
        response = Response(total=0, hits=[])
        response.suggestions={'query': ['que', 'emery', 'queen'], 'value': ['valu', 'ot'] }
        responseData = ''.join(compose(suggestions.extraResponseData(response=response, sruArguments={'x-suggestionsQuery':["query AND value"]})))
        self.assertEqualsWS("""<suggestions xmlns="http://meresco.org/namespace/suggestions">
    <suggestion>que AND valu</suggestion>
    <suggestion>emery AND ot</suggestion>
</suggestions>
""", responseData)
コード例 #8
0
    def testSpecialCharacters(self):
        suggestions = Suggestion(count=1, field='afield')
        response = Response(total=0, hits=[])
        response.suggestions = {'Éäéðĉ': ['Éäéðĉ']}
        responseData = ''.join(
            compose(
                suggestions.extraResponseData(
                    response=response,
                    sruArguments={'x-suggestionsQuery': ['Éäéðĉ']})))
        self.assertXmlEquals(
            """<suggestions xmlns="http://meresco.org/namespace/suggestions">
    <suggestion>Éäéðĉ</suggestion>
</suggestions>
""", responseData)
コード例 #9
0
ファイル: srwtest.py プロジェクト: seecr/meresco-components
    def setUp(self):
        SeecrTestCase.setUp(self)
        self.srw = Srw()
        self.sruParser = SruParser()
        self.sruHandler = SruHandler()

        self.srw.addObserver(self.sruParser)
        self.sruParser.addObserver(self.sruHandler)
        self.response = Response(total=1, hits=[Hit('0')])

        def executeQuery(**kwargs):
            return self.response
            yield

        def retrieveData(**kwargs):
            return 'data'
            yield

        self.observer = CallTrace(methods={
            'executeQuery': executeQuery,
            'retrieveData': retrieveData
        },
                                  emptyGeneratorMethods=[
                                      'extraResponseData',
                                      'echoedExtraRequestData',
                                      'additionalDiagnosticDetails',
                                      'extraRecordData'
                                  ])
        self.sruHandler.addObserver(self.observer)
コード例 #10
0
ファイル: srwtest.py プロジェクト: seecr/meresco-components
    def testConstructorVariablesAreUsed(self):
        request = soapEnvelope % SRW_REQUEST % argumentsWithMandatory % ""
        srw = Srw(defaultRecordSchema="DEFAULT_RECORD_SCHEMA",
                  defaultRecordPacking="DEFAULT_RECORD_PACKING")
        sruParser = SruParser()
        srw.addObserver(sruParser)
        sruParser.addObserver(self.sruHandler)
        response = Response(total=1, hits=[Hit(1)])

        def executeQuery(**kwargs):
            return response
            yield

        @asyncnoreturnvalue
        def methodAsGenerator(**kwargs):
            pass

        observer = CallTrace(methods={
            'executeQuery': executeQuery,
            'extraResponseData': methodAsGenerator,
            'echoedExtraRequestData': methodAsGenerator,
        },
                             emptyGeneratorMethods=[
                                 'additionalDiagnosticDetails',
                                 'extraRecordData',
                             ])

        self.sruHandler.addObserver(observer)
        response = "".join(compose(srw.handleRequest(Body=request)))
        self.assertTrue("DEFAULT_RECORD_SCHEMA" in response, response)
        self.assertTrue("DEFAULT_RECORD_PACKING" in response, response)
コード例 #11
0
    def testHandleRequest(self):
        response = SolrResponse()
        response.hits = ['term0', 'term&/"']
        response.total = 2
        response.qtime = 5
        def prefixSearch(**kwargs):
            raise StopIteration(response)
            yield
        self.observer.methods['prefixSearch'] = prefixSearch

        header, body = asString(self.auto.handleRequest(path='/path', arguments={'prefix':['te'], 'limit': ['5'], 'field': ['field.one']})).split('\r\n'*2)

        self.assertTrue("Content-Type: application/x-suggestions+json" in header, header)
        self.assertEquals("""["te", ["term0", "term&/\\""]]""", body)
        self.assertEquals(['prefixSearch'], [m.name for m in self.observer.calledMethods])
        self.assertEquals({'prefix':'te', 'fieldname':'field.one', 'limit':5}, self.observer.calledMethods[0].kwargs)
コード例 #12
0
ファイル: srwtest.py プロジェクト: seecr/meresco-components
    def testEmptySortKeys(self):
        request = soapEnvelope % SRW_REQUEST % argumentsWithMandatory % "<SRW:sortKeys/>"
        self.response = Response(total=0, hits=[])

        result = "".join(compose(self.srw.handleRequest(Body=request)))

        executeQueryKwargs = self.observer.calledMethods[0].kwargs
        self.assertFalse("sortKeys" in executeQueryKwargs, executeQueryKwargs)
コード例 #13
0
    def testCreateExtraResponseDataWithMultipleSuggestions(self):
        suggestions = Suggestion(count=1, field='afield')
        response = Response(total=0, hits=[])
        response.suggestions = {
            'query': ['que', 'emery', 'queen'],
            'value': ['valu', 'ot']
        }
        responseData = ''.join(
            compose(
                suggestions.extraResponseData(
                    response=response,
                    sruArguments={'x-suggestionsQuery': ["query AND value"]})))
        self.assertEqualsWS(
            """<suggestions xmlns="http://meresco.org/namespace/suggestions">
    <suggestion>que AND valu</suggestion>
    <suggestion>emery AND ot</suggestion>
</suggestions>
""", responseData)
コード例 #14
0
 def testDoNothingIfNoSuggestionsInResponse(self):
     suggestions = Suggestion(count=1, field='afield')
     response = Response(total=0, hits=[])
     responseData = list(
         compose(
             suggestions.extraResponseData(
                 response=response,
                 sruArguments={'x-suggestionsQuery': ["query"]})))
     self.assertEqual([], responseData)
コード例 #15
0
    def testOldStyleAutocomplete(self):
        queryTemplate = '/sru?version=1.1&operation=searchRetrieve&query={searchTerms}'
        self.auto = be((Autocomplete(
                host='localhost',
                port=8000,
                path='/some/path',
                templateQuery=queryTemplate,
                shortname="Web Search",
                description="Use this web search to search something",
                defaultLimit=50,
                defaultField='lom',
            ),
            (self.observer,),
        ))
        response = SolrResponse()
        response.hits = ['term0', 'term&/"']
        response.total = 2
        response.qtime = 5
        def prefixSearch(**kwargs):
            raise StopIteration(response)
            yield
        self.observer.methods['prefixSearch'] = prefixSearch

        header, body = asString(self.auto.handleRequest(path='/path', arguments={'prefix':['te'], 'limit': ['5'], 'field': ['field.one']})).split('\r\n'*2)

        self.assertTrue("Content-Type: application/x-suggestions+json" in header, header)
        self.assertEquals("""["te", ["term0", "term&/\\""]]""", body)
        self.assertEquals(['prefixSearch'], [m.name for m in self.observer.calledMethods])
        self.assertEquals({'prefix':'te', 'fieldname':'field.one', 'limit':5}, self.observer.calledMethods[0].kwargs)

        result = asString(self.auto.handleRequest(
            path='/path/opensearchdescription.xml',
            arguments={}))
        header,body = result.split('\r\n'*2)

        self.assertTrue("Content-Type: text/xml" in header, header)
        self.assertEqualsWS("""<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
    <ShortName>Web Search</ShortName>
    <Description>Use this web search to search something</Description>
    <Url type="text/xml" method="get" template="http://localhost:8000/sru?version=1.1&amp;operation=searchRetrieve&amp;query={searchTerms}"/>
    <Url type="application/x-suggestions+json" template="http://localhost:8000/some/path?prefix={searchTerms}"/>
</OpenSearchDescription>""", body)
コード例 #16
0
    def testHarriePoter(self):
        suggestions = Suggestion(count=1, field='afield')
        response = Response(total=0, hits=[])
        response.suggestions = {
            'harrie': ['harry', 'marie'],
            'poter': ['potter', 'peter']
        }
        responseData = ''.join(
            compose(
                suggestions.extraResponseData(
                    response=response,
                    sruArguments={'x-suggestionsQuery':
                                  ["harrie AND poter"]})))
        self.assertEqualsWS(
            """<suggestions xmlns="http://meresco.org/namespace/suggestions">
    <suggestion>harry AND potter</suggestion>
    <suggestion>marie AND peter</suggestion>
</suggestions>
""", responseData)
コード例 #17
0
    def setUp(self):
        SeecrTestCase.setUp(self)
        self.observer = CallTrace('observer')
        self.response = Response(total=0, hits=[])

        def executeQuery(**kwargs):
            return self.response
            yield

        self.observer.methods['executeQuery'] = executeQuery
コード例 #18
0
    def testDrilldownResultInExecuteQuery(self):
        observer = CallTrace()
        response = Response(total=100, hits=hitsRange(11, 26))
        drilldownData = iter([
            ('field0', iter([('value0_0', 14)])),
            ('field1', iter([('value1_0', 13), ('value1_1', 11)])),
            ('field2', iter([('value2_0', 3), ('value2_1', 2), ('value2_2', 1)]))])
        response.drilldownData = drilldownData
        def executeQuery(**kwargs):
            raise StopIteration(response)
            yield
        def retrieveData(**kwargs):
            raise StopIteration('record')
            yield
        observer.methods['executeQuery'] = executeQuery
        observer.methods['retrieveData'] = retrieveData
        observer.methods['extraResponseData'] = lambda *a, **kw: (x for x in 'extraResponseData')
        observer.methods['echoedExtraRequestData'] = lambda *a, **kw: (x for x in 'echoedExtraRequestData')
        observer.methods['extraRecordData'] = lambda hit: (f for f in [])

        component = SruHandler(drilldownSortBy='somevalue')
        component.addObserver(observer)

        queryArguments = dict(startRecord=11, maximumRecords=15, query='query', recordPacking='string', recordSchema='schema')
        sruArguments = queryArguments
        sruArguments['x-term-drilldown'] = ["field0:1,fie:ld1:2,field2,fie:ld3"]
        consume(component.searchRetrieve(sruArguments=sruArguments, **queryArguments))
        self.assertEquals(['executeQuery'] + ['retrieveData', 'extraRecordData'] * 15 + ['echoedExtraRequestData', 'extraResponseData'], [m.name for m in observer.calledMethods])
        self.assertEquals([
            dict(fieldname='field0', maxTerms=1, sortBy='somevalue'),
            dict(fieldname='fie:ld1', maxTerms=2, sortBy='somevalue'),
            dict(fieldname='field2', maxTerms=DEFAULT_MAXIMUM_TERMS, sortBy='somevalue'),
            dict(fieldname='fie:ld3', maxTerms=DEFAULT_MAXIMUM_TERMS, sortBy='somevalue')
            ], list(observer.calledMethods[0].kwargs['facets']))
        extraResponseDataMethod = observer.calledMethods[-1]
        self.assertEquals(response, extraResponseDataMethod.kwargs['response'])
コード例 #19
0
 def setUp(self):
     SeecrTestCase.setUp(self)
     self.response = Response(total=10, hits=[])
     self.drilldownDataResponse = None
     def executeQuery(facets=None, **kwargs):
         if self.drilldownDataResponse:
             self.response.drilldownData = self.drilldownDataResponse
         elif not facets is None:
             self.response.drilldownData = []
             for facet in facets:
                 if isinstance(facet, dict):
                     self.response.drilldownData.append({'fieldname': facet['fieldname'], 'terms':[{'term': 'value1', 'count': 1}, {'term': 'value2', 'count': 2}]})
         return self.response
         yield
     self.observer = CallTrace('observer', methods={'executeQuery': executeQuery}, emptyGeneratorMethods=['someMethod'])
コード例 #20
0
ファイル: srwtest.py プロジェクト: seecr/meresco-components
    def testNormalOperation(self):
        request = soapEnvelope % SRW_REQUEST % argumentsWithMandatory % ""
        self.response = Response(total=1, hits=[Hit('recordId')])
        del self.observer.methods['retrieveData']

        def retrieveData(identifier, name):
            return "<DATA>%s-%s</DATA>" % (identifier, name)
            yield

        self.observer.methods['retrieveData'] = retrieveData

        result = "".join(compose(self.srw.handleRequest(Body=request)))

        self.assertEqualsWS(
            httpResponse % soapEnvelope % wrappedMockAnswer %
            ('recordId', 'dc.author = "jones" and  dc.title = "smith"'),
            result)
コード例 #21
0
    def testExampleFromLibraryOffCongressSite(self):
        """testExampleFromLibraryOffCongressSite - Integration test based on http://www.loc.gov/standards/sru/srw/index.html
        spelling error ("recordSchema") corrected
        """
        request = """<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
  <SOAP:Body>
    <SRW:searchRetrieveRequest xmlns:SRW="http://www.loc.gov/zing/srw/">
      <SRW:version>1.1</SRW:version>
      <SRW:query>dc.author = "jones" and  dc.title = "smith"</SRW:query>
      <SRW:startRecord>1</SRW:startRecord>
      <SRW:maximumRecords>10</SRW:maximumRecords>
      <SRW:recordSchema>info:srw/schema/1/mods-v3.0</SRW:recordSchema>
    </SRW:searchRetrieveRequest>
  </SOAP:Body>
</SOAP:Envelope>"""

        self.response = StopIteration(Response(total=1,
                                               hits=[Hit('recordId')]))
        del self.observer.methods['retrieveData']

        def retrieveData(identifier, name):
            raise StopIteration("<DATA>%s-%s</DATA>" % (identifier, name))
            yield

        self.observer.methods['retrieveData'] = retrieveData
        response = "".join(compose(self.srw.handleRequest(Body=request)))

        echoRequest = """<srw:echoedSearchRetrieveRequest>
<srw:version>1.1</srw:version>
<srw:query>dc.author = "jones" and  dc.title = "smith"</srw:query>
<srw:startRecord>1</srw:startRecord>
<srw:maximumRecords>10</srw:maximumRecords>
<srw:recordPacking>xml</srw:recordPacking>
<srw:recordSchema>info:srw/schema/1/mods-v3.0</srw:recordSchema>
</srw:echoedSearchRetrieveRequest>"""

        self.assertEqualsWS(
            httpResponse % soapEnvelope % searchRetrieveResponse %
            (1,
             '<srw:records><srw:record><srw:recordSchema>info:srw/schema/1/mods-v3.0</srw:recordSchema><srw:recordPacking>xml</srw:recordPacking><srw:recordData><DATA>recordId-info:srw/schema/1/mods-v3.0</DATA></srw:recordData></srw:record></srw:records>'
             + echoRequest), response)
コード例 #22
0
 def executeQuery(**kwargs):
     return Response(total=3201, hits=[])
     yield
コード例 #23
0
 def executeQuery(**kwargs):
     response = Response(total=0, hits=[])
     response.queryTime=5
     raise StopIteration(response)
     yield
コード例 #24
0
 def executeQuery(start, stop, *args, **kwargs):
     response = Response(total=50, hits=[Hit(i) for i in range(start, stop)])
     raise StopIteration(response)
     yield
コード例 #25
0
 def executeQuery(**kwargs):
     return Response(total=16, hits=list(range(16)))
     yield
コード例 #26
0
 def executeQuery(**kwargs):
     raise StopIteration(Response(total=16, hits=range(16)))
     yield
コード例 #27
0
 def executeQuery(**kwargs):
     raise StopIteration(Response(total=42))
     yield
コード例 #28
0
 def executeQuery(**kwargs):
     raise StopIteration(Response(total=1, hits=[Hit(1)]))
     yield
コード例 #29
0
 def executeQuery(start, stop, *args, **kwargs):
     response = Response(total=50, hits=[Hit(i) for i in range(start, stop)])
     return response
     yield
コード例 #30
0
 def executeQuery(**kwargs):
     return Response(total=42)
     yield
コード例 #31
0
 def executeQuery(**kwargs):
     return Response(total=1, hits=[Hit(1)])
     yield