def __init__(self, reactor, conversion=None, **kwargs): Observable.__init__(self, **kwargs) self._conversion = Conversion() if conversion is None else conversion self._dynamicHtml = DynamicHtml( [dynamicPath], reactor=reactor, notFoundPage='notFound', additionalGlobals={ 'VERSION': version, 'allCoreInfo': self._allCoreInfo, 'parseCql': parseString, 'cqlToExpression': cqlToExpression, 'cql2string': cql2string, 'dumps': dumps, }) self._internalTree = be(( Observable(), (PathFilter('/', excluding=['/static', '/version']), (self._dynamicHtml, )), (PathFilter('/static'), (PathRename(lambda path: path[len('/static'):]), (FileServer(staticPath), ))), (PathFilter('/version'), (StringServer("Meresco Lucene version %s" % version, ContentTypePlainText), )), ))
def __init__(self, reactor, oaiPath, **kwargs): Observable.__init__(self, **kwargs) self._outside = Transparent() oaiJsonInfo = OaiJsonInfo() self._dynamicHtml = DynamicHtml( [dynamicPath], reactor=reactor, notFoundPage='notFound', additionalGlobals={ 'VERSION': VERSION, 'oaiPath': oaiPath, 'strftime': strftime, 'localtime': localtime, }) self._internalTree = be(( Observable(), (PathFilter('/', excluding=['/static', '/version', '/json']), ( self._dynamicHtml, ( oaiJsonInfo, (self._outside, ), ), )), (PathFilter('/json'), ( oaiJsonInfo, (self._outside, ), )), (PathFilter('/static'), (PathRename(lambda path: path[len('/static'):]), (FileServer(staticPath), ))), (PathFilter('/version'), (StringServer("Meresco Oai version %s" % VERSION, ContentTypePlainText), )), ))
class Autocomplete(Observable): def __init__(self, host, port, path, templateQuery, shortname, description, htmlTemplateQuery=None, name=None, **kwargs): Observable.__init__(self, name=name) self._host = host self._port = port self._path = path self._xmlTemplateQuery = templateQuery self._htmlTemplateQuery = htmlTemplateQuery self._shortname = shortname self._description = description self._fileServer = FileServer(documentRoot=filesDir) if 'defaultField' in kwargs: warn("Using old-style Autocomplete, please use PrefixBasedSuggest as observer.", DeprecationWarning) from .prefixbasedsuggest import PrefixBasedSuggest suggest = PrefixBasedSuggest(**kwargs) def _suggest(arguments): yield suggest._suggest(arguments=arguments, outside=self.any) self._suggest = _suggest self._templateQueryForSuggest = suggest.templateQueryForSuggest def handleRequest(self, arguments, path, **kwargs): filename = path.rsplit('/', 1)[-1] if filename in ['jquery.js', 'jquery.autocomplete.js', 'autocomplete.css']: yield self._files(filename, **kwargs) elif filename == 'opensearchdescription.xml': yield self._openSearchDescription(path=path, arguments=arguments, **kwargs) else: yield self._suggest(arguments=arguments) def _suggest(self, arguments): yield self.all.suggest(arguments=arguments) def _templateQueryForSuggest(self): return self.call.templateQueryForSuggest() def _openSearchDescription(self, **kwargs): server = self._host if str(self._port) == "80" else "{}:{}".format(self._host, self._port) yield okXml yield """<?xml version="1.0" encoding="UTF-8"?>""" yield """<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> <ShortName>%(shortname)s</ShortName> <Description>%(description)s</Description> <Url type="text/xml" method="get" template="http://%(server)s%(xmlTemplateQuery)s"/> %(htmlUrl)s <Url type="%(contentTypeSuggest)s" template="http://%(server)s%(path)s?%(templateQueryForSuggest)s"/> </OpenSearchDescription>""" % { 'contentTypeSuggest': CONTENT_TYPE_JSON_SUGGESTIONS, 'shortname': self._shortname, 'description': self._description, 'server': server, 'path': self._path, 'xmlTemplateQuery': escapeXml(self._xmlTemplateQuery), 'htmlUrl': '<Url type="text/html" method="get" template="http://{server}{template}"/>'.format(server=server, template=escapeXml(self._htmlTemplateQuery)) if self._htmlTemplateQuery else '', 'templateQueryForSuggest': escapeXml(self._templateQueryForSuggest()), } def _files(self, filename, **kwargs): yield self._fileServer.handleRequest(path=filename, **kwargs)
def __init__(self, host, port, path, templateQuery, shortname, description, htmlTemplateQuery=None, name=None, **kwargs): Observable.__init__(self, name=name) self._host = host self._port = port self._path = path self._xmlTemplateQuery = templateQuery self._htmlTemplateQuery = htmlTemplateQuery self._shortname = shortname self._description = description self._fileServer = FileServer(documentRoot=filesDir) if 'defaultField' in kwargs: warn("Using old-style Autocomplete, please use PrefixBasedSuggest as observer.", DeprecationWarning) from .prefixbasedsuggest import PrefixBasedSuggest suggest = PrefixBasedSuggest(**kwargs) def _suggest(arguments): yield suggest._suggest(arguments=arguments, outside=self.any) self._suggest = _suggest self._templateQueryForSuggest = suggest.templateQueryForSuggest
def dna(reactor, port, dynamic, static, verbose=True): return (Observable(), (ObservableHttpServer(reactor, port=port), (LogCollector(), (ApacheLogWriter(stdout if verbose else None), ), (HandleRequestLog(), (BasicHttpHandler(), (PathFilter('/static'), (PathRename(lambda path: path[len('/static'):]), (FileServer(static), ))), (PathFilter('/', excluding=['/static']), (DynamicHtml([dynamic], reactor=reactor, indexPage='/index'), )))))))
def __init__( self, host, port, path, templateQuery, shortname, description, htmlTemplateQuery=None, name=None, **kwargs ): Observable.__init__(self, name=name) self._host = host self._port = port self._path = path self._xmlTemplateQuery = templateQuery self._htmlTemplateQuery = htmlTemplateQuery self._shortname = shortname self._description = description self._fileServer = FileServer(documentRoot=filesDir) if "defaultField" in kwargs: warn("Using old-style Autocomplete, please use PrefixBasedSuggest as observer.", DeprecationWarning) from .prefixbasedsuggest import PrefixBasedSuggest suggest = PrefixBasedSuggest(**kwargs) def _suggest(arguments): yield suggest._suggest(arguments=arguments, outside=self.any) self._suggest = _suggest self._templateQueryForSuggest = suggest.templateQueryForSuggest
class Autocomplete(Observable): def __init__( self, host, port, path, templateQuery, shortname, description, htmlTemplateQuery=None, name=None, **kwargs ): Observable.__init__(self, name=name) self._host = host self._port = port self._path = path self._xmlTemplateQuery = templateQuery self._htmlTemplateQuery = htmlTemplateQuery self._shortname = shortname self._description = description self._fileServer = FileServer(documentRoot=filesDir) if "defaultField" in kwargs: warn("Using old-style Autocomplete, please use PrefixBasedSuggest as observer.", DeprecationWarning) from .prefixbasedsuggest import PrefixBasedSuggest suggest = PrefixBasedSuggest(**kwargs) def _suggest(arguments): yield suggest._suggest(arguments=arguments, outside=self.any) self._suggest = _suggest self._templateQueryForSuggest = suggest.templateQueryForSuggest def handleRequest(self, arguments, path, **kwargs): filename = path.rsplit("/", 1)[-1] if filename in ["jquery.js", "jquery.autocomplete.js", "autocomplete.css"]: yield self._files(filename, **kwargs) elif filename == "opensearchdescription.xml": yield self._openSearchDescription(path=path, arguments=arguments, **kwargs) else: yield self._suggest(arguments=arguments) def _suggest(self, arguments): yield self.all.suggest(arguments=arguments) def _templateQueryForSuggest(self): return self.call.templateQueryForSuggest() def _openSearchDescription(self, **kwargs): server = self._host if str(self._port) == "80" else "{}:{}".format(self._host, self._port) yield okXml yield """<?xml version="1.0" encoding="UTF-8"?>""" yield """<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/"> <ShortName>%(shortname)s</ShortName> <Description>%(description)s</Description> <Url type="text/xml" method="get" template="http://%(server)s%(xmlTemplateQuery)s"/> %(htmlUrl)s <Url type="%(contentTypeSuggest)s" template="http://%(server)s%(path)s?%(templateQueryForSuggest)s"/> </OpenSearchDescription>""" % { "contentTypeSuggest": CONTENT_TYPE_JSON_SUGGESTIONS, "shortname": self._shortname, "description": self._description, "server": server, "path": self._path, "xmlTemplateQuery": escapeXml(self._xmlTemplateQuery), "htmlUrl": '<Url type="text/html" method="get" template="http://{server}{template}"/>'.format( server=server, template=escapeXml(self._htmlTemplateQuery) ) if self._htmlTemplateQuery else "", "templateQueryForSuggest": escapeXml(self._templateQueryForSuggest()), } def _files(self, filename, **kwargs): yield self._fileServer.handleRequest(path=filename, **kwargs)
def main(reactor, port, databasePath): drilldownFields = [ DrilldownField('untokenized.field2'), DrilldownField('untokenized.fieldHier', hierarchical=True) ] fieldRegistry = FieldRegistry(drilldownFields) luceneSettings = LuceneSettings(fieldRegistry=fieldRegistry, commitCount=30, commitTimeout=1, analyzer=MerescoDutchStemmingAnalyzer()) lucene = Lucene(path=join(databasePath, 'lucene'), reactor=reactor, name='main', settings=luceneSettings) lucene2Settings = LuceneSettings(fieldRegistry=fieldRegistry, commitTimeout=0.1) lucene2 = Lucene(path=join(databasePath, 'lucene2'), reactor=reactor, name='main2', settings=lucene2Settings) termNumerator = TermNumerator(path=join(databasePath, 'termNumerator')) emptyLuceneSettings = LuceneSettings(commitTimeout=1) multiLuceneHelix = ( MultiLucene(defaultCore='main'), (Lucene(path=join(databasePath, 'lucene-empty'), reactor=reactor, name='empty-core', settings=emptyLuceneSettings), ), (lucene, ), (lucene2, ), ) storageComponent = StorageComponent( directory=join(databasePath, 'storage')) return \ (Observable(), (ObservableHttpServer(reactor=reactor, port=port), (BasicHttpHandler(), (ApacheLogger(outputStream=stdout), (PathFilter("/info", excluding=[ '/info/version', '/info/name', '/update', '/sru', '/remote', '/via-remote-sru', ]), (DynamicHtml( [dynamicPath], reactor=reactor, indexPage='/info', additionalGlobals={ 'VERSION': version, } ), ) ), (PathFilter("/info/version"), (StringServer(version, ContentTypePlainText), ) ), (PathFilter("/info/name"), (StringServer('Meresco Lucene', ContentTypePlainText),) ), (PathFilter("/static"), (PathRename(lambda path: path[len('/static'):]), (FileServer(staticPath),) ) ), (PathFilter("/update_main", excluding=['/update_main2']), uploadHelix(lucene, termNumerator, storageComponent, drilldownFields, fieldRegistry=luceneSettings.fieldRegistry), ), (PathFilter("/update_main2"), uploadHelix(lucene2, termNumerator, storageComponent, drilldownFields, fieldRegistry=lucene2Settings.fieldRegistry), ), (PathFilter('/sru'), (SruParser(defaultRecordSchema='record'), (SruHandler(), (MultiCqlToLuceneQuery( defaultCore='main', coreToCqlLuceneQueries={ "main": CqlToLuceneQuery([], luceneSettings=luceneSettings), "main2": CqlToLuceneQuery([], luceneSettings=lucene2Settings), "empty-core": CqlToLuceneQuery([], luceneSettings=emptyLuceneSettings), }), multiLuceneHelix, ), (SRUTermDrilldown(defaultFormat='xml'),), (SruDuplicateCount(),), (storageComponent,), ) ) ), (PathFilter('/via-remote-sru'), (SruParser(defaultRecordSchema='record'), (SruHandler(), (LuceneRemote(host='localhost', port=port, path='/remote'),), (SRUTermDrilldown(defaultFormat='xml'),), (SruDuplicateCount(),), (storageComponent,), ) ) ), (PathFilter('/remote'), (LuceneRemoteService(reactor=reactor), (MultiCqlToLuceneQuery( defaultCore='main', coreToCqlLuceneQueries={ "main": CqlToLuceneQuery([], luceneSettings=luceneSettings), "main2": CqlToLuceneQuery([], luceneSettings=lucene2Settings), "empty-core": CqlToLuceneQuery([], luceneSettings=emptyLuceneSettings), }), multiLuceneHelix, ) ) ), (PathFilter('/autocomplete'), (Autocomplete('localhost', port, '/autocomplete', '__all__', '?', 5, '?', '?'), (lucene,), ) ) ) ) ) )