diff --git a/.travis.yml b/.travis.yml index f1854db54..3a602a76c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,4 @@ -dist: xenial +dist: bionic language: python services: - docker diff --git a/moto/batch/models.py b/moto/batch/models.py index ab52db54c..1a28fdcc5 100644 --- a/moto/batch/models.py +++ b/moto/batch/models.py @@ -302,7 +302,9 @@ class Job(threading.Thread, BaseModel): self.job_id = str(uuid.uuid4()) self.job_definition = job_def self.job_queue = job_queue - self.job_state = "SUBMITTED" # One of SUBMITTED | PENDING | RUNNABLE | STARTING | RUNNING | SUCCEEDED | FAILED + self.job_state = ( + "SUBMITTED" + ) # One of SUBMITTED | PENDING | RUNNABLE | STARTING | RUNNING | SUCCEEDED | FAILED self.job_queue.jobs.append(self) self.job_started_at = datetime.datetime(1970, 1, 1) self.job_stopped_at = datetime.datetime(1970, 1, 1) diff --git a/moto/cloudformation/responses.py b/moto/cloudformation/responses.py index f5e094c15..fe875fed5 100644 --- a/moto/cloudformation/responses.py +++ b/moto/cloudformation/responses.py @@ -177,7 +177,9 @@ class CloudFormationResponse(BaseResponse): start = stack_ids.index(token) + 1 else: start = 0 - max_results = 50 # using this to mske testing of paginated stacks more convenient than default 1 MB + max_results = ( + 50 + ) # using this to mske testing of paginated stacks more convenient than default 1 MB stacks_resp = stacks[start : start + max_results] next_token = None if len(stacks) > (start + max_results): diff --git a/moto/core/models.py b/moto/core/models.py index e0eae5858..5b19137c3 100644 --- a/moto/core/models.py +++ b/moto/core/models.py @@ -44,6 +44,7 @@ class BaseMockAWS(object): "AWS_ACCESS_KEY_ID": "foobar_key", "AWS_SECRET_ACCESS_KEY": "foobar_secret", } + self.default_session_mock = mock.patch("boto3.DEFAULT_SESSION", None) self.env_variables_mocks = mock.patch.dict(os.environ, FAKE_KEYS) if self.__class__.nested_count == 0: @@ -62,6 +63,7 @@ class BaseMockAWS(object): self.stop() def start(self, reset=True): + self.default_session_mock.start() self.env_variables_mocks.start() self.__class__.nested_count += 1 @@ -72,6 +74,7 @@ class BaseMockAWS(object): self.enable_patching() def stop(self): + self.default_session_mock.stop() self.env_variables_mocks.stop() self.__class__.nested_count -= 1 diff --git a/moto/core/responses.py b/moto/core/responses.py index bf4af902a..c708edb8b 100644 --- a/moto/core/responses.py +++ b/moto/core/responses.py @@ -307,7 +307,7 @@ class BaseResponse(_TemplateEnvironmentMixin, ActionAuthenticatorMixin): def _convert(elem, is_last): if not re.match("^{.*}$", elem): return elem - name = elem.replace("{", "").replace("}", "") + name = elem.replace("{", "").replace("}", "").replace("+", "") if is_last: return "(?P<%s>[^/]*)" % name return "(?P<%s>.*)" % name diff --git a/moto/datasync/responses.py b/moto/datasync/responses.py index 23a480523..03811fb6e 100644 --- a/moto/datasync/responses.py +++ b/moto/datasync/responses.py @@ -153,7 +153,7 @@ class DataSyncResponse(BaseResponse): task_execution_arn = self._get_param("TaskExecutionArn") task_execution = self.datasync_backend._get_task_execution(task_execution_arn) result = json.dumps( - {"TaskExecutionArn": task_execution.arn, "Status": task_execution.status,} + {"TaskExecutionArn": task_execution.arn, "Status": task_execution.status} ) if task_execution.status == "SUCCESS": self.datasync_backend.tasks[task_execution.task_arn].status = "AVAILABLE" diff --git a/moto/datasync/urls.py b/moto/datasync/urls.py index b70a09f27..69ba3cccb 100644 --- a/moto/datasync/urls.py +++ b/moto/datasync/urls.py @@ -4,6 +4,4 @@ from .responses import DataSyncResponse url_bases = ["https?://(.*?)(datasync)(.*?).amazonaws.com"] -url_paths = { - "{0}/$": DataSyncResponse.dispatch, -} +url_paths = {"{0}/$": DataSyncResponse.dispatch} diff --git a/moto/events/models.py b/moto/events/models.py index be4153b9f..0298c7c69 100644 --- a/moto/events/models.py +++ b/moto/events/models.py @@ -316,8 +316,7 @@ class EventsBackend(BaseBackend): if not event_bus: raise JsonRESTError( - "ResourceNotFoundException", - "Event bus {} does not exist.".format(name), + "ResourceNotFoundException", "Event bus {} does not exist.".format(name) ) return event_bus diff --git a/moto/events/responses.py b/moto/events/responses.py index 98a33218a..b415564f8 100644 --- a/moto/events/responses.py +++ b/moto/events/responses.py @@ -261,10 +261,7 @@ class EventsHandler(BaseResponse): name = self._get_param("Name") event_bus = self.events_backend.describe_event_bus(name) - response = { - "Name": event_bus.name, - "Arn": event_bus.arn, - } + response = {"Name": event_bus.name, "Arn": event_bus.arn} if event_bus.policy: response["Policy"] = event_bus.policy @@ -285,10 +282,7 @@ class EventsHandler(BaseResponse): response = [] for event_bus in self.events_backend.list_event_buses(name_prefix): - event_bus_response = { - "Name": event_bus.name, - "Arn": event_bus.arn, - } + event_bus_response = {"Name": event_bus.name, "Arn": event_bus.arn} if event_bus.policy: event_bus_response["Policy"] = event_bus.policy diff --git a/moto/iam/models.py b/moto/iam/models.py index 73d58b996..9b6f4875c 100644 --- a/moto/iam/models.py +++ b/moto/iam/models.py @@ -788,7 +788,9 @@ class AccountSummary(BaseModel): self._groups_per_user_quota = 10 self._attached_policies_per_user_quota = 10 self._policies_quota = 1500 - self._account_mfa_enabled = 0 # Haven't found any information being able to activate MFA for the root account programmatically + self._account_mfa_enabled = ( + 0 + ) # Haven't found any information being able to activate MFA for the root account programmatically self._access_keys_per_user_quota = 2 self._assume_role_policy_size_quota = 2048 self._policy_versions_in_use_quota = 10000 diff --git a/moto/iam/policy_validation.py b/moto/iam/policy_validation.py index 95610ac4d..c1a16cc5d 100644 --- a/moto/iam/policy_validation.py +++ b/moto/iam/policy_validation.py @@ -88,7 +88,9 @@ class IAMPolicyDocumentValidator: self._policy_document = policy_document self._policy_json = {} self._statements = [] - self._resource_error = "" # the first resource error found that does not generate a legacy parsing error + self._resource_error = ( + "" + ) # the first resource error found that does not generate a legacy parsing error def validate(self): try: diff --git a/tests/test_apigateway/test_apigateway.py b/tests/test_apigateway/test_apigateway.py index de99f1fcf..8da5efa39 100644 --- a/tests/test_apigateway/test_apigateway.py +++ b/tests/test_apigateway/test_apigateway.py @@ -563,7 +563,7 @@ def test_create_stage(): api_id = response["id"] create_method_integration(client, api_id) - response = client.create_deployment(restApiId=api_id, stageName=stage_name,) + response = client.create_deployment(restApiId=api_id, stageName=stage_name) deployment_id = response["id"] response = client.get_deployment(restApiId=api_id, deploymentId=deployment_id) diff --git a/tests/test_awslambda/test_lambda.py b/tests/test_awslambda/test_lambda.py index 6b3d489ca..5d66b1537 100644 --- a/tests/test_awslambda/test_lambda.py +++ b/tests/test_awslambda/test_lambda.py @@ -1001,10 +1001,10 @@ def test_list_versions_by_function_for_nonexistent_function(): @mock_lambda @mock_sqs def test_create_event_source_mapping(): - sqs = boto3.resource("sqs") + sqs = boto3.resource("sqs", region_name="us-east-1") queue = sqs.create_queue(QueueName="test-sqs-queue1") - conn = boto3.client("lambda") + conn = boto3.client("lambda", region_name="us-east-1") func = conn.create_function( FunctionName="testFunction", Runtime="python2.7", @@ -1030,11 +1030,11 @@ def test_create_event_source_mapping(): @mock_lambda @mock_sqs def test_invoke_function_from_sqs(): - logs_conn = boto3.client("logs") - sqs = boto3.resource("sqs") + logs_conn = boto3.client("logs", region_name="us-east-1") + sqs = boto3.resource("sqs", region_name="us-east-1") queue = sqs.create_queue(QueueName="test-sqs-queue1") - conn = boto3.client("lambda") + conn = boto3.client("lambda", region_name="us-east-1") func = conn.create_function( FunctionName="testFunction", Runtime="python2.7", @@ -1054,7 +1054,7 @@ def test_invoke_function_from_sqs(): assert response["EventSourceArn"] == queue.attributes["QueueArn"] assert response["State"] == "Enabled" - sqs_client = boto3.client("sqs") + sqs_client = boto3.client("sqs", region_name="us-east-1") sqs_client.send_message(QueueUrl=queue.url, MessageBody="test") start = time.time() while (time.time() - start) < 30: @@ -1081,8 +1081,8 @@ def test_invoke_function_from_sqs(): @mock_lambda @mock_dynamodb2 def test_invoke_function_from_dynamodb(): - logs_conn = boto3.client("logs") - dynamodb = boto3.client("dynamodb") + logs_conn = boto3.client("logs", region_name="us-east-1") + dynamodb = boto3.client("dynamodb", region_name="us-east-1") table_name = "table_with_stream" table = dynamodb.create_table( TableName=table_name, @@ -1094,7 +1094,7 @@ def test_invoke_function_from_dynamodb(): }, ) - conn = boto3.client("lambda") + conn = boto3.client("lambda", region_name="us-east-1") func = conn.create_function( FunctionName="testFunction", Runtime="python2.7", @@ -1141,11 +1141,11 @@ def test_invoke_function_from_dynamodb(): @mock_lambda @mock_sqs def test_invoke_function_from_sqs_exception(): - logs_conn = boto3.client("logs") - sqs = boto3.resource("sqs") + logs_conn = boto3.client("logs", region_name="us-east-1") + sqs = boto3.resource("sqs", region_name="us-east-1") queue = sqs.create_queue(QueueName="test-sqs-queue1") - conn = boto3.client("lambda") + conn = boto3.client("lambda", region_name="us-east-1") func = conn.create_function( FunctionName="testFunction", Runtime="python2.7", @@ -1201,10 +1201,10 @@ def test_invoke_function_from_sqs_exception(): @mock_lambda @mock_sqs def test_list_event_source_mappings(): - sqs = boto3.resource("sqs") + sqs = boto3.resource("sqs", region_name="us-east-1") queue = sqs.create_queue(QueueName="test-sqs-queue1") - conn = boto3.client("lambda") + conn = boto3.client("lambda", region_name="us-east-1") func = conn.create_function( FunctionName="testFunction", Runtime="python2.7", @@ -1233,10 +1233,10 @@ def test_list_event_source_mappings(): @mock_lambda @mock_sqs def test_get_event_source_mapping(): - sqs = boto3.resource("sqs") + sqs = boto3.resource("sqs", region_name="us-east-1") queue = sqs.create_queue(QueueName="test-sqs-queue1") - conn = boto3.client("lambda") + conn = boto3.client("lambda", region_name="us-east-1") func = conn.create_function( FunctionName="testFunction", Runtime="python2.7", @@ -1263,10 +1263,10 @@ def test_get_event_source_mapping(): @mock_lambda @mock_sqs def test_update_event_source_mapping(): - sqs = boto3.resource("sqs") + sqs = boto3.resource("sqs", region_name="us-east-1") queue = sqs.create_queue(QueueName="test-sqs-queue1") - conn = boto3.client("lambda") + conn = boto3.client("lambda", region_name="us-east-1") func1 = conn.create_function( FunctionName="testFunction", Runtime="python2.7", @@ -1307,10 +1307,10 @@ def test_update_event_source_mapping(): @mock_lambda @mock_sqs def test_delete_event_source_mapping(): - sqs = boto3.resource("sqs") + sqs = boto3.resource("sqs", region_name="us-east-1") queue = sqs.create_queue(QueueName="test-sqs-queue1") - conn = boto3.client("lambda") + conn = boto3.client("lambda", region_name="us-east-1") func1 = conn.create_function( FunctionName="testFunction", Runtime="python2.7", diff --git a/tests/test_dynamodb2/test_dynamodb.py b/tests/test_dynamodb2/test_dynamodb.py index 7f6963870..456311028 100644 --- a/tests/test_dynamodb2/test_dynamodb.py +++ b/tests/test_dynamodb2/test_dynamodb.py @@ -3119,8 +3119,8 @@ def test_sorted_query_with_numerical_sort_key(): # https://github.com/spulec/moto/issues/1874 @mock_dynamodb2 def test_item_size_is_under_400KB(): - dynamodb = boto3.resource("dynamodb") - client = boto3.client("dynamodb") + dynamodb = boto3.resource("dynamodb", region_name="us-east-1") + client = boto3.client("dynamodb", region_name="us-east-1") dynamodb.create_table( TableName="moto-test", @@ -3172,7 +3172,7 @@ def assert_failure_due_to_item_size(func, **kwargs): @mock_dynamodb2 # https://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html#DDB-Query-request-KeyConditionExpression def test_hash_key_cannot_use_begins_with_operations(): - dynamodb = boto3.resource("dynamodb") + dynamodb = boto3.resource("dynamodb", region_name="us-east-1") table = dynamodb.create_table( TableName="test-table", KeySchema=[{"AttributeName": "key", "KeyType": "HASH"}], @@ -3201,7 +3201,7 @@ def test_hash_key_cannot_use_begins_with_operations(): @mock_dynamodb2 def test_update_supports_complex_expression_attribute_values(): - client = boto3.client("dynamodb") + client = boto3.client("dynamodb", region_name="us-east-1") client.create_table( AttributeDefinitions=[{"AttributeName": "SHA256", "AttributeType": "S"}], @@ -3237,7 +3237,7 @@ def test_update_supports_complex_expression_attribute_values(): @mock_dynamodb2 def test_update_supports_list_append(): - client = boto3.client("dynamodb") + client = boto3.client("dynamodb", region_name="us-east-1") client.create_table( AttributeDefinitions=[{"AttributeName": "SHA256", "AttributeType": "S"}], @@ -3272,7 +3272,7 @@ def test_update_supports_list_append(): @mock_dynamodb2 def test_update_catches_invalid_list_append_operation(): - client = boto3.client("dynamodb") + client = boto3.client("dynamodb", region_name="us-east-1") client.create_table( AttributeDefinitions=[{"AttributeName": "SHA256", "AttributeType": "S"}], @@ -3335,7 +3335,7 @@ def test_update_item_if_original_value_is_none(): table.update_item( Key={"job_id": "a"}, UpdateExpression="SET job_name = :output", - ExpressionAttributeValues={":output": "updated",}, + ExpressionAttributeValues={":output": "updated"}, ) table.scan()["Items"][0]["job_name"].should.equal("updated") @@ -3354,7 +3354,7 @@ def test_update_nested_item_if_original_value_is_none(): table.update_item( Key={"job_id": "a"}, UpdateExpression="SET job_details.job_name = :output", - ExpressionAttributeValues={":output": "updated",}, + ExpressionAttributeValues={":output": "updated"}, ) table.scan()["Items"][0]["job_details"]["job_name"].should.equal("updated") diff --git a/tests/test_dynamodbstreams/test_dynamodbstreams.py b/tests/test_dynamodbstreams/test_dynamodbstreams.py index 01cf915af..8fad0ff23 100644 --- a/tests/test_dynamodbstreams/test_dynamodbstreams.py +++ b/tests/test_dynamodbstreams/test_dynamodbstreams.py @@ -213,7 +213,7 @@ class TestEdges: resp = conn.update_table( TableName="test-streams", - StreamSpecification={"StreamViewType": "KEYS_ONLY"}, + StreamSpecification={"StreamViewType": "KEYS_ONLY", "StreamEnabled": True}, ) assert "StreamSpecification" in resp["TableDescription"] assert resp["TableDescription"]["StreamSpecification"] == { @@ -226,7 +226,10 @@ class TestEdges: with assert_raises(conn.exceptions.ResourceInUseException): resp = conn.update_table( TableName="test-streams", - StreamSpecification={"StreamViewType": "OLD_IMAGES"}, + StreamSpecification={ + "StreamViewType": "OLD_IMAGES", + "StreamEnabled": True, + }, ) def test_stream_with_range_key(self): @@ -243,7 +246,7 @@ class TestEdges: {"AttributeName": "color", "AttributeType": "S"}, ], ProvisionedThroughput={"ReadCapacityUnits": 1, "WriteCapacityUnits": 1}, - StreamSpecification={"StreamViewType": "NEW_IMAGES"}, + StreamSpecification={"StreamViewType": "NEW_IMAGES", "StreamEnabled": True}, ) stream_arn = resp["TableDescription"]["LatestStreamArn"] diff --git a/tests/test_ecs/test_ecs_boto3.py b/tests/test_ecs/test_ecs_boto3.py index 224e6935b..38095bdc5 100644 --- a/tests/test_ecs/test_ecs_boto3.py +++ b/tests/test_ecs/test_ecs_boto3.py @@ -1924,7 +1924,9 @@ def test_attributes(): ) attrs = resp["attributes"] - NUM_CUSTOM_ATTRIBUTES = 4 # 2 specific to individual machines and 1 global, going to both machines (2 + 1*2) + NUM_CUSTOM_ATTRIBUTES = ( + 4 + ) # 2 specific to individual machines and 1 global, going to both machines (2 + 1*2) NUM_DEFAULT_ATTRIBUTES = 4 len(attrs).should.equal( NUM_CUSTOM_ATTRIBUTES + (NUM_DEFAULT_ATTRIBUTES * len(instances)) diff --git a/tests/test_iam/test_iam.py b/tests/test_iam/test_iam.py index 366ea3620..5098de413 100644 --- a/tests/test_iam/test_iam.py +++ b/tests/test_iam/test_iam.py @@ -2526,9 +2526,7 @@ def test_get_account_summary(): ) client.create_instance_profile(InstanceProfileName="test-profile") - client.create_open_id_connect_provider( - Url="https://example.com", ThumbprintList=[], - ) + client.create_open_id_connect_provider(Url="https://example.com", ThumbprintList=[]) response_policy = client.create_policy( PolicyName="test-policy", PolicyDocument=MOCK_POLICY ) diff --git a/tests/test_stepfunctions/test_stepfunctions.py b/tests/test_stepfunctions/test_stepfunctions.py index 77b9fbfb3..6c391f0d1 100644 --- a/tests/test_stepfunctions/test_stepfunctions.py +++ b/tests/test_stepfunctions/test_stepfunctions.py @@ -524,7 +524,7 @@ def _get_account_id(): global account_id if account_id: return account_id - sts = boto3.client("sts") + sts = boto3.client("sts", region_name=region) identity = sts.get_caller_identity() account_id = identity["Account"] return account_id