Ferramentas/AjustaFundos/actions/data/json_size.py

33 lines
1 KiB
Python

import json
from types import SimpleNamespace
class JsonSize:
@staticmethod
def _safe_default(o):
from datetime import datetime, date
from decimal import Decimal
if isinstance(o, (datetime, date)):
return o.isoformat()
if isinstance(o, Decimal):
return float(o)
if isinstance(o, SimpleNamespace):
return vars(o)
if hasattr(o, "__dict__"):
return vars(o)
return str(o)
def __new__(cls, obj):
try:
# 💡 ensure_ascii=False mantém acentos; surrogatepass evita falha com caracteres inválidos
json_str = json.dumps(
obj,
ensure_ascii=False,
default=cls._safe_default,
)
# 💡 errors='ignore' ou 'replace' evita que .encode() quebre
return len(json_str.encode("utf-8", errors="ignore"))
except Exception:
# fallback de segurança (nunca deve quebrar)
return len(str(obj).encode("utf-8", errors="ignore"))