Skip to content

Commit e43d44b

Browse files
authored
use prefix instead of suffix for vcr cassette names from test_name (#232)
Cassette name additions passed in as test_name for /vcr/test/start are now used as a prefix for generated cassette names instead of a suffix. openai_embeddings_post_48694087_test_embedding.yaml → test_embedding_openai_embeddings_post_48694087.yaml tested by using this dev image in some shared test tooling for datadog llm observability
1 parent 6a5a9a4 commit e43d44b

File tree

3 files changed

+20
-16
lines changed

3 files changed

+20
-16
lines changed

ddapm_test_agent/agent.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ def _session_token(request: Request) -> Optional[str]:
113113
return token
114114

115115

116-
async def _vcr_proxy_cassette_suffix(request: Request) -> Optional[str]:
116+
async def _vcr_proxy_cassette_prefix(request: Request) -> Optional[str]:
117117
try:
118118
request_body: dict[str, str] = await request.json()
119119
requested_test_name = request_body.get("test_name")
@@ -263,7 +263,7 @@ def __init__(self) -> None:
263263
lambda: _AgentSession(sample_rate_by_service_env={})
264264
)
265265

266-
self.vcr_cassette_suffix: Optional[str] = None
266+
self.vcr_cassette_prefix: Optional[str] = None
267267

268268
async def traces(self) -> TraceMap:
269269
"""Return the traces stored by the agent in the order in which they
@@ -1112,24 +1112,24 @@ async def vcr_proxy_suffix_middleware(self, request: Request, handler: _Handler)
11121112
if not request.path.startswith("/vcr"):
11131113
return await handler(request)
11141114

1115-
if self.vcr_cassette_suffix is not None:
1116-
request["vcr_cassette_suffix"] = self.vcr_cassette_suffix
1115+
if self.vcr_cassette_prefix is not None:
1116+
request["vcr_cassette_prefix"] = self.vcr_cassette_prefix
11171117
else:
1118-
vcr_cassette_suffix = await _vcr_proxy_cassette_suffix(request)
1119-
if vcr_cassette_suffix:
1120-
self.vcr_cassette_suffix = vcr_cassette_suffix
1121-
request["vcr_cassette_suffix"] = vcr_cassette_suffix
1118+
vcr_cassette_prefix = await _vcr_proxy_cassette_prefix(request)
1119+
if vcr_cassette_prefix:
1120+
self.vcr_cassette_prefix = vcr_cassette_prefix
1121+
request["vcr_cassette_prefix"] = vcr_cassette_prefix
11221122
return await handler(request)
11231123

11241124
async def check_vcr_proxy_suffix(self, request: Request) -> web.Response:
11251125
"""Verify that the middleware has set the VCR proxy suffix"""
1126-
if self.vcr_cassette_suffix is None:
1126+
if self.vcr_cassette_prefix is None:
11271127
return web.HTTPBadRequest(body="VCR proxy suffix not set, please specify `test_name` in the request body")
11281128
return web.HTTPOk()
11291129

11301130
async def unset_vcr_proxy_suffix(self, request: Request) -> web.Response:
11311131
"""Unset the VCR proxy suffix for the request."""
1132-
self.vcr_cassette_suffix = None
1132+
self.vcr_cassette_prefix = None
11331133
return web.HTTPOk()
11341134

11351135
@middleware

ddapm_test_agent/vcr_proxy.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def get_vcr(subdirectory: str, vcr_cassettes_directory: str) -> vcr.VCR:
8484
)
8585

8686

87-
def generate_cassette_name(path: str, method: str, body: bytes, vcr_cassette_suffix: Optional[str]) -> str:
87+
def generate_cassette_name(path: str, method: str, body: bytes, vcr_cassette_prefix: Optional[str]) -> str:
8888
decoded_body = normalize_multipart_body(body) if body else ""
8989
try:
9090
parsed_body = json.loads(decoded_body) if decoded_body else {}
@@ -96,11 +96,11 @@ def generate_cassette_name(path: str, method: str, body: bytes, vcr_cassette_suf
9696
hash_hex = hash_object.hexdigest()[:8]
9797
safe_path = _file_safe_string(path)
9898

99-
safe_vcr_cassette_suffix = _file_safe_string(vcr_cassette_suffix) if vcr_cassette_suffix else None
99+
safe_vcr_cassette_prefix = _file_safe_string(vcr_cassette_prefix) if vcr_cassette_prefix else None
100100

101101
return (
102-
f"{safe_path}_{method.lower()}_{hash_hex}_{safe_vcr_cassette_suffix}"
103-
if safe_vcr_cassette_suffix
102+
f"{safe_vcr_cassette_prefix}_{safe_path}_{method.lower()}_{hash_hex}"
103+
if safe_vcr_cassette_prefix
104104
else f"{safe_path}_{method.lower()}_{hash_hex}"
105105
)
106106

@@ -124,9 +124,9 @@ async def proxy_request(request: Request, vcr_cassettes_directory: str) -> Respo
124124

125125
body_bytes = await request.read()
126126

127-
vcr_cassette_suffix = request.pop("vcr_cassette_suffix", None)
127+
vcr_cassette_prefix = request.pop("vcr_cassette_prefix", None)
128128

129-
cassette_name = generate_cassette_name(path, request.method, body_bytes, vcr_cassette_suffix)
129+
cassette_name = generate_cassette_name(path, request.method, body_bytes, vcr_cassette_prefix)
130130
with get_vcr(provider, vcr_cassettes_directory).use_cassette(f"{cassette_name}.yaml"):
131131
oai_response = requests.request(
132132
method=request.method,
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
upgrade:
3+
- |
4+
vcr: ``test_name`` specified in ``/vcr/test/start`` is now used as a prefix for generated cassette names instead of a suffix.

0 commit comments

Comments
 (0)