44 lines
1.2 KiB
Python
44 lines
1.2 KiB
Python
"""Compatibility hacks and helpers."""
|
|
|
|
import contextlib
|
|
import sys
|
|
|
|
|
|
@contextlib.contextmanager
|
|
def pydantic_v1_patch():
|
|
"""A context manager that patches the Pydantic module to mimic v1 behaviour.
|
|
|
|
Yields:
|
|
None when the Pydantic module is patched.
|
|
"""
|
|
patched_modules = [
|
|
"pydantic",
|
|
"pydantic.fields",
|
|
"pydantic.errors",
|
|
"pydantic.main",
|
|
]
|
|
originals = {module: sys.modules.get(module) for module in patched_modules}
|
|
try:
|
|
import pydantic.v1 # type: ignore
|
|
|
|
sys.modules["pydantic.fields"] = pydantic.v1.fields # type: ignore
|
|
sys.modules["pydantic.main"] = pydantic.v1.main # type: ignore
|
|
sys.modules["pydantic.errors"] = pydantic.v1.errors # type: ignore
|
|
sys.modules["pydantic"] = pydantic.v1
|
|
yield
|
|
except (ImportError, AttributeError):
|
|
# pydantic v1 is already installed
|
|
yield
|
|
finally:
|
|
# Restore the original Pydantic module
|
|
for k, original in originals.items():
|
|
if k in sys.modules:
|
|
if original:
|
|
sys.modules[k] = original
|
|
else:
|
|
del sys.modules[k]
|
|
|
|
|
|
with pydantic_v1_patch():
|
|
import sqlmodel as sqlmodel
|