From 20b21d990ddf15995d05c64f6f354db0bad33b88 Mon Sep 17 00:00:00 2001 From: Eevee Date: Tue, 5 Apr 2011 21:03:41 -0700 Subject: [PATCH] Remove the responsibility of setting a default language from multilang. Caller now has to do it. No need to avoid circular deps, no need to do much of anything at all. --- pokedex/db/__init__.py | 12 +++++++++--- pokedex/db/multilang.py | 24 ++++++++++-------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/pokedex/db/__init__.py b/pokedex/db/__init__.py index e2790da..ea103e7 100644 --- a/pokedex/db/__init__.py +++ b/pokedex/db/__init__.py @@ -1,7 +1,7 @@ -from sqlalchemy import MetaData, Table, engine_from_config, orm +from sqlalchemy import engine_from_config, orm from ..defaults import get_default_db_uri -from .tables import metadata +from .tables import Language, metadata from .multilang import MultilangSession, MultilangScopedSession @@ -41,7 +41,13 @@ def connect(uri=None, session_args={}, engine_args={}, engine_prefix=''): all_session_args = dict(autoflush=True, autocommit=False, bind=engine) all_session_args.update(session_args) - sm = orm.sessionmaker(class_=MultilangSession, **all_session_args) + sm = orm.sessionmaker(class_=MultilangSession, language_class=Language, + **all_session_args) session = MultilangScopedSession(sm) + # Default to English + session.default_language = session.query(Language) \ + .filter_by(identifier=u'en') \ + .one() + return session diff --git a/pokedex/db/multilang.py b/pokedex/db/multilang.py index 6690b8a..bd4266f 100644 --- a/pokedex/db/multilang.py +++ b/pokedex/db/multilang.py @@ -154,26 +154,22 @@ def create_translation_table(_table_name, foreign_class, relation_name, return Translations class MultilangSession(Session): - """A tiny Session subclass that adds support for a default language.""" - _default_language_id = 9 # English. XXX magic constant + """A tiny Session subclass that adds support for a default language. + + Caller will need to assign something to `default_language` before this will + actually work. + """ + _default_language_id = 0 # Better fill this in, caller 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 + self.language_class = kwargs.pop('language_class') super(MultilangSession, self).__init__(*args, **kwargs) @property def default_language(self): - # Need to import tables here to avoid a circular dependency - from pokedex.db import tables - query = self.query(self.language_class) - query = query.filter_by(id=self._default_language_id) - return query.one() + return self.query(self.language_class) \ + .filter_by(id=self._default_language_id) \ + .one() @default_language.setter def default_language(self, new): -- 2.7.4