Wow, OK great, you were able to make something work while maintaining the
ClassManager approach.
So the first thing is, you can skip the redefinition of Mapper(). You can put
your custom ClassManager class right on a base or mixin class like this:
class MySpecialMixin(object):
__sa_instrumentation_manager__ = MySpecialClassManager
The next thing is, you could also instead subclass InstrumentationManager
instead of ClassManager, which provides hooks that are a bit more public. I'd
probably need to add some more hooks to it in order to fulfill this use case,
though. If you look through instrumentation.py _ClassInstrumentationAdapter
you can see what that adaption looks like.
You can see examples of custom instrumentation in
examples/custom_attributes/custom_management.py.
This would be *really* neat if it actually works all the way using public API.
This would probably go right into the examples/custom_attributes/ directory
as a recipe to use for lower-latency read-only objects.
On Mar 5, 2012, at 4:14 PM, Andrey Popp wrote:
> Hello,
> just for the record, I've built a quick and dirty hack[1] which simplifies
> state-management for immutable domain models (can create but can't modify).
> Achieved 2-2.5x speedup in pickle/unpickle (see tests module). I'm not just
> suggesting anyone to use this in production (though I already do :-)) so this
> is just FYI.
>
> [1]: https://github.com/andreypopp/saimmutable
>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
>
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.