# Moto - Mock AWS Services
[![Join the chat at https://gitter.im/awsmoto/Lobby](https://badges.gitter.im/awsmoto/Lobby.svg)](https://gitter.im/awsmoto/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[![Build Status](https://github.com/getmoto/moto/workflows/TestNDeploy/badge.svg)](https://github.com/getmoto/moto/actions)
[![Coverage Status](https://codecov.io/gh/getmoto/moto/branch/master/graph/badge.svg)](https://codecov.io/gh/getmoto/moto)
[![Docs](https://readthedocs.org/projects/pip/badge/?version=stable)](http://docs.getmoto.org)
[![PyPI](https://img.shields.io/pypi/v/moto.svg)](https://pypi.org/project/moto/)
[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/moto.svg)](#)
[![PyPI - Downloads](https://img.shields.io/pypi/dw/moto.svg)](https://pypistats.org/packages/moto)
[![Code style: Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)
[![Financial Contributors](https://opencollective.com/moto/tiers/badge.svg)](https://opencollective.com/moto)
## Install
```console
$ pip install 'moto[ec2,s3,all]'
```
## In a nutshell
Moto is a library that allows your tests to easily mock out AWS Services.
Imagine you have the following python code that you want to test:
```python
import boto3
class MyModel:
def __init__(self, name, value):
self.name = name
self.value = value
def save(self):
s3 = boto3.client("s3", region_name="us-east-1")
s3.put_object(Bucket="mybucket", Key=self.name, Body=self.value)
```
Take a minute to think how you would have tested that in the past.
Now see how you could test it with Moto:
```python
import boto3
from moto import mock_aws
from mymodule import MyModel
@mock_aws
def test_my_model_save():
conn = boto3.resource("s3", region_name="us-east-1")
# We need to create the bucket since this is all in Moto's 'virtual' AWS account
conn.create_bucket(Bucket="mybucket")
model_instance = MyModel("steve", "is awesome")
model_instance.save()
body = conn.Object("mybucket", "steve").get()["Body"].read().decode("utf-8")
assert body == "is awesome"
```
With the decorator wrapping the test, all the calls to s3 are automatically mocked out. The mock keeps track of the state of the buckets and keys.
For a full list of which services and features are covered, please see our [implementation coverage](https://github.com/getmoto/moto/blob/master/IMPLEMENTATION_COVERAGE.md).
### Documentation
The full documentation can be found here:
[http://docs.getmoto.org/en/latest/](http://docs.getmoto.org/en/latest/)
### Financial Contributions
Support this project and its continued development, by sponsoring us!
Click the `Sponsor`-button at the top of the page for more information.
Our finances are managed by OpenCollective, which means you have full visibility into all our contributions and expenses:
https://opencollective.com/moto
### Security contact information
To report a security vulnerability, please use the
[Tidelift security contact](https://tidelift.com/security).
Tidelift will coordinate the fix and disclosure.
Raw data
{
"_id": null,
"home_page": "https://github.com/getmoto/moto",
"name": "moto",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "aws ec2 s3 boto3 mock",
"author": "Steve Pulec",
"author_email": "spulec@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/93/5d/7a256b0294d1d15a28ed7b7c64d8dd6ef2bc4c3fe436c65a063943d9765d/moto-5.0.22.tar.gz",
"platform": null,
"description": "# Moto - Mock AWS Services\n\n[![Join the chat at https://gitter.im/awsmoto/Lobby](https://badges.gitter.im/awsmoto/Lobby.svg)](https://gitter.im/awsmoto/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\n[![Build Status](https://github.com/getmoto/moto/workflows/TestNDeploy/badge.svg)](https://github.com/getmoto/moto/actions)\n[![Coverage Status](https://codecov.io/gh/getmoto/moto/branch/master/graph/badge.svg)](https://codecov.io/gh/getmoto/moto)\n[![Docs](https://readthedocs.org/projects/pip/badge/?version=stable)](http://docs.getmoto.org)\n[![PyPI](https://img.shields.io/pypi/v/moto.svg)](https://pypi.org/project/moto/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/moto.svg)](#)\n[![PyPI - Downloads](https://img.shields.io/pypi/dw/moto.svg)](https://pypistats.org/packages/moto)\n[![Code style: Ruff](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json)](https://github.com/astral-sh/ruff)\n[![Financial Contributors](https://opencollective.com/moto/tiers/badge.svg)](https://opencollective.com/moto)\n\n\n## Install\n\n```console\n$ pip install 'moto[ec2,s3,all]'\n```\n\n## In a nutshell\n\n\nMoto is a library that allows your tests to easily mock out AWS Services.\n\nImagine you have the following python code that you want to test:\n\n```python\nimport boto3\n\n\nclass MyModel:\n def __init__(self, name, value):\n self.name = name\n self.value = value\n\n def save(self):\n s3 = boto3.client(\"s3\", region_name=\"us-east-1\")\n s3.put_object(Bucket=\"mybucket\", Key=self.name, Body=self.value)\n```\n\nTake a minute to think how you would have tested that in the past.\n\nNow see how you could test it with Moto:\n\n```python\nimport boto3\nfrom moto import mock_aws\nfrom mymodule import MyModel\n\n\n@mock_aws\ndef test_my_model_save():\n conn = boto3.resource(\"s3\", region_name=\"us-east-1\")\n # We need to create the bucket since this is all in Moto's 'virtual' AWS account\n conn.create_bucket(Bucket=\"mybucket\")\n model_instance = MyModel(\"steve\", \"is awesome\")\n model_instance.save()\n body = conn.Object(\"mybucket\", \"steve\").get()[\"Body\"].read().decode(\"utf-8\")\n assert body == \"is awesome\"\n```\n\nWith the decorator wrapping the test, all the calls to s3 are automatically mocked out. The mock keeps track of the state of the buckets and keys.\n\nFor a full list of which services and features are covered, please see our [implementation coverage](https://github.com/getmoto/moto/blob/master/IMPLEMENTATION_COVERAGE.md).\n\n\n### Documentation\nThe full documentation can be found here:\n\n[http://docs.getmoto.org/en/latest/](http://docs.getmoto.org/en/latest/)\n\n\n### Financial Contributions\nSupport this project and its continued development, by sponsoring us!\n\nClick the `Sponsor`-button at the top of the page for more information.\n\nOur finances are managed by OpenCollective, which means you have full visibility into all our contributions and expenses:\nhttps://opencollective.com/moto\n\n### Security contact information\n\nTo report a security vulnerability, please use the\n[Tidelift security contact](https://tidelift.com/security).\nTidelift will coordinate the fix and disclosure.\n",
"bugtrack_url": null,
"license": "Apache License 2.0",
"summary": null,
"version": "5.0.22",
"project_urls": {
"Changelog": "https://github.com/getmoto/moto/blob/master/CHANGELOG.md",
"Documentation": "http://docs.getmoto.org/en/latest/",
"Homepage": "https://github.com/getmoto/moto",
"Issue tracker": "https://github.com/getmoto/moto/issues"
},
"split_keywords": [
"aws",
"ec2",
"s3",
"boto3",
"mock"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "2f0b7a9c54851fb624c185afdc42abe28f050ec52c4921fad56b2c686ecf29d9",
"md5": "19a3ccaffc9064008c5be358a02bf1d9",
"sha256": "defae32e834ba5674f77cbbe996b41dc248dd81289af8032fa3e847284409b29"
},
"downloads": -1,
"filename": "moto-5.0.22-py3-none-any.whl",
"has_sig": false,
"md5_digest": "19a3ccaffc9064008c5be358a02bf1d9",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 4452927,
"upload_time": "2024-12-01T18:41:50",
"upload_time_iso_8601": "2024-12-01T18:41:50.392960Z",
"url": "https://files.pythonhosted.org/packages/2f/0b/7a9c54851fb624c185afdc42abe28f050ec52c4921fad56b2c686ecf29d9/moto-5.0.22-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "935d7a256b0294d1d15a28ed7b7c64d8dd6ef2bc4c3fe436c65a063943d9765d",
"md5": "ab9e3728aad59284bc0ba05663f4d31f",
"sha256": "daf47b8a1f5f190cd3eaa40018a643f38e542277900cf1db7f252cedbfed998f"
},
"downloads": -1,
"filename": "moto-5.0.22.tar.gz",
"has_sig": false,
"md5_digest": "ab9e3728aad59284bc0ba05663f4d31f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 6303034,
"upload_time": "2024-12-01T18:41:52",
"upload_time_iso_8601": "2024-12-01T18:41:52.885154Z",
"url": "https://files.pythonhosted.org/packages/93/5d/7a256b0294d1d15a28ed7b7c64d8dd6ef2bc4c3fe436c65a063943d9765d/moto-5.0.22.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-12-01 18:41:52",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "getmoto",
"github_project": "moto",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"requirements": [],
"lcname": "moto"
}