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()
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)
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)
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)
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)
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())
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())
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()
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>"""
def testFilterWithSpaces(self): wq = WebQuery('fiets') wq.addFilter('field', 'value with spaces') self.assertCql(parseCql('(fiets) AND field exact "value with spaces"'), wq.ast)
def testFilter(self): wq = WebQuery('fiets') wq.addFilter('field', 'value') self.assertCql(parseCql('(fiets) AND field exact value'), wq.ast)
def testFilterWithSpaces(self): wq = WebQuery('fiets') wq.addFilter('field', 'value with spaces') self.assertCql(parseCql('(fiets) AND field exact "value with spaces"'), wq.ast)
def testFilter(self): wq = WebQuery('fiets') wq.addFilter('field', 'value') self.assertCql(parseCql('(fiets) AND field exact value'), wq.ast)