diff options
| author | CoprDistGit <infra@openeuler.org> | 2023-04-11 05:34:50 +0000 |
|---|---|---|
| committer | CoprDistGit <infra@openeuler.org> | 2023-04-11 05:34:50 +0000 |
| commit | 00cbb2ad92e65453dadae5c52da5d62e71912f65 (patch) | |
| tree | 314a48aae4db4f26939c9c7e24bd80bb557501ba | |
| parent | 3803be67b4f8c14829ed137413c26c4c27104d0e (diff) | |
automatic import of python-elasticmock
| -rw-r--r-- | .gitignore | 1 | ||||
| -rw-r--r-- | python-elasticmock.spec | 915 | ||||
| -rw-r--r-- | sources | 1 |
3 files changed, 917 insertions, 0 deletions
@@ -0,0 +1 @@ +/ElasticMock-1.8.1.tar.gz diff --git a/python-elasticmock.spec b/python-elasticmock.spec new file mode 100644 index 0000000..f6dc9e0 --- /dev/null +++ b/python-elasticmock.spec @@ -0,0 +1,915 @@ +%global _empty_manifest_terminate_build 0 +Name: python-ElasticMock +Version: 1.8.1 +Release: 1 +Summary: Python Elasticsearch Mock for test purposes +License: MIT License +URL: https://github.com/vrcmarcos/elasticmock +Source0: https://mirrors.nju.edu.cn/pypi/web/packages/6a/2b/82213b57b3426b94cadcc5bc1ced471626e3f21153dd7506fc3b8c568324/ElasticMock-1.8.1.tar.gz +BuildArch: noarch + + +%description +# ElasticMock + +Python Elasticsearch Mock for test purposes + +[](https://travis-ci.org/vrcmarcos/elasticmock) [](https://coveralls.io/github/vrcmarcos/elasticmock?branch=master) [](https://badge.fury.io/py/ElasticMock) [](https://github.com/vrcmarcos/elasticmock/blob/master/LICENSE)   + + [](https://pepy.tech/project/elasticmock/month) + +## Installation + +```shell +pip install ElasticMock +``` + +## Usage + +To use ElasticMock, decorate your test method with **@elasticmock** decorator: + +```python +from unittest import TestCase + +from elasticmock import elasticmock + + +class TestClass(TestCase): + + @elasticmock + def test_should_return_something_from_elasticsearch(self): + self.assertIsNotNone(some_function_that_uses_elasticsearch()) +``` + +### Custom Behaviours + +You can also force the behaviour of the ElasticSearch instance by importing the `elasticmock.behaviour` module: + +```python +from unittest import TestCase + +from elasticmock import behaviour + + +class TestClass(TestCase): + + ... + + def test_should_return_internal_server_error_when_simulate_server_error_is_true(self): + behaviour.server_failure.enable() + ... + behaviour.server_failure.disable() +``` + +You can also disable all behaviours by calling `behaviour.disable_all()` (Consider put this in your `def tearDown(self)` method) + +#### Available Behaviours + +* `server_failure`: Will make all calls to ElasticSearch returns the following error message: + ```python + { + 'status_code': 500, + 'error': 'Internal Server Error' + } + ``` + +## Code example + +Let's say you have a prod code snippet like this one: + +```python +import elasticsearch + +class FooService: + + def __init__(self): + self.es = elasticsearch.Elasticsearch(hosts=[{'host': 'localhost', 'port': 9200}]) + + def create(self, index, body): + es_object = self.es.index(index, body) + return es_object.get('_id') + + def read(self, index, id): + es_object = self.es.get(index, id) + return es_object.get('_source') + +``` + +Than you should be able to test this class by mocking ElasticSearch using the following test class: + +```python +from unittest import TestCase +from elasticmock import elasticmock +from foo.bar import FooService + +class FooServiceTest(TestCase): + + @elasticmock + def should_create_and_read_object(self): + # Variables used to test + index = 'test-index' + expected_document = { + 'foo': 'bar' + } + + # Instantiate service + service = FooService() + + # Index document on ElasticSearch + id = service.create(index, expected_document) + self.assertIsNotNone(id) + + # Retrive dpcument from ElasticSearch + document = service.read(index, id) + self.assertEquals(expected_document, document) + +``` + +## Notes: + +- The mocked **search** method returns **all available documents** indexed on the index with the requested document type. +- The mocked **suggest** method returns the exactly suggestions dictionary passed as body serialized in Elasticsearch.suggest response. **Atention:** If the term is an *int*, the suggestion will be ```python term + 1```. If not, the suggestion will be formatted as ```python {0}_suggestion.format(term) ```. +Example: + - **Suggestion Body**: + ```python + suggestion_body = { + 'suggestion-string': { + 'text': 'test_text', + 'term': { + 'field': 'string' + } + }, + 'suggestion-id': { + 'text': 1234567, + 'term': { + 'field': 'id' + } + } + } + ``` + - **Suggestion Response**: + ```python + { + 'suggestion-string': [ + { + 'text': 'test_text', + 'length': 1, + 'options': [ + { + 'text': 'test_text_suggestion', + 'freq': 1, + 'score': 1.0 + } + ], + 'offset': 0 + } + ], + 'suggestion-id': [ + { + 'text': 1234567, + 'length': 1, + 'options': [ + { + 'text': 1234568, + 'freq': 1, + 'score': 1.0 + } + ], + 'offset': 0 + } + ], + } + ``` + +## Testing + +```bash +python setup.py test +``` + +## Changelog + +#### 1.8.1: +- [Add support for Python 3.9](https://github.com/vrcmarcos/elasticmock/pull/72) (Thanks [@singingwolfboy](https://github.com/singingwolfboy)) +- [use unittest.mock instead of mock](https://github.com/vrcmarcos/elasticmock/pull/71) (Thanks [@singingwolfboy](https://github.com/singingwolfboy)) +- [Add must_not for bool search query](https://github.com/vrcmarcos/elasticmock/pull/70) (Thanks [@t-bittarn](https://github.com/t-bittarn)) + + +#### 1.8.0: +- [Add multi_match](https://github.com/vrcmarcos/elasticmock/pull/63) (Thanks [@carlosgalvez-tiendeo](https://github.com/carlosgalvez-tiendeo)) +- [Add mget](https://github.com/vrcmarcos/elasticmock/pull/64) (Thanks [@carlosgalvez-tiendeo](https://github.com/carlosgalvez-tiendeo)) +- [Add create, update, and delete to bulk API](https://github.com/vrcmarcos/elasticmock/pull/65) (Thanks [@fenimore](https://github.com/fenimore)) +- [Add Should to bool Query](https://github.com/vrcmarcos/elasticmock/pull/67) (Thanks [@fenimore](https://github.com/fenimore)) +- [Update Search API return result](https://github.com/vrcmarcos/elasticmock/pull/68) (Thanks [@fenimore](https://github.com/fenimore)) + +#### 1.7.0: +- [Add shards skipped to search and count](https://github.com/vrcmarcos/elasticmock/pull/56) (Thanks [@philtweir](https://github.com/philtweir)) +- [Allow 'match_all' queries in FakeSearch](https://github.com/vrcmarcos/elasticmock/pull/54) (Thanks [@jankislinger](https://github.com/jankislinger)) +- [Query using nested attributes](https://github.com/vrcmarcos/elasticmock/pull/55) (Thanks [@jankislinger](https://github.com/jankislinger)) +- [New features: range, size, aggregations](https://github.com/vrcmarcos/elasticmock/pull/57) (Thanks [@jankislinger](https://github.com/jankislinger)) +- [Adding "should" and "minimum_should_match" to QueryType](https://github.com/vrcmarcos/elasticmock/pull/62) (Thanks [@lunarie16](https://github.com/lunarie16)) + +#### 1.6.2: +- [Add must to query type](https://github.com/vrcmarcos/elasticmock/pull/47) (Thanks [@cuent](https://github.com/cuent)) +- [Add match all query type](https://github.com/vrcmarcos/elasticmock/pull/48) (Thanks [@cuent](https://github.com/cuent)) + +#### 1.6.1: +- Fix Twine README.md + +#### 1.6.0: +- [Implements several basic search types](https://github.com/vrcmarcos/elasticmock/pull/42) (Thanks [@KyKoPho](https://github.com/KyKoPho)) +- [Allow ignoring of missing documents (404) for get and delete](https://github.com/vrcmarcos/elasticmock/pull/44) (Thanks [@joosterman](https://github.com/joosterman)) + +#### 1.5.1: +- [Fix tests for es > 7](https://github.com/vrcmarcos/elasticmock/pull/38) (Thanks [@chesstrian](https://github.com/chesstrian)) + +#### 1.5.0: +- [**FakeElasticSearch**: Mocked **indices** property](https://github.com/vrcmarcos/elasticmock/issues/22) + - **FakeIndicesClient**: Mocked **create**, **exists**, **refresh** and **delete** methods +- [**FakeElasticSearch**: Mocked **cluster** property](https://github.com/vrcmarcos/elasticmock/issues/8) + - **FakeClusterClient**: Mocked **health** method + +#### 1.4.0 + +- [Fix es.index regression issue](https://github.com/vrcmarcos/elasticmock/issues/34) +- [Add 'Force Server Failure' feature as requested](https://github.com/vrcmarcos/elasticmock/issues/28) +- Reformat code to be compliant with PEP8 +- Add support to Python 3.8 + +#### 1.3.7 + +- [Adding fix for updating existing doc using index](https://github.com/vrcmarcos/elasticmock/pull/32) (Thanks [@adityaghosh](https://github.com/adityaghosh)) +- [Added bulk method](https://github.com/vrcmarcos/elasticmock/pull/30) (Thanks [@charl-van-niekerk](https://github.com/charl-van-niekerk)) +- [Add default value to doc_type in index method as it is by default set to '\_doc'](https://github.com/vrcmarcos/elasticmock/pull/27) (Thanks [@mohantyashish109](https://github.com/mohantyashish109)) +- [Add support for Python 3.7](https://github.com/vrcmarcos/elasticmock/pull/25) (Thanks [@asherf](https://github.com/asherf)) + +#### 1.3.6 + +- [Fix installation issue](https://github.com/vrcmarcos/elasticmock/pull/20) (Thanks [@tdhopper](https://github.com/tdhopper)) + +#### 1.3.5 + +- [Fix 1.3.4 release](https://github.com/vrcmarcos/elasticmock/pull/19) (Thanks [@infinite-Joy](https://github.com/infinite-Joy)) + +#### 1.3.4 + +- [Added aggregations to response if requested](https://github.com/vrcmarcos/elasticmock/pull/15) (Thanks [@snakeye](https://github.com/snakeye)) +- [Implementing new methods for scrolling](https://github.com/vrcmarcos/elasticmock/pull/17) (Thanks [@tcatrain](https://github.com/tcatrain)) + +#### 1.3.3 + +- [Search: doc_type can be a list](https://github.com/vrcmarcos/elasticmock/pull/16) (Thanks [@garncarz](https://github.com/garncarz)) +- [Exclude tests package](https://github.com/vrcmarcos/elasticmock/pull/13) (Thanks [@jmlw](https://github.com/jmlw)) +- [Make the FakeElasticsearch __init__ signature match the one from Elasticsearch](https://github.com/vrcmarcos/elasticmock/pull/10) (Thanks [@xrmx](https://github.com/xrmx)) +- [Improve search and count](https://github.com/vrcmarcos/elasticmock/pull/7) (Thanks [@frivoire](https://github.com/frivoire)) + +#### 1.3.2 + +- **elasticmock**: Python 3 fixes (Thanks [@barseghyanartur](https://github.com/barseghyanartur)) +- **test**: Add information on testing (Thanks [@barseghyanartur](https://github.com/barseghyanartur)) +- **README.md**: Fixed typo (Thanks [@bowlofstew](https://github.com/bowlofstew)) + +#### 1.3.1 + +- **elasticmock**: Allow the same arguments to the mock that elasticsearch.Elasticsearch allows (Thanks [@mattbreeden](https://github.com/mattbreeden)) + +#### 1.3.0: +- **FakeElasticSearch**: Mocked **count** method (Thanks [@TheoResources](https://github.com/TheoResources)) + +#### 1.2.0: +- **FakeElasticSearch**: Mocked **suggest** method + +#### 1.1.1: +- **elasticmock**: Changing the cleanup older FakeElasticSearch's instances order +- **FakeElasticSearch.index**: Changing the method signature to correctly overrides the Elasticsearch.index method + +#### 1.1.0: +- **FakeElasticSearch**: Mocked **delete** method + +#### 1.0.1: +- **setup.py**: Fixed GitHub link + +#### 1.0.0: +- **elasticmock**: Created **@elasticmock** decorator +- **FakeElasticSearch**: Mocked **exists**, **get**, **get_source**, **index**, **info**, **search** and **ping** method + +%package -n python3-ElasticMock +Summary: Python Elasticsearch Mock for test purposes +Provides: python-ElasticMock +BuildRequires: python3-devel +BuildRequires: python3-setuptools +BuildRequires: python3-pip +%description -n python3-ElasticMock +# ElasticMock + +Python Elasticsearch Mock for test purposes + +[](https://travis-ci.org/vrcmarcos/elasticmock) [](https://coveralls.io/github/vrcmarcos/elasticmock?branch=master) [](https://badge.fury.io/py/ElasticMock) [](https://github.com/vrcmarcos/elasticmock/blob/master/LICENSE)   + + [](https://pepy.tech/project/elasticmock/month) + +## Installation + +```shell +pip install ElasticMock +``` + +## Usage + +To use ElasticMock, decorate your test method with **@elasticmock** decorator: + +```python +from unittest import TestCase + +from elasticmock import elasticmock + + +class TestClass(TestCase): + + @elasticmock + def test_should_return_something_from_elasticsearch(self): + self.assertIsNotNone(some_function_that_uses_elasticsearch()) +``` + +### Custom Behaviours + +You can also force the behaviour of the ElasticSearch instance by importing the `elasticmock.behaviour` module: + +```python +from unittest import TestCase + +from elasticmock import behaviour + + +class TestClass(TestCase): + + ... + + def test_should_return_internal_server_error_when_simulate_server_error_is_true(self): + behaviour.server_failure.enable() + ... + behaviour.server_failure.disable() +``` + +You can also disable all behaviours by calling `behaviour.disable_all()` (Consider put this in your `def tearDown(self)` method) + +#### Available Behaviours + +* `server_failure`: Will make all calls to ElasticSearch returns the following error message: + ```python + { + 'status_code': 500, + 'error': 'Internal Server Error' + } + ``` + +## Code example + +Let's say you have a prod code snippet like this one: + +```python +import elasticsearch + +class FooService: + + def __init__(self): + self.es = elasticsearch.Elasticsearch(hosts=[{'host': 'localhost', 'port': 9200}]) + + def create(self, index, body): + es_object = self.es.index(index, body) + return es_object.get('_id') + + def read(self, index, id): + es_object = self.es.get(index, id) + return es_object.get('_source') + +``` + +Than you should be able to test this class by mocking ElasticSearch using the following test class: + +```python +from unittest import TestCase +from elasticmock import elasticmock +from foo.bar import FooService + +class FooServiceTest(TestCase): + + @elasticmock + def should_create_and_read_object(self): + # Variables used to test + index = 'test-index' + expected_document = { + 'foo': 'bar' + } + + # Instantiate service + service = FooService() + + # Index document on ElasticSearch + id = service.create(index, expected_document) + self.assertIsNotNone(id) + + # Retrive dpcument from ElasticSearch + document = service.read(index, id) + self.assertEquals(expected_document, document) + +``` + +## Notes: + +- The mocked **search** method returns **all available documents** indexed on the index with the requested document type. +- The mocked **suggest** method returns the exactly suggestions dictionary passed as body serialized in Elasticsearch.suggest response. **Atention:** If the term is an *int*, the suggestion will be ```python term + 1```. If not, the suggestion will be formatted as ```python {0}_suggestion.format(term) ```. +Example: + - **Suggestion Body**: + ```python + suggestion_body = { + 'suggestion-string': { + 'text': 'test_text', + 'term': { + 'field': 'string' + } + }, + 'suggestion-id': { + 'text': 1234567, + 'term': { + 'field': 'id' + } + } + } + ``` + - **Suggestion Response**: + ```python + { + 'suggestion-string': [ + { + 'text': 'test_text', + 'length': 1, + 'options': [ + { + 'text': 'test_text_suggestion', + 'freq': 1, + 'score': 1.0 + } + ], + 'offset': 0 + } + ], + 'suggestion-id': [ + { + 'text': 1234567, + 'length': 1, + 'options': [ + { + 'text': 1234568, + 'freq': 1, + 'score': 1.0 + } + ], + 'offset': 0 + } + ], + } + ``` + +## Testing + +```bash +python setup.py test +``` + +## Changelog + +#### 1.8.1: +- [Add support for Python 3.9](https://github.com/vrcmarcos/elasticmock/pull/72) (Thanks [@singingwolfboy](https://github.com/singingwolfboy)) +- [use unittest.mock instead of mock](https://github.com/vrcmarcos/elasticmock/pull/71) (Thanks [@singingwolfboy](https://github.com/singingwolfboy)) +- [Add must_not for bool search query](https://github.com/vrcmarcos/elasticmock/pull/70) (Thanks [@t-bittarn](https://github.com/t-bittarn)) + + +#### 1.8.0: +- [Add multi_match](https://github.com/vrcmarcos/elasticmock/pull/63) (Thanks [@carlosgalvez-tiendeo](https://github.com/carlosgalvez-tiendeo)) +- [Add mget](https://github.com/vrcmarcos/elasticmock/pull/64) (Thanks [@carlosgalvez-tiendeo](https://github.com/carlosgalvez-tiendeo)) +- [Add create, update, and delete to bulk API](https://github.com/vrcmarcos/elasticmock/pull/65) (Thanks [@fenimore](https://github.com/fenimore)) +- [Add Should to bool Query](https://github.com/vrcmarcos/elasticmock/pull/67) (Thanks [@fenimore](https://github.com/fenimore)) +- [Update Search API return result](https://github.com/vrcmarcos/elasticmock/pull/68) (Thanks [@fenimore](https://github.com/fenimore)) + +#### 1.7.0: +- [Add shards skipped to search and count](https://github.com/vrcmarcos/elasticmock/pull/56) (Thanks [@philtweir](https://github.com/philtweir)) +- [Allow 'match_all' queries in FakeSearch](https://github.com/vrcmarcos/elasticmock/pull/54) (Thanks [@jankislinger](https://github.com/jankislinger)) +- [Query using nested attributes](https://github.com/vrcmarcos/elasticmock/pull/55) (Thanks [@jankislinger](https://github.com/jankislinger)) +- [New features: range, size, aggregations](https://github.com/vrcmarcos/elasticmock/pull/57) (Thanks [@jankislinger](https://github.com/jankislinger)) +- [Adding "should" and "minimum_should_match" to QueryType](https://github.com/vrcmarcos/elasticmock/pull/62) (Thanks [@lunarie16](https://github.com/lunarie16)) + +#### 1.6.2: +- [Add must to query type](https://github.com/vrcmarcos/elasticmock/pull/47) (Thanks [@cuent](https://github.com/cuent)) +- [Add match all query type](https://github.com/vrcmarcos/elasticmock/pull/48) (Thanks [@cuent](https://github.com/cuent)) + +#### 1.6.1: +- Fix Twine README.md + +#### 1.6.0: +- [Implements several basic search types](https://github.com/vrcmarcos/elasticmock/pull/42) (Thanks [@KyKoPho](https://github.com/KyKoPho)) +- [Allow ignoring of missing documents (404) for get and delete](https://github.com/vrcmarcos/elasticmock/pull/44) (Thanks [@joosterman](https://github.com/joosterman)) + +#### 1.5.1: +- [Fix tests for es > 7](https://github.com/vrcmarcos/elasticmock/pull/38) (Thanks [@chesstrian](https://github.com/chesstrian)) + +#### 1.5.0: +- [**FakeElasticSearch**: Mocked **indices** property](https://github.com/vrcmarcos/elasticmock/issues/22) + - **FakeIndicesClient**: Mocked **create**, **exists**, **refresh** and **delete** methods +- [**FakeElasticSearch**: Mocked **cluster** property](https://github.com/vrcmarcos/elasticmock/issues/8) + - **FakeClusterClient**: Mocked **health** method + +#### 1.4.0 + +- [Fix es.index regression issue](https://github.com/vrcmarcos/elasticmock/issues/34) +- [Add 'Force Server Failure' feature as requested](https://github.com/vrcmarcos/elasticmock/issues/28) +- Reformat code to be compliant with PEP8 +- Add support to Python 3.8 + +#### 1.3.7 + +- [Adding fix for updating existing doc using index](https://github.com/vrcmarcos/elasticmock/pull/32) (Thanks [@adityaghosh](https://github.com/adityaghosh)) +- [Added bulk method](https://github.com/vrcmarcos/elasticmock/pull/30) (Thanks [@charl-van-niekerk](https://github.com/charl-van-niekerk)) +- [Add default value to doc_type in index method as it is by default set to '\_doc'](https://github.com/vrcmarcos/elasticmock/pull/27) (Thanks [@mohantyashish109](https://github.com/mohantyashish109)) +- [Add support for Python 3.7](https://github.com/vrcmarcos/elasticmock/pull/25) (Thanks [@asherf](https://github.com/asherf)) + +#### 1.3.6 + +- [Fix installation issue](https://github.com/vrcmarcos/elasticmock/pull/20) (Thanks [@tdhopper](https://github.com/tdhopper)) + +#### 1.3.5 + +- [Fix 1.3.4 release](https://github.com/vrcmarcos/elasticmock/pull/19) (Thanks [@infinite-Joy](https://github.com/infinite-Joy)) + +#### 1.3.4 + +- [Added aggregations to response if requested](https://github.com/vrcmarcos/elasticmock/pull/15) (Thanks [@snakeye](https://github.com/snakeye)) +- [Implementing new methods for scrolling](https://github.com/vrcmarcos/elasticmock/pull/17) (Thanks [@tcatrain](https://github.com/tcatrain)) + +#### 1.3.3 + +- [Search: doc_type can be a list](https://github.com/vrcmarcos/elasticmock/pull/16) (Thanks [@garncarz](https://github.com/garncarz)) +- [Exclude tests package](https://github.com/vrcmarcos/elasticmock/pull/13) (Thanks [@jmlw](https://github.com/jmlw)) +- [Make the FakeElasticsearch __init__ signature match the one from Elasticsearch](https://github.com/vrcmarcos/elasticmock/pull/10) (Thanks [@xrmx](https://github.com/xrmx)) +- [Improve search and count](https://github.com/vrcmarcos/elasticmock/pull/7) (Thanks [@frivoire](https://github.com/frivoire)) + +#### 1.3.2 + +- **elasticmock**: Python 3 fixes (Thanks [@barseghyanartur](https://github.com/barseghyanartur)) +- **test**: Add information on testing (Thanks [@barseghyanartur](https://github.com/barseghyanartur)) +- **README.md**: Fixed typo (Thanks [@bowlofstew](https://github.com/bowlofstew)) + +#### 1.3.1 + +- **elasticmock**: Allow the same arguments to the mock that elasticsearch.Elasticsearch allows (Thanks [@mattbreeden](https://github.com/mattbreeden)) + +#### 1.3.0: +- **FakeElasticSearch**: Mocked **count** method (Thanks [@TheoResources](https://github.com/TheoResources)) + +#### 1.2.0: +- **FakeElasticSearch**: Mocked **suggest** method + +#### 1.1.1: +- **elasticmock**: Changing the cleanup older FakeElasticSearch's instances order +- **FakeElasticSearch.index**: Changing the method signature to correctly overrides the Elasticsearch.index method + +#### 1.1.0: +- **FakeElasticSearch**: Mocked **delete** method + +#### 1.0.1: +- **setup.py**: Fixed GitHub link + +#### 1.0.0: +- **elasticmock**: Created **@elasticmock** decorator +- **FakeElasticSearch**: Mocked **exists**, **get**, **get_source**, **index**, **info**, **search** and **ping** method + +%package help +Summary: Development documents and examples for ElasticMock +Provides: python3-ElasticMock-doc +%description help +# ElasticMock + +Python Elasticsearch Mock for test purposes + +[](https://travis-ci.org/vrcmarcos/elasticmock) [](https://coveralls.io/github/vrcmarcos/elasticmock?branch=master) [](https://badge.fury.io/py/ElasticMock) [](https://github.com/vrcmarcos/elasticmock/blob/master/LICENSE)   + + [](https://pepy.tech/project/elasticmock/month) + +## Installation + +```shell +pip install ElasticMock +``` + +## Usage + +To use ElasticMock, decorate your test method with **@elasticmock** decorator: + +```python +from unittest import TestCase + +from elasticmock import elasticmock + + +class TestClass(TestCase): + + @elasticmock + def test_should_return_something_from_elasticsearch(self): + self.assertIsNotNone(some_function_that_uses_elasticsearch()) +``` + +### Custom Behaviours + +You can also force the behaviour of the ElasticSearch instance by importing the `elasticmock.behaviour` module: + +```python +from unittest import TestCase + +from elasticmock import behaviour + + +class TestClass(TestCase): + + ... + + def test_should_return_internal_server_error_when_simulate_server_error_is_true(self): + behaviour.server_failure.enable() + ... + behaviour.server_failure.disable() +``` + +You can also disable all behaviours by calling `behaviour.disable_all()` (Consider put this in your `def tearDown(self)` method) + +#### Available Behaviours + +* `server_failure`: Will make all calls to ElasticSearch returns the following error message: + ```python + { + 'status_code': 500, + 'error': 'Internal Server Error' + } + ``` + +## Code example + +Let's say you have a prod code snippet like this one: + +```python +import elasticsearch + +class FooService: + + def __init__(self): + self.es = elasticsearch.Elasticsearch(hosts=[{'host': 'localhost', 'port': 9200}]) + + def create(self, index, body): + es_object = self.es.index(index, body) + return es_object.get('_id') + + def read(self, index, id): + es_object = self.es.get(index, id) + return es_object.get('_source') + +``` + +Than you should be able to test this class by mocking ElasticSearch using the following test class: + +```python +from unittest import TestCase +from elasticmock import elasticmock +from foo.bar import FooService + +class FooServiceTest(TestCase): + + @elasticmock + def should_create_and_read_object(self): + # Variables used to test + index = 'test-index' + expected_document = { + 'foo': 'bar' + } + + # Instantiate service + service = FooService() + + # Index document on ElasticSearch + id = service.create(index, expected_document) + self.assertIsNotNone(id) + + # Retrive dpcument from ElasticSearch + document = service.read(index, id) + self.assertEquals(expected_document, document) + +``` + +## Notes: + +- The mocked **search** method returns **all available documents** indexed on the index with the requested document type. +- The mocked **suggest** method returns the exactly suggestions dictionary passed as body serialized in Elasticsearch.suggest response. **Atention:** If the term is an *int*, the suggestion will be ```python term + 1```. If not, the suggestion will be formatted as ```python {0}_suggestion.format(term) ```. +Example: + - **Suggestion Body**: + ```python + suggestion_body = { + 'suggestion-string': { + 'text': 'test_text', + 'term': { + 'field': 'string' + } + }, + 'suggestion-id': { + 'text': 1234567, + 'term': { + 'field': 'id' + } + } + } + ``` + - **Suggestion Response**: + ```python + { + 'suggestion-string': [ + { + 'text': 'test_text', + 'length': 1, + 'options': [ + { + 'text': 'test_text_suggestion', + 'freq': 1, + 'score': 1.0 + } + ], + 'offset': 0 + } + ], + 'suggestion-id': [ + { + 'text': 1234567, + 'length': 1, + 'options': [ + { + 'text': 1234568, + 'freq': 1, + 'score': 1.0 + } + ], + 'offset': 0 + } + ], + } + ``` + +## Testing + +```bash +python setup.py test +``` + +## Changelog + +#### 1.8.1: +- [Add support for Python 3.9](https://github.com/vrcmarcos/elasticmock/pull/72) (Thanks [@singingwolfboy](https://github.com/singingwolfboy)) +- [use unittest.mock instead of mock](https://github.com/vrcmarcos/elasticmock/pull/71) (Thanks [@singingwolfboy](https://github.com/singingwolfboy)) +- [Add must_not for bool search query](https://github.com/vrcmarcos/elasticmock/pull/70) (Thanks [@t-bittarn](https://github.com/t-bittarn)) + + +#### 1.8.0: +- [Add multi_match](https://github.com/vrcmarcos/elasticmock/pull/63) (Thanks [@carlosgalvez-tiendeo](https://github.com/carlosgalvez-tiendeo)) +- [Add mget](https://github.com/vrcmarcos/elasticmock/pull/64) (Thanks [@carlosgalvez-tiendeo](https://github.com/carlosgalvez-tiendeo)) +- [Add create, update, and delete to bulk API](https://github.com/vrcmarcos/elasticmock/pull/65) (Thanks [@fenimore](https://github.com/fenimore)) +- [Add Should to bool Query](https://github.com/vrcmarcos/elasticmock/pull/67) (Thanks [@fenimore](https://github.com/fenimore)) +- [Update Search API return result](https://github.com/vrcmarcos/elasticmock/pull/68) (Thanks [@fenimore](https://github.com/fenimore)) + +#### 1.7.0: +- [Add shards skipped to search and count](https://github.com/vrcmarcos/elasticmock/pull/56) (Thanks [@philtweir](https://github.com/philtweir)) +- [Allow 'match_all' queries in FakeSearch](https://github.com/vrcmarcos/elasticmock/pull/54) (Thanks [@jankislinger](https://github.com/jankislinger)) +- [Query using nested attributes](https://github.com/vrcmarcos/elasticmock/pull/55) (Thanks [@jankislinger](https://github.com/jankislinger)) +- [New features: range, size, aggregations](https://github.com/vrcmarcos/elasticmock/pull/57) (Thanks [@jankislinger](https://github.com/jankislinger)) +- [Adding "should" and "minimum_should_match" to QueryType](https://github.com/vrcmarcos/elasticmock/pull/62) (Thanks [@lunarie16](https://github.com/lunarie16)) + +#### 1.6.2: +- [Add must to query type](https://github.com/vrcmarcos/elasticmock/pull/47) (Thanks [@cuent](https://github.com/cuent)) +- [Add match all query type](https://github.com/vrcmarcos/elasticmock/pull/48) (Thanks [@cuent](https://github.com/cuent)) + +#### 1.6.1: +- Fix Twine README.md + +#### 1.6.0: +- [Implements several basic search types](https://github.com/vrcmarcos/elasticmock/pull/42) (Thanks [@KyKoPho](https://github.com/KyKoPho)) +- [Allow ignoring of missing documents (404) for get and delete](https://github.com/vrcmarcos/elasticmock/pull/44) (Thanks [@joosterman](https://github.com/joosterman)) + +#### 1.5.1: +- [Fix tests for es > 7](https://github.com/vrcmarcos/elasticmock/pull/38) (Thanks [@chesstrian](https://github.com/chesstrian)) + +#### 1.5.0: +- [**FakeElasticSearch**: Mocked **indices** property](https://github.com/vrcmarcos/elasticmock/issues/22) + - **FakeIndicesClient**: Mocked **create**, **exists**, **refresh** and **delete** methods +- [**FakeElasticSearch**: Mocked **cluster** property](https://github.com/vrcmarcos/elasticmock/issues/8) + - **FakeClusterClient**: Mocked **health** method + +#### 1.4.0 + +- [Fix es.index regression issue](https://github.com/vrcmarcos/elasticmock/issues/34) +- [Add 'Force Server Failure' feature as requested](https://github.com/vrcmarcos/elasticmock/issues/28) +- Reformat code to be compliant with PEP8 +- Add support to Python 3.8 + +#### 1.3.7 + +- [Adding fix for updating existing doc using index](https://github.com/vrcmarcos/elasticmock/pull/32) (Thanks [@adityaghosh](https://github.com/adityaghosh)) +- [Added bulk method](https://github.com/vrcmarcos/elasticmock/pull/30) (Thanks [@charl-van-niekerk](https://github.com/charl-van-niekerk)) +- [Add default value to doc_type in index method as it is by default set to '\_doc'](https://github.com/vrcmarcos/elasticmock/pull/27) (Thanks [@mohantyashish109](https://github.com/mohantyashish109)) +- [Add support for Python 3.7](https://github.com/vrcmarcos/elasticmock/pull/25) (Thanks [@asherf](https://github.com/asherf)) + +#### 1.3.6 + +- [Fix installation issue](https://github.com/vrcmarcos/elasticmock/pull/20) (Thanks [@tdhopper](https://github.com/tdhopper)) + +#### 1.3.5 + +- [Fix 1.3.4 release](https://github.com/vrcmarcos/elasticmock/pull/19) (Thanks [@infinite-Joy](https://github.com/infinite-Joy)) + +#### 1.3.4 + +- [Added aggregations to response if requested](https://github.com/vrcmarcos/elasticmock/pull/15) (Thanks [@snakeye](https://github.com/snakeye)) +- [Implementing new methods for scrolling](https://github.com/vrcmarcos/elasticmock/pull/17) (Thanks [@tcatrain](https://github.com/tcatrain)) + +#### 1.3.3 + +- [Search: doc_type can be a list](https://github.com/vrcmarcos/elasticmock/pull/16) (Thanks [@garncarz](https://github.com/garncarz)) +- [Exclude tests package](https://github.com/vrcmarcos/elasticmock/pull/13) (Thanks [@jmlw](https://github.com/jmlw)) +- [Make the FakeElasticsearch __init__ signature match the one from Elasticsearch](https://github.com/vrcmarcos/elasticmock/pull/10) (Thanks [@xrmx](https://github.com/xrmx)) +- [Improve search and count](https://github.com/vrcmarcos/elasticmock/pull/7) (Thanks [@frivoire](https://github.com/frivoire)) + +#### 1.3.2 + +- **elasticmock**: Python 3 fixes (Thanks [@barseghyanartur](https://github.com/barseghyanartur)) +- **test**: Add information on testing (Thanks [@barseghyanartur](https://github.com/barseghyanartur)) +- **README.md**: Fixed typo (Thanks [@bowlofstew](https://github.com/bowlofstew)) + +#### 1.3.1 + +- **elasticmock**: Allow the same arguments to the mock that elasticsearch.Elasticsearch allows (Thanks [@mattbreeden](https://github.com/mattbreeden)) + +#### 1.3.0: +- **FakeElasticSearch**: Mocked **count** method (Thanks [@TheoResources](https://github.com/TheoResources)) + +#### 1.2.0: +- **FakeElasticSearch**: Mocked **suggest** method + +#### 1.1.1: +- **elasticmock**: Changing the cleanup older FakeElasticSearch's instances order +- **FakeElasticSearch.index**: Changing the method signature to correctly overrides the Elasticsearch.index method + +#### 1.1.0: +- **FakeElasticSearch**: Mocked **delete** method + +#### 1.0.1: +- **setup.py**: Fixed GitHub link + +#### 1.0.0: +- **elasticmock**: Created **@elasticmock** decorator +- **FakeElasticSearch**: Mocked **exists**, **get**, **get_source**, **index**, **info**, **search** and **ping** method + +%prep +%autosetup -n ElasticMock-1.8.1 + +%build +%py3_build + +%install +%py3_install +install -d -m755 %{buildroot}/%{_pkgdocdir} +if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi +if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi +if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi +if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi +pushd %{buildroot} +if [ -d usr/lib ]; then + find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/lib64 ]; then + find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/bin ]; then + find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst +fi +if [ -d usr/sbin ]; then + find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst +fi +touch doclist.lst +if [ -d usr/share/man ]; then + find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst +fi +popd +mv %{buildroot}/filelist.lst . +mv %{buildroot}/doclist.lst . + +%files -n python3-ElasticMock -f filelist.lst +%dir %{python3_sitelib}/* + +%files help -f doclist.lst +%{_docdir}/* + +%changelog +* Tue Apr 11 2023 Python_Bot <Python_Bot@openeuler.org> - 1.8.1-1 +- Package Spec generated @@ -0,0 +1 @@ +25006bf6fa46d98353c3849a3080bd23 ElasticMock-1.8.1.tar.gz |
