Make MultilangSession's language class configurable

This commit is contained in:
Petr Viktorin 2011-04-04 21:51:12 +03:00
parent 9fdb8e1bd0
commit 4291c33c00
2 changed files with 13 additions and 3 deletions

View file

@ -157,11 +157,21 @@ class MultilangSession(Session):
"""A tiny Session subclass that adds support for a default language.""" """A tiny Session subclass that adds support for a default language."""
_default_language_id = 9 # English. XXX magic constant _default_language_id = 9 # English. XXX magic constant
def __init__(self, *args, **kwargs):
try:
self.language_class = kwargs.pop('language_class')
except KeyError:
# Set the default language_class
# We need to import here, to prevent a circular depencency
from pokedex.db.tables import Language
self.language_class = Language
super(MultilangSession, self).__init__(*args, **kwargs)
@property @property
def default_language(self): def default_language(self):
# Need to import tables here to avoid a circular dependency # Need to import tables here to avoid a circular dependency
from pokedex.db import tables from pokedex.db import tables
query = self.query(tables.Language) query = self.query(self.language_class)
query = query.filter_by(id=self._default_language_id) query = query.filter_by(id=self._default_language_id)
return query.one() return query.one()

View file

@ -66,7 +66,7 @@ def test_i18n_table_creation():
# OK, create all the tables and gimme a session # OK, create all the tables and gimme a session
Base.metadata.create_all() Base.metadata.create_all()
sm = sessionmaker(class_=MultilangSession) sm = sessionmaker(class_=MultilangSession, language_class=Language)
sess = MultilangScopedSession(sm) sess = MultilangScopedSession(sm)
# Create some languages and foos to bind together # Create some languages and foos to bind together
@ -82,7 +82,7 @@ def test_i18n_table_creation():
# Commit so the above get primary keys filled in # Commit so the above get primary keys filled in
sess.commit() sess.commit()
sess.default_language = lang_en.id sess.default_language = lang_en
# Give our foo some names, as directly as possible # Give our foo some names, as directly as possible
foo_text = FooText() foo_text = FooText()