32 lines
818 B
Python
32 lines
818 B
Python
from __future__ import annotations
|
|
|
|
import re
|
|
from collections.abc import Mapping, Sequence
|
|
from datetime import datetime
|
|
from typing import Any
|
|
|
|
from bson import ObjectId
|
|
|
|
|
|
def to_object_id(value: str) -> ObjectId:
|
|
return ObjectId(value)
|
|
|
|
|
|
def jsonable(value: Any) -> Any:
|
|
if isinstance(value, ObjectId):
|
|
return str(value)
|
|
if isinstance(value, datetime):
|
|
return value
|
|
if isinstance(value, Mapping):
|
|
return {k: jsonable(v) for k, v in value.items()}
|
|
if isinstance(value, Sequence) and not isinstance(value, (str, bytes, bytearray)):
|
|
return [jsonable(v) for v in value]
|
|
return value
|
|
|
|
|
|
def sanitize_rut(value: str) -> str:
|
|
digits = "".join(re.findall(r"\d", value or ""))
|
|
if len(digits) <= 1:
|
|
return digits
|
|
return f"{digits[:-1]}-{digits[-1]}"
|