"""
+ __slots__ = ("obj",)
+
def __init__(self, obj):
self.obj = obj
construct_arg_dictionary[cls] = {}
construct_arg_dictionary[cls][argument_name] = default
- @util.memoized_property
+ @property
def dialect_kwargs(self):
"""A collection of keyword arguments specified as dialect-specific
options to this construct.
_kw_registry = util.PopulateDict(_kw_reg_for_dialect)
- def _kw_reg_for_dialect_cls(self, dialect_name):
+ @classmethod
+ def _kw_reg_for_dialect_cls(cls, dialect_name):
construct_arg_dictionary = DialectKWArgs._kw_registry[dialect_name]
d = _DialectArgDict()
if construct_arg_dictionary is None:
d._defaults.update({"*": None})
else:
- for cls in reversed(self.__class__.__mro__):
+ for cls in reversed(cls.__mro__):
if cls in construct_arg_dictionary:
d._defaults.update(construct_arg_dictionary[cls])
return d
"""
- return util.PopulateDict(
- util.portable_instancemethod(self._kw_reg_for_dialect_cls)
- )
+ return util.PopulateDict(self._kw_reg_for_dialect_cls)
def _validate_dialect_kwargs(self, kwargs: Dict[str, Any]) -> None:
# validate remaining kwargs that they all specify DB prefixes
import sqlalchemy as sa
from sqlalchemy import and_
+from sqlalchemy import ClauseElement
from sqlalchemy import ForeignKey
from sqlalchemy import func
from sqlalchemy import inspect
from sqlalchemy import util
from sqlalchemy.dialects import mysql
from sqlalchemy.dialects import postgresql
+from sqlalchemy.dialects import registry
from sqlalchemy.dialects import sqlite
from sqlalchemy.engine import result
+from sqlalchemy.engine.default import DefaultDialect
from sqlalchemy.engine.processors import to_decimal_processor_factory
from sqlalchemy.orm import aliased
from sqlalchemy.orm import attributes
from sqlalchemy.orm.session import _sessions
from sqlalchemy.sql import column
from sqlalchemy.sql import util as sql_util
+from sqlalchemy.sql.base import DialectKWArgs
from sqlalchemy.sql.util import visit_binary_product
from sqlalchemy.sql.visitors import cloned_traverse
from sqlalchemy.sql.visitors import replacement_traverse
metadata.drop_all(self.engine)
+class SomeFoo(DialectKWArgs, ClauseElement):
+ pass
+
+
+class FooDialect(DefaultDialect):
+ construct_arguments = [
+ (
+ SomeFoo,
+ {
+ "bar": False,
+ "bat": False,
+ },
+ )
+ ]
+
+
@testing.add_to_marker.memory_intensive
class CycleTest(_fixtures.FixtureTest):
__requires__ = ("cpython", "no_windows")
go()
+ @testing.fixture
+ def foo_dialect(self):
+ registry.register("foo", __name__, "FooDialect")
+
+ yield
+ registry.deregister("foo")
+
+ def test_dialect_kwargs(self, foo_dialect):
+
+ @assert_cycles()
+ def go():
+ ff = SomeFoo()
+
+ ff._validate_dialect_kwargs({"foo_bar": True})
+
+ eq_(ff.dialect_options["foo"]["bar"], True)
+
+ eq_(ff.dialect_options["foo"]["bat"], False)
+
+ eq_(ff.dialect_kwargs["foo_bar"], True)
+ eq_(ff.dialect_kwargs["foo_bat"], False)
+
+ ff.dialect_kwargs["foo_bat"] = True
+ eq_(ff.dialect_options["foo"]["bat"], True)
+
+ go()
+
def test_session_execute_orm(self):
User, Address = self.classes("User", "Address")
configure_mappers()