Commits

Mike Bayer committed 9cbdaf0

Session.mapper is now *deprecated*.
Call session.add() if you'd like a free-standing object to be
part of your session. Otherwise, a DIY version of
Session.mapper is now documented at
http://www.sqlalchemy.org/trac/wiki/UsageRecipes/SessionAwareMapper
The method will remain deprecated throughout 0.6.

M test/ext/test_declarative.py
M test/orm/test_scoping.py
M lib/sqlalchemy/orm/scoping.py
M CHANGES

Comments (0)

Files changed (4)

       the tests.  [ticket:970]
       
 - orm
+    - Session.mapper is now *deprecated*.   
+      Call session.add() if you'd like a free-standing object to be 
+      part of your session.  Otherwise, a DIY version of
+      Session.mapper is now documented at 
+      http://www.sqlalchemy.org/trac/wiki/UsageRecipes/SessionAwareMapper
+      The method will remain deprecated throughout 0.6.
+    
     - Fixed bug introduced in 0.5.4 whereby Composite types
       fail when default-holding columns are flushed.
       

lib/sqlalchemy/orm/scoping.py

 # the MIT License: http://www.opensource.org/licenses/mit-license.php
 
 import sqlalchemy.exceptions as sa_exc
-from sqlalchemy.util import ScopedRegistry, to_list, get_cls_kwargs
+from sqlalchemy.util import ScopedRegistry, to_list, get_cls_kwargs, deprecated
 from sqlalchemy.orm import (
     EXT_CONTINUE, MapperExtension, class_mapper, object_session
     )
 
       Session = scoped_session(sessionmaker(autoflush=True))
 
-      To map classes so that new instances are saved in the current
-      Session automatically, as well as to provide session-aware
-      class attributes such as "query":
-
-      mapper = Session.mapper
-      mapper(Class, table, ...)
+      ... use session normally.
 
     """
 
             self.registry().close()
         self.registry.clear()
 
+    @deprecated("Session.mapper is deprecated.  "
+        "Please see http://www.sqlalchemy.org/trac/wiki/UsageRecipes/SessionAwareMapper "
+        "for information on how to replicate its behavior.")
     def mapper(self, *args, **kwargs):
-        """return a mapper() function which associates this ScopedSession with the Mapper."""
+        """return a mapper() function which associates this ScopedSession with the Mapper.
+        
+        DEPRECATED.
+        
+        """
 
         from sqlalchemy.orm import mapper
 

test/ext/test_declarative.py

             Address(email='two'),
         ])])
         
+    @testing.uses_deprecated()
     def test_custom_mapper(self):
         class MyExt(sa.orm.MapperExtension):
             def create_instance(self):

test/orm/test_scoping.py

             pass
 
     @classmethod
+    @testing.uses_deprecated()
     @testing.resolve_artifact_names
     def setup_mappers(cls):
         Session = scoped_session(sa.orm.create_session)
         sso = SomeOtherObject.query().first()
         assert SomeObject.query.filter_by(id=1).one().options[0].id == sso.id
 
+    @testing.uses_deprecated()
     @testing.resolve_artifact_names
     def test_query_compiles(self):
         class Foo(object):
         Session.mapper(Baz, table2, extension=ext)
         assert hasattr(Baz, 'query')
 
+    @testing.uses_deprecated()
     @testing.resolve_artifact_names
     def test_default_constructor_state_not_shared(self):
         scope = scoped_session(sa.orm.sessionmaker())
         assert_raises(TypeError, C, foo='bar')
         D(foo='bar')
 
+    @testing.uses_deprecated()
     @testing.resolve_artifact_names
     def test_validating_constructor(self):
         s2 = SomeObject(someid=12)
         assert_raises(sa.exc.ArgumentError, ValidatedOtherObject,
                           someid=12, bogus=345)
 
+    @testing.uses_deprecated()
     @testing.resolve_artifact_names
     def test_dont_clobber_methods(self):
         class MyClass(object):
             pass
 
     @classmethod
+    @testing.uses_deprecated()
     @testing.resolve_artifact_names
     def setup_mappers(cls):
         Session = scoped_session(sa.orm.sessionmaker())