Example #1
0
 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), )),
     ))
Example #2
0
 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), )),
     ))
Example #3
0
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)
Example #4
0
 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
Example #5
0
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'), )))))))
Example #6
0
    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
Example #7
0
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)
Example #8
0
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,),
                        )
                    )
                )
            )
        )
    )