Merge pull request #2070 from bkovacki/add-attributes-parameter-for-sns-create_topic-api
Add attributes parameter support for sns create_topic API
This commit is contained in:
commit
ac33845367
@ -12,7 +12,7 @@ from boto3 import Session
|
|||||||
|
|
||||||
from moto.compat import OrderedDict
|
from moto.compat import OrderedDict
|
||||||
from moto.core import BaseBackend, BaseModel
|
from moto.core import BaseBackend, BaseModel
|
||||||
from moto.core.utils import iso_8601_datetime_with_milliseconds
|
from moto.core.utils import iso_8601_datetime_with_milliseconds, camelcase_to_underscores
|
||||||
from moto.sqs import sqs_backends
|
from moto.sqs import sqs_backends
|
||||||
from moto.awslambda import lambda_backends
|
from moto.awslambda import lambda_backends
|
||||||
|
|
||||||
@ -243,11 +243,14 @@ class SNSBackend(BaseBackend):
|
|||||||
def update_sms_attributes(self, attrs):
|
def update_sms_attributes(self, attrs):
|
||||||
self.sms_attributes.update(attrs)
|
self.sms_attributes.update(attrs)
|
||||||
|
|
||||||
def create_topic(self, name):
|
def create_topic(self, name, attributes=None):
|
||||||
fails_constraints = not re.match(r'^[a-zA-Z0-9_-]{1,256}$', name)
|
fails_constraints = not re.match(r'^[a-zA-Z0-9_-]{1,256}$', name)
|
||||||
if fails_constraints:
|
if fails_constraints:
|
||||||
raise InvalidParameterValue("Topic names must be made up of only uppercase and lowercase ASCII letters, numbers, underscores, and hyphens, and must be between 1 and 256 characters long.")
|
raise InvalidParameterValue("Topic names must be made up of only uppercase and lowercase ASCII letters, numbers, underscores, and hyphens, and must be between 1 and 256 characters long.")
|
||||||
candidate_topic = Topic(name, self)
|
candidate_topic = Topic(name, self)
|
||||||
|
if attributes:
|
||||||
|
for attribute in attributes:
|
||||||
|
setattr(candidate_topic, camelcase_to_underscores(attribute), attributes[attribute])
|
||||||
if candidate_topic.arn in self.topics:
|
if candidate_topic.arn in self.topics:
|
||||||
return self.topics[candidate_topic.arn]
|
return self.topics[candidate_topic.arn]
|
||||||
else:
|
else:
|
||||||
|
@ -75,7 +75,8 @@ class SNSResponse(BaseResponse):
|
|||||||
|
|
||||||
def create_topic(self):
|
def create_topic(self):
|
||||||
name = self._get_param('Name')
|
name = self._get_param('Name')
|
||||||
topic = self.backend.create_topic(name)
|
attributes = self._get_attributes()
|
||||||
|
topic = self.backend.create_topic(name, attributes)
|
||||||
|
|
||||||
if self.request_json:
|
if self.request_json:
|
||||||
return json.dumps({
|
return json.dumps({
|
||||||
|
@ -32,6 +32,18 @@ def test_create_and_delete_topic():
|
|||||||
topics = topics_json["Topics"]
|
topics = topics_json["Topics"]
|
||||||
topics.should.have.length_of(0)
|
topics.should.have.length_of(0)
|
||||||
|
|
||||||
|
|
||||||
|
@mock_sns
|
||||||
|
def test_create_topic_with_attributes():
|
||||||
|
conn = boto3.client("sns", region_name="us-east-1")
|
||||||
|
conn.create_topic(Name='some-topic-with-attribute', Attributes={'DisplayName': 'test-topic'})
|
||||||
|
topics_json = conn.list_topics()
|
||||||
|
topic_arn = topics_json["Topics"][0]['TopicArn']
|
||||||
|
|
||||||
|
attributes = conn.get_topic_attributes(TopicArn=topic_arn)['Attributes']
|
||||||
|
attributes['DisplayName'].should.equal('test-topic')
|
||||||
|
|
||||||
|
|
||||||
@mock_sns
|
@mock_sns
|
||||||
def test_create_topic_should_be_indempodent():
|
def test_create_topic_should_be_indempodent():
|
||||||
conn = boto3.client("sns", region_name="us-east-1")
|
conn = boto3.client("sns", region_name="us-east-1")
|
||||||
|
Loading…
Reference in New Issue
Block a user