Add a mapped_classes list, and a translation_classes list to each mapped class

This commit is contained in:
Petr Viktorin 2011-03-29 19:53:16 +03:00 committed by Eevee
parent bd9fa0d6a6
commit d961cfe1c7
2 changed files with 13 additions and 2 deletions

View file

@ -145,6 +145,9 @@ def create_translation_table(_table_name, foreign_class, relation_name,
setattr(foreign_class, name + '_map', setattr(foreign_class, name + '_map',
association_proxy(relation_name, name, creator=creator)) association_proxy(relation_name, name, creator=creator))
# Add to the list of translation classes
foreign_class.translation_classes.append(Translations)
# Done # Done
return Translations return Translations

View file

@ -25,7 +25,7 @@ import collections
from functools import partial from functools import partial
from sqlalchemy import Column, ForeignKey, MetaData, PrimaryKeyConstraint, Table, UniqueConstraint from sqlalchemy import Column, ForeignKey, MetaData, PrimaryKeyConstraint, Table, UniqueConstraint
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta
from sqlalchemy.ext.associationproxy import association_proxy from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.orm import backref, relation from sqlalchemy.orm import backref, relation
from sqlalchemy.orm.session import Session from sqlalchemy.orm.session import Session
@ -60,8 +60,16 @@ class TableSuperclass(object):
def __str__(self): def __str__(self):
return unicode(self).encode('utf8') return unicode(self).encode('utf8')
mapped_classes = []
class TableMetaclass(DeclarativeMeta):
def __init__(cls, name, bases, attrs):
super(TableMetaclass, cls).__init__(name, bases, attrs)
if hasattr(cls, '__tablename__'):
mapped_classes.append(cls)
cls.translation_classes = []
metadata = MetaData() metadata = MetaData()
TableBase = declarative_base(metadata=metadata, cls=TableSuperclass) TableBase = declarative_base(metadata=metadata, cls=TableSuperclass, metaclass=TableMetaclass)
### Need Language first, to create the partial() below ### Need Language first, to create the partial() below