diff --git a/aws_xray_sdk/core/models/entity.py b/aws_xray_sdk/core/models/entity.py index 0cbdd1ff..20391c89 100644 --- a/aws_xray_sdk/core/models/entity.py +++ b/aws_xray_sdk/core/models/entity.py @@ -2,6 +2,7 @@ import os import binascii import time +import string import jsonpickle @@ -13,20 +14,28 @@ log = logging.getLogger(__name__) +# List of valid characters found at http://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html +_valid_name_characters = string.ascii_letters + string.digits + '_.:/%&#=+\-@ ' + class Entity(object): """ The parent class for segment/subsegment. It holds common properties and methods on segment and subsegment. """ + def __init__(self, name): # required attributes self.id = self._generate_random_id() self.name = name + self.name = ''.join([c for c in name if c in _valid_name_characters]) self.start_time = time.time() self.parent_id = None + if self.name != name: + log.warning("Removing Segment/Subsugment Name invalid characters.") + # sampling self.sampled = True diff --git a/tests/test_dummy_entites.py b/tests/test_dummy_entites.py index a80f7768..7c39a1dc 100644 --- a/tests/test_dummy_entites.py +++ b/tests/test_dummy_entites.py @@ -57,3 +57,11 @@ def test_structure_intact(): subsegment.close() segment.close() assert segment.ready_to_send() + + +def test_invalid_entity_name(): + segment = DummySegment('DummySegment() Test?') + subsegment = DummySubsegment(segment, 'Dummy*Sub!segment$') + + assert segment.name == 'DummySegment Test' + assert subsegment.name == 'DummySubsegment'