moto


Namemoto JSON
Version 5.0.6 PyPI version JSON
download
home_pagehttps://github.com/getmoto/moto
SummaryNone
upload_time2024-04-28 11:11:18
maintainerNone
docs_urlNone
authorSteve Pulec
requires_python>=3.8
licenseApache License 2.0
keywords aws ec2 s3 boto3 mock
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage
            # 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/78/be/16f4ab370970963d52381608084e4158b62eaac75171395b5b5fe476df79/moto-5.0.6.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.6",
    "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": "66d484ddde068a65e4d36548c163f9f7fde9c0e3b066eee8b62c3117396bfa69",
                "md5": "3722e379ed9e0f97e2f84e645e56d613",
                "sha256": "ca1e22831a741733b581ff2ef4d6ae2e1c6db1eab97af1b78b86ca2c6e88c609"
            },
            "downloads": -1,
            "filename": "moto-5.0.6-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3722e379ed9e0f97e2f84e645e56d613",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": ">=3.8",
            "size": 3662082,
            "upload_time": "2024-04-28T11:11:09",
            "upload_time_iso_8601": "2024-04-28T11:11:09.232957Z",
            "url": "https://files.pythonhosted.org/packages/66/d4/84ddde068a65e4d36548c163f9f7fde9c0e3b066eee8b62c3117396bfa69/moto-5.0.6-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "78be16f4ab370970963d52381608084e4158b62eaac75171395b5b5fe476df79",
                "md5": "88fcf13f4036b0ad21e9234ff4783d28",
                "sha256": "ad8b23f2b555ad694da8b2432a42b6d96beaaf67a4e7d932196a72193a2eee2c"
            },
            "downloads": -1,
            "filename": "moto-5.0.6.tar.gz",
            "has_sig": false,
            "md5_digest": "88fcf13f4036b0ad21e9234ff4783d28",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 5212834,
            "upload_time": "2024-04-28T11:11:18",
            "upload_time_iso_8601": "2024-04-28T11:11:18.804928Z",
            "url": "https://files.pythonhosted.org/packages/78/be/16f4ab370970963d52381608084e4158b62eaac75171395b5b5fe476df79/moto-5.0.6.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-28 11:11:18",
    "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"
}
        
Elapsed time: 0.27868s