Feat: add Interseptor
This commit is contained in:
0
scripts/__init__.py
Normal file
0
scripts/__init__.py
Normal file
28
scripts/intersept_not_valid.py
Normal file
28
scripts/intersept_not_valid.py
Normal file
@@ -0,0 +1,28 @@
|
||||
from collections.abc import Callable
|
||||
|
||||
import pandas as pd
|
||||
from pydantic import BaseModel, ValidationError
|
||||
|
||||
|
||||
class Interseptor:
|
||||
def __init__(self, model: BaseModel):
|
||||
self.model = model
|
||||
self.not_valid_rows = []
|
||||
|
||||
def __call__(self, func: Callable[..., pd.DataFrame]):
|
||||
def wrapped(*args, **kwrds):
|
||||
res = func(*args, **kwrds)
|
||||
df_dict = res.to_dict(orient="records")
|
||||
valid_rows = []
|
||||
for i, r in enumerate(df_dict):
|
||||
try:
|
||||
self.model(**r)
|
||||
except ValidationError:
|
||||
r["InterseptorOrigin"] = func.__name__
|
||||
r["InterseptorIndex"] = i
|
||||
self.not_valid_rows.append(r)
|
||||
else:
|
||||
valid_rows.append(r)
|
||||
return pd.DataFrame.from_records(valid_rows)
|
||||
|
||||
return wrapped
|
||||
Reference in New Issue
Block a user