Prep 2.2.17 release (#4642)

This commit is contained in:
Bert Blommers 2021-11-29 19:35:18 -01:00 committed by GitHub
parent 39fff64493
commit 9258316e16
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 228 additions and 90 deletions

View File

@ -1,7 +0,0 @@
[bumpversion]
current_version = 1.3.4
[bumpversion:file:setup.py]
[bumpversion:file:moto/__init__.py]

View File

@ -170,8 +170,8 @@ jobs:
- name: Start MotoServer
run: |
python setup.py sdist
docker run --rm -t --name motoserver -e TEST_SERVER_MODE=true -e AWS_SECRET_ACCESS_KEY=server_secret -e AWS_ACCESS_KEY_ID=server_key -v `pwd`:/moto -p 5000:5000 -v /var/run/docker.sock:/var/run/docker.sock python:3.7-buster /moto/travis_moto_server.sh &
python wait_for.py
docker run --rm -t --name motoserver -e TEST_SERVER_MODE=true -e AWS_SECRET_ACCESS_KEY=server_secret -e AWS_ACCESS_KEY_ID=server_key -v `pwd`:/moto -p 5000:5000 -v /var/run/docker.sock:/var/run/docker.sock python:3.7-buster /moto/scripts/ci_moto_server.sh &
python scripts/ci_wait_for_server.py
- name: Get pip cache dir
id: pip-cache
run: |
@ -290,8 +290,8 @@ jobs:
- name: Start MotoServer
run: |
python setup.py sdist
docker run --rm -t --name motoserver -e TEST_SERVER_MODE=true -e MOTO_PORT=4566 -e AWS_SECRET_ACCESS_KEY=server_secret -e AWS_ACCESS_KEY_ID=server_key -v `pwd`:/moto -p 4566:4566 -v /var/run/docker.sock:/var/run/docker.sock python:3.7-buster /moto/travis_moto_server.sh &
MOTO_PORT=4566 python wait_for.py
docker run --rm -t --name motoserver -e TEST_SERVER_MODE=true -e MOTO_PORT=4566 -e AWS_SECRET_ACCESS_KEY=server_secret -e AWS_ACCESS_KEY_ID=server_key -v `pwd`:/moto -p 4566:4566 -v /var/run/docker.sock:/var/run/docker.sock python:3.7-buster /moto/scripts/ci_moto_server.sh &
MOTO_PORT=4566 python scripts/ci_wait_for_server.py
# Poor man's parallelization
# Running them sequentially takes to much time
# And using the build in parallel-argument does not help with reducing runtime

View File

@ -1,6 +1,44 @@
Moto Changelog
===================
2.2.17
------
New Services:
* CloudFront:
* create_distribution()
* delete_distribution()
* get_distribution()
* list_distributions()
New Methods:
* Autoscaling:
* describe_tags()
* CloudFormation:
* get_stack_policy()
* set_stack_policy()
* DynamoDB:
* restore_table_to_point_in_time()
* Glue:
* delete_database()
* list_jobs()
* IAM:
* update_group()
* Route53 Resolver:
* associate_resolver_rule()
* create_resolver_rule()
* delete_resolver_rule()
* disassociate_resolver_rule()
* get_resolver_rule()
* get_resolver_rule_association()
* list_resolver_rules()
* list_resolver_rule_associations()
Miscellaneous:
* Batch: register_job_definition() now supports the timeout-parameter
* Batch: submit_job() now supports the timeout-parameter
* EC2: describe_network_interfaces() now supports the `attachment.instance-id` filter
2.2.16
------
New Services:

View File

@ -204,7 +204,7 @@
## autoscaling
<details>
<summary>45% implemented</summary>
<summary>47% implemented</summary>
- [X] attach_instances
- [X] attach_load_balancer_target_groups
@ -241,7 +241,7 @@
- [ ] describe_scaling_activities
- [ ] describe_scaling_process_types
- [ ] describe_scheduled_actions
- [ ] describe_tags
- [X] describe_tags
- [ ] describe_termination_policy_types
- [ ] describe_warm_pool
- [X] detach_instances
@ -329,7 +329,7 @@
## cloudformation
<details>
<summary>27% implemented</summary>
<summary>30% implemented</summary>
- [ ] activate_type
- [ ] batch_describe_type_configurations
@ -364,7 +364,7 @@
- [ ] detect_stack_set_drift
- [ ] estimate_template_cost
- [X] execute_change_set
- [ ] get_stack_policy
- [X] get_stack_policy
- [ ] get_template
- [ ] get_template_summary
- [ ] import_stacks_to_stack_set
@ -385,7 +385,7 @@
- [ ] register_publisher
- [ ] register_type
- [ ] rollback_stack
- [ ] set_stack_policy
- [X] set_stack_policy
- [ ] set_type_configuration
- [ ] set_type_default_version
- [ ] signal_resource
@ -1119,7 +1119,7 @@
## dynamodb
<details>
<summary>56% implemented</summary>
<summary>58% implemented</summary>
- [ ] batch_execute_statement
- [X] batch_get_item
@ -1157,7 +1157,7 @@
- [X] put_item
- [X] query
- [X] restore_table_from_backup
- [ ] restore_table_to_point_in_time
- [X] restore_table_to_point_in_time
- [X] scan
- [X] tag_resource
- [X] transact_get_items
@ -1579,6 +1579,7 @@
- [ ] modify_launch_template
- [X] modify_managed_prefix_list
- [X] modify_network_interface_attribute
- [ ] modify_private_dns_name_options
- [ ] modify_reserved_instances
- [ ] modify_security_group_rules
- [ ] modify_snapshot_attribute
@ -2149,11 +2150,14 @@
## forecast
<details>
<summary>14% implemented</summary>
<summary>11% implemented</summary>
- [ ] create_auto_predictor
- [ ] create_dataset
- [X] create_dataset_group
- [ ] create_dataset_import_job
- [ ] create_explainability
- [ ] create_explainability_export
- [ ] create_forecast
- [ ] create_forecast_export_job
- [ ] create_predictor
@ -2161,14 +2165,19 @@
- [ ] delete_dataset
- [X] delete_dataset_group
- [ ] delete_dataset_import_job
- [ ] delete_explainability
- [ ] delete_explainability_export
- [ ] delete_forecast
- [ ] delete_forecast_export_job
- [ ] delete_predictor
- [ ] delete_predictor_backtest_export_job
- [ ] delete_resource_tree
- [ ] describe_auto_predictor
- [ ] describe_dataset
- [X] describe_dataset_group
- [ ] describe_dataset_import_job
- [ ] describe_explainability
- [ ] describe_explainability_export
- [ ] describe_forecast
- [ ] describe_forecast_export_job
- [ ] describe_predictor
@ -2177,6 +2186,8 @@
- [X] list_dataset_groups
- [ ] list_dataset_import_jobs
- [ ] list_datasets
- [ ] list_explainabilities
- [ ] list_explainability_exports
- [ ] list_forecast_export_jobs
- [ ] list_forecasts
- [ ] list_predictor_backtest_export_jobs
@ -2229,7 +2240,7 @@
## glue
<details>
<summary>8% implemented</summary>
<summary>9% implemented</summary>
- [ ] batch_create_partition
- [ ] batch_delete_connection
@ -2271,7 +2282,7 @@
- [ ] delete_column_statistics_for_table
- [ ] delete_connection
- [X] delete_crawler
- [ ] delete_database
- [X] delete_database
- [ ] delete_dev_endpoint
- [ ] delete_job
- [ ] delete_ml_transform
@ -2346,7 +2357,7 @@
- [ ] list_blueprints
- [ ] list_crawlers
- [ ] list_dev_endpoints
- [ ] list_jobs
- [X] list_jobs
- [ ] list_ml_transforms
- [ ] list_registries
- [ ] list_schema_versions
@ -2547,7 +2558,7 @@
- [X] update_access_key
- [X] update_account_password_policy
- [ ] update_assume_role_policy
- [ ] update_group
- [X] update_group
- [X] update_login_profile
- [ ] update_open_id_connect_provider_thumbprint
- [X] update_role
@ -2565,7 +2576,7 @@
## iot
<details>
<summary>28% implemented</summary>
<summary>27% implemented</summary>
- [ ] accept_certificate_transfer
- [ ] add_thing_to_billing_group
@ -2664,6 +2675,7 @@
- [X] describe_job
- [X] describe_job_execution
- [ ] describe_job_template
- [ ] describe_managed_job_template
- [ ] describe_mitigation_action
- [ ] describe_provisioning_template
- [ ] describe_provisioning_template_version
@ -2720,6 +2732,7 @@
- [X] list_job_executions_for_thing
- [ ] list_job_templates
- [X] list_jobs
- [ ] list_managed_job_templates
- [ ] list_mitigation_actions
- [ ] list_ota_updates
- [ ] list_outgoing_certificates
@ -3544,6 +3557,7 @@
- [ ] promote_read_replica
- [ ] promote_read_replica_db_cluster
- [ ] purchase_reserved_db_instances_offering
- [ ] reboot_db_cluster
- [X] reboot_db_instance
- [ ] register_db_proxy_targets
- [ ] remove_from_global_cluster
@ -3573,7 +3587,7 @@
## redshift
<details>
<summary>24% implemented</summary>
<summary>23% implemented</summary>
- [ ] accept_reserved_node_exchange
- [ ] add_partner
@ -3644,6 +3658,7 @@
- [ ] describe_node_configuration_options
- [ ] describe_orderable_cluster_options
- [ ] describe_partners
- [ ] describe_reserved_node_exchange_status
- [ ] describe_reserved_node_offerings
- [ ] describe_reserved_nodes
- [ ] describe_resize
@ -3660,6 +3675,7 @@
- [ ] enable_logging
- [X] enable_snapshot_copy
- [X] get_cluster_credentials
- [ ] get_reserved_node_exchange_configuration_options
- [ ] get_reserved_node_exchange_offerings
- [ ] modify_aqua_configuration
- [ ] modify_authentication_profile
@ -3801,7 +3817,7 @@
## route53resolver
<details>
<summary>27% implemented</summary>
<summary>26% implemented</summary>
- [ ] associate_firewall_rule_group
- [ ] associate_resolver_endpoint_ip_address
@ -4911,6 +4927,7 @@
- meteringmarketplace
- mgh
- mgn
- migration-hub-refactor-spaces
- migrationhub-config
- migrationhubstrategy
- mobile

View File

@ -60,7 +60,12 @@ autoscaling
- [ ] describe_scaling_activities
- [ ] describe_scaling_process_types
- [ ] describe_scheduled_actions
- [ ] describe_tags
- [X] describe_tags
Pagination is not yet implemented.
Only the `auto-scaling-group` and `propagate-at-launch` filters are implemented.
- [ ] describe_termination_policy_types
- [ ] describe_warm_pool
- [X] detach_instances

View File

@ -58,7 +58,7 @@ cloudformation
- [ ] detect_stack_set_drift
- [ ] estimate_template_cost
- [X] execute_change_set
- [ ] get_stack_policy
- [X] get_stack_policy
- [ ] get_template
- [ ] get_template_summary
- [ ] import_stacks_to_stack_set
@ -79,7 +79,11 @@ cloudformation
- [ ] register_publisher
- [ ] register_type
- [ ] rollback_stack
- [ ] set_stack_policy
- [X] set_stack_policy
Note that Moto does no validation/parsing/enforcement of this policy - we simply persist it.
- [ ] set_type_configuration
- [ ] set_type_default_version
- [ ] signal_resource

View File

@ -62,6 +62,11 @@ dynamodb
- [X] query
- [X] restore_table_from_backup
- [X] restore_table_to_point_in_time
Currently this only accepts the source and target table elements, and will
copy all items from the source without respect to other arguments.
- [X] scan
- [X] tag_resource
- [X] transact_get_items

View File

@ -428,6 +428,7 @@ ec2
- [ ] modify_launch_template
- [X] modify_managed_prefix_list
- [X] modify_network_interface_attribute
- [ ] modify_private_dns_name_options
- [ ] modify_reserved_instances
- [ ] modify_security_group_rules
- [ ] modify_snapshot_attribute

View File

@ -25,9 +25,12 @@ forecast
|start-h3| Implemented features for this service |end-h3|
- [ ] create_auto_predictor
- [ ] create_dataset
- [X] create_dataset_group
- [ ] create_dataset_import_job
- [ ] create_explainability
- [ ] create_explainability_export
- [ ] create_forecast
- [ ] create_forecast_export_job
- [ ] create_predictor
@ -35,14 +38,19 @@ forecast
- [ ] delete_dataset
- [X] delete_dataset_group
- [ ] delete_dataset_import_job
- [ ] delete_explainability
- [ ] delete_explainability_export
- [ ] delete_forecast
- [ ] delete_forecast_export_job
- [ ] delete_predictor
- [ ] delete_predictor_backtest_export_job
- [ ] delete_resource_tree
- [ ] describe_auto_predictor
- [ ] describe_dataset
- [X] describe_dataset_group
- [ ] describe_dataset_import_job
- [ ] describe_explainability
- [ ] describe_explainability_export
- [ ] describe_forecast
- [ ] describe_forecast_export_job
- [ ] describe_predictor
@ -51,6 +59,8 @@ forecast
- [X] list_dataset_groups
- [ ] list_dataset_import_jobs
- [ ] list_datasets
- [ ] list_explainabilities
- [ ] list_explainability_exports
- [ ] list_forecast_export_jobs
- [ ] list_forecasts
- [ ] list_predictor_backtest_export_jobs

View File

@ -65,7 +65,7 @@ glue
- [ ] delete_column_statistics_for_table
- [ ] delete_connection
- [X] delete_crawler
- [ ] delete_database
- [X] delete_database
- [ ] delete_dev_endpoint
- [ ] delete_job
- [ ] delete_ml_transform
@ -140,7 +140,7 @@ glue
- [ ] list_blueprints
- [ ] list_crawlers
- [ ] list_dev_endpoints
- [ ] list_jobs
- [X] list_jobs
- [ ] list_ml_transforms
- [ ] list_registries
- [ ] list_schema_versions

View File

@ -173,7 +173,7 @@ iam
- [X] update_access_key
- [X] update_account_password_policy
- [ ] update_assume_role_policy
- [ ] update_group
- [X] update_group
- [X] update_login_profile
- [ ] update_open_id_connect_provider_thumbprint
- [X] update_role

View File

@ -122,6 +122,7 @@ iot
- [X] describe_job
- [X] describe_job_execution
- [ ] describe_job_template
- [ ] describe_managed_job_template
- [ ] describe_mitigation_action
- [ ] describe_provisioning_template
- [ ] describe_provisioning_template_version
@ -178,6 +179,7 @@ iot
- [X] list_job_executions_for_thing
- [ ] list_job_templates
- [X] list_jobs
- [ ] list_managed_job_templates
- [ ] list_mitigation_actions
- [ ] list_ota_updates
- [ ] list_outgoing_certificates

View File

@ -140,6 +140,7 @@ rds
- [ ] promote_read_replica
- [ ] promote_read_replica_db_cluster
- [ ] purchase_reserved_db_instances_offering
- [ ] reboot_db_cluster
- [X] reboot_db_instance
- [ ] register_db_proxy_targets
- [ ] remove_from_global_cluster

View File

@ -94,6 +94,7 @@ redshift
- [ ] describe_node_configuration_options
- [ ] describe_orderable_cluster_options
- [ ] describe_partners
- [ ] describe_reserved_node_exchange_status
- [ ] describe_reserved_node_offerings
- [ ] describe_reserved_nodes
- [ ] describe_resize
@ -110,6 +111,7 @@ redshift
- [ ] enable_logging
- [X] enable_snapshot_copy
- [X] get_cluster_credentials
- [ ] get_reserved_node_exchange_configuration_options
- [ ] get_reserved_node_exchange_offerings
- [ ] modify_aqua_configuration
- [ ] modify_authentication_profile

View File

@ -31,6 +31,8 @@ route53resolver
- [ ] associate_resolver_endpoint_ip_address
- [ ] associate_resolver_query_log_config
- [X] associate_resolver_rule
Return description for a newly created resolver rule association.
- [ ] create_firewall_domain_list
- [ ] create_firewall_rule
- [ ] create_firewall_rule_group
@ -39,10 +41,12 @@ route53resolver
NOTE: IPv6 IPs are currently not being filtered when
calculating the create_resolver_endpoint() IpAddresses.
- [ ] create_resolver_query_log_config
- [X] create_resolver_rule
Return description for a newly created resolver rule.
- [ ] delete_firewall_domain_list
- [ ] delete_firewall_rule
- [ ] delete_firewall_rule_group
@ -51,10 +55,14 @@ route53resolver
- [ ] delete_resolver_query_log_config
- [X] delete_resolver_rule
Delete a resolver rule.
- [ ] disassociate_firewall_rule_group
- [ ] disassociate_resolver_endpoint_ip_address
- [ ] disassociate_resolver_query_log_config
- [X] disassociate_resolver_rule
Removes association between a resolver rule and a VPC.
- [ ] get_firewall_config
- [ ] get_firewall_domain_list
- [ ] get_firewall_rule_group
@ -69,7 +77,11 @@ route53resolver
- [ ] get_resolver_query_log_config_association
- [ ] get_resolver_query_log_config_policy
- [X] get_resolver_rule
Return info for specified resolver rule.
- [X] get_resolver_rule_association
Return info for specified resolver rule association.
- [ ] get_resolver_rule_policy
- [ ] import_firewall_domains
- [ ] list_firewall_configs
@ -89,7 +101,11 @@ route53resolver
- [ ] list_resolver_query_log_config_associations
- [ ] list_resolver_query_log_configs
- [X] list_resolver_rule_associations
List all resolver rule associations, using filters if specified.
- [X] list_resolver_rules
List all resolver rules, using filters if specified.
- [X] list_tags_for_resource
List all tags for the given resource.

View File

@ -1730,12 +1730,12 @@ class DynamoDBBackend(BaseBackend):
self.tables[target_table_name] = new_table
return new_table
"""
Currently this only accepts the source and target table elements, and will
copy all items from the source without respect to other arguments.
"""
def restore_table_to_point_in_time(self, target_table_name, source_table_name):
"""
Currently this only accepts the source and target table elements, and will
copy all items from the source without respect to other arguments.
"""
source = self.get_table(source_table_name)
if source is None:
raise KeyError()

View File

@ -2075,14 +2075,11 @@ class IAMBackend(BaseBackend):
return group
def get_group(self, group_name, marker=None, max_items=None):
group = None
try:
group = self.groups[group_name]
return self.groups[group_name]
except KeyError:
raise IAMNotFoundException("Group {0} not found".format(group_name))
return group
def list_groups(self):
return self.groups.values()
@ -2122,11 +2119,11 @@ class IAMBackend(BaseBackend):
"The group with name {0} cannot be found.".format(group_name)
)
def update_group(self, group_name, new_group_name, new_path="/"):
def update_group(self, group_name, new_group_name, new_path):
if new_group_name:
if new_group_name in self.groups:
raise IAMConflictException(
"Group {0} already exists".format(new_group_name)
message="Group {0} already exists".format(new_group_name)
)
try:
group = self.groups[group_name]

View File

@ -507,7 +507,7 @@ class IamResponse(BaseResponse):
def update_group(self):
group_name = self._get_param("GroupName")
new_group_name = self._get_param("NewGroupName")
new_path = self._get_param("NewPath", "/")
new_path = self._get_param("NewPath")
iam_backend.update_group(group_name, new_group_name, new_path)
template = self.response_template(GENERIC_EMPTY_TEMPLATE)
return template.render(name="UpdateGroup")

View File

@ -317,7 +317,7 @@ def create_backend_app(service):
def signal_handler(reset_server_port, signum, frame):
if reset_server_port:
del os.environ["MOTO_SERVER_PORT"]
del os.environ["MOTO_PORT"]
sys.exit(0)
@ -335,7 +335,11 @@ def main(argv=sys.argv[1:]):
"-H", "--host", type=str, help="Which host to bind", default="127.0.0.1"
)
parser.add_argument(
"-p", "--port", type=int, help="Port number to use for connection", default=5000
"-p",
"--port",
type=int,
help="Port number to use for connection",
default=int(os.environ.get("MOTO_PORT", 5000)),
)
parser.add_argument(
"-r",
@ -361,9 +365,9 @@ def main(argv=sys.argv[1:]):
args = parser.parse_args(argv)
reset_server_port = False
if "MOTO_SERVER_PORT" not in os.environ:
if "MOTO_PORT" not in os.environ:
reset_server_port = True
os.environ["MOTO_SERVER_PORT"] = f"{args.port}"
os.environ["MOTO_PORT"] = f"{args.port}"
try:
signal.signal(signal.SIGINT, partial(signal_handler, reset_server_port))

View File

@ -47,7 +47,7 @@ def ecs_new_arn_format():
def moto_server_port():
return os.environ.get("MOTO_SERVER_PORT") or "5000"
return os.environ.get("MOTO_PORT") or "5000"
def moto_server_host():

5
scripts/ci_moto_server.sh Executable file
View File

@ -0,0 +1,5 @@
#!/usr/bin/env bash
set -e
pip install $(ls /moto/dist/moto*.gz)[server,all]
moto_server -H 0.0.0.0 > /moto/server_output.log 2>&1

View File

@ -1,21 +1,11 @@
import os
import time
try:
# py2
import urllib2 as urllib
from urllib2 import URLError
import socket
import httplib
import urllib.request as urllib
from urllib.error import URLError
import socket
EXCEPTIONS = (URLError, socket.error, httplib.BadStatusLine)
except ImportError:
# py3
import urllib.request as urllib
from urllib.error import URLError
import socket
EXCEPTIONS = (URLError, socket.timeout, ConnectionResetError)
EXCEPTIONS = (URLError, socket.timeout, ConnectionResetError)
start_ts = time.time()

View File

@ -8,6 +8,10 @@ markers =
[coverage:run]
relative_files = True
[flake8]
ignore = W503,W605,E128,E501,E203,E266,E501,E231
exclude = moto/packages,dist
[pylint.'MESSAGES CONTROL']
disable = W,C,R,E
# Check we have any tests with duplicate names (causing them to be skipped)

View File

@ -355,3 +355,73 @@ def test_delete_unknown_group():
err.value.response["Error"]["Message"].should.equal(
"The group with name unknown-group cannot be found."
)
@mock_iam
def test_update_group_name():
conn = boto3.client("iam", region_name="us-east-1")
conn.create_group(GroupName="my-group")
initial_group = conn.get_group(GroupName="my-group")["Group"]
conn.update_group(GroupName="my-group", NewGroupName="new-group")
# The old group-name should no longer exist
with pytest.raises(ClientError) as exc:
conn.get_group(GroupName="my-group")
exc.value.response["Error"]["Code"].should.equal("NoSuchEntity")
result = conn.get_group(GroupName="new-group")["Group"]
result["Path"].should.equal("/")
result["GroupName"].should.equal("new-group")
result["GroupId"].should.equal(initial_group["GroupId"])
result["Arn"].should.match(":group/new-group")
@mock_iam
def test_update_group_name_that_has_a_path():
conn = boto3.client("iam", region_name="us-east-1")
conn.create_group(GroupName="my-group", Path="/path")
conn.update_group(GroupName="my-group", NewGroupName="new-group")
# Verify the path hasn't changed
new = conn.get_group(GroupName="new-group")["Group"]
new["Path"].should.equal("/path")
@mock_iam
def test_update_group_path():
conn = boto3.client("iam", region_name="us-east-1")
conn.create_group(GroupName="my-group", Path="/path")
conn.update_group(
GroupName="my-group", NewGroupName="new-group", NewPath="/new-path"
)
# Verify the path has changed
new = conn.get_group(GroupName="new-group")["Group"]
new["Path"].should.equal("/new-path")
@mock_iam
def test_update_group_that_does_not_exist():
conn = boto3.client("iam", region_name="us-east-1")
with pytest.raises(ClientError) as exc:
conn.update_group(GroupName="nonexisting", NewGroupName="..")
err = exc.value.response["Error"]
err["Code"].should.equal("NoSuchEntity")
err["Message"].should.equal("The group with name nonexisting cannot be found.")
@mock_iam
def test_update_group_with_existing_name():
conn = boto3.client("iam", region_name="us-east-1")
conn.create_group(GroupName="existing1")
conn.create_group(GroupName="existing2")
with pytest.raises(ClientError) as exc:
conn.update_group(GroupName="existing1", NewGroupName="existing2")
err = exc.value.response["Error"]
err["Code"].should.equal("Conflict")
err["Message"].should.equal("Group existing2 already exists")

19
tox.ini
View File

@ -1,19 +0,0 @@
[tox]
envlist = py27, py36, py37
[testenv]
setenv =
BOTO_CONFIG=/dev/null
AWS_SECRET_ACCESS_KEY=foobar_secret
AWS_ACCESS_KEY_ID=foobar_key
AWS_DEFAULT_REGION=us-east-1
deps =
-r{toxinidir}/requirements.txt
-r{toxinidir}/requirements-dev.txt
commands =
{envpython} setup.py test
pytest -v {posargs}
[flake8]
ignore = W503,W605,E128,E501,E203,E266,E501,E231
exclude = moto/packages,dist

View File

@ -1,7 +0,0 @@
#!/usr/bin/env bash
export MOTO_PORT=${MOTO_PORT:-5000}
set -e
pip install $(ls /moto/dist/moto*.gz)[server,all]
moto_server -H 0.0.0.0 -p ${MOTO_PORT} > /moto/server_output.log 2>&1