From: Mike Bayer Date: Mon, 10 Dec 2007 18:08:16 +0000 (+0000) Subject: refresh_instance becomes an InstanceState so boolean tests are OK X-Git-Tag: rel_0_4_2~71 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=cb8bf058b620e9f463bdd12542ffc1f68e324610;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git refresh_instance becomes an InstanceState so boolean tests are OK --- diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 8386abb9ff..0f5dbaaf54 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -1325,7 +1325,7 @@ class Mapper(object): # determine identity key if refresh_instance: - identitykey = refresh_instance._instance_key + identitykey = refresh_instance.dict['_instance_key'] else: identitykey = self.identity_key_from_row(row) (session_identity_map, local_identity_map) = (context.session.identity_map, context.identity_map) diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 0dbfdc611e..9515ba77fb 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -790,11 +790,11 @@ class Query(object): for instance in context.identity_map.values(): context.attributes.get(('populating_mapper', id(instance)), object_mapper(instance))._post_instance(context, instance) - if context.refresh_instance and context.only_load_props and context.refresh_instance._instance_key in context.identity_map: + if context.refresh_instance and context.only_load_props and context.refresh_instance.dict['_instance_key'] in context.identity_map: # if refreshing partial instance, do special state commit # affecting only the refreshed attributes - context.refresh_instance._state.commit(context.only_load_props) - del context.identity_map[context.refresh_instance._instance_key] + context.refresh_instance.commit(context.only_load_props) + del context.identity_map[context.refresh_instance.dict['_instance_key']] # store new stuff in the identity map for instance in context.identity_map.values(): @@ -836,7 +836,7 @@ class Query(object): try: if lockmode is not None: q = q.with_lockmode(lockmode) - q = q._select_context_options(populate_existing=refresh_instance is not None, version_check=(lockmode is not None), only_load_props=only_load_props, refresh_instance=refresh_instance) + q = q._select_context_options(populate_existing=bool(refresh_instance), version_check=(lockmode is not None), only_load_props=only_load_props, refresh_instance=refresh_instance) q._order_by = None # call using all() to avoid LIMIT compilation complexity return q.all()[0] @@ -1198,7 +1198,7 @@ class Query(object): self._populate_existing = populate_existing if version_check: self._version_check = version_check - if refresh_instance is not None: + if refresh_instance: self._refresh_instance = refresh_instance if only_load_props: self._only_load_props = util.Set(only_load_props) diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index 435ed4c5d7..3111b699d5 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -740,7 +740,7 @@ class Session(object): self._validate_persistent(instance) - if self.query(instance.__class__)._get(instance._instance_key, refresh_instance=instance, only_load_props=attribute_names) is None: + if self.query(instance.__class__)._get(instance._instance_key, refresh_instance=instance._state, only_load_props=attribute_names) is None: raise exceptions.InvalidRequestError("Could not refresh instance '%s'" % mapperutil.instance_str(instance)) def expire(self, instance, attribute_names=None): @@ -1115,7 +1115,7 @@ def _expire_state(state, attribute_names): if state.trigger is None: def load_attributes(instance, attribute_names): - if object_session(instance).query(instance.__class__)._get(instance._instance_key, refresh_instance=instance, only_load_props=attribute_names) is None: + if object_session(instance).query(instance.__class__)._get(instance._instance_key, refresh_instance=instance._state, only_load_props=attribute_names) is None: raise exceptions.InvalidRequestError("Could not refresh instance '%s'" % mapperutil.instance_str(instance)) state.trigger = load_attributes diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index d46271f9e2..027a323939 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -205,10 +205,10 @@ class DeferredColumnLoader(LoaderStrategy): if create_statement is None: ident = instance._instance_key[1] - session.query(localparent)._get(None, ident=ident, only_load_props=group, refresh_instance=instance) + session.query(localparent)._get(None, ident=ident, only_load_props=group, refresh_instance=instance._state) else: statement, params = create_statement(instance) - session.query(localparent).from_statement(statement).params(params)._get(None, only_load_props=group, refresh_instance=instance) + session.query(localparent).from_statement(statement).params(params)._get(None, only_load_props=group, refresh_instance=instance._state) return attributes.ATTR_WAS_SET return lazyload