Python Pyramid(cornice) with Elasticsearch DSL

203 Views Asked by At

Using python pyramid and ElastiSearch. I looked at pythonelasticsearch-dsl which offers a nice ORM but I'm not sure how to integrate it with pyramid.

So far I made a "global connection" as per pythonelasticsearch-dsl and expose the connection via an attribute into pyramid's request.

Do you see anything wrong with this code ?!

from elasticsearch_dsl import connections   

def _create_es_connection(config):


    registry = config.registry
    settings = registry.settings

    es_servers = settings.get('elasticsearch.' + 'servers', ['localhost:9200'])
    es_timeout = settings.get('elasticsearch.' + 'timeout', 20)

    registry.es_connection = connections.create_connection(
        hosts=es_servers,
        timeout=es_timeout)

def get_es_connection(request):
    return getattr(request.registry, 'es_connection', 
                   connections.get_connection())

# main
def main(global_config, **settings):
     ...
     config = Configurator(settings=settings)

     config.add_request_method(
                               get_es_connection,
                               'es',
                               reify=True)

I use the connection as

#view
request.es ...

If there are any other ways I would appreciate any pointers - thank you.

1

There are 1 best solutions below

1
On

A few things look weird, but I guess it comes from the copy/paste from your project (missing type cast in settings, connections undefined, etc.)

What you are trying to do is very similar to what you'd do with SQLAlchemy: https://docs.pylonsproject.org/projects/pyramid_cookbook/en/latest/database/sqlalchemy.html

But according the docs of pythonelasticsearch-dsl you don't even have to bother with all that, since the lib allows you define a global default connection: https://elasticsearch-dsl.readthedocs.io/en/latest/configuration.html#default-connection