Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-aws-xray-sdk for openSUSE:Factory checked in at 2021-08-02 15:41:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-aws-xray-sdk (Old) and /work/SRC/openSUSE:Factory/.python-aws-xray-sdk.new.1899 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-aws-xray-sdk" Mon Aug 2 15:41:02 2021 rev:8 rq:908601 version:2.8.0 Changes: -------- --- /work/SRC/openSUSE:Factory/python-aws-xray-sdk/python-aws-xray-sdk.changes 2021-04-08 21:32:54.335855865 +0200 +++ /work/SRC/openSUSE:Factory/.python-aws-xray-sdk.new.1899/python-aws-xray-sdk.changes 2021-08-02 15:41:06.539168460 +0200 @@ -1,0 +2,17 @@ +Tue Jul 27 10:19:14 UTC 2021 - John Paul Adrian Glaubitz <adrian.glaub...@suse.com> + +- Update to 2.8.0 + * improvement: feat(sqla-core): Add support for rendering Database Specific queries. + `PR291 <https://github.com/aws/aws-xray-sdk-python/pull/291>`_. + * bugfix: Fixing broken instrumentation for sqlalchemy >= 1.4.0. + `PR289 <https://github.com/aws/aws-xray-sdk-python/pull/289>`_. + * feature: no op trace id generation. + `PR293 <https://github.com/aws/aws-xray-sdk-python/pull/293>`_. + * bugfix: Handle exception when sending entity to Daemon. + `PR292 <https://github.com/aws/aws-xray-sdk-python/pull/292>`_. + * bugfix: Fixed serialization issue when cause is a string. + `PR284 <https://github.com/aws/aws-xray-sdk-python/pull/284>`_. + * improvement: Publish metric on distribution availability. + `PR279 <https://github.com/aws/aws-xray-sdk-python/pull/279>`_. + +------------------------------------------------------------------- Old: ---- aws-xray-sdk-2.7.0.tar.gz New: ---- aws-xray-sdk-2.8.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-aws-xray-sdk.spec ++++++ --- /var/tmp/diff_new_pack.4ziRvs/_old 2021-08-02 15:41:07.239167474 +0200 +++ /var/tmp/diff_new_pack.4ziRvs/_new 2021-08-02 15:41:07.243167468 +0200 @@ -19,7 +19,7 @@ %{?!python_module:%define python_module() python-%{**} python3-%{**}} %define skip_python2 1 Name: python-aws-xray-sdk -Version: 2.7.0 +Version: 2.8.0 Release: 0 Summary: The AWS X-Ray SDK for Python License: Apache-2.0 ++++++ aws-xray-sdk-2.7.0.tar.gz -> aws-xray-sdk-2.8.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-xray-sdk-2.7.0/PKG-INFO new/aws-xray-sdk-2.8.0/PKG-INFO --- old/aws-xray-sdk-2.7.0/PKG-INFO 2021-03-24 18:06:14.000000000 +0100 +++ new/aws-xray-sdk-2.8.0/PKG-INFO 2021-04-29 02:03:01.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: aws-xray-sdk -Version: 2.7.0 +Version: 2.8.0 Summary: The AWS X-Ray SDK for Python (the SDK) enables Python developers to record and emit information from within their applications to the AWS X-Ray service. Home-page: https://github.com/aws/aws-xray-sdk-python Author: Amazon Web Services @@ -14,7 +14,7 @@ ## Installing - The AWS X-Ray SDK for Python is compatible with Python 2.7, 3.4, 3.5, 3.6, 3.7, and 3.8. + The AWS X-Ray SDK for Python is compatible with Python 2.7, 3.4, 3.5, 3.6, 3.7, 3.8, and 3.9. Install the SDK using the following command (the SDK's non-testing dependencies will be installed). @@ -199,6 +199,9 @@ xray_recorder.put_metadata('mykey', metadata) ``` + ### Generate NoOp Trace and Entity Id + X-Ray Python SDK will by default generate no-op trace and entity id for unsampled requests and secure random trace and entity id for sampled requests. If customer wants to enable generating secure random trace and entity id for all the (sampled/unsampled) requests (this is applicable for trace id injection into logs use case) then they should set the `AWS_XRAY_NOOP_ID` environment variable as False. + ### Disabling X-Ray Often times, it may be useful to be able to disable X-Ray for specific use cases, whether to stop X-Ray from sending traces at any moment, or to test code functionality that originally depended on X-Ray instrumented packages to begin segments prior to the code call. For example, if your application relied on an XRayMiddleware to instrument incoming web requests, and you have a method which begins subsegments based on the segment generated by that middleware, it would be useful to be able to disable X-Ray for your unit tests so that `SegmentNotFound` exceptions are not thrown when you need to test your method. @@ -529,4 +532,5 @@ Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 Description-Content-Type: text/markdown diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-xray-sdk-2.7.0/README.md new/aws-xray-sdk-2.8.0/README.md --- old/aws-xray-sdk-2.7.0/README.md 2021-03-24 17:45:53.000000000 +0100 +++ new/aws-xray-sdk-2.8.0/README.md 2021-04-29 02:01:38.000000000 +0200 @@ -7,7 +7,7 @@ ## Installing -The AWS X-Ray SDK for Python is compatible with Python 2.7, 3.4, 3.5, 3.6, 3.7, and 3.8. +The AWS X-Ray SDK for Python is compatible with Python 2.7, 3.4, 3.5, 3.6, 3.7, 3.8, and 3.9. Install the SDK using the following command (the SDK's non-testing dependencies will be installed). @@ -192,6 +192,9 @@ xray_recorder.put_metadata('mykey', metadata) ``` +### Generate NoOp Trace and Entity Id +X-Ray Python SDK will by default generate no-op trace and entity id for unsampled requests and secure random trace and entity id for sampled requests. If customer wants to enable generating secure random trace and entity id for all the (sampled/unsampled) requests (this is applicable for trace id injection into logs use case) then they should set the `AWS_XRAY_NOOP_ID` environment variable as False. + ### Disabling X-Ray Often times, it may be useful to be able to disable X-Ray for specific use cases, whether to stop X-Ray from sending traces at any moment, or to test code functionality that originally depended on X-Ray instrumented packages to begin segments prior to the code call. For example, if your application relied on an XRayMiddleware to instrument incoming web requests, and you have a method which begins subsegments based on the segment generated by that middleware, it would be useful to be able to disable X-Ray for your unit tests so that `SegmentNotFound` exceptions are not thrown when you need to test your method. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-xray-sdk-2.7.0/aws_xray_sdk/core/emitters/udp_emitter.py new/aws-xray-sdk-2.8.0/aws_xray_sdk/core/emitters/udp_emitter.py --- old/aws-xray-sdk-2.7.0/aws_xray_sdk/core/emitters/udp_emitter.py 2021-03-24 17:45:53.000000000 +0100 +++ new/aws-xray-sdk-2.8.0/aws_xray_sdk/core/emitters/udp_emitter.py 2021-04-29 02:01:38.000000000 +0200 @@ -32,12 +32,15 @@ :param entity: a trace entity to send to the X-Ray daemon """ - message = "%s%s%s" % (PROTOCOL_HEADER, - PROTOCOL_DELIMITER, - entity.serialize()) + try: + message = "%s%s%s" % (PROTOCOL_HEADER, + PROTOCOL_DELIMITER, + entity.serialize()) - log.debug("sending: %s to %s:%s." % (message, self._ip, self._port)) - self._send_data(message) + log.debug("sending: %s to %s:%s." % (message, self._ip, self._port)) + self._send_data(message) + except Exception: + log.exception("Failed to send entity to Daemon.") def set_daemon_address(self, address): """ @@ -57,12 +60,7 @@ return self._port def _send_data(self, data): - - try: - self._socket.sendto(data.encode('utf-8'), (self._ip, - self._port)) - except Exception: - log.exception('failed to send data to X-Ray daemon.') + self._socket.sendto(data.encode('utf-8'), (self._ip, self._port)) def _parse_address(self, daemon_address): try: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-xray-sdk-2.7.0/aws_xray_sdk/core/models/dummy_entities.py new/aws-xray-sdk-2.8.0/aws_xray_sdk/core/models/dummy_entities.py --- old/aws-xray-sdk-2.7.0/aws_xray_sdk/core/models/dummy_entities.py 2021-03-24 17:45:53.000000000 +0100 +++ new/aws-xray-sdk-2.8.0/aws_xray_sdk/core/models/dummy_entities.py 2021-04-29 02:01:38.000000000 +0200 @@ -1,3 +1,5 @@ +import os +from .noop_traceid import NoOpTraceId from .traceid import TraceId from .segment import Segment from .subsegment import Subsegment @@ -12,9 +14,13 @@ A dummy segment will not be sent to the X-Ray daemon. Manually create dummy segments is not recommended. """ - def __init__(self, name='dummy'): - super(DummySegment, self).__init__(name=name, traceid=TraceId().to_id()) + def __init__(self, name='dummy'): + no_op_id = os.getenv('AWS_XRAY_NOOP_ID') + if no_op_id and no_op_id.lower() == 'false': + super(DummySegment, self).__init__(name=name, traceid=TraceId().to_id()) + else: + super(DummySegment, self).__init__(name=name, traceid=NoOpTraceId().to_id(), entityid='0000000000000000') self.sampled = False def set_aws(self, aws_meta): @@ -79,9 +85,14 @@ to a dummy subsegment becomes no-op. Dummy subsegment will not be sent to the X-Ray daemon. """ - def __init__(self, segment, name='dummy'): + def __init__(self, segment, name='dummy'): super(DummySubsegment, self).__init__(name, 'dummy', segment) + no_op_id = os.getenv('AWS_XRAY_NOOP_ID') + if no_op_id and no_op_id.lower() == 'false': + super(Subsegment, self).__init__(name) + else: + super(Subsegment, self).__init__(name, entity_id='0000000000000000') self.sampled = False def set_aws(self, aws_meta): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-xray-sdk-2.7.0/aws_xray_sdk/core/models/entity.py new/aws-xray-sdk-2.8.0/aws_xray_sdk/core/models/entity.py --- old/aws-xray-sdk-2.7.0/aws_xray_sdk/core/models/entity.py 2021-03-24 17:45:53.000000000 +0100 +++ new/aws-xray-sdk-2.8.0/aws_xray_sdk/core/models/entity.py 2021-04-29 02:01:38.000000000 +0200 @@ -12,7 +12,6 @@ from . import http from ..exceptions.exceptions import AlreadyEndedException - log = logging.getLogger(__name__) # Valid characters can be found at http://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html @@ -27,10 +26,14 @@ The parent class for segment/subsegment. It holds common properties and methods on segment and subsegment. """ - def __init__(self, name): + + def __init__(self, name, entity_id=None): + if not entity_id: + self.id = self._generate_random_id() + else: + self.id = entity_id # required attributes - self.id = self._generate_random_id() self.name = name self.name = ''.join([c for c in name if c not in _common_invalid_name_characters]) self.start_time = time.time() @@ -259,10 +262,7 @@ Serialize to JSON document that can be accepted by the X-Ray backend service. It uses json to perform serialization. """ - try: - return json.dumps(self.to_dict(), default=str) - except Exception: - log.exception("Failed to serialize %s", self.name) + return json.dumps(self.to_dict(), default=str) def to_dict(self): """ @@ -270,7 +270,7 @@ with required properties that have non-empty values. """ entity_dict = {} - + for key, value in vars(self).items(): if isinstance(value, bool) or value: if key == 'subsegments': @@ -280,18 +280,21 @@ subsegments.append(subsegment.to_dict()) entity_dict[key] = subsegments elif key == 'cause': - entity_dict[key] = {} - entity_dict[key]['working_directory'] = self.cause['working_directory'] - # exceptions are stored as List - throwables = [] - for throwable in value['exceptions']: - throwables.append(throwable.to_dict()) - entity_dict[key]['exceptions'] = throwables + if isinstance(self.cause, dict): + entity_dict[key] = {} + entity_dict[key]['working_directory'] = self.cause['working_directory'] + # exceptions are stored as List + throwables = [] + for throwable in value['exceptions']: + throwables.append(throwable.to_dict()) + entity_dict[key]['exceptions'] = throwables + else: + entity_dict[key] = self.cause elif key == 'metadata': entity_dict[key] = metadata_to_dict(value) elif key != 'sampled' and key != ORIGIN_TRACE_HEADER_ATTR_KEY: - entity_dict[key] = value - + entity_dict[key] = value + return entity_dict def _check_ended(self): diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-xray-sdk-2.7.0/aws_xray_sdk/core/models/noop_traceid.py new/aws-xray-sdk-2.8.0/aws_xray_sdk/core/models/noop_traceid.py --- old/aws-xray-sdk-2.7.0/aws_xray_sdk/core/models/noop_traceid.py 1970-01-01 01:00:00.000000000 +0100 +++ new/aws-xray-sdk-2.8.0/aws_xray_sdk/core/models/noop_traceid.py 2021-04-29 02:01:38.000000000 +0200 @@ -0,0 +1,23 @@ +class NoOpTraceId: + """ + A trace ID tracks the path of a request through your application. + A trace collects all the segments generated by a single request. + A trace ID is required for a segment. + """ + VERSION = '1' + DELIMITER = '-' + + def __init__(self): + """ + Generate a no-op trace id. + """ + self.start_time = '00000000' + self.__number = '000000000000000000000000' + + def to_id(self): + """ + Convert TraceId object to a string. + """ + return "%s%s%s%s%s" % (NoOpTraceId.VERSION, NoOpTraceId.DELIMITER, + self.start_time, + NoOpTraceId.DELIMITER, self.__number) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-xray-sdk-2.7.0/aws_xray_sdk/core/plugins/ec2_plugin.py new/aws-xray-sdk-2.8.0/aws_xray_sdk/core/plugins/ec2_plugin.py --- old/aws-xray-sdk-2.7.0/aws_xray_sdk/core/plugins/ec2_plugin.py 2021-03-24 17:45:53.000000000 +0100 +++ new/aws-xray-sdk-2.8.0/aws_xray_sdk/core/plugins/ec2_plugin.py 2021-04-29 02:01:38.000000000 +0200 @@ -28,6 +28,10 @@ def get_token(): + """ + Get the session token for IMDSv2 endpoint valid for 60 seconds + by specifying the X-aws-ec2-metadata-token-ttl-seconds header. + """ token = None try: headers = {"X-aws-ec2-metadata-token-ttl-seconds": "60"} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-xray-sdk-2.7.0/aws_xray_sdk/ext/sqlalchemy/util/decorators.py new/aws-xray-sdk-2.8.0/aws_xray_sdk/ext/sqlalchemy/util/decorators.py --- old/aws-xray-sdk-2.7.0/aws_xray_sdk/ext/sqlalchemy/util/decorators.py 2021-03-24 17:45:53.000000000 +0100 +++ new/aws-xray-sdk-2.8.0/aws_xray_sdk/ext/sqlalchemy/util/decorators.py 2021-04-29 02:01:38.000000000 +0200 @@ -1,4 +1,6 @@ import re +import types + from aws_xray_sdk.core import xray_recorder from aws_xray_sdk.ext.util import strip_url from future.standard_library import install_aliases @@ -13,7 +15,7 @@ for name, obj in vars(c).items(): if name.startswith("_"): continue - if callable(obj): + if isinstance(obj, types.FunctionType): try: obj = obj.__func__ # unwrap Python 2 unbound method except AttributeError: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-xray-sdk-2.7.0/aws_xray_sdk/ext/sqlalchemy_core/patch.py new/aws-xray-sdk-2.8.0/aws_xray_sdk/ext/sqlalchemy_core/patch.py --- old/aws-xray-sdk-2.7.0/aws_xray_sdk/ext/sqlalchemy_core/patch.py 2021-03-24 17:45:53.000000000 +0100 +++ new/aws-xray-sdk-2.8.0/aws_xray_sdk/ext/sqlalchemy_core/patch.py 2021-04-29 02:01:38.000000000 +0200 @@ -1,5 +1,6 @@ import logging import sys + if sys.version_info >= (3, 0, 0): from urllib.parse import urlparse, uses_netloc else: @@ -12,11 +13,13 @@ from aws_xray_sdk.core.utils import stacktrace from aws_xray_sdk.ext.util import unwrap +from sqlalchemy.sql.expression import ClauseElement + -def _sql_meta(instance, args): +def _sql_meta(engine_instance, args): try: metadata = {} - url = urlparse(str(instance.engine.url)) + url = urlparse(str(engine_instance.engine.url)) # Add Scheme to uses_netloc or // will be missing from url. uses_netloc.append(url.scheme) if url.password is None: @@ -29,17 +32,23 @@ metadata['url'] = parts.geturl() name = host_info metadata['user'] = url.username - metadata['database_type'] = instance.engine.name + metadata['database_type'] = engine_instance.engine.name try: - version = getattr(instance.dialect, '{}_version'.format(instance.engine.driver)) + version = getattr(engine_instance.dialect, '{}_version'.format(engine_instance.engine.driver)) version_str = '.'.join(map(str, version)) - metadata['driver_version'] = "{}-{}".format(instance.engine.driver, version_str) + metadata['driver_version'] = "{}-{}".format(engine_instance.engine.driver, version_str) except AttributeError: - metadata['driver_version'] = instance.engine.driver - if instance.dialect.server_version_info is not None: - metadata['database_version'] = '.'.join(map(str, instance.dialect.server_version_info)) + metadata['driver_version'] = engine_instance.engine.driver + if engine_instance.dialect.server_version_info is not None: + metadata['database_version'] = '.'.join(map(str, engine_instance.dialect.server_version_info)) if xray_recorder.stream_sql: - metadata['sanitized_query'] = str(args[0]) + try: + if isinstance(args[0], ClauseElement): + metadata['sanitized_query'] = str(args[0].compile(engine_instance.engine)) + else: + metadata['sanitized_query'] = str(args[0]) + except Exception: + logging.getLogger(__name__).exception('Error getting the sanitized query') except Exception: metadata = None name = None @@ -48,7 +57,15 @@ def _xray_traced_sqlalchemy_execute(wrapped, instance, args, kwargs): - name, sql = _sql_meta(instance, args) + return _process_request(wrapped, instance, args, kwargs) + + +def _xray_traced_sqlalchemy_session(wrapped, instance, args, kwargs): + return _process_request(wrapped, instance.bind, args, kwargs) + + +def _process_request(wrapped, engine_instance, args, kwargs): + name, sql = _sql_meta(engine_instance, args) if sql is not None: subsegment = xray_recorder.begin_subsegment(name, namespace='remote') else: @@ -75,6 +92,12 @@ _xray_traced_sqlalchemy_execute ) + wrapt.wrap_function_wrapper( + 'sqlalchemy.orm.session', + 'Session.execute', + _xray_traced_sqlalchemy_session + ) + def unpatch(): """ @@ -84,3 +107,4 @@ _PATCHED_MODULES.discard('sqlalchemy_core') import sqlalchemy unwrap(sqlalchemy.engine.base.Connection, 'execute') + unwrap(sqlalchemy.orm.session.Session, 'execute') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-xray-sdk-2.7.0/aws_xray_sdk/version.py new/aws-xray-sdk-2.8.0/aws_xray_sdk/version.py --- old/aws-xray-sdk-2.7.0/aws_xray_sdk/version.py 2021-03-24 17:45:53.000000000 +0100 +++ new/aws-xray-sdk-2.8.0/aws_xray_sdk/version.py 2021-04-29 02:01:38.000000000 +0200 @@ -1 +1 @@ -VERSION = '2.7.0' +VERSION = '2.8.0' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-xray-sdk-2.7.0/aws_xray_sdk.egg-info/PKG-INFO new/aws-xray-sdk-2.8.0/aws_xray_sdk.egg-info/PKG-INFO --- old/aws-xray-sdk-2.7.0/aws_xray_sdk.egg-info/PKG-INFO 2021-03-24 18:06:14.000000000 +0100 +++ new/aws-xray-sdk-2.8.0/aws_xray_sdk.egg-info/PKG-INFO 2021-04-29 02:03:01.000000000 +0200 @@ -1,6 +1,6 @@ Metadata-Version: 2.1 Name: aws-xray-sdk -Version: 2.7.0 +Version: 2.8.0 Summary: The AWS X-Ray SDK for Python (the SDK) enables Python developers to record and emit information from within their applications to the AWS X-Ray service. Home-page: https://github.com/aws/aws-xray-sdk-python Author: Amazon Web Services @@ -14,7 +14,7 @@ ## Installing - The AWS X-Ray SDK for Python is compatible with Python 2.7, 3.4, 3.5, 3.6, 3.7, and 3.8. + The AWS X-Ray SDK for Python is compatible with Python 2.7, 3.4, 3.5, 3.6, 3.7, 3.8, and 3.9. Install the SDK using the following command (the SDK's non-testing dependencies will be installed). @@ -199,6 +199,9 @@ xray_recorder.put_metadata('mykey', metadata) ``` + ### Generate NoOp Trace and Entity Id + X-Ray Python SDK will by default generate no-op trace and entity id for unsampled requests and secure random trace and entity id for sampled requests. If customer wants to enable generating secure random trace and entity id for all the (sampled/unsampled) requests (this is applicable for trace id injection into logs use case) then they should set the `AWS_XRAY_NOOP_ID` environment variable as False. + ### Disabling X-Ray Often times, it may be useful to be able to disable X-Ray for specific use cases, whether to stop X-Ray from sending traces at any moment, or to test code functionality that originally depended on X-Ray instrumented packages to begin segments prior to the code call. For example, if your application relied on an XRayMiddleware to instrument incoming web requests, and you have a method which begins subsegments based on the segment generated by that middleware, it would be useful to be able to disable X-Ray for your unit tests so that `SegmentNotFound` exceptions are not thrown when you need to test your method. @@ -529,4 +532,5 @@ Classifier: Programming Language :: Python :: 3.6 Classifier: Programming Language :: Python :: 3.7 Classifier: Programming Language :: Python :: 3.8 +Classifier: Programming Language :: Python :: 3.9 Description-Content-Type: text/markdown diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-xray-sdk-2.7.0/aws_xray_sdk.egg-info/SOURCES.txt new/aws-xray-sdk-2.8.0/aws_xray_sdk.egg-info/SOURCES.txt --- old/aws-xray-sdk-2.7.0/aws_xray_sdk.egg-info/SOURCES.txt 2021-03-24 18:06:14.000000000 +0100 +++ new/aws-xray-sdk-2.8.0/aws_xray_sdk.egg-info/SOURCES.txt 2021-04-29 02:03:01.000000000 +0200 @@ -29,6 +29,7 @@ aws_xray_sdk/core/models/entity.py aws_xray_sdk/core/models/facade_segment.py aws_xray_sdk/core/models/http.py +aws_xray_sdk/core/models/noop_traceid.py aws_xray_sdk/core/models/segment.py aws_xray_sdk/core/models/subsegment.py aws_xray_sdk/core/models/throwable.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-xray-sdk-2.7.0/setup.py new/aws-xray-sdk-2.8.0/setup.py --- old/aws-xray-sdk-2.7.0/setup.py 2021-03-24 17:45:53.000000000 +0100 +++ new/aws-xray-sdk-2.8.0/setup.py 2021-04-29 02:01:38.000000000 +0200 @@ -41,6 +41,7 @@ 'Programming Language :: Python :: 3.6', 'Programming Language :: Python :: 3.7', 'Programming Language :: Python :: 3.8', + 'Programming Language :: Python :: 3.9', ], install_requires=[