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',
association_proxy(relation_name, name, creator=creator))
# Add to the list of translation classes
foreign_class.translation_classes.append(Translations)
# Done
return Translations

View file

@ -25,7 +25,7 @@ import collections
from functools import partial
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.orm import backref, relation
from sqlalchemy.orm.session import Session
@ -60,8 +60,16 @@ class TableSuperclass(object):
def __str__(self):
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()
TableBase = declarative_base(metadata=metadata, cls=TableSuperclass)
TableBase = declarative_base(metadata=metadata, cls=TableSuperclass, metaclass=TableMetaclass)
### Need Language first, to create the partial() below