summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/util
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2020-12-03 14:35:30 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2020-12-19 12:43:16 -0500
commit9625adba3553803acd5488660d65c8e675a61fa6 (patch)
tree23106014c9c6ed76ab2a81502cafa2ce99cbe0b5 /lib/sqlalchemy/util
parent27766512b2d037a8f0048dccc6e2f02c281fbc9a (diff)
downloadsqlalchemy-9625adba3553803acd5488660d65c8e675a61fa6.tar.gz
Allow Declarative to extract class attr from field
Added an alternate resolution scheme to Declarative that will extract the SQLAlchemy column or mapped property from the "metadata" dictionary of a dataclasses.Field object. This allows full declarative mappings to be combined with dataclass fields. Fixes: #5745 Change-Id: I1165bc025246a4cb9fc099b1b7c46a6b0f799b23
Diffstat (limited to 'lib/sqlalchemy/util')
-rw-r--r--lib/sqlalchemy/util/__init__.py1
-rw-r--r--lib/sqlalchemy/util/compat.py16
2 files changed, 17 insertions, 0 deletions
diff --git a/lib/sqlalchemy/util/__init__.py b/lib/sqlalchemy/util/__init__.py
index f4363d03c..2e3f68722 100644
--- a/lib/sqlalchemy/util/__init__.py
+++ b/lib/sqlalchemy/util/__init__.py
@@ -57,6 +57,7 @@ from .compat import byte_buffer # noqa
from .compat import callable # noqa
from .compat import cmp # noqa
from .compat import cpython # noqa
+from .compat import dataclass_fields # noqa
from .compat import decode_backslashreplace # noqa
from .compat import dottedgetter # noqa
from .compat import has_refcount_gc # noqa
diff --git a/lib/sqlalchemy/util/compat.py b/lib/sqlalchemy/util/compat.py
index e8c488047..77c913640 100644
--- a/lib/sqlalchemy/util/compat.py
+++ b/lib/sqlalchemy/util/compat.py
@@ -421,6 +421,22 @@ else:
import collections as collections_abc # noqa
+if py37:
+ import dataclasses
+
+ def dataclass_fields(cls):
+ if dataclasses.is_dataclass(cls):
+ return dataclasses.fields(cls)
+ else:
+ return []
+
+
+else:
+
+ def dataclass_fields(cls):
+ return []
+
+
def raise_from_cause(exception, exc_info=None):
r"""legacy. use raise\_()"""