Skip to content

Commit 8bf1591

Browse files
committed
Repair tests for aiobotocore
1 parent d818a90 commit 8bf1591

File tree

2 files changed

+52
-56
lines changed

2 files changed

+52
-56
lines changed

newrelic/hooks/external_botocore.py

Lines changed: 40 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -877,43 +877,7 @@ def extract_bedrock_converse_attrs(kwargs, response, response_headers, model, sp
877877
return bedrock_attrs
878878

879879

880-
class EventStreamWrapper(ObjectProxy):
881-
def __iter__(self):
882-
g = GeneratorProxy(self.__wrapped__.__iter__())
883-
g._nr_ft = getattr(self, "_nr_ft", None)
884-
g._nr_bedrock_attrs = getattr(self, "_nr_bedrock_attrs", {})
885-
g._nr_model_extractor = getattr(self, "_nr_model_extractor", NULL_EXTRACTOR)
886-
g._nr_is_converse = getattr(self, "_nr_is_converse", False)
887-
return g
888-
889-
890-
class GeneratorProxy(ObjectProxy):
891-
def __init__(self, wrapped):
892-
super().__init__(wrapped)
893-
894-
def __iter__(self):
895-
return self
896-
897-
def __next__(self):
898-
transaction = current_transaction()
899-
if not transaction:
900-
return self.__wrapped__.__next__()
901-
902-
return_val = None
903-
try:
904-
return_val = self.__wrapped__.__next__()
905-
self.record_stream_chunk(return_val, transaction)
906-
except StopIteration:
907-
self.record_events_on_stop_iteration(transaction)
908-
raise
909-
except Exception as exc:
910-
self.record_error(transaction, exc)
911-
raise
912-
return return_val
913-
914-
def close(self):
915-
return super().close()
916-
880+
class BedrockRecordEventMixin:
917881
def record_events_on_stop_iteration(self, transaction):
918882
if hasattr(self, "_nr_ft"):
919883
bedrock_attrs = getattr(self, "_nr_bedrock_attrs", {})
@@ -1002,6 +966,44 @@ def converse_record_stream_chunk(self, event, transaction):
1002966
# self.record_events_on_stop_iteration(transaction)
1003967

1004968

969+
class EventStreamWrapper(ObjectProxy):
970+
def __iter__(self):
971+
g = GeneratorProxy(self.__wrapped__.__iter__())
972+
g._nr_ft = getattr(self, "_nr_ft", None)
973+
g._nr_bedrock_attrs = getattr(self, "_nr_bedrock_attrs", {})
974+
g._nr_model_extractor = getattr(self, "_nr_model_extractor", NULL_EXTRACTOR)
975+
g._nr_is_converse = getattr(self, "_nr_is_converse", False)
976+
return g
977+
978+
979+
class GeneratorProxy(BedrockRecordEventMixin, ObjectProxy):
980+
def __init__(self, wrapped):
981+
super().__init__(wrapped)
982+
983+
def __iter__(self):
984+
return self
985+
986+
def __next__(self):
987+
transaction = current_transaction()
988+
if not transaction:
989+
return self.__wrapped__.__next__()
990+
991+
return_val = None
992+
try:
993+
return_val = self.__wrapped__.__next__()
994+
self.record_stream_chunk(return_val, transaction)
995+
except StopIteration:
996+
self.record_events_on_stop_iteration(transaction)
997+
raise
998+
except Exception as exc:
999+
self.record_error(transaction, exc)
1000+
raise
1001+
return return_val
1002+
1003+
def close(self):
1004+
return super().close()
1005+
1006+
10051007
class AsyncEventStreamWrapper(ObjectProxy):
10061008
def __aiter__(self):
10071009
g = AsyncGeneratorProxy(self.__wrapped__.__aiter__())
@@ -1012,13 +1014,7 @@ def __aiter__(self):
10121014
return g
10131015

10141016

1015-
class AsyncGeneratorProxy(ObjectProxy):
1016-
# Import these methods from the synchronous GeneratorProxy
1017-
# Avoid direct inheritance so we don't implement both __iter__ and __aiter__
1018-
record_stream_chunk = GeneratorProxy.record_stream_chunk
1019-
record_events_on_stop_iteration = GeneratorProxy.record_events_on_stop_iteration
1020-
record_error = GeneratorProxy.record_error
1021-
1017+
class AsyncGeneratorProxy(BedrockRecordEventMixin, ObjectProxy):
10221018
def __aiter__(self):
10231019
return self
10241020

tests/external_aiobotocore/test_bedrock_chat_completion_invoke_model.py

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,18 @@
2020
import botocore.exceptions
2121
import pytest
2222
from conftest import BOTOCORE_VERSION
23+
from external_botocore._test_bedrock_chat_completion_invoke_model import (
24+
chat_completion_expected_events,
25+
chat_completion_expected_malformed_request_body_events,
26+
chat_completion_expected_malformed_response_body_events,
27+
chat_completion_expected_malformed_response_streaming_body_events,
28+
chat_completion_expected_malformed_response_streaming_chunk_events,
29+
chat_completion_expected_streaming_error_events,
30+
chat_completion_invalid_access_key_error_events,
31+
chat_completion_invalid_model_error_events,
32+
chat_completion_payload_templates,
33+
chat_completion_streaming_expected_events,
34+
)
2335
from testing_support.fixtures import override_llm_token_callback_settings, reset_core_stats_engine, validate_attributes
2436
from testing_support.ml_testing_utils import (
2537
add_token_count_to_events,
@@ -42,18 +54,6 @@
4254
from newrelic.api.transaction import add_custom_attribute
4355
from newrelic.common.object_names import callable_name
4456
from newrelic.hooks.external_botocore import MODEL_EXTRACTORS
45-
from tests.external_botocore._test_bedrock_chat_completion_invoke_model import (
46-
chat_completion_expected_events,
47-
chat_completion_expected_malformed_request_body_events,
48-
chat_completion_expected_malformed_response_body_events,
49-
chat_completion_expected_malformed_response_streaming_body_events,
50-
chat_completion_expected_malformed_response_streaming_chunk_events,
51-
chat_completion_expected_streaming_error_events,
52-
chat_completion_invalid_access_key_error_events,
53-
chat_completion_invalid_model_error_events,
54-
chat_completion_payload_templates,
55-
chat_completion_streaming_expected_events,
56-
)
5757

5858

5959
@pytest.fixture(scope="session", params=[False, True], ids=["ResponseStandard", "ResponseStreaming"])

0 commit comments

Comments
 (0)