{"id":13990508,"url":"https://github.com/mongomock/mongomock","last_synced_at":"2026-04-02T01:28:23.955Z","repository":{"id":2727147,"uuid":"3722168","full_name":"mongomock/mongomock","owner":"mongomock","description":"Small library for mocking pymongo collection objects for testing purposes","archived":false,"fork":false,"pushed_at":"2025-06-30T22:08:28.000Z","size":2979,"stargazers_count":999,"open_issues_count":181,"forks_count":354,"subscribers_count":18,"default_branch":"develop","last_synced_at":"2026-03-29T20:46:48.049Z","etag":null,"topics":["mocking","mongodb","python","testing"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"isc","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mongomock.png","metadata":{"files":{"readme":"README.rst","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2012-03-14T20:50:21.000Z","updated_at":"2026-03-05T18:20:28.000Z","dependencies_parsed_at":"2023-07-06T07:27:35.163Z","dependency_job_id":"556fe45c-c5dc-4473-a9ee-743fedeec7d2","html_url":"https://github.com/mongomock/mongomock","commit_stats":{"total_commits":959,"total_committers":179,"mean_commits":5.35754189944134,"dds":0.7382690302398331,"last_synced_commit":"6e73aae0c222b49cff80a9cd6e2142b0af5e4e50"},"previous_names":[],"tags_count":47,"template":false,"template_full_name":null,"purl":"pkg:github/mongomock/mongomock","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mongomock%2Fmongomock","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mongomock%2Fmongomock/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mongomock%2Fmongomock/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mongomock%2Fmongomock/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mongomock","download_url":"https://codeload.github.com/mongomock/mongomock/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mongomock%2Fmongomock/sbom","scorecard":{"id":658501,"data":{"date":"2025-08-11","repo":{"name":"github.com/mongomock/mongomock","commit":"edd20d32254179c5373b81143a0bc2e7e7fe24a6"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.3,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":2,"reason":"Found 2/7 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":7,"reason":"6 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/lint-and-test.yml:1","Warn: no topLevel permission defined: .github/workflows/publish.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: ISC License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:55: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:60: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:69: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:81: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:83: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:86: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:97: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:105: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:106: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:15: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:26: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/lint-and-test.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/lint-and-test.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:12: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/publish.yml/develop?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/publish.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/mongomock/mongomock/publish.yml/develop?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating ubuntu:noble to ubuntu:noble@sha256:7c06e91f61fa88c08cc74f7e1b7c69ae24910d745357e0dfe1d2c0322aaf20f9","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:19","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:20","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:21","Warn: pipCommand not pinned by hash: .github/workflows/publish.yml:22","Info:   0 out of  13 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   7 third-party GitHubAction dependencies pinned","Info:   0 out of   4 pipCommand dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'develop'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 28 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T15:22:36.674Z","repository_id":2727147,"created_at":"2025-08-21T15:22:36.674Z","updated_at":"2025-08-21T15:22:36.674Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31293887,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-02T01:05:07.454Z","status":"ssl_error","status_checked_at":"2026-04-02T00:56:46.496Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mocking","mongodb","python","testing"],"created_at":"2024-08-09T13:02:50.780Z","updated_at":"2026-04-02T01:28:23.896Z","avatar_url":"https://github.com/mongomock.png","language":"Python","readme":".. image:: https://img.shields.io/pypi/v/mongomock.svg?style=flat-square\n    :target: https://pypi.python.org/pypi/mongomock\n.. image:: https://img.shields.io/github/actions/workflow/status/mongomock/mongomock/lint-and-test.yml?branch=develop\u0026style=flat-square\n    :target: https://github.com/mongomock/mongomock/actions?query=workflow%3Alint-and-test\n.. image:: https://img.shields.io/pypi/l/mongomock.svg?style=flat-square\n    :target: https://pypi.python.org/pypi/mongomock\n.. image:: https://img.shields.io/codecov/c/github/mongomock/mongomock.svg?style=flat-square\n    :target: https://codecov.io/gh/mongomock/mongomock\n\n\nSeeking maintainers\n-------------------\n\nThis project is seeking maintainers, see `here \u003chttps://github.com/mongomock/mongomock/issues/914\u003e`_\nfor more information.\n\n\nWhat is this?\n-------------\nMongomock is a small library to help testing Python code that interacts with MongoDB via Pymongo.\n\nTo understand what it's useful for, we can take the following code:\n\n.. code-block:: python\n\n def increase_votes(collection):\n     for document in collection.find():\n         collection.update_one(document, {'$set': {'votes': document['votes'] + 1}})\n\nThe above code can be tested in several ways:\n\n1. It can be tested against a real mongodb instance with pymongo.\n2. It can receive a record-replay style mock as an argument. In this manner we record the\n   expected calls (find, and then a series of updates), and replay them later.\n3. It can receive a carefully hand-crafted mock responding to find() and update() appropriately.\n\nOption number 1 is obviously the best approach here, since we are testing against a real mongodb\ninstance. However, a mongodb instance needs to be set up for this, and cleaned before/after the\ntest. You might want to run your tests in continuous integration servers, on your laptop, or\nother bizarre platforms - which makes the mongodb requirement a liability.\n\nWe are left with #2 and #3. Unfortunately they are very high maintenance in real scenarios,\nsince they replicate the series of calls made in the code, violating the DRY rule. Let's see\n#2 in action - we might write our test like so:\n\n.. code-block:: python\n\n def test_increase_votes():\n     objects = [dict(...), dict(...), ...]\n     collection_mock = my_favorite_mock_library.create_mock(Collection)\n     record()\n     collection_mock.find().AndReturn(objects)\n     for obj in objects:\n         collection_mock.update_one(obj, {'$set': {'votes': obj['votes']}})\n     replay()\n     increase_votes(collection_mock)\n     verify()\n\nLet's assume the code changes one day, because the author just learned about the '$inc' instruction:\n\n.. code-block:: python\n\n def increase_votes(collection):\n     collection.update_many({}, {'$inc': {'votes': 1}})\n\nThis breaks the test, although the end result being tested is just the same. The test also repeats\nlarge portions of the code we already wrote.\n\nWe are left, therefore, with option #3 -- you want something to behave like a mongodb database\ncollection, without being one. This is exactly what this library aims to provide. With mongomock,\nthe test simply becomes:\n\n.. code-block:: python\n\n def test_increase_votes():\n     collection = mongomock.MongoClient().db.collection\n     objects = [dict(votes=1), dict(votes=2), ...]\n     for obj in objects:\n         obj['_id'] = collection.insert_one(obj).inserted_id\n     increase_votes(collection)\n     for obj in objects:\n         stored_obj = collection.find_one({'_id': obj['_id']})\n         stored_obj['votes'] -= 1\n         assert stored_obj == obj # by comparing all fields we make sure only votes changed\n\nThis code checks *increase_votes* with respect to its functionality, not syntax or algorithm, and\ntherefore is much more robust as a test.\n\nIf the code to be tested is creating the connection itself with pymongo, you can use\nmongomock.patch (NOTE: you should use :code:`pymongo.MongoClient(...)` rather than\n:code:`from pymongo import MongoClient`, as shown below):\n\n.. code-block:: python\n\n  @mongomock.patch(servers=(('server.example.com', 27017),))\n  def test_increate_votes_endpoint():\n    objects = [dict(votes=1), dict(votes=2), ...]\n    client = pymongo.MongoClient('server.example.com')\n    client.db.collection.insert_many(objects)\n    call_endpoint('/votes')\n    ... verify client.db.collection\n\n\nImportant Note About Project Status \u0026 Development\n-------------------------------------------------\n\nMongoDB is complex. This library aims at a reasonably complete mock of MongoDB for testing purposes,\nnot a perfect replica. This means some features are not likely to make it in any time soon.\n\nAlso, since many corner cases are encountered along the way, our goal is to try and TDD our way into\ncompleteness. This means that every time we encounter a missing or broken (incompatible) feature,\nwe write a test for it and fix it. There are probably lots of such issues hiding around lurking,\nso feel free to open issues and/or pull requests and help the project out!\n\n**NOTE**: We don't include pymongo functionality as \"stubs\" or \"placeholders\". Since this library is\nused to validate production code, it is unacceptable to behave differently than the real pymongo\nimplementation. In such cases it is better to throw ``NotImplementedError`` than implement a modified\nversion of the original behavior.\n\nUpgrading to Pymongo v4\n-----------------------\n\nThe major version 4 of Pymongo changed the API quite a bit. The Mongomock library has evolved to\nhelp you ease the migration:\n\n1. Upgrade to Mongomock v4 or above: if your tests are running with Pymongo installed, Mongomock\n   will adapt its own API to the version of Pymongo installed.\n2. Upgrade to Pymongo v4 or above: your tests using Mongomock will fail exactly where your code\n   would fail in production, so that you can fix it before releasing.\n\nContributing\n------------\n\nWhen submitting a PR, please make sure that:\n\n1. You include tests for the feature you are adding or bug you are fixing. Preferably, the test\n   should compare against the real MongoDB engine (see `examples in tests`_ for reference).\n2. No existing test got deleted or unintentionally castrated\n3. The code is auto-formatted (``hatch fmt``).\n4. The build passes on your PR.\n\nTo download, setup and perfom tests, run the following commands on Mac / Linux:\n\n.. code-block:: console\n\n $ git clone git@github.com:mongomock/mongomock.git\n $ pipx install hatch\n $ cd mongomock\n $ hatch test\n\nAlternatively, ``docker-compose`` can be used to simplify dependency management for local \ndevelopment:\n\n.. code-block:: console\n\n $ git clone git@github.com:mongomock/mongomock.git\n $ cd mongomock\n $ docker compose build\n $ docker compose run --rm mongomock\n\nIf you want to run ``hatch`` against a specific environment in the container:\n\n.. code-block:: console\n\n $ docker compose run --rm mongomock hatch test -py=3.11 -i pymongo=4\n\nIf you'd like to run only one test, you can also add the test name at the end of your command:\n\n.. code-block:: console\n\n $ docker compose run --rm mongomock hatch test -py=3.12 -i pymongo=4 tests/test__mongomock.py::MongoClientCollectionTest::test__insert\n\nNOTE: If the MongoDB image was updated, or you want to try a different MongoDB version in\n``docker-compose``, you'll have to issue a ``docker compose down`` before you do anything else to\nensure you're running against the intended version.\n\nCode formatting\n~~~~~~~~~~~~~~~\n\nAll code is automatically formatted with `ruff \u003chttps://docs.astral.sh/ruff/formatter/\u003e`_ and\npull-requests are only accepted if the linter passes without complaints. For an open source project\nthis is the only feasible way to maintain a consistent code base, without having to fight endless\ncode style wars. To invoke the formatter and discover issues run\n\n.. code-block:: console\n\n  $ hatch fmt\n\nutcnow\n~~~~~~\n\nWhen developing features that need to make use of \"now,\" please use the libraries :code:`utcnow`\nhelper method in the following way:\n\n.. code-block:: python\n\n   import mongomock\n   # Awesome code!\n   now_reference = mongomock.utcnow()\n\nThis provides users a consistent way to mock the notion of \"now\" in mongomock if they so choose.\nPlease see `utcnow docstring for more details \u003cmongomock/helpers.py#L52\u003e`_.\n\nBranching model\n~~~~~~~~~~~~~~~\n\nThe branching model used for this project follows the `gitflow workflow`_.  This means that pull\nrequests should be issued against the `develop` branch and *not* the `master` branch. If you want\nto contribute to the legacy 2.x branch then your pull request should go into the `support/2.x`\nbranch.\n\nReleasing\n~~~~~~~~~\n\nWhen ready for a release, tag the `develop` branch with a new tag (please keep semver names) and\npush your tags to GitHub. The CI should do the rest.\n\nTo add release notes, create a release in GitHub's `Releases Page \u003chttps://github.com/mongomock/mongomock/releases\u003e`_\nthen generate the release notes locally with:\n\n.. code-block:: bash\n\n  python -c \"from pbr import git; git.write_git_changelog()\"\n\nThen you can get the relevant section in the generated `Changelog` file.\n\nAcknowledgements\n----------------\n\nMongomock has originally been developed by `Rotem Yaari \u003chttps://github.com/vmalloc/\u003e`_, then by\n`Martin Domke \u003chttps://github.com/mdomke\u003e`_. It is currently being developed and maintained by\n`Pascal Corpet \u003chttps://github.com/pcorpet\u003e`_ .\n\nAlso, many thanks go to the following people for helping out, contributing pull requests and fixing\nbugs:\n\n* Alec Perkins\n* Alexandre Viau\n* Austin W Ellis\n* Andrey Ovchinnikov\n* Arthur Hirata\n* Baruch Oxman\n* Corey Downing\n* Craig Hobbs\n* Daniel Murray\n* David Fischer\n* Diego Garcia\n* Dmitriy Kostochko\n* Drew Winstel\n* Eddie Linder\n* Edward D'Souza\n* Emily Rosengren\n* Eugene Chernyshov\n* Grigoriy Osadchenko\n* Israel Teixeira\n* Jacob Perkins\n* Jason Burchfield\n* Jason Sommer\n* Jeff Browning\n* Jeff McGee\n* Joël Franusic\n* `Jonathan Hedén \u003chttps://github.com/jheden/\u003e`_\n* Julian Hille\n* Krzysztof Płocharz\n* Lyon Zhang\n* `Lucas Rangel Cezimbra \u003chttps://github.com/Lrcezimbra/\u003e`_\n* Marc Prewitt\n* Marcin Barczynski\n* Marian Galik\n* Michał Albrycht\n* Mike Ho\n* Nigel Choi\n* Omer Gertel\n* Omer Katz\n* Papp Győző\n* Paul Glass\n* Scott Sexton\n* Srinivas Reddy Thatiparthy\n* Taras Boiko\n* Todd Tomkinson\n* `Xinyan Lu \u003chttps://github.com/lxy1992/\u003e`_\n* Zachary Carter\n* catty (ca77y _at_ live.com)\n* emosenkis\n* hthieu1110\n* יppetlinskiy\n* pacud\n* tipok\n* waskew (waskew _at_ narrativescience.com)\n* jmsantorum (jmsantorum [at] gmail [dot] com)\n* lidongyong\n* `Juan Gutierrez \u003chttps://github.com/juannyg/\u003e`_\n\n.. _examples in tests: https://github.com/mongomock/mongomock/blob/develop/tests/test__mongomock.py\n.. _gitflow workflow: https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow\n","funding_links":[],"categories":["Python"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmongomock%2Fmongomock","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmongomock%2Fmongomock","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmongomock%2Fmongomock/lists"}