Name | openmock JSON |
Version |
3.0.2
JSON |
| download |
home_page | None |
Summary | Python OpenSearch Mock for test purposes |
upload_time | 2025-01-21 14:54:42 |
maintainer | None |
docs_url | None |
author | Marcos Cardoso |
requires_python | <4,>=3.9 |
license | MIT |
keywords |
opensearch
mocking
testing
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# Openmock
Mock/fake of opensearch library, allows you to mock opensearch-py
Fork of Python Elasticsearch(TM) Mock. Sometimes the developers who work with elasticsearch (TM),
don't really have any input in choice of host and need to get work done.
 [](https://pepy.tech/project/openmock/month)
## Installation
```shell
pip install openmock
```
## Usage
To use Openmock, decorate your test method with **@openmock** decorator:
```python
from unittest import TestCase
from openmock import openmock
class TestClass(TestCase):
@openmock
def test_should_return_something_from_opensearch(self):
self.assertIsNotNone(some_function_that_uses_opensearch())
```
### Custom Behaviours
You can also force the behaviour of the OpenSearch instance by importing the `openmock.behaviour` module:
```python
from unittest import TestCase
from openmock 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 OpenSearch 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 opensearchpy
class FooService:
def __init__(self):
self.es = opensearchpy.OpenSearch(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')
```
Then you should be able to test this class by mocking OpenSearch using the following test class:
```python
from unittest import TestCase
from openmock import openmock
from foo.bar import FooService
class FooServiceTest(TestCase):
@openmock
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 OpenSearch
id = service.create(index, expected_document)
self.assertIsNotNone(id)
# Retrieve document from OpenSearch
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 OpenSearch.suggest response. **Attention:** 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
Preferred for testing one version of python.
```bash
pytest test
```
Won't catch pytest tests.
```bash
python -m unittest
```
We are trying to support a full matrix of openmock versions and python versions 3.9+. This is slow.
```bash
tox
```
## Changelog
See [CHANGELOG.md](https://github.com/matthewdeanmartin/openmock/blob/main/CHANGELOG.md)
## License
MIT with `normalize_host.py` being Apache 2 from Elasticsearch.
Raw data
{
"_id": null,
"home_page": null,
"name": "openmock",
"maintainer": null,
"docs_url": null,
"requires_python": "<4,>=3.9",
"maintainer_email": null,
"keywords": "opensearch, mocking, testing",
"author": "Marcos Cardoso",
"author_email": null,
"download_url": "https://files.pythonhosted.org/packages/d4/ed/4e941074ae1d5850917b74204a2ed0f3b71f6f797f980132a5775c36f145/openmock-3.0.2.tar.gz",
"platform": null,
"description": "# Openmock\n\nMock/fake of opensearch library, allows you to mock opensearch-py\n\nFork of Python Elasticsearch(TM) Mock. Sometimes the developers who work with elasticsearch (TM),\ndon't really have any input in choice of host and need to get work done.\n\n [](https://pepy.tech/project/openmock/month)\n\n## Installation\n\n```shell\npip install openmock\n```\n\n## Usage\n\nTo use Openmock, decorate your test method with **@openmock** decorator:\n\n```python\nfrom unittest import TestCase\n\nfrom openmock import openmock\n\n\nclass TestClass(TestCase):\n\n @openmock\n def test_should_return_something_from_opensearch(self):\n self.assertIsNotNone(some_function_that_uses_opensearch())\n```\n\n### Custom Behaviours\n\nYou can also force the behaviour of the OpenSearch instance by importing the `openmock.behaviour` module:\n\n```python\nfrom unittest import TestCase\n\nfrom openmock import behaviour\n\n\nclass TestClass(TestCase):\n\n ...\n\n def test_should_return_internal_server_error_when_simulate_server_error_is_true(self):\n behaviour.server_failure.enable()\n ...\n behaviour.server_failure.disable()\n```\n\nYou can also disable all behaviours by calling `behaviour.disable_all()` (Consider put this in your `def tearDown(self)` method)\n\n#### Available Behaviours\n\n- `server_failure`: Will make all calls to OpenSearch returns the following error message:\n ```python\n {\n 'status_code': 500,\n 'error': 'Internal Server Error'\n }\n ```\n\n## Code example\n\nLet's say you have a prod code snippet like this one:\n\n```python\nimport opensearchpy\n\nclass FooService:\n\n def __init__(self):\n self.es = opensearchpy.OpenSearch(hosts=[{'host': 'localhost', 'port': 9200}])\n\n def create(self, index, body):\n es_object = self.es.index(index, body)\n return es_object.get('_id')\n\n def read(self, index, id):\n es_object = self.es.get(index, id)\n return es_object.get('_source')\n\n```\n\nThen you should be able to test this class by mocking OpenSearch using the following test class:\n\n```python\nfrom unittest import TestCase\nfrom openmock import openmock\nfrom foo.bar import FooService\n\nclass FooServiceTest(TestCase):\n\n @openmock\n def should_create_and_read_object(self):\n # Variables used to test\n index = 'test-index'\n expected_document = {\n 'foo': 'bar'\n }\n\n # Instantiate service\n service = FooService()\n\n # Index document on OpenSearch\n id = service.create(index, expected_document)\n self.assertIsNotNone(id)\n\n # Retrieve document from OpenSearch\n document = service.read(index, id)\n self.assertEquals(expected_document, document)\n\n```\n\n## Notes:\n\n- The mocked **search** method returns **all available documents** indexed on the index with the requested document type.\n- The mocked **suggest** method returns the exactly suggestions dictionary passed as body serialized in OpenSearch.suggest response. **Attention:** 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) `.\n Example:\n - **Suggestion Body**:\n ```python\n suggestion_body = {\n 'suggestion-string': {\n 'text': 'test_text',\n 'term': {\n 'field': 'string'\n }\n },\n 'suggestion-id': {\n 'text': 1234567,\n 'term': {\n 'field': 'id'\n }\n }\n }\n ```\n - **Suggestion Response**:\n ```python\n {\n 'suggestion-string': [\n {\n 'text': 'test_text',\n 'length': 1,\n 'options': [\n {\n 'text': 'test_text_suggestion',\n 'freq': 1,\n 'score': 1.0\n }\n ],\n 'offset': 0\n }\n ],\n 'suggestion-id': [\n {\n 'text': 1234567,\n 'length': 1,\n 'options': [\n {\n 'text': 1234568,\n 'freq': 1,\n 'score': 1.0\n }\n ],\n 'offset': 0\n }\n ],\n }\n ```\n\n## Testing\n\nPreferred for testing one version of python.\n\n```bash\npytest test\n```\n\nWon't catch pytest tests.\n\n```bash\npython -m unittest\n```\n\nWe are trying to support a full matrix of openmock versions and python versions 3.9+. This is slow.\n\n```bash\ntox\n```\n\n## Changelog\n\nSee [CHANGELOG.md](https://github.com/matthewdeanmartin/openmock/blob/main/CHANGELOG.md)\n\n## License\n\nMIT with `normalize_host.py` being Apache 2 from Elasticsearch.\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Python OpenSearch Mock for test purposes",
"version": "3.0.2",
"project_urls": {
"Bug Tracker": "https://github.com/matthewdeanmartin/openmock/issues",
"Change Log": "https://github.com/matthewdeanmartin/openmock/blob/main/CHANGELOG.md",
"Documentation": "https://github.com/matthewdeanmartin/openmock",
"Homepage": "https://github.com/matthewdeanmartin/openmock",
"Repository": "https://github.com/matthewdeanmartin/openmock"
},
"split_keywords": [
"opensearch",
" mocking",
" testing"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "a2b20e40369bc5a0f47cd1700c895b956db77e05096fec0e2e9afeb4a00a1b88",
"md5": "46e7368b403312ce17eb10b53b161321",
"sha256": "f54bd47ab0d543f1fc67924dc14b13b9245ade51abd33cfce2f08c78fc4926c4"
},
"downloads": -1,
"filename": "openmock-3.0.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "46e7368b403312ce17eb10b53b161321",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4,>=3.9",
"size": 23019,
"upload_time": "2025-01-21T14:54:41",
"upload_time_iso_8601": "2025-01-21T14:54:41.522687Z",
"url": "https://files.pythonhosted.org/packages/a2/b2/0e40369bc5a0f47cd1700c895b956db77e05096fec0e2e9afeb4a00a1b88/openmock-3.0.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "d4ed4e941074ae1d5850917b74204a2ed0f3b71f6f797f980132a5775c36f145",
"md5": "9511e3892480533ce5928340002541c6",
"sha256": "935ee81b8b0d1eac07bdab9e627788b1f3bb4c359b41be13762aaf11db1ff1e2"
},
"downloads": -1,
"filename": "openmock-3.0.2.tar.gz",
"has_sig": false,
"md5_digest": "9511e3892480533ce5928340002541c6",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4,>=3.9",
"size": 21331,
"upload_time": "2025-01-21T14:54:42",
"upload_time_iso_8601": "2025-01-21T14:54:42.578714Z",
"url": "https://files.pythonhosted.org/packages/d4/ed/4e941074ae1d5850917b74204a2ed0f3b71f6f797f980132a5775c36f145/openmock-3.0.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-01-21 14:54:42",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "matthewdeanmartin",
"github_project": "openmock",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"tox": true,
"lcname": "openmock"
}