From d961cfe1c7a7810041920b47ecff46183f8d3c98 Mon Sep 17 00:00:00 2001 From: Petr Viktorin Date: Tue, 29 Mar 2011 19:53:16 +0300 Subject: [PATCH] Add a mapped_classes list, and a translation_classes list to each mapped class --- pokedex/db/multilang.py | 3 +++ pokedex/db/tables.py | 12 ++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) 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