old_contents: # -*- coding: utf-8 -*-
  
  from functools import wraps
  
  from mock import patch
  
  from elasticmock.fake_elasticsearch import FakeElasticsearch
  
  ELASTIC_INSTANCES = {}
  
  
  def _get_elasticmock(hosts=None, *args, **kwargs):
      elastic_key = 'localhost:9200' if hosts is None else '{0}:{1}'.format(hosts[0].get('host'), hosts[0].get('port'))
      if elastic_key in ELASTIC_INSTANCES:
          connection = ELASTIC_INSTANCES.get(elastic_key)
      else:
          connection = FakeElasticsearch()
          ELASTIC_INSTANCES[elastic_key] = connection
      return connection
  
  
  def elasticmock(f):
      @wraps(f)
      def decorated(*args, **kwargs):
          ELASTIC_INSTANCES.clear()
          with patch('elasticsearch.Elasticsearch', _get_elasticmock):
              result = f(*args, **kwargs)
          return result
      return decorated
  
new_contents: # -*- coding: utf-8 -*-
  
  from functools import wraps
  
  from elasticsearch.client import _normalize_hosts
  from mock import patch
  
  from elasticmock.fake_elasticsearch import FakeElasticsearch
  
  ELASTIC_INSTANCES = {}
  
  
  def _get_elasticmock(hosts=None, *args, **kwargs):
      host = _normalize_hosts(hosts)[0]
      elastic_key = '{0}:{1}'.format(
          host.get('host', 'localhost'), host.get('port', 9200)
      )
  
      if elastic_key in ELASTIC_INSTANCES:
          connection = ELASTIC_INSTANCES.get(elastic_key)
      else:
          connection = FakeElasticsearch()
          ELASTIC_INSTANCES[elastic_key] = connection
      return connection
  
  
  def elasticmock(f):
      @wraps(f)
      def decorated(*args, **kwargs):
          ELASTIC_INSTANCES.clear()
          with patch('elasticsearch.Elasticsearch', _get_elasticmock):
              result = f(*args, **kwargs)
          return result
      return decorated
  
subject: Allow the same 'hosts' settings that Elasticsearch does