Skip to content

Commit 59633e5

Browse files
rafactor BaseMetricRequest to use Pydantic BaseModel and update usage
1 parent 958d7f1 commit 59633e5

File tree

3 files changed

+21
-15
lines changed

3 files changed

+21
-15
lines changed

src/service/payloads/metrics/base_metric_request.py

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,19 @@
1-
from abc import ABC, abstractmethod
1+
from abc import abstractmethod
22
from typing import Dict, Optional
3+
from pydantic import BaseModel, ConfigDict
34

45

5-
class BaseMetricRequest(ABC):
6+
class BaseMetricRequest(BaseModel):
67
"""
78
Abstract base class for metric requests.
89
"""
10+
# To allow extra fields to be set on instances
11+
model_config = ConfigDict(extra='allow')
912

10-
def __init__(
11-
self,
12-
model_id: str,
13-
metric_name: str,
14-
request_name: Optional[str],
15-
batch_size: Optional[int],
16-
) -> None:
17-
self.model_id: str = model_id
18-
self.metric_name: str = metric_name
19-
self.request_name: str = request_name
20-
self.batch_size: int = batch_size
13+
model_id: str
14+
metric_name: str
15+
request_name: Optional[str] = None
16+
batch_size: Optional[int] = None
2117

2218
def retrieve_default_tags(self) -> Dict[str, str]:
2319
output: Dict[str, str] = {}

src/service/payloads/metrics/request_reconciler.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,12 @@ def reconcile_with_metadata(
3939
storage_metadata: The storage metadata to use for reconciliation
4040
"""
4141
try:
42-
for name in dir(request.__class__):
42+
# Get both model fields and dynamically added instance attributes
43+
model_field_names = set(request.__class__.model_fields.keys())
44+
instance_attribute_names = set(request.__dict__.keys())
45+
all_field_names = model_field_names.union(instance_attribute_names)
46+
47+
for name in all_field_names:
4348
if name.startswith("_"):
4449
continue
4550

tests/service/payloads/metrics/test_request_reconciler.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,12 @@ class MockReconcilableRequest(BaseMetricRequest):
2121
"""Mock request class with reconcilable fields."""
2222

2323
def __init__(self, model_id: str = "test_model"):
24-
super().__init__(model_id, "test_metric", "test_request", 100)
24+
super().__init__(
25+
model_id=model_id,
26+
metric_name="test_metric",
27+
request_name="test_request",
28+
batch_size=100,
29+
)
2530

2631
# Create reconcilable feature field
2732
self.protected_attribute = ReconcilableFeature(

0 commit comments

Comments
 (0)