diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 4e62ce8e4..3f8af617b 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -1,20 +1,20 @@
# Table of Contents
- [Contributing code](#contributing-code)
- * [Running the tests locally](#running-the-tests-locally)
+- [Development Guide](#development-guide)
+ * [TLDR](#tldr)
* [Linting](#linting)
- * [General notes](#general-notes)
-- [Missing features](#missing-features)
-- [Missing services](#missing-services)
- + [Generating template code of services.](#generating-template-code-of-services)
- + [URL Indexing](#url-indexing)
- [Maintainers](#maintainers)
# Contributing code
Moto has a [Code of Conduct](https://github.com/spulec/moto/blob/master/CODE_OF_CONDUCT.md), you can expect to be treated with respect at all times when interacting with this project.
-## Running the tests locally
+# Development Guide
+Please see our documentation for information on how to contribute:
+https://docs.getmoto.org/en/latest/docs/contributing
+
+## TLDR
Moto has a [Makefile](./Makefile) which has some helpful commands for getting set up.
You should be able to run `make init` to install the dependencies and then `make test` to run the tests.
@@ -27,99 +27,6 @@ Ensure that the correct version of black is installed - `black==19.10b0`. (Diffe
Run `make lint` to verify whether your code confirms to the guidelines.
Use `make format` to automatically format your code, if it does not conform to `black`'s rules.
-## General notes
-
-Some tips that might help during development:
- - A dedicated TaggingService exists in `moto.utilities`, to help with storing/retrieving tags for resources. Not all services use it yet, but contributors are encouraged to use the TaggingService for all new features.
- - Our CI runs all tests twice - one normal run, and one run in ServerMode. In ServerMode, Moto is started as a stand-alone Flask server, and all tests are run against this Flask-instance.
-To verify whether your tests pass in ServerMode, you can run the following commands:
-```
-pip install .[all,server]
-moto_server
-TEST_SERVER_MODE=true pytest -sv tests/test_service/..
-```
- - When writing tests, one test should only verify a single feature/method. I.e., one test for `create_resource()`, another for `update_resource()`, etc.
- - When writing negative tests, try to use the following format:
- ```
- with pytest.raises(botocore.exceptions.ClientError) as exc:
- client.failing_call(..)
- err = exc.value.response["Error"]
- # These assertions use the 'sure' library, but any assertion style is accepted
- err["Code"].should.equal(..)
- err["Message"].should.equal(..)
- ```
- This is the best way to ensure that exceptions are dealt with correctly by Moto.
- - If a service is only partially implemented, a warning can be used to inform the user. For instance:
- ```
- import warnings
- warnings.warn("The Filters-parameter is not yet implemented for client.method()")
- ```
- - To speed up our CI, the ServerMode tests for the `awslambda`, `batch`, `ec2` and `sqs` services will run in parallel.
- This means the following:
- - Make sure you use unique names for functions/queues/etc
- - Calls to `describe_reservations()`/`list_queues()`/etc might return unexpected results
-
-
-# Missing features
-
-Moto is easier to contribute to than you probably think. There's [a list of which endpoints have been implemented](https://github.com/spulec/moto/blob/master/IMPLEMENTATION_COVERAGE.md) and we invite you to add new endpoints to existing services or to add new services.
-
-How to teach Moto to support a new AWS endpoint:
-
-* Search for an existing [issue](https://github.com/spulec/moto/issues) that matches what you want to achieve.
-* If one doesn't already exist, create a new issue describing what's missing. This is where we'll all talk about the new addition and help you get it done.
-* Create a [pull request](https://help.github.com/articles/using-pull-requests/) and mention the issue # in the PR description.
-* Try to add a failing test case. For example, if you're trying to implement `boto3.client('acm').import_certificate()` you'll want to add a new method called `def test_import_certificate` to `tests/test_acm/test_acm.py`.
-* Implementing the feature itself can be done by creating a method called `import_certificate` in `moto/acm/responses.py`. It's considered good practice to deal with input/output formatting and validation in `responses.py`, and create a method `import_certificate` in `moto/acm/models.py` that handles the actual import logic.
-* If you can also implement the code that gets that test passing then great! If not, just ask the community for a hand and somebody will assist you.
-
-# Missing services
-
-Implementing a new service from scratch is more work, but still quite straightforward. All the code that intercepts network requests to `*.amazonaws.com` is already handled for you in `moto/core` - all that's necessary for new services to be recognized is to create a new decorator and determine which URLs should be intercepted.
-
-See this PR for an example of what's involved in creating a new service: https://github.com/spulec/moto/pull/4076/files
-
-Note the `urls.py` that redirects all incoming URL requests to a generic `dispatch` method, which in turn will call the appropriate method in `responses.py`.
-
-If you want more control over incoming requests or their bodies, it is possible to redirect specific requests to a custom method. See this PR for an example: https://github.com/spulec/moto/pull/2957/files
-
-### Generating template code of services.
-
-By using `scripts/scaffold.py`, you can automatically generate template code of new services and new method of existing service. The script looks up API specification of given boto3 method and adds necessary codes including request parameters and response parameters. In some cases, it fails to generate codes.
-Please try out by running `python scripts/scaffold.py`
-
-```bash
-$ python scripts/scaffold.py
-Select service: codedeploy
-
-==Current Implementation Status==
-[ ] add_tags_to_on_premises_instances
-...
-[ ] create_deployment
-...[
-[ ] update_deployment_group
-=================================
-Select Operation: create_deployment
-
-
- Initializing service codedeploy
- creating moto/codedeploy
- creating moto/codedeploy/models.py
- creating moto/codedeploy/exceptions.py
- creating moto/codedeploy/__init__.py
- creating moto/codedeploy/responses.py
- creating moto/codedeploy/urls.py
- creating tests/test_codedeploy
- creating tests/test_codedeploy/test_server.py
- creating tests/test_codedeploy/test_codedeploy.py
- inserting code moto/codedeploy/responses.py
- inserting code moto/codedeploy/models.py
-You will still need to add the mock into "__init__.py"
-```
-
-### URL Indexing
-In order to speed up the performance of MotoServer, all AWS URL's that need intercepting are indexed.
-When adding/replacing any URLs in `{service}/urls.py`, please run `python scripts/update_backend_index.py` to update this index.
# Maintainers
diff --git a/docs/docs/contributing/architecture.rst b/docs/docs/contributing/architecture.rst
new file mode 100644
index 000000000..795a404d0
--- /dev/null
+++ b/docs/docs/contributing/architecture.rst
@@ -0,0 +1,75 @@
+.. _contributing architecture:
+
+=============================
+Architecture
+=============================
+
+If you're interested in the inner workings of Moto, or are trying to hunt down some tricky bug, the below sections will help you learn more about how Moto works.
+
+**************************
+Decorator Architecture
+**************************
+When using decorators, Moto works by intercepting the HTTP request that is send out by boto3.
+This has multiple benefits:
+
+ - boto3 keeps the responsibility of any initial parameter validation
+ - boto3 keeps the responsibility of any post-processing of the response
+ - Other SDK's can also be used against Moto, as all SDK's use the HTTP API to talk to AWS in the end.
+
+Botocore utilizes an event-based architecture. Events such as `creating-client-class` and `before-send` are emitted for all boto3-requests.
+
+When the decorator starts, Moto registers a hook into the `before-send`-event that allows us to intercept the HTTP-request that was about to be send.
+For every intercepted request, Moto figures out which service/feature is called based on the HTTP request prepared by `boto3`, and calls our own stub instead.
+
+
+***********************************************
+Determining which service/feature is called
+***********************************************
+There are multiple ways for Moto to determine which request was called.
+For each request we need to know two things:
+
+ #. Which service is this request for?
+ #. Which feature is called?
+
+When using one ore more decorators, Moto will load all urls from `{service}/urls.py::url_bases`.
+Incoming requests are matched against those to figure out which service the request has to go to.
+After that, we try to find right feature by looking at:
+
+ #. The `Action`-parameter in the querystring or body, or
+ #. The `x-amz-target`-header, or
+ #. The full URI. Boto3 has a model for each service that maps the HTTP method and URI to a feature.
+ Note that this only works if the `Responses`-class has an attribute `SERVICE_NAME`, as Moto needs to know which boto3-client has this model.
+
+When using Moto in ServerMode, all incoming requests will be made to `http://localhost`, or wherever the MotoServer is hosted, so we can no longer use the request URI to figure out which service to talk to.
+In order to still know which service the request was intended for, Moto will check:
+
+ #. The authorization header first (`HTTP_AUTHORIZATION`)
+ #. The target header next (`HTTP_X_AMZ_TARGET`)
+ #. Or the path header (`PATH_INFO`)
+ #. If all else fails, we assume S3 as the default
+
+Now that we have determined the service, we can rebuild the original host this request was send to.
+With the combination of the restored host and path we can match against the `url_bases` and `url_paths` in `{service}/urls.py` to determine which Moto-method is responsible for handling the incoming request.
+
+
+***********************************
+File Architecture
+***********************************
+To keep a logical separation between services, each one is located into a separate folder.
+Each service follows the same file structure.
+
+The below table explains the purpose of each file:
+
++---------------+---------------------------------------------------------------------------------------------------------------+
+| File | Responsibility |
++===============+===============================================================================================================+
+| __init__.py | Initializes the decorator to be used by developers |
++---------------+---------------------------------------------------------------------------------------------------------------+
+| urls.py | List of the URL's that should be intercepted |
++---------------+---------------------------------------------------------------------------------------------------------------+
+| responses.py | Requests are redirected here first. Responsible for extracting parameters and determining the response format |
++---------------+---------------------------------------------------------------------------------------------------------------+
+| models.py | Responsible for the data storage and logic required. |
++---------------+---------------------------------------------------------------------------------------------------------------+
+| exceptions.py | Not required - this would contain any custom exceptions, if your code throws any |
++---------------+---------------------------------------------------------------------------------------------------------------+
diff --git a/docs/docs/contributing/checklist.rst b/docs/docs/contributing/checklist.rst
new file mode 100644
index 000000000..32f708d27
--- /dev/null
+++ b/docs/docs/contributing/checklist.rst
@@ -0,0 +1,26 @@
+.. _contributing checklist:
+
+.. role:: raw-html(raw)
+ :format: html
+
+================================
+PR Checklist
+================================
+
+Ready to open a new PR? Great. Please have a quick look at this checklist to make sure that you're ready:
+
+ - [ ] Feature is added
+ - [ ] The linter is happy
+ - [ ] Tests are added
+ - [ ] All tests pass, existing and new
+
+Can't quite get it working? :raw-html:`
`
+Create the PR anyway! Seeing the code can help others figure out what's wrong.
+
+Halfway through and too busy to finish? :raw-html:`
`
+Create the PR anyway! Others can use your work and build on it to finish the feature.
+
+.. note:: You can indicate a PR that's not quite ready with the `needs-help`-label.
+
+Are you not sure on what you want to implement, or want some advice on how to approach things?
+Feel free to open a new issue on Github: https://github.com/spulec/moto/issues
diff --git a/docs/docs/contributing/development_tips.rst b/docs/docs/contributing/development_tips.rst
new file mode 100644
index 000000000..380ce5290
--- /dev/null
+++ b/docs/docs/contributing/development_tips.rst
@@ -0,0 +1,118 @@
+.. _contributing tips:
+
+=============================
+Development Tips
+=============================
+
+Below you can find some tips that might help during development.
+
+****************************
+Naming Conventions
+****************************
+Let's say you want to implement the `import_certificate` feature for the ACM service.
+
+Implementing the feature itself can be done by creating a method called `import_certificate` in `moto/acm/responses.py`.
+| It's considered good practice to deal with input/output formatting and validation in `responses.py`, and create a method `import_certificate` in `moto/acm/models.py` that handles the actual import logic.
+
+When writing tests, you'll want to add a new method called `def test_import_certificate` to `tests/test_acm/test_acm.py`.
+| Additional tests should also have names indicate of what's happening, i.e. `def test_import_certificate_fails_without_name`, `def test_import_existing_certificate`, etc.
+
+
+****************************************
+Determining which URLs to intercept
+****************************************
+In order for Moto to know which requests to intercept, Moto needs to know which URLs to intercept.
+| But how do we know which URL's should be intercepted? There are a few ways of doing it:
+
+ - For an existing service, copy/paste the url-path for an existing feature and cross your fingers and toes
+ - Use the service model that is used by botocore: https://github.com/boto/botocore/tree/develop/botocore/data
+ Look for the `requestUri`-field in the `services.json` file.
+ - Make a call to AWS itself, and intercept the request using a proxy.
+ This gives you all information you could need, including the URL, parameters, request and response format.
+
+
+******************************
+Intercepting AWS requests
+******************************
+Download and install a proxy such `MITMProxy `_.
+
+With the proxy running, the easiest way of proxying requests to AWS is probably via the CLI.
+
+.. sourcecode:: bash
+
+ export HTTP_PROXY=http://localhost:8080
+ export HTTPS_PROXY=http://localhost:8080
+ aws ses describe-rule-set --no-verify-ssl
+
+.. sourcecode:: python
+
+ from botocore.config import Config
+ proxy_config = Config(proxies={'http': 'localhost:8080', 'https': 'localhost:8080'})
+ boto3.client("ses", config=proxy_config, use_ssl=False, verify=False)
+
+
+******************************
+Tagging Service
+******************************
+
+A dedicated TaggingService exists in `moto.utilities`, to help with storing/retrieving tags for resources.
+
+Not all services use it yet, but contributors are encouraged to use the TaggingService for all new features.
+
+***************************
+CI
+***************************
+
+Our CI runs all tests twice - one normal run, and one run in ServerMode. In ServerMode, Moto is started as a stand-alone Flask server, and all tests are run against this Flask-instance.
+
+To verify whether your tests pass in ServerMode, you can run the following commands:
+
+.. sourcecode:: bash
+
+ moto_server
+ TEST_SERVER_MODE=true pytest -sv tests/test_service/..
+
+
+*****************************
+Partial Implementations
+*****************************
+
+If a service is only partially implemented, a warning can be used to inform the user:
+
+.. sourcecode:: python
+
+ import warnings
+ warnings.warn("The Filters-parameter is not yet implemented for client.method()")
+
+
+****************
+Writing tests
+****************
+
+One test should only verify a single feature/method. I.e., one test for `create_resource()`, another for `update_resource()`, etc.
+
+Negative tests
+^^^^^^^^^^^^^^^^^
+
+When writing negative tests, try to use the following format:
+
+.. sourcecode:: python
+
+ with pytest.raises(botocore.exceptions.ClientError) as exc:
+ client.failing_call(..)
+ err = exc.value.response["Error"]
+ # These assertions use the 'sure' library, but any assertion style is accepted
+ err["Code"].should.equal(..)
+ err["Message"].should.equal(..)
+
+This is the best way to ensure that exceptions are dealt with correctly by Moto.
+
+
+Parallel tests
+^^^^^^^^^^^^^^^^^^^^^
+
+To speed up our CI, the ServerMode tests for the `awslambda`, `batch`, `ec2` and `sqs` services will run in parallel.
+This means the following:
+
+ - Make sure you use unique names for functions/queues/etc
+ - Calls to `describe_reservations()`/`list_queues()`/etc might return resources from other tests
diff --git a/docs/docs/contributing/faq.rst b/docs/docs/contributing/faq.rst
new file mode 100644
index 000000000..4d560958f
--- /dev/null
+++ b/docs/docs/contributing/faq.rst
@@ -0,0 +1,103 @@
+.. _contributing faq:
+
+=============================
+FAQ
+=============================
+
+When running the linter...
+#############################
+
+Why does black give different results?
+****************************************
+Different versions of black produce different results.
+To ensure that our CI passes, please format the code using `black==19.10b0`.
+
+When running a test...
+#########################
+
+Why does it take ages to run a single test?
+**********************************************
+There are a few reasons why this could happen.
+If the test uses Docker, it could take a while to:
+
+ - Download the appropriate Docker image
+ - Run the image
+ - Wait for the logs to appear
+
+
+Why am I getting Docker errors?
+********************************
+AWSLambda and Batch services use Docker to execute the code provided to the system, which means that Docker needs to be installed on your system in order for these tests to run.
+
+
+Why are my tests failing in ServerMode?
+******************************************
+ - Make sure that the correct url paths are present in `urls.py`
+ - Make sure that you've run `scripts/update_backend_index.py` afterwards, to let MotoServer know the urls have changed.
+
+
+When using the scaffolding scripts..
+#######################################
+
+Why am I getting the error that my new module could not be found?
+*******************************************************************
+
+.. sourcecode:: bash
+
+ File "scripts/scaffold.py", line 499, in insert_codes
+ insert_code_to_class(responses_path, BaseResponse, func_in_responses)
+ File "scripts/scaffold.py", line 424, in insert_code_to_class
+ mod = importlib.import_module(mod_path)
+ File "/usr/lib/python3.8/importlib/__init__.py", line 127, in import_module
+ return _bootstrap._gcd_import(name[level:], package, level)
+ File "", line 1014, in _gcd_import
+ File "", line 991, in _find_and_load
+ File "", line 961, in _find_and_load_unlocked
+ File "", line 219, in _call_with_frames_removed
+ File "", line 1014, in _gcd_import
+ File "", line 991, in _find_and_load
+ File "", line 973, in _find_and_load_unlocked
+ ModuleNotFoundError: No module named 'moto.kafka'
+
+This will happen if you've ran `pip install .` prior to running `scripts/scaffold.py`.
+
+Instead, install Moto as an editable module instead:
+
+.. sourcecode:: bash
+
+ pip uninstall moto
+ pip install -e .
+
+
+What ...
+#################
+
+Does ServerMode refer to?
+******************************
+ServerMode refers to Moto running as a stand-alone server. This can be useful to:
+ - Test non-Python SDK's
+ - Have a semi-permanent, local AWS-like server running that multiple applications can talk to
+
+Types of tests are there?
+***********************************
+There are three types of tests:
+
+ #. decorator tests
+ #. ServerMode tests
+ #. server tests (located in test_server.py)
+
+The decorator tests refer to the normal unit tests that are run against an in-memory Moto instance.
+
+The ServerMode tests refer to the same set of tests - but run against an external MotoServer instance.
+When running tests in ServerMode, each boto3-client and boto3-resource are intercepted, and enriched with the `endpoint_url="http://localhost:5000"` argument. This allows us to run the same test twice, and verify that Moto behaves the same when using decorators, and in ServerMode.
+
+The last 'server' tests are low-level tests that can be used to verify that Moto behaves exactly like the AWS HTTP API.
+Each test will spin up the MotoServer in memory, and run HTTP requests directly against that server.
+This allows the developer to test things like HTTP headers, the exact response/request format, etc.
+
+Alternatives are there?
+********************************
+The best alternative would be `LocalStack `_.
+
+LocalStack is Moto's bigger brother with more advanced features, such as EC2 VM's that you can SSH into and Dockerized RDS-installations that you can connect to.
+
diff --git a/docs/docs/contributing/index.rst b/docs/docs/contributing/index.rst
new file mode 100644
index 000000000..7700f02e8
--- /dev/null
+++ b/docs/docs/contributing/index.rst
@@ -0,0 +1,18 @@
+.. _contributing main:
+
+=============================
+Contributing
+=============================
+
+Want to contribute to Moto? Yes please! The aim is to mock as many services and features as possible.
+With AWS releasing new services almost daily, that is for sure a moving target! So any help is welcome.
+
+Check our :ref:`contributing installation` guide on how to install Moto locally.
+The :ref:`contributing architecture` page can be useful or interesting if you want to dive deeper in Moto's guts, but feel free to skip this page if you're not interested.
+
+Want to add some new features, or improving the behaviour of existing ones? :ref:`contributing feature` is for you.
+
+We also have a collection of :ref:`contributing tips` to give some guidance.
+
+Finally, the :ref:`contributing faq` page may have some questions to your burning answers that popped up while reading this saga.
+
diff --git a/docs/docs/contributing/installation.rst b/docs/docs/contributing/installation.rst
new file mode 100644
index 000000000..9dcc83250
--- /dev/null
+++ b/docs/docs/contributing/installation.rst
@@ -0,0 +1,44 @@
+.. _contributing installation:
+
+=============================
+Installation
+=============================
+
+This is a guide how to install Moto for contributors.
+
+The following software is assumed to be present:
+
+ - Python 3.x
+ - Docker
+
+It is recommended to work from some kind of virtual environment, i.e. `virtualenv`, to prevent cross-contamination with other projects.
+From within such a virtualenv, run the following command to install all required dependencies:
+
+.. code-block:: bash
+
+ make init
+
+With all dependencies installed, run the following command to run all the tests and verify your environment is ready:
+
+.. code-block:: bash
+
+ make test
+
+Note that this may take awhile - there are many services, and each service will have a boatload of tests.
+
+To verify all tests pass for a specific service, for example for `s3`, run these commands manually:
+
+.. code-block:: bash
+
+ flake8 moto/s3
+ black --check moto/s3 tests/test_s3
+ pylint tests/test_s3
+ pytest -sv tests/test_s3
+
+If black fails, you can run the following command to automatically format the offending files:
+
+.. code-block:: bash
+
+ make format
+
+If any of these steps fail, please see our :ref:`contributing faq` or open an issue on Github.
diff --git a/docs/docs/contributing/new_feature.rst b/docs/docs/contributing/new_feature.rst
new file mode 100644
index 000000000..3d1068276
--- /dev/null
+++ b/docs/docs/contributing/new_feature.rst
@@ -0,0 +1,60 @@
+.. _contributing feature:
+
+=============================
+New Features
+=============================
+
+Moto has a script that can automatically provide the scaffolding for a new service, and for adding new features to an existing service. This script does all the heavy lifting of generating template code, by looking up the API specification of a given `boto3` method and adding the necessary code to mock it.
+
+Please try it out by running:
+
+.. sourcecode:: bash
+
+ python scripts/scaffold.py
+
+
+The script uses the `click`-module to assists with autocompletion.
+
+ - Use Tab to auto-complete the first suggest service, or
+ - Use the up and down-arrows on the keyboard to select something from the dropdown
+ - Press enter to continue
+
+An example interaction:
+
+.. sourcecode:: bash
+
+ $ python scripts/scaffold.py
+ Select service: codedeploy
+
+ ==Current Implementation Status==
+ [ ] add_tags_to_on_premises_instances
+ ...
+ [ ] create_deployment
+ ...
+ [ ] update_deployment_group
+ =================================
+ Select Operation: create_deployment
+
+
+ Initializing service codedeploy
+ creating moto/codedeploy
+ creating moto/codedeploy/models.py
+ creating moto/codedeploy/exceptions.py
+ creating moto/codedeploy/__init__.py
+ creating moto/codedeploy/responses.py
+ creating moto/codedeploy/urls.py
+ creating tests/test_codedeploy
+ creating tests/test_codedeploy/test_server.py
+ creating tests/test_codedeploy/test_codedeploy.py
+ inserting code moto/codedeploy/responses.py
+ inserting code moto/codedeploy/models.py
+
+ Remaining steps after development is complete:
+ - Run scripts/implementation_coverage.py,
+ - Run scripts/update_backend_index.py.
+
+
+.. note:: The implementation coverage script is used to automatically update the full list of supported services.
+
+.. warning:: In order to speed up the performance of MotoServer, all AWS URL's that need intercepting are indexed.
+ When adding/replacing any URLs in `{service}/urls.py`, please run `python scripts/update_backend_index.py` to update this index.
diff --git a/docs/docs/services/acm.rst b/docs/docs/services/acm.rst
index 012f47854..6297e25b2 100644
--- a/docs/docs/services/acm.rst
+++ b/docs/docs/services/acm.rst
@@ -1,11 +1,32 @@
.. _implementedservice_acm:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
acm
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_acm
+ def test_acm_behaviour:
+ boto3.client("acm")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] add_tags_to_certificate
- [X] delete_certificate
- [ ] describe_certificate
diff --git a/docs/docs/services/apigateway.rst b/docs/docs/services/apigateway.rst
index f1b23d93d..4f155f8c2 100644
--- a/docs/docs/services/apigateway.rst
+++ b/docs/docs/services/apigateway.rst
@@ -1,11 +1,32 @@
.. _implementedservice_apigateway:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
==========
apigateway
==========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_apigateway
+ def test_apigateway_behaviour:
+ boto3.client("apigateway")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] create_api_key
- [X] create_authorizer
- [X] create_base_path_mapping
diff --git a/docs/docs/services/application-autoscaling.rst b/docs/docs/services/application-autoscaling.rst
index bcc5f7a12..6818f11c5 100644
--- a/docs/docs/services/application-autoscaling.rst
+++ b/docs/docs/services/application-autoscaling.rst
@@ -1,11 +1,32 @@
.. _implementedservice_application-autoscaling:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=======================
application-autoscaling
=======================
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_applicationautoscaling
+ def test_application-autoscaling_behaviour:
+ boto3.client("application-autoscaling")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] delete_scaling_policy
- [ ] delete_scheduled_action
- [X] deregister_scalable_target
diff --git a/docs/docs/services/athena.rst b/docs/docs/services/athena.rst
index 43a899d7a..b7730e198 100644
--- a/docs/docs/services/athena.rst
+++ b/docs/docs/services/athena.rst
@@ -1,11 +1,32 @@
.. _implementedservice_athena:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
======
athena
======
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_athena
+ def test_athena_behaviour:
+ boto3.client("athena")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] batch_get_named_query
- [ ] batch_get_query_execution
- [ ] create_data_catalog
diff --git a/docs/docs/services/autoscaling.rst b/docs/docs/services/autoscaling.rst
index 8fc810d15..fcbb39010 100644
--- a/docs/docs/services/autoscaling.rst
+++ b/docs/docs/services/autoscaling.rst
@@ -1,11 +1,32 @@
.. _implementedservice_autoscaling:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===========
autoscaling
===========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_autoscaling
+ def test_autoscaling_behaviour:
+ boto3.client("autoscaling")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] attach_instances
- [X] attach_load_balancer_target_groups
- [X] attach_load_balancers
diff --git a/docs/docs/services/batch.rst b/docs/docs/services/batch.rst
index 4938d4da4..e058b361e 100644
--- a/docs/docs/services/batch.rst
+++ b/docs/docs/services/batch.rst
@@ -1,11 +1,32 @@
.. _implementedservice_batch:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=====
batch
=====
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_batch
+ def test_batch_behaviour:
+ boto3.client("batch")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] cancel_job
- [X] create_compute_environment
- [X] create_job_queue
diff --git a/docs/docs/services/cloudformation.rst b/docs/docs/services/cloudformation.rst
index 8775a1f73..839578d3e 100644
--- a/docs/docs/services/cloudformation.rst
+++ b/docs/docs/services/cloudformation.rst
@@ -1,11 +1,32 @@
.. _implementedservice_cloudformation:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
==============
cloudformation
==============
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_cloudformation
+ def test_cloudformation_behaviour:
+ boto3.client("cloudformation")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] activate_type
- [ ] batch_describe_type_configurations
- [ ] cancel_update_stack
diff --git a/docs/docs/services/cloudtrail.rst b/docs/docs/services/cloudtrail.rst
index 2b72adfef..9fd506fb3 100644
--- a/docs/docs/services/cloudtrail.rst
+++ b/docs/docs/services/cloudtrail.rst
@@ -1,11 +1,32 @@
.. _implementedservice_cloudtrail:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
==========
cloudtrail
==========
Implementation of CloudTrail APIs.
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_cloudtrail
+ def test_cloudtrail_behaviour:
+ boto3.client("cloudtrail")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] add_tags
- [X] create_trail
- [X] delete_trail
diff --git a/docs/docs/services/cloudwatch.rst b/docs/docs/services/cloudwatch.rst
index 099c958f2..2dbca215f 100644
--- a/docs/docs/services/cloudwatch.rst
+++ b/docs/docs/services/cloudwatch.rst
@@ -1,11 +1,32 @@
.. _implementedservice_cloudwatch:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
==========
cloudwatch
==========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_cloudwatch
+ def test_cloudwatch_behaviour:
+ boto3.client("cloudwatch")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] delete_alarms
- [ ] delete_anomaly_detector
- [X] delete_dashboards
diff --git a/docs/docs/services/codecommit.rst b/docs/docs/services/codecommit.rst
index 03694aa39..f0c57c586 100644
--- a/docs/docs/services/codecommit.rst
+++ b/docs/docs/services/codecommit.rst
@@ -1,11 +1,32 @@
.. _implementedservice_codecommit:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
==========
codecommit
==========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_codecommit
+ def test_codecommit_behaviour:
+ boto3.client("codecommit")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] associate_approval_rule_template_with_repository
- [ ] batch_associate_approval_rule_template_with_repositories
- [ ] batch_describe_merge_conflicts
diff --git a/docs/docs/services/codepipeline.rst b/docs/docs/services/codepipeline.rst
index 01a143f68..7e5388102 100644
--- a/docs/docs/services/codepipeline.rst
+++ b/docs/docs/services/codepipeline.rst
@@ -1,11 +1,32 @@
.. _implementedservice_codepipeline:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
============
codepipeline
============
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_codepipeline
+ def test_codepipeline_behaviour:
+ boto3.client("codepipeline")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] acknowledge_job
- [ ] acknowledge_third_party_job
- [ ] create_custom_action_type
diff --git a/docs/docs/services/cognito-identity.rst b/docs/docs/services/cognito-identity.rst
index 391359e18..185e78405 100644
--- a/docs/docs/services/cognito-identity.rst
+++ b/docs/docs/services/cognito-identity.rst
@@ -1,11 +1,32 @@
.. _implementedservice_cognito-identity:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
================
cognito-identity
================
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_cognitoidentity
+ def test_cognito-identity_behaviour:
+ boto3.client("cognito-identity")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] create_identity_pool
- [ ] delete_identities
- [ ] delete_identity_pool
diff --git a/docs/docs/services/cognito-idp.rst b/docs/docs/services/cognito-idp.rst
index 09934f82a..10b723573 100644
--- a/docs/docs/services/cognito-idp.rst
+++ b/docs/docs/services/cognito-idp.rst
@@ -1,11 +1,32 @@
.. _implementedservice_cognito-idp:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===========
cognito-idp
===========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_cognitoidp
+ def test_cognito-idp_behaviour:
+ boto3.client("cognito-idp")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] add_custom_attributes
- [X] admin_add_user_to_group
- [X] admin_confirm_sign_up
diff --git a/docs/docs/services/config.rst b/docs/docs/services/config.rst
index 7be88d916..198c9a77b 100644
--- a/docs/docs/services/config.rst
+++ b/docs/docs/services/config.rst
@@ -1,11 +1,32 @@
.. _implementedservice_config:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
======
config
======
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_config
+ def test_config_behaviour:
+ boto3.client("config")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] batch_get_aggregate_resource_config
Returns configuration of resource for current regional backend.
diff --git a/docs/docs/services/datapipeline.rst b/docs/docs/services/datapipeline.rst
index d1112a4b1..c33676d7e 100644
--- a/docs/docs/services/datapipeline.rst
+++ b/docs/docs/services/datapipeline.rst
@@ -1,11 +1,32 @@
.. _implementedservice_datapipeline:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
============
datapipeline
============
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_datapipeline
+ def test_datapipeline_behaviour:
+ boto3.client("datapipeline")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] activate_pipeline
- [ ] add_tags
- [X] create_pipeline
diff --git a/docs/docs/services/datasync.rst b/docs/docs/services/datasync.rst
index 31c522a34..f9f17798b 100644
--- a/docs/docs/services/datasync.rst
+++ b/docs/docs/services/datasync.rst
@@ -1,11 +1,32 @@
.. _implementedservice_datasync:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
========
datasync
========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_datasync
+ def test_datasync_behaviour:
+ boto3.client("datasync")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] cancel_task_execution
- [ ] create_agent
- [ ] create_location_efs
diff --git a/docs/docs/services/dms.rst b/docs/docs/services/dms.rst
index d9ba743b2..f02fa7c16 100644
--- a/docs/docs/services/dms.rst
+++ b/docs/docs/services/dms.rst
@@ -1,11 +1,32 @@
.. _implementedservice_dms:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
dms
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_dms
+ def test_dms_behaviour:
+ boto3.client("dms")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] add_tags_to_resource
- [ ] apply_pending_maintenance_action
- [ ] cancel_replication_task_assessment_run
diff --git a/docs/docs/services/ds.rst b/docs/docs/services/ds.rst
index efb8e32a7..ea2425cd6 100644
--- a/docs/docs/services/ds.rst
+++ b/docs/docs/services/ds.rst
@@ -1,11 +1,32 @@
.. _implementedservice_ds:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
==
ds
==
Implementation of DirectoryService APIs.
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_ds
+ def test_ds_behaviour:
+ boto3.client("ds")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] accept_shared_directory
- [ ] add_ip_routes
- [ ] add_region
diff --git a/docs/docs/services/dynamodb.rst b/docs/docs/services/dynamodb.rst
index faf46b7eb..26162fa28 100644
--- a/docs/docs/services/dynamodb.rst
+++ b/docs/docs/services/dynamodb.rst
@@ -1,11 +1,32 @@
.. _implementedservice_dynamodb:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
========
dynamodb
========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_dynamodb2
+ def test_dynamodb_behaviour:
+ boto3.client("dynamodb")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] batch_execute_statement
- [X] batch_get_item
- [X] batch_write_item
diff --git a/docs/docs/services/dynamodbstreams.rst b/docs/docs/services/dynamodbstreams.rst
index 2bc6f5129..3af984157 100644
--- a/docs/docs/services/dynamodbstreams.rst
+++ b/docs/docs/services/dynamodbstreams.rst
@@ -1,11 +1,32 @@
.. _implementedservice_dynamodbstreams:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===============
dynamodbstreams
===============
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_dynamodbstreams
+ def test_dynamodbstreams_behaviour:
+ boto3.client("dynamodbstreams")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] describe_stream
- [X] get_records
- [X] get_shard_iterator
diff --git a/docs/docs/services/ec2-instance-connect.rst b/docs/docs/services/ec2-instance-connect.rst
index 98502c85f..fc491e6c6 100644
--- a/docs/docs/services/ec2-instance-connect.rst
+++ b/docs/docs/services/ec2-instance-connect.rst
@@ -1,11 +1,32 @@
.. _implementedservice_ec2-instance-connect:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
====================
ec2-instance-connect
====================
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_ec2instanceconnect
+ def test_ec2-instance-connect_behaviour:
+ boto3.client("ec2-instance-connect")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] send_serial_console_ssh_public_key
- [X] send_ssh_public_key
diff --git a/docs/docs/services/ec2.rst b/docs/docs/services/ec2.rst
index 006d14c6d..cc5b767ec 100644
--- a/docs/docs/services/ec2.rst
+++ b/docs/docs/services/ec2.rst
@@ -1,11 +1,32 @@
.. _implementedservice_ec2:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
ec2
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_ec2
+ def test_ec2_behaviour:
+ boto3.client("ec2")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] accept_reserved_instances_exchange_quote
- [ ] accept_transit_gateway_multicast_domain_associations
- [X] accept_transit_gateway_peering_attachment
diff --git a/docs/docs/services/ecr.rst b/docs/docs/services/ecr.rst
index ebeba2bbb..32a594eb5 100644
--- a/docs/docs/services/ecr.rst
+++ b/docs/docs/services/ecr.rst
@@ -1,11 +1,32 @@
.. _implementedservice_ecr:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
ecr
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_ecr
+ def test_ecr_behaviour:
+ boto3.client("ecr")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] batch_check_layer_availability
- [X] batch_delete_image
- [X] batch_get_image
diff --git a/docs/docs/services/ecs.rst b/docs/docs/services/ecs.rst
index 1ab507748..6e480e361 100644
--- a/docs/docs/services/ecs.rst
+++ b/docs/docs/services/ecs.rst
@@ -1,11 +1,32 @@
.. _implementedservice_ecs:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
ecs
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_ecs
+ def test_ecs_behaviour:
+ boto3.client("ecs")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] create_capacity_provider
- [X] create_cluster
- [X] create_service
diff --git a/docs/docs/services/efs.rst b/docs/docs/services/efs.rst
index e428400c1..0f793e460 100644
--- a/docs/docs/services/efs.rst
+++ b/docs/docs/services/efs.rst
@@ -1,5 +1,13 @@
.. _implementedservice_efs:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
efs
===
@@ -11,6 +19,19 @@ The backend manager of EFS resources.
such resources should always go through this class.
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_efs
+ def test_efs_behaviour:
+ boto3.client("efs")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] create_access_point
- [X] create_file_system
Create a new EFS File System Volume.
diff --git a/docs/docs/services/eks.rst b/docs/docs/services/eks.rst
index 352091603..44825970f 100644
--- a/docs/docs/services/eks.rst
+++ b/docs/docs/services/eks.rst
@@ -1,11 +1,32 @@
.. _implementedservice_eks:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
eks
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_eks
+ def test_eks_behaviour:
+ boto3.client("eks")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] associate_encryption_config
- [ ] associate_identity_provider_config
- [ ] create_addon
diff --git a/docs/docs/services/elasticbeanstalk.rst b/docs/docs/services/elasticbeanstalk.rst
index b1b677684..133391da2 100644
--- a/docs/docs/services/elasticbeanstalk.rst
+++ b/docs/docs/services/elasticbeanstalk.rst
@@ -1,11 +1,32 @@
.. _implementedservice_elasticbeanstalk:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
================
elasticbeanstalk
================
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_elasticbeanstalk
+ def test_elasticbeanstalk_behaviour:
+ boto3.client("elasticbeanstalk")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] abort_environment_update
- [ ] apply_environment_managed_action
- [ ] associate_environment_operations_role
diff --git a/docs/docs/services/elastictranscoder.rst b/docs/docs/services/elastictranscoder.rst
index e8e90d619..f0dc99a4b 100644
--- a/docs/docs/services/elastictranscoder.rst
+++ b/docs/docs/services/elastictranscoder.rst
@@ -1,11 +1,32 @@
.. _implementedservice_elastictranscoder:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=================
elastictranscoder
=================
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_elastictranscoder
+ def test_elastictranscoder_behaviour:
+ boto3.client("elastictranscoder")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] cancel_job
- [ ] create_job
- [X] create_pipeline
diff --git a/docs/docs/services/elb.rst b/docs/docs/services/elb.rst
index b7d128dfb..b9edecc36 100644
--- a/docs/docs/services/elb.rst
+++ b/docs/docs/services/elb.rst
@@ -1,11 +1,32 @@
.. _implementedservice_elb:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
elb
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_elb
+ def test_elb_behaviour:
+ boto3.client("elb")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] add_tags
- [X] apply_security_groups_to_load_balancer
- [ ] attach_load_balancer_to_subnets
diff --git a/docs/docs/services/elbv2.rst b/docs/docs/services/elbv2.rst
index 7169d4453..b9d941b0f 100644
--- a/docs/docs/services/elbv2.rst
+++ b/docs/docs/services/elbv2.rst
@@ -1,11 +1,32 @@
.. _implementedservice_elbv2:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=====
elbv2
=====
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_elbv2
+ def test_elbv2_behaviour:
+ boto3.client("elbv2")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] add_listener_certificates
- [ ] add_tags
- [X] create_listener
diff --git a/docs/docs/services/emr-containers.rst b/docs/docs/services/emr-containers.rst
index 4f0245f99..fec5f12cd 100644
--- a/docs/docs/services/emr-containers.rst
+++ b/docs/docs/services/emr-containers.rst
@@ -1,11 +1,32 @@
.. _implementedservice_emr-containers:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
==============
emr-containers
==============
Implementation of EMRContainers APIs.
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_emrcontainers
+ def test_emr-containers_behaviour:
+ boto3.client("emr-containers")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] cancel_job_run
- [ ] create_managed_endpoint
- [X] create_virtual_cluster
diff --git a/docs/docs/services/emr.rst b/docs/docs/services/emr.rst
index f29db452e..ba1270a57 100644
--- a/docs/docs/services/emr.rst
+++ b/docs/docs/services/emr.rst
@@ -1,11 +1,32 @@
.. _implementedservice_emr:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
emr
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_emr
+ def test_emr_behaviour:
+ boto3.client("emr")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] add_instance_fleet
- [X] add_instance_groups
- [X] add_job_flow_steps
diff --git a/docs/docs/services/events.rst b/docs/docs/services/events.rst
index 5c822d6a9..086157f84 100644
--- a/docs/docs/services/events.rst
+++ b/docs/docs/services/events.rst
@@ -1,11 +1,32 @@
.. _implementedservice_events:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
======
events
======
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_events
+ def test_events_behaviour:
+ boto3.client("events")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] activate_event_source
- [X] cancel_replay
- [X] create_api_destination
diff --git a/docs/docs/services/firehose.rst b/docs/docs/services/firehose.rst
index 4030b3c10..979af1aed 100644
--- a/docs/docs/services/firehose.rst
+++ b/docs/docs/services/firehose.rst
@@ -1,11 +1,32 @@
.. _implementedservice_firehose:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
========
firehose
========
Implementation of Firehose APIs.
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_firehose
+ def test_firehose_behaviour:
+ boto3.client("firehose")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] create_delivery_stream
Create a Kinesis Data Firehose delivery stream.
diff --git a/docs/docs/services/forecast.rst b/docs/docs/services/forecast.rst
index 1ed6ba885..0f3e61070 100644
--- a/docs/docs/services/forecast.rst
+++ b/docs/docs/services/forecast.rst
@@ -1,11 +1,32 @@
.. _implementedservice_forecast:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
========
forecast
========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_forecast
+ def test_forecast_behaviour:
+ boto3.client("forecast")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] create_dataset
- [X] create_dataset_group
- [ ] create_dataset_import_job
diff --git a/docs/docs/services/glacier.rst b/docs/docs/services/glacier.rst
index b5c638150..e77e3d772 100644
--- a/docs/docs/services/glacier.rst
+++ b/docs/docs/services/glacier.rst
@@ -1,11 +1,32 @@
.. _implementedservice_glacier:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=======
glacier
=======
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_glacier
+ def test_glacier_behaviour:
+ boto3.client("glacier")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] abort_multipart_upload
- [ ] abort_vault_lock
- [ ] add_tags_to_vault
diff --git a/docs/docs/services/glue.rst b/docs/docs/services/glue.rst
index d256bddcd..c4a991a44 100644
--- a/docs/docs/services/glue.rst
+++ b/docs/docs/services/glue.rst
@@ -1,11 +1,32 @@
.. _implementedservice_glue:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
====
glue
====
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_glue
+ def test_glue_behaviour:
+ boto3.client("glue")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] batch_create_partition
- [ ] batch_delete_connection
- [ ] batch_delete_partition
diff --git a/docs/docs/services/iam.rst b/docs/docs/services/iam.rst
index 6dc8e045b..63324882d 100644
--- a/docs/docs/services/iam.rst
+++ b/docs/docs/services/iam.rst
@@ -1,11 +1,32 @@
.. _implementedservice_iam:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
iam
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_iam
+ def test_iam_behaviour:
+ boto3.client("iam")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] add_client_id_to_open_id_connect_provider
- [X] add_role_to_instance_profile
- [X] add_user_to_group
diff --git a/docs/docs/services/index.rst b/docs/docs/services/index.rst
index b8ef81849..9e700986f 100644
--- a/docs/docs/services/index.rst
+++ b/docs/docs/services/index.rst
@@ -5,85 +5,12 @@
Implemented Services
====================
+Please see a list of all currently supported services. Each service will have a list of the endpoints that are implemented.
- - :doc:`acm`
- - :doc:`apigateway`
- - :doc:`application-autoscaling`
- - :doc:`athena`
- - :doc:`autoscaling`
- - :doc:`batch`
- - :doc:`cloudformation`
- - :doc:`cloudtrail`
- - :doc:`cloudwatch`
- - :doc:`codecommit`
- - :doc:`codepipeline`
- - :doc:`cognito-identity`
- - :doc:`cognito-idp`
- - :doc:`config`
- - :doc:`datapipeline`
- - :doc:`datasync`
- - :doc:`dms`
- - :doc:`ds`
- - :doc:`dynamodb`
- - :doc:`dynamodbstreams`
- - :doc:`ec2`
- - :doc:`ec2-instance-connect`
- - :doc:`ecr`
- - :doc:`ecs`
- - :doc:`efs`
- - :doc:`eks`
- - :doc:`elasticbeanstalk`
- - :doc:`elastictranscoder`
- - :doc:`elb`
- - :doc:`elbv2`
- - :doc:`emr`
- - :doc:`emr-containers`
- - :doc:`events`
- - :doc:`firehose`
- - :doc:`forecast`
- - :doc:`glacier`
- - :doc:`glue`
- - :doc:`iam`
- - :doc:`iot`
- - :doc:`iot-data`
- - :doc:`kinesis`
- - :doc:`kinesis-video-archived-media`
- - :doc:`kinesisvideo`
- - :doc:`kms`
- - :doc:`lambda`
- - :doc:`logs`
- - :doc:`managedblockchain`
- - :doc:`mediaconnect`
- - :doc:`medialive`
- - :doc:`mediapackage`
- - :doc:`mediastore`
- - :doc:`mediastore-data`
- - :doc:`opsworks`
- - :doc:`organizations`
- - :doc:`polly`
- - :doc:`ram`
- - :doc:`rds`
- - :doc:`redshift`
- - :doc:`resource-groups`
- - :doc:`resourcegroupstaggingapi`
- - :doc:`route53`
- - :doc:`s3`
- - :doc:`sagemaker`
- - :doc:`secretsmanager`
- - :doc:`ses`
- - :doc:`sns`
- - :doc:`sqs`
- - :doc:`ssm`
- - :doc:`stepfunctions`
- - :doc:`sts`
- - :doc:`support`
- - :doc:`swf`
- - :doc:`timestream-write`
- - :doc:`transcribe`
- - :doc:`wafv2`
.. toctree::
- :hidden:
- :glob:
+ :titlesonly:
+ :maxdepth: 1
+ :glob:
- *
+ *
diff --git a/docs/docs/services/iot-data.rst b/docs/docs/services/iot-data.rst
index 37ee75927..03b6e5a65 100644
--- a/docs/docs/services/iot-data.rst
+++ b/docs/docs/services/iot-data.rst
@@ -1,11 +1,32 @@
.. _implementedservice_iot-data:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
========
iot-data
========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_iotdata
+ def test_iot-data_behaviour:
+ boto3.client("iot-data")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] delete_thing_shadow
after deleting, get_thing_shadow will raise ResourceNotFound.
But version of the shadow keep increasing...
diff --git a/docs/docs/services/iot.rst b/docs/docs/services/iot.rst
index e9faf03c9..b57e7a8e1 100644
--- a/docs/docs/services/iot.rst
+++ b/docs/docs/services/iot.rst
@@ -1,11 +1,32 @@
.. _implementedservice_iot:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
iot
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_iot
+ def test_iot_behaviour:
+ boto3.client("iot")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] accept_certificate_transfer
- [ ] add_thing_to_billing_group
- [X] add_thing_to_thing_group
diff --git a/docs/docs/services/kinesis-video-archived-media.rst b/docs/docs/services/kinesis-video-archived-media.rst
index 8043b0793..56d6db0cd 100644
--- a/docs/docs/services/kinesis-video-archived-media.rst
+++ b/docs/docs/services/kinesis-video-archived-media.rst
@@ -1,11 +1,32 @@
.. _implementedservice_kinesis-video-archived-media:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
============================
kinesis-video-archived-media
============================
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_kinesisvideoarchivedmedia
+ def test_kinesis-video-archived-media_behaviour:
+ boto3.client("kinesis-video-archived-media")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] get_clip
- [X] get_dash_streaming_session_url
- [X] get_hls_streaming_session_url
diff --git a/docs/docs/services/kinesis.rst b/docs/docs/services/kinesis.rst
index d18962ab1..6dab50e92 100644
--- a/docs/docs/services/kinesis.rst
+++ b/docs/docs/services/kinesis.rst
@@ -1,11 +1,32 @@
.. _implementedservice_kinesis:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=======
kinesis
=======
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_kinesis
+ def test_kinesis_behaviour:
+ boto3.client("kinesis")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] add_tags_to_stream
- [X] create_stream
- [X] decrease_stream_retention_period
diff --git a/docs/docs/services/kinesisvideo.rst b/docs/docs/services/kinesisvideo.rst
index d872a3753..49cb35f7f 100644
--- a/docs/docs/services/kinesisvideo.rst
+++ b/docs/docs/services/kinesisvideo.rst
@@ -1,11 +1,32 @@
.. _implementedservice_kinesisvideo:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
============
kinesisvideo
============
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_kinesisvideo
+ def test_kinesisvideo_behaviour:
+ boto3.client("kinesisvideo")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] create_signaling_channel
- [X] create_stream
- [ ] delete_signaling_channel
diff --git a/docs/docs/services/kms.rst b/docs/docs/services/kms.rst
index 14842e54a..b28dd7651 100644
--- a/docs/docs/services/kms.rst
+++ b/docs/docs/services/kms.rst
@@ -1,11 +1,32 @@
.. _implementedservice_kms:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
kms
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_kms
+ def test_kms_behaviour:
+ boto3.client("kms")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] cancel_key_deletion
- [ ] connect_custom_key_store
- [ ] create_alias
diff --git a/docs/docs/services/lambda.rst b/docs/docs/services/lambda.rst
index 3aa4372af..ad47dee9b 100644
--- a/docs/docs/services/lambda.rst
+++ b/docs/docs/services/lambda.rst
@@ -1,11 +1,32 @@
.. _implementedservice_lambda:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
======
lambda
======
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_lambda
+ def test_lambda_behaviour:
+ boto3.client("lambda")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] add_layer_version_permission
- [X] add_permission
- [ ] create_alias
diff --git a/docs/docs/services/logs.rst b/docs/docs/services/logs.rst
index 67b17bfcd..d8ffc4227 100644
--- a/docs/docs/services/logs.rst
+++ b/docs/docs/services/logs.rst
@@ -1,11 +1,32 @@
.. _implementedservice_logs:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
====
logs
====
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_logs
+ def test_logs_behaviour:
+ boto3.client("logs")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] associate_kms_key
- [ ] cancel_export_task
- [ ] create_export_task
diff --git a/docs/docs/services/managedblockchain.rst b/docs/docs/services/managedblockchain.rst
index 30d0d90a0..d30e94c9c 100644
--- a/docs/docs/services/managedblockchain.rst
+++ b/docs/docs/services/managedblockchain.rst
@@ -1,11 +1,32 @@
.. _implementedservice_managedblockchain:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=================
managedblockchain
=================
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_managedblockchain
+ def test_managedblockchain_behaviour:
+ boto3.client("managedblockchain")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] create_member
- [X] create_network
- [X] create_node
diff --git a/docs/docs/services/mediaconnect.rst b/docs/docs/services/mediaconnect.rst
index 7372ddf71..8af5d96b4 100644
--- a/docs/docs/services/mediaconnect.rst
+++ b/docs/docs/services/mediaconnect.rst
@@ -1,11 +1,32 @@
.. _implementedservice_mediaconnect:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
============
mediaconnect
============
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_mediaconnect
+ def test_mediaconnect_behaviour:
+ boto3.client("mediaconnect")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] add_flow_media_streams
- [X] add_flow_outputs
- [ ] add_flow_sources
diff --git a/docs/docs/services/medialive.rst b/docs/docs/services/medialive.rst
index 1592daa04..5ab9ec90b 100644
--- a/docs/docs/services/medialive.rst
+++ b/docs/docs/services/medialive.rst
@@ -1,11 +1,32 @@
.. _implementedservice_medialive:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=========
medialive
=========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_medialive
+ def test_medialive_behaviour:
+ boto3.client("medialive")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] accept_input_device_transfer
- [ ] batch_delete
- [ ] batch_start
diff --git a/docs/docs/services/mediapackage.rst b/docs/docs/services/mediapackage.rst
index ca57c3569..397e293f0 100644
--- a/docs/docs/services/mediapackage.rst
+++ b/docs/docs/services/mediapackage.rst
@@ -1,11 +1,32 @@
.. _implementedservice_mediapackage:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
============
mediapackage
============
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_mediapackage
+ def test_mediapackage_behaviour:
+ boto3.client("mediapackage")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] configure_logs
- [X] create_channel
- [ ] create_harvest_job
diff --git a/docs/docs/services/mediastore-data.rst b/docs/docs/services/mediastore-data.rst
index 2a9973f85..55d2a19c7 100644
--- a/docs/docs/services/mediastore-data.rst
+++ b/docs/docs/services/mediastore-data.rst
@@ -1,11 +1,32 @@
.. _implementedservice_mediastore-data:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===============
mediastore-data
===============
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_mediastoredata
+ def test_mediastore-data_behaviour:
+ boto3.client("mediastore-data")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] delete_object
- [ ] describe_object
- [X] get_object
diff --git a/docs/docs/services/mediastore.rst b/docs/docs/services/mediastore.rst
index eb68574d2..39f8d54aa 100644
--- a/docs/docs/services/mediastore.rst
+++ b/docs/docs/services/mediastore.rst
@@ -1,11 +1,32 @@
.. _implementedservice_mediastore:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
==========
mediastore
==========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_mediastore
+ def test_mediastore_behaviour:
+ boto3.client("mediastore")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] create_container
- [X] delete_container
- [ ] delete_container_policy
diff --git a/docs/docs/services/opsworks.rst b/docs/docs/services/opsworks.rst
index 57e7ccf6c..a41d5fa12 100644
--- a/docs/docs/services/opsworks.rst
+++ b/docs/docs/services/opsworks.rst
@@ -1,11 +1,32 @@
.. _implementedservice_opsworks:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
========
opsworks
========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_opsworks
+ def test_opsworks_behaviour:
+ boto3.client("opsworks")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] assign_instance
- [ ] assign_volume
- [ ] associate_elastic_ip
diff --git a/docs/docs/services/organizations.rst b/docs/docs/services/organizations.rst
index b93a148e0..4c1803b0e 100644
--- a/docs/docs/services/organizations.rst
+++ b/docs/docs/services/organizations.rst
@@ -1,11 +1,32 @@
.. _implementedservice_organizations:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=============
organizations
=============
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_organizations
+ def test_organizations_behaviour:
+ boto3.client("organizations")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] accept_handshake
- [X] attach_policy
- [ ] cancel_handshake
diff --git a/docs/docs/services/polly.rst b/docs/docs/services/polly.rst
index 1fc5f30ef..1a7b3a18e 100644
--- a/docs/docs/services/polly.rst
+++ b/docs/docs/services/polly.rst
@@ -1,11 +1,32 @@
.. _implementedservice_polly:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=====
polly
=====
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_polly
+ def test_polly_behaviour:
+ boto3.client("polly")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] delete_lexicon
- [X] describe_voices
- [X] get_lexicon
diff --git a/docs/docs/services/ram.rst b/docs/docs/services/ram.rst
index 31e3e93f9..12ac01168 100644
--- a/docs/docs/services/ram.rst
+++ b/docs/docs/services/ram.rst
@@ -1,11 +1,32 @@
.. _implementedservice_ram:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
ram
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_ram
+ def test_ram_behaviour:
+ boto3.client("ram")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] accept_resource_share_invitation
- [ ] associate_resource_share
- [ ] associate_resource_share_permission
diff --git a/docs/docs/services/rds.rst b/docs/docs/services/rds.rst
index 50a935cf1..b345b1705 100644
--- a/docs/docs/services/rds.rst
+++ b/docs/docs/services/rds.rst
@@ -1,11 +1,32 @@
.. _implementedservice_rds:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
rds
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_rds2
+ def test_rds_behaviour:
+ boto3.client("rds")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] add_role_to_db_cluster
- [ ] add_role_to_db_instance
- [ ] add_source_identifier_to_subscription
diff --git a/docs/docs/services/redshift.rst b/docs/docs/services/redshift.rst
index 21c1f204c..b4233a813 100644
--- a/docs/docs/services/redshift.rst
+++ b/docs/docs/services/redshift.rst
@@ -1,11 +1,32 @@
.. _implementedservice_redshift:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
========
redshift
========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_redshift
+ def test_redshift_behaviour:
+ boto3.client("redshift")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] accept_reserved_node_exchange
- [ ] add_partner
- [ ] associate_data_share_consumer
diff --git a/docs/docs/services/resource-groups.rst b/docs/docs/services/resource-groups.rst
index fea5247ef..1bed36402 100644
--- a/docs/docs/services/resource-groups.rst
+++ b/docs/docs/services/resource-groups.rst
@@ -1,11 +1,32 @@
.. _implementedservice_resource-groups:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===============
resource-groups
===============
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_resourcegroups
+ def test_resource-groups_behaviour:
+ boto3.client("resource-groups")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] create_group
- [X] delete_group
- [X] get_group
diff --git a/docs/docs/services/resourcegroupstaggingapi.rst b/docs/docs/services/resourcegroupstaggingapi.rst
index 8b5779bc3..dff259ab1 100644
--- a/docs/docs/services/resourcegroupstaggingapi.rst
+++ b/docs/docs/services/resourcegroupstaggingapi.rst
@@ -1,11 +1,32 @@
.. _implementedservice_resourcegroupstaggingapi:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
========================
resourcegroupstaggingapi
========================
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_resourcegroupstaggingapi
+ def test_resourcegroupstaggingapi_behaviour:
+ boto3.client("resourcegroupstaggingapi")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] describe_report_creation
- [ ] get_compliance_summary
- [X] get_resources
diff --git a/docs/docs/services/route53.rst b/docs/docs/services/route53.rst
index 75ea83eaa..3dbb2a70e 100644
--- a/docs/docs/services/route53.rst
+++ b/docs/docs/services/route53.rst
@@ -1,11 +1,32 @@
.. _implementedservice_route53:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=======
route53
=======
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_route53
+ def test_route53_behaviour:
+ boto3.client("route53")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] activate_key_signing_key
- [ ] associate_vpc_with_hosted_zone
- [X] change_resource_record_sets
diff --git a/docs/docs/services/s3.rst b/docs/docs/services/s3.rst
index 2eb84b833..65d255bd6 100644
--- a/docs/docs/services/s3.rst
+++ b/docs/docs/services/s3.rst
@@ -1,11 +1,32 @@
.. _implementedservice_s3:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
==
s3
==
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_s3
+ def test_s3_behaviour:
+ boto3.client("s3")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] abort_multipart_upload
- [X] complete_multipart_upload
- [X] copy_object
diff --git a/docs/docs/services/sagemaker.rst b/docs/docs/services/sagemaker.rst
index dd560ca29..1d4575474 100644
--- a/docs/docs/services/sagemaker.rst
+++ b/docs/docs/services/sagemaker.rst
@@ -1,11 +1,32 @@
.. _implementedservice_sagemaker:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=========
sagemaker
=========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_sagemaker
+ def test_sagemaker_behaviour:
+ boto3.client("sagemaker")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] add_association
- [ ] add_tags
- [X] associate_trial_component
diff --git a/docs/docs/services/secretsmanager.rst b/docs/docs/services/secretsmanager.rst
index aabda6f1f..89a169d91 100644
--- a/docs/docs/services/secretsmanager.rst
+++ b/docs/docs/services/secretsmanager.rst
@@ -1,11 +1,32 @@
.. _implementedservice_secretsmanager:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
==============
secretsmanager
==============
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_secretsmanager
+ def test_secretsmanager_behaviour:
+ boto3.client("secretsmanager")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] cancel_rotate_secret
- [X] create_secret
- [ ] delete_resource_policy
diff --git a/docs/docs/services/ses.rst b/docs/docs/services/ses.rst
index d60cc253f..50fa90c4a 100644
--- a/docs/docs/services/ses.rst
+++ b/docs/docs/services/ses.rst
@@ -1,11 +1,32 @@
.. _implementedservice_ses:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
ses
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_ses
+ def test_ses_behaviour:
+ boto3.client("ses")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] clone_receipt_rule_set
- [X] create_configuration_set
- [X] create_configuration_set_event_destination
diff --git a/docs/docs/services/sns.rst b/docs/docs/services/sns.rst
index a189766c1..c0e26b4a1 100644
--- a/docs/docs/services/sns.rst
+++ b/docs/docs/services/sns.rst
@@ -1,11 +1,32 @@
.. _implementedservice_sns:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
sns
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_sns
+ def test_sns_behaviour:
+ boto3.client("sns")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] add_permission
- [ ] check_if_phone_number_is_opted_out
- [ ] confirm_subscription
diff --git a/docs/docs/services/sqs.rst b/docs/docs/services/sqs.rst
index 28bd1d719..314d45e7b 100644
--- a/docs/docs/services/sqs.rst
+++ b/docs/docs/services/sqs.rst
@@ -1,11 +1,32 @@
.. _implementedservice_sqs:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
sqs
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_sqs
+ def test_sqs_behaviour:
+ boto3.client("sqs")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] add_permission
- [X] change_message_visibility
- [ ] change_message_visibility_batch
diff --git a/docs/docs/services/ssm.rst b/docs/docs/services/ssm.rst
index 7598630b4..a1f866590 100644
--- a/docs/docs/services/ssm.rst
+++ b/docs/docs/services/ssm.rst
@@ -1,11 +1,32 @@
.. _implementedservice_ssm:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
ssm
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_ssm
+ def test_ssm_behaviour:
+ boto3.client("ssm")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] add_tags_to_resource
- [ ] associate_ops_item_related_item
- [ ] cancel_command
diff --git a/docs/docs/services/stepfunctions.rst b/docs/docs/services/stepfunctions.rst
index 0cd1c2934..ac3528ed2 100644
--- a/docs/docs/services/stepfunctions.rst
+++ b/docs/docs/services/stepfunctions.rst
@@ -1,11 +1,32 @@
.. _implementedservice_stepfunctions:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=============
stepfunctions
=============
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_stepfunctions
+ def test_stepfunctions_behaviour:
+ boto3.client("stepfunctions")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] create_activity
- [X] create_state_machine
- [ ] delete_activity
diff --git a/docs/docs/services/sts.rst b/docs/docs/services/sts.rst
index 4d04ccffc..242e46574 100644
--- a/docs/docs/services/sts.rst
+++ b/docs/docs/services/sts.rst
@@ -1,11 +1,32 @@
.. _implementedservice_sts:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
sts
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_sts
+ def test_sts_behaviour:
+ boto3.client("sts")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] assume_role
- [X] assume_role_with_saml
- [X] assume_role_with_web_identity
diff --git a/docs/docs/services/support.rst b/docs/docs/services/support.rst
index e96844c08..6b73a3a5a 100644
--- a/docs/docs/services/support.rst
+++ b/docs/docs/services/support.rst
@@ -1,11 +1,32 @@
.. _implementedservice_support:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=======
support
=======
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_support
+ def test_support_behaviour:
+ boto3.client("support")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] add_attachments_to_set
- [ ] add_communication_to_case
- [X] create_case
diff --git a/docs/docs/services/swf.rst b/docs/docs/services/swf.rst
index 8a1608eb4..27656d61b 100644
--- a/docs/docs/services/swf.rst
+++ b/docs/docs/services/swf.rst
@@ -1,11 +1,32 @@
.. _implementedservice_swf:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
===
swf
===
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_swf
+ def test_swf_behaviour:
+ boto3.client("swf")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] count_closed_workflow_executions
- [ ] count_open_workflow_executions
- [X] count_pending_activity_tasks
diff --git a/docs/docs/services/timestream-write.rst b/docs/docs/services/timestream-write.rst
index 9ac089b6a..8a8d12768 100644
--- a/docs/docs/services/timestream-write.rst
+++ b/docs/docs/services/timestream-write.rst
@@ -1,11 +1,32 @@
.. _implementedservice_timestream-write:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
================
timestream-write
================
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_timestreamwrite
+ def test_timestream-write_behaviour:
+ boto3.client("timestream-write")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [X] create_database
- [X] create_table
- [X] delete_database
diff --git a/docs/docs/services/transcribe.rst b/docs/docs/services/transcribe.rst
index bd241e5e9..320c6b6f1 100644
--- a/docs/docs/services/transcribe.rst
+++ b/docs/docs/services/transcribe.rst
@@ -1,11 +1,32 @@
.. _implementedservice_transcribe:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
==========
transcribe
==========
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_transcribe
+ def test_transcribe_behaviour:
+ boto3.client("transcribe")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] create_call_analytics_category
- [ ] create_language_model
- [X] create_medical_vocabulary
diff --git a/docs/docs/services/wafv2.rst b/docs/docs/services/wafv2.rst
index ada1b86c4..a1567e1a1 100644
--- a/docs/docs/services/wafv2.rst
+++ b/docs/docs/services/wafv2.rst
@@ -1,5 +1,13 @@
.. _implementedservice_wafv2:
+.. |start-h3| raw:: html
+
+
+
+.. |end-h3| raw:: html
+
+
+
=====
wafv2
=====
@@ -8,6 +16,19 @@ wafv2
https://docs.aws.amazon.com/waf/latest/APIReference/API_Operations_AWS_WAFV2.html
+|start-h3| Example usage |end-h3|
+
+.. sourcecode:: python
+
+ @mock_wafv2
+ def test_wafv2_behaviour:
+ boto3.client("wafv2")
+ ...
+
+
+
+|start-h3| Implemented features for this service |end-h3|
+
- [ ] associate_web_acl
- [ ] check_capacity
- [ ] create_ip_set
diff --git a/docs/index.rst b/docs/index.rst
index 6af61362a..3aa53ee02 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -28,11 +28,31 @@ Additional Resources
.. toctree::
:maxdepth: 2
:hidden:
- :glob:
+ :caption: Getting Started
docs/getting_started
docs/server_mode
docs/boto
docs/iam
docs/aws_config
- docs/services/index
+
+.. toctree::
+ :maxdepth: 1
+ :hidden:
+ :caption: Implemented Services
+
+ docs/services/index
+
+.. toctree::
+ :maxdepth: 1
+ :hidden:
+ :glob:
+ :caption: Contributing to Moto
+
+ docs/contributing/index
+ docs/contributing/installation
+ docs/contributing/architecture
+ docs/contributing/new_feature
+ docs/contributing/development_tips
+ docs/contributing/checklist
+ docs/contributing/faq
diff --git a/scripts/implementation_coverage.py b/scripts/implementation_coverage.py
index 0d086dd50..94b9c0fb6 100755
--- a/scripts/implementation_coverage.py
+++ b/scripts/implementation_coverage.py
@@ -19,24 +19,26 @@ def get_moto_implementation(service_name):
if service_name in alternative_service_names
else service_name
)
+ mock = None
+ mock_name = None
if hasattr(moto, "mock_{}".format(alt_service_name)):
- mock = getattr(moto, "mock_{}".format(alt_service_name))
+ mock_name = "mock_{}".format(alt_service_name)
+ mock = getattr(moto, mock_name)
elif hasattr(moto, "mock_{}".format(service_name)):
- mock = getattr(moto, "mock_{}".format(service_name))
- else:
- mock = None
+ mock_name = "mock_{}".format(service_name)
+ mock = getattr(moto, mock_name)
if mock is None:
- return None
+ return None, None
backends = list(mock().backends.values())
if backends:
- return backends[0]
+ return backends[0], mock_name
def calculate_extended_implementation_coverage():
service_names = Session().get_available_services()
coverage = {}
for service_name in service_names:
- moto_client = get_moto_implementation(service_name)
+ moto_client, mock_name = get_moto_implementation(service_name)
real_client = boto3.client(service_name, region_name="us-east-1")
implemented = dict()
not_implemented = []
@@ -52,6 +54,7 @@ def calculate_extended_implementation_coverage():
coverage[service_name] = {
"docs": moto_client.__doc__,
+ "name": mock_name,
"implemented": implemented,
"not_implemented": not_implemented,
}
@@ -62,7 +65,7 @@ def calculate_implementation_coverage():
service_names = Session().get_available_services()
coverage = {}
for service_name in service_names:
- moto_client = get_moto_implementation(service_name)
+ moto_client, _ = get_moto_implementation(service_name)
real_client = boto3.client(service_name, region_name="us-east-1")
implemented = []
not_implemented = []
@@ -184,6 +187,14 @@ def write_implementation_coverage_to_docs(coverage):
file.write(f".. _implementedservice_{shorthand}:\n")
file.write("\n")
+ file.write(".. |start-h3| raw:: html\n\n")
+ file.write(" ")
+ file.write("\n\n")
+
+ file.write(".. |end-h3| raw:: html\n\n")
+ file.write("
")
+ file.write("\n\n")
+
title = f"{service_name}"
file.write("=" * len(title) + "\n")
file.write(title + "\n")
@@ -193,6 +204,19 @@ def write_implementation_coverage_to_docs(coverage):
file.write(coverage[service_name].get("docs") or "")
file.write("\n\n")
+ file.write("|start-h3| Example usage |end-h3|\n\n")
+ file.write(f""".. sourcecode:: python
+
+ @{coverage[service_name]['name']}
+ def test_{service_name}_behaviour:
+ boto3.client("{service_name}")
+ ...
+
+""")
+ file.write("\n\n")
+
+ file.write("|start-h3| Implemented features for this service |end-h3|\n\n")
+
for op in operations:
if op in implemented:
file.write("- [X] {}\n".format(op))
@@ -203,6 +227,7 @@ def write_implementation_coverage_to_docs(coverage):
file.write("- [ ] {}\n".format(op))
file.write("\n")
+
with open(implementation_coverage_file, "w+") as file:
file.write(".. _implemented_services:\n")
file.write("\n")
@@ -212,20 +237,16 @@ def write_implementation_coverage_to_docs(coverage):
file.write("Implemented Services\n")
file.write("====================\n")
file.write("\n")
+ file.write("Please see a list of all currently supported services. Each service will have a list of the endpoints that are implemented.\n")
file.write("\n")
- for service_name in sorted(coverage):
- implemented = coverage.get(service_name)["implemented"]
- if len(implemented) == 0:
- continue
- file.write(f" - :doc:`{service_name }`\n")
-
file.write("\n")
file.write(".. toctree::\n")
- file.write(" :hidden:\n")
- file.write(" :glob:\n")
+ file.write(" :titlesonly:\n")
+ file.write(" :maxdepth: 1\n")
+ file.write(" :glob:\n")
file.write("\n")
- file.write(" *\n")
+ file.write(" *\n")
if __name__ == "__main__":
diff --git a/scripts/scaffold.py b/scripts/scaffold.py
index 974df28c9..ba30d8dda 100755
--- a/scripts/scaffold.py
+++ b/scripts/scaffold.py
@@ -518,6 +518,13 @@ def insert_codes(service, operation, api_protocol):
@click.command()
def main():
+
+ click.echo("This script uses the click-module.\n")
+ click.echo(" - Start typing the name of the service you want to extend\n"
+ " - Use Tab to auto-complete the first suggest service\n"
+ " - Use the up and down-arrows on the keyboard to select something from the dropdown\n"
+ " - Press enter to continue\n")
+
"""Create basic files needed for the user's choice of service and op."""
service, operation = select_service_and_operation()
@@ -535,9 +542,9 @@ def main():
)
click.echo(
- "Remaining setup:\n"
- '- Add the mock into "docs/index.rst",\n'
- '- Add the mock into "IMPLEMENTATION_COVERAGE.md",\n'
+ "\n"
+ "Remaining steps after development is complete:\n"
+ '- Run scripts/implementation_coverage.py,\n'
"- Run scripts/update_backend_index.py."
)