From: Petr Viktorin Date: Tue, 29 Mar 2011 16:53:16 +0000 (+0300) Subject: Add a mapped_classes list, and a translation_classes list to each mapped class X-Git-Tag: veekun-promotions/2011041101~17^2~10 X-Git-Url: http://git.veekun.com/zzz-pokedex.git/commitdiff_plain/43bae2c3a44a76dbd0279d6944bb01b16d1580c2?hp=4d6dcb7d51de6582aea821e5bb2e438fa8f0376c Add a mapped_classes list, and a translation_classes list to each mapped class --- diff --git a/pokedex/db/multilang.py b/pokedex/db/multilang.py index f3438dd..8e067c6 100644 --- a/pokedex/db/multilang.py +++ b/pokedex/db/multilang.py @@ -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 diff --git a/pokedex/db/tables.py b/pokedex/db/tables.py index d1404ca..24413fb 100644 --- a/pokedex/db/tables.py +++ b/pokedex/db/tables.py @@ -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