示例#1
0
    def handleRequest(self, RequestURI='', **kwargs):
        yield httputils.okRss
        yield """<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel>"""
        try:
            Scheme, Netloc, Path, Query, Fragment = urlsplit(RequestURI)
            arguments = parse_qs(Query)
            sortKeys = arguments.get('sortKeys', [self._sortKeys])[0]
            sortBy, sortDescending = None, None
            if sortKeys:
                sortBy, ignored, sortDescending = sortKeys.split(',')
                sortDescending = sortDescending == '1'

            maximumRecords = int(arguments.get('maximumRecords', [self._maximumRecords])[0])
            query = arguments.get('query', [''])[0]
            filters = arguments.get('filter', [])
            startRecord = 1

            if not query and not self._antiUnaryClause:
                raise SruMandatoryParameterNotSuppliedException("query")
            webquery = WebQuery(query, antiUnaryClause=self._antiUnaryClause)
            for filter in filters:
                if not ':' in filter:
                    raise BadRequestException('Invalid filter: %s' % filter)
                field,term = filter.split(':', 1)
                webquery.addFilter(field, term)

            ast = webquery.ast
        except (SruMandatoryParameterNotSuppliedException, BadRequestException, CQLParseException), e:
            yield '<title>ERROR %s</title>' % xmlEscape(self._title)
            yield '<link>%s</link>' % xmlEscape(self._link)
            yield "<description>An error occurred '%s'</description>" % xmlEscape(str(e))
            yield """</channel></rss>"""
            raise StopIteration()
示例#2
0
 def testReplaceTermsWithFilters(self):
     wq = WebQuery('fiets kaart')
     wq.addFilter('label', 'value')
     newWq = wq.replaceTerm('fiets', 'bike')
     self.assertEquals('fiets kaart', wq.original)
     self.assertEquals('bike AND kaart', newWq.original)
     self.assertCql(parseCql('(bike AND kaart) AND label exact value'), newWq.ast)
示例#3
0
 def testFilterX4(self):
     wq = WebQuery('fiets')
     wq.addFilter('field1', 'value1')
     wq.addFilter('field2', 'value2')
     wq.addFilter('field3', 'value3')
     wq.addFilter('field4', 'value4')
     self.assertCql(parseCql('(fiets) AND field1 exact value1 AND field2 exact value2 AND field3 exact value3 AND field4 exact value4'), wq.ast)
示例#4
0
 def testReplaceTermsWithFilters(self):
     wq = WebQuery('fiets kaart')
     wq.addFilter('label', 'value')
     newWq = wq.replaceTerm('fiets', 'bike')
     self.assertEqual('fiets kaart', wq.original)
     self.assertEqual('bike AND kaart', newWq.original)
     self.assertCql(parseCql('(bike AND kaart) AND label exact value'),
                    newWq.ast)
示例#5
0
 def testFilterFilter(self):
     wq = WebQuery('fiets')
     wq.addFilter('field1', 'value1')
     wq.addFilter('field2', 'value2')
     self.assertCql(
         parseCql(
             '(fiets) AND field1 exact value1 AND field2 exact value2'),
         wq.ast)
示例#6
0
    def testHasFilters(self):
        wq = WebQuery('fiets kaart')
        self.assertFalse(wq.hasFilters())
        wq.addFilter('label', 'value')
        self.assertTrue(wq.hasFilters())

        wq = WebQuery('fiets kaart')
        self.assertFalse(wq.hasFilters())
        wq.addTermFilter("water")
        self.assertTrue(wq.hasFilters())
示例#7
0
    def testHasFilters(self):
        wq = WebQuery('fiets kaart')
        self.assertFalse(wq.hasFilters())
        wq.addFilter('label', 'value')
        self.assertTrue(wq.hasFilters())

        wq = WebQuery('fiets kaart')
        self.assertFalse(wq.hasFilters())
        wq.addTermFilter("water")
        self.assertTrue(wq.hasFilters())
示例#8
0
    def handleRequest(self, RequestURI='', **kwargs):
        yield httputils.okRss
        yield """<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel>"""

        try:
            Scheme, Netloc, Path, Query, Fragment = urlsplit(RequestURI)
            arguments = parse_qs(Query)
            sortKeys = arguments.get('sortKeys', [self._sortKeys])[0]
            sortBy, sortDescending = None, None
            if sortKeys:
                sortBy, ignored, sortDescending = sortKeys.split(',')
                sortDescending = sortDescending == '0'

            # Set Language:
            prefLanguage = arguments.get('preflang', [self._supportedLanguages[0]])[0]
            # This might be German:-(  Not anymore :-)
            prefLanguage = prefLanguage if prefLanguage.lower() in self._supportedLanguages else self._supportedLanguages[0]

            # Get max records, from request or get default
            maximumRecords = int(arguments.get('maximumRecords', [self._maximumRecords])[0])
            maximumRecords = maximumRecords if maximumRecords <= self._max_maximumRecords else int(self._max_maximumRecords) # Check if requested max does not exceed our max...

            #set startrecord: we support rss paging...
            startRecord = int(arguments.get('startRecord', [self._startRecord])[0])
            
            #set querylabel:
            querylabel = arguments.get('querylabel', [self._title.get(prefLanguage)])[0]

            #get userquery:
            query = arguments.get('query', [''])[0]
            filters = arguments.get('filter', [])
            # startRecord = 1

            if not query and not self._antiUnaryClause:
                raise SruMandatoryParameterNotSuppliedException("query")

            webquery = WebQuery(query, antiUnaryClause=self._antiUnaryClause)
            for filter in filters:
                if not ':' in filter:
                    raise BadRequestException('Invalid filter: %s' % filter)
                field,term = filter.split(':', 1)
                webquery.addFilter(field, term)

            ast = webquery.ast

        except (SruMandatoryParameterNotSuppliedException, BadRequestException, CQLParseException), e:
            yield '<title>ERROR %s</title>' % xmlEscape(self._title)
            # yield '<link>%s</link>' % xmlEscape(self._link)
            yield '<link>%s</link>' % xmlEscape(self._link.get(prefLanguage))
            yield "<description>An error occurred '%s'</description>" % xmlEscape(str(e))
            yield """</channel></rss>"""
            raise StopIteration()
示例#9
0
    def handleRequest(self, RequestURI='', **kwargs):
        yield httputils.okRss
        yield """<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel>"""
        try:
            Scheme, Netloc, Path, Query, Fragment = urlsplit(RequestURI)
            arguments = parse_qs(Query)
            sortKeys = arguments.get('sortKeys', [self._sortKeys])[0]
            sortBy, sortDescending = None, None
            if sortKeys:
                sortBy, ignored, sortDescending = sortKeys.split(',')
                sortDescending = sortDescending == '1'

            maximumRecords = int(arguments.get('maximumRecords', [self._maximumRecords])[0])
            query = arguments.get('query', [''])[0]
            filters = arguments.get('filter', [])
            startRecord = 1

            if not query and not self._antiUnaryClause:
                raise SruMandatoryParameterNotSuppliedException("query")
            webquery = WebQuery(query, antiUnaryClause=self._antiUnaryClause)
            for filter in filters:
                if not ':' in filter:
                    raise BadRequestException('Invalid filter: %s' % filter)
                field,term = filter.split(':', 1)
                webquery.addFilter(field, term)

            ast = webquery.ast
        except (SruMandatoryParameterNotSuppliedException, BadRequestException, CQLParseException) as e:
            yield '<title>ERROR %s</title>' % xmlEscape(self._title)
            yield '<link>%s</link>' % xmlEscape(self._link)
            yield "<description>An error occurred '%s'</description>" % xmlEscape(str(e))
            yield """</channel></rss>"""
            return
        yield '<title>%s</title>' % xmlEscape(self._title)
        yield '<description>%s</description>' % xmlEscape(self._description)
        yield '<link>%s</link>' % xmlEscape(self._link)

        SRU_IS_ONE_BASED = 1 #And our RSS plugin is closely based on SRU
        yield self._yieldResults(
                query=cqlToExpression(ast),
                start=startRecord - SRU_IS_ONE_BASED,
                stop=startRecord - SRU_IS_ONE_BASED+maximumRecords,
                sortBy=sortBy,
                sortDescending=sortDescending)

        yield """</channel>"""
        yield """</rss>"""
示例#10
0
 def testFilterWithSpaces(self):
     wq = WebQuery('fiets')
     wq.addFilter('field', 'value with spaces')
     self.assertCql(parseCql('(fiets) AND field exact "value with spaces"'),
                    wq.ast)
示例#11
0
 def testFilter(self):
     wq = WebQuery('fiets')
     wq.addFilter('field', 'value')
     self.assertCql(parseCql('(fiets) AND field exact value'), wq.ast)
示例#12
0
 def testFilterWithSpaces(self):
     wq = WebQuery('fiets')
     wq.addFilter('field', 'value with spaces')
     self.assertCql(parseCql('(fiets) AND field exact "value with spaces"'), wq.ast)
示例#13
0
 def testFilter(self):
     wq = WebQuery('fiets')
     wq.addFilter('field', 'value')
     self.assertCql(parseCql('(fiets) AND field exact value'), wq.ast)