mixins __table_args__ , __local_table_args__ . , __local_table_args__ attr. (cls.mro()) , , , .
def _process_args(cls, attr, out_args, out_kwargs):
try:
args = getattr(cls, attr)
except AttributeError:
return
if isinstance(args, Mapping):
out_kwargs.update(args)
else:
if isinstance(args[-1], Mapping):
out_kwargs.update(args.pop())
out_args.extend(args)
class Base():
@declared_attr
def __mapper_args__(cls):
args = []
kwargs = {}
for mixin in reversed(cls.mro()):
_process_args(mixin, '__mapper_args__', args, kwargs)
_process_args(mixin, '__local_mapper_args__', args, kwargs)
return kwargs
@declared_attr
def __table_args__(cls):
args = []
kwargs = {}
for mixin in reversed(cls.mro()):
_process_args(mixin, '__table_args__', args, kwargs)
_process_args(cls, '__local_table_args__', args, kwargs)
args.append(kwargs)
return tuple(args)
__table_args__ , "real", Base, __local_table_args__.