diff --git a/crudkit/core/__init__.py b/crudkit/core/__init__.py index 86d90b7..c2b1775 100644 --- a/crudkit/core/__init__.py +++ b/crudkit/core/__init__.py @@ -5,5 +5,4 @@ from .utils import ( deep_diff, diff_to_patch, filter_to_columns, - to_jsonable, ) diff --git a/crudkit/core/service.py b/crudkit/core/service.py index 366900a..5766f8f 100644 --- a/crudkit/core/service.py +++ b/crudkit/core/service.py @@ -10,7 +10,7 @@ from sqlalchemy.orm.attributes import InstrumentedAttribute from sqlalchemy.sql import operators from sqlalchemy.sql.elements import UnaryExpression, ColumnElement -from crudkit.core import to_jsonable, deep_diff, diff_to_patch, filter_to_columns, normalize_payload +from crudkit.core import deep_diff, diff_to_patch, filter_to_columns, normalize_payload from crudkit.core.base import Version from crudkit.core.spec import CRUDSpec from crudkit.core.types import OrderSpec, SeekWindow @@ -731,23 +731,19 @@ class CRUDService(Generic[T]): def _log_version(self, change_type: str, obj: T, actor=None, metadata: dict | None = None): session = self.session + snapshot = {} try: - snapshot = {} - try: - snapshot = obj.as_dict() - except Exception: - snapshot = {"error": "serialize failed"} + snapshot = obj.as_dict() + except Exception: + snapshot = {"error": "serialize failed"} - version = Version( - model_name=self.model.__name__, - object_id=obj.id, - change_type=change_type, - data=to_jsonable(snapshot), - actor=str(actor) if actor else None, - meta=to_jsonable(metadata) if metadata else None, - ) - session.add(version) - session.commit() - except Exception as e: - log.warning(f"Version logging failed for {self.model.__name__} id={getattr(obj, "id", "?")}: {str(e)}") - session.rollback() + version = Version( + model_name=self.model.__name__, + object_id=obj.id, + change_type=change_type, + data=snapshot, + actor=str(actor) if actor else None, + meta=metadata or None, + ) + session.add(version) + session.commit() diff --git a/crudkit/core/utils.py b/crudkit/core/utils.py index d03a7d6..31fa227 100644 --- a/crudkit/core/utils.py +++ b/crudkit/core/utils.py @@ -1,7 +1,5 @@ from __future__ import annotations from datetime import datetime, date -from decimal import Decimal -from enum import Enum from typing import Any, Dict, Optional, Callable from sqlalchemy import inspect @@ -10,32 +8,6 @@ ISO_DT_FORMATS = ("%Y-%m-%dT%H:%M:%S.%f", "%Y-%m-%d %H:%M", "%Y-%m-%d") -def to_jsonable(obj: Any): - """Recursively convert values into JSON-serializable forms.""" - if obj is None or isinstance(obj, (str, int, float, bool)): - return obj - - if isinstance(obj, (datetime, date)): - return obj.isoformat() - - if isinstance(obj, Decimal): - return float(obj) - - if isinstance(obj, Enum): - return obj.value - - if isinstance(obj, dict): - return {str(k): to_jsonable(v) for k, v in obj.items()} - - if isinstance(obj, (list, tuple, set)): - return [to_jsonable(v) for v in obj] - - # fallback: strin-ify weird objects (UUID, ORM instances, etc.) - try: - return str(obj) - except Exception: - return None - 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} diff --git a/inventory/__init__.py b/inventory/__init__.py index c059d3b..cea7eea 100644 --- a/inventory/__init__.py +++ b/inventory/__init__.py @@ -1,7 +1,6 @@ from __future__ import annotations from flask import Flask -from jinja_markdown import MarkdownExtension from sqlalchemy.engine import Engine from sqlalchemy import event from sqlalchemy.pool import Pool @@ -19,7 +18,6 @@ from .routes.search import init_search_routes def create_app(config_cls=crudkit.DevConfig) -> Flask: app = Flask(__name__) - app.jinja_env.add_extension(MarkdownExtension) init_pretty(app) diff --git a/inventory/templates/update_list.html b/inventory/templates/update_list.html index 6062dbd..aff8fed 100644 --- a/inventory/templates/update_list.html +++ b/inventory/templates/update_list.html @@ -1,106 +1,15 @@ {% set items = (field.template_ctx.instance.updates or []) %} - - - - - + \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index f0888ad..e15d734 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -9,7 +9,6 @@ dependencies = [ "flask", "flask_sqlalchemy", "html5lib", - "jinja_markdown", "pandas", "pyodbc", "python-dotenv",