# Mongomock with persistence
This is a package based on the [mongomock](https://github.com/mongomock/mongomock)
package to test any code using MongoDB via the [PyMongo API](https://pymongo.readthedocs.io).
With [mongomock](https://github.com/mongomock/mongomock) the documents are stored in memory and not available after the process performing the tests exits. In some test cases it is necessary to have a non-volatile (persistent) storage of the database. For example, tests of command line interfaces (CLI) add things into the database and assume they are then available across several processes.
## How it works
This package adds an option to store the database in a file. This is accomplished by small extensions of the classes in `store.py`. These extensions are not intended to keep the database synchronized instantly on disk. Rather the database is eventually dumped to a file only just before the `ServerStore` object is destroyed. After that the file can be used to create other `ServerStore` objects in the final state of the original `ServerStore` object.
## When to use
1. In test cases where a database must be used by several consecutive processes and the database state has to be preserved in the meantimes.
2. In tutorials to learn the basics of using PyMongo-based software.
3. In further single-client applications of MongoDB.
In all use cases one has to make sure that all PyMongo features used are covered by mongomock. See [this](https://github.com/mongomock/mongomock/blob/develop/Missing_Features.rst) for further details.
## How to install
The package can be easily installed using pip:
```
pip install mongomock-persistence
```
## How to use
To use the package the `MongoClient` class from this package must be imported instead of that from [mongomock](https://github.com/mongomock/mongomock). Then the persistence can be activated in two ways:
1. Set the environment variable `MONGOMOCK_SERVERSTORE_FILE` to the name of a non-empty JSON file (initialized with '{}') and call `MongoClient` class as usual:
```
export MONGOMOCK_SERVERSTORE_FILE=/full/path/to/mongomock_file.json
```
```python
from mongomock_persistence import MongoClient
mongo_client = MongoClient()
```
2. Create a custom `ServerStore` object explicitly by using the `filename` keyword argument and then pass it to `MongoClient` call:
```python
from mongomock_persistence import MongoClient
mongo_store = ServerStore(filename='/full/path/to/mongomock_file.json')
mongo_client = MongoClient(_store=mongo_store)
```
## How to test
Install the `test` extra and then run `pytest`, i.e.
```
pip install mongomock-persistence[test]
pytest <root folder of repository>
```
Raw data
{
"_id": null,
"home_page": null,
"name": "mongomock-persistence",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": null,
"keywords": "database testing",
"author": "Ivan Kondov",
"author_email": "ivan.kondov@kit.edu",
"download_url": "https://files.pythonhosted.org/packages/52/4f/ac584304f0ece9ab797f8d37ff9853ab177a1e4b5f2f06b1fca1c9104631/mongomock_persistence-0.0.5.tar.gz",
"platform": null,
"description": "# Mongomock with persistence\n\nThis is a package based on the [mongomock](https://github.com/mongomock/mongomock)\npackage to test any code using MongoDB via the [PyMongo API](https://pymongo.readthedocs.io).\n\nWith [mongomock](https://github.com/mongomock/mongomock) the documents are stored in memory and not available after the process performing the tests exits. In some test cases it is necessary to have a non-volatile (persistent) storage of the database. For example, tests of command line interfaces (CLI) add things into the database and assume they are then available across several processes.\n\n## How it works\n\nThis package adds an option to store the database in a file. This is accomplished by small extensions of the classes in `store.py`. These extensions are not intended to keep the database synchronized instantly on disk. Rather the database is eventually dumped to a file only just before the `ServerStore` object is destroyed. After that the file can be used to create other `ServerStore` objects in the final state of the original `ServerStore` object.\n\n## When to use\n\n1. In test cases where a database must be used by several consecutive processes and the database state has to be preserved in the meantimes.\n\n2. In tutorials to learn the basics of using PyMongo-based software.\n\n3. In further single-client applications of MongoDB.\n\nIn all use cases one has to make sure that all PyMongo features used are covered by mongomock. See [this](https://github.com/mongomock/mongomock/blob/develop/Missing_Features.rst) for further details.\n\n## How to install\n\nThe package can be easily installed using pip:\n\n```\npip install mongomock-persistence\n```\n\n## How to use\n\nTo use the package the `MongoClient` class from this package must be imported instead of that from [mongomock](https://github.com/mongomock/mongomock). Then the persistence can be activated in two ways:\n\n1. Set the environment variable `MONGOMOCK_SERVERSTORE_FILE` to the name of a non-empty JSON file (initialized with '{}') and call `MongoClient` class as usual:\n\n```\nexport MONGOMOCK_SERVERSTORE_FILE=/full/path/to/mongomock_file.json\n```\n\n```python\nfrom mongomock_persistence import MongoClient\nmongo_client = MongoClient()\n```\n\n2. Create a custom `ServerStore` object explicitly by using the `filename` keyword argument and then pass it to `MongoClient` call:\n\n```python\nfrom mongomock_persistence import MongoClient\nmongo_store = ServerStore(filename='/full/path/to/mongomock_file.json')\nmongo_client = MongoClient(_store=mongo_store)\n```\n\n## How to test\n\nInstall the `test` extra and then run `pytest`, i.e.\n\n```\npip install mongomock-persistence[test]\npytest <root folder of repository>\n```\n",
"bugtrack_url": null,
"license": "BSD-3-Clause",
"summary": "Mongomock with persistence",
"version": "0.0.5",
"project_urls": null,
"split_keywords": [
"database",
"testing"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "7d69281e5c43826f1bbdd094cd8ccd82b087589db478543afd71d0d8002d355f",
"md5": "f6cf6215841096d52b3ab9125cded317",
"sha256": "ead0198eb29ea159ca359596115ad82dd025303872e2e38c807cb8bd2dad63b3"
},
"downloads": -1,
"filename": "mongomock_persistence-0.0.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "f6cf6215841096d52b3ab9125cded317",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.6",
"size": 5397,
"upload_time": "2024-11-28T13:04:20",
"upload_time_iso_8601": "2024-11-28T13:04:20.505817Z",
"url": "https://files.pythonhosted.org/packages/7d/69/281e5c43826f1bbdd094cd8ccd82b087589db478543afd71d0d8002d355f/mongomock_persistence-0.0.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "524fac584304f0ece9ab797f8d37ff9853ab177a1e4b5f2f06b1fca1c9104631",
"md5": "46e028005339c4ce2777ea6ec484df15",
"sha256": "e61a25a85c9a84858b4cda16b95170bcb4a713cead6afe7267732851d4e6c621"
},
"downloads": -1,
"filename": "mongomock_persistence-0.0.5.tar.gz",
"has_sig": false,
"md5_digest": "46e028005339c4ce2777ea6ec484df15",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 5420,
"upload_time": "2024-11-28T13:04:21",
"upload_time_iso_8601": "2024-11-28T13:04:21.432609Z",
"url": "https://files.pythonhosted.org/packages/52/4f/ac584304f0ece9ab797f8d37ff9853ab177a1e4b5f2f06b1fca1c9104631/mongomock_persistence-0.0.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-28 13:04:21",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "mongomock-persistence"
}