diff --git a/inventory/routes/entry.py b/inventory/routes/entry.py index 929e803..9f6c722 100644 --- a/inventory/routes/entry.py +++ b/inventory/routes/entry.py @@ -1,5 +1,6 @@ from datetime import datetime from flask import Blueprint, render_template, abort, request, jsonify, current_app +from sqlalchemy.inspection import inspect from typing import Any, Dict, List, Tuple, Callable, Optional import crudkit @@ -9,7 +10,9 @@ ISO_DT_FORMATS = ("%Y-%m-%dT%H:%M:%S.%f", "%Y-%m-%dT%H:%M:%S", "%Y-%m-%d %H:%M", bp_entry = Blueprint("entry", __name__) -ISO_DT_FORMATS = ("%Y-%m-%dT%H:%M:%S.%f", "%Y-%m-%dT%H:%M:%S", "%Y-%m-%d %H:%M", "%Y-%m-%d") +def filter_to_columns(data: dict, model_cls): + cols = {c.key for c in inspect(model_cls).mapper.columns} + return {k: v for k, v in data.items() if k in cols} def _parse_dt_maybe(x: Any) -> Any: if isinstance(x, datetime): @@ -355,7 +358,9 @@ def init_entry_routes(app): service = crudkit.crud.get_service(cls) item = service.get(id, params) d = deep_diff(item.as_dict(), payload, ignore_keys={"id", "created_at", "updated_at"}) - print(f"OLD = {item.as_dict()}\n\nNEW = {payload}\n\nDIFF = {d}") + patch = diff_to_patch(d) + clean_patch = filter_to_columns(patch, cls) + print(f"OLD = {item.as_dict()}\n\nNEW = {payload}\n\nDIFF = {d}\n\nPATCH = {patch}\n\nCLEAN PATCH = {clean_patch}") return {"status": "success", "payload": payload} except Exception as e: