From 47780ac672fd0666c66a419939cff105bf75f1e9 Mon Sep 17 00:00:00 2001 From: Kuat Eshengazin Date: Mon, 30 Oct 2023 22:31:52 +0100 Subject: [PATCH] Added null() support --- sqlalchemy_json/__init__.py | 9 +++++---- test/test_sqlalchemy_json.py | 10 ++++++++++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/sqlalchemy_json/__init__.py b/sqlalchemy_json/__init__.py index c4b6296..efbaae4 100644 --- a/sqlalchemy_json/__init__.py +++ b/sqlalchemy_json/__init__.py @@ -1,4 +1,5 @@ from sqlalchemy.ext.mutable import Mutable, MutableDict, MutableList +from sqlalchemy.sql import expression from sqlalchemy.types import JSON from .track import TrackedDict, TrackedList @@ -19,8 +20,8 @@ class MutableContainer(Mutable): @classmethod def coerce(cls, key, value): - if value is None: - return value + if value is None or isinstance(value, expression.Null): + return None if isinstance(value, cls): return value if isinstance(value, dict): @@ -56,8 +57,8 @@ class NestedMutableContainer(Mutable): @classmethod def coerce(cls, key, value): """Convert plain dictionary to NestedMutableContainer.""" - if value is None: - return value + if value is None or isinstance(value, expression.Null): + return None if isinstance(value, cls): return value if isinstance(value, dict): diff --git a/test/test_sqlalchemy_json.py b/test/test_sqlalchemy_json.py index 8b55741..0f50139 100644 --- a/test/test_sqlalchemy_json.py +++ b/test/test_sqlalchemy_json.py @@ -10,6 +10,7 @@ Integer, Text, create_engine, + null, ) from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker @@ -178,3 +179,12 @@ def test_mutable_json_list(session, author_with_list): session.commit() assert author_with_list.handles == ["@JohnDoe", "JohnDoe", "@mike_bianco"] + + +def test_null_none(session): + """ + Make sure library can handle both None and null() as JSON value + """ + for value in (None, null()): + author = Author(name="John Doe", handles=value) + Article(author=author.name, content="very important", references=value)