Ńņ
[Jc @ s d Z d d k l Z l Z d d k l Z d d k l Z d d k l Z d d k
l Z l Z d d k
l Z d d k l Z d d k Z d d k Z d d
k l Z d d d
d g Z d Z e i d Z d d d d Z d Z d d d d Z d S( s Serializer/Deserializer objects for usage with SQLAlchemy structures.
Any SQLAlchemy structure, including Tables, Columns, expressions, mappers,
Query objects etc. can be serialized in a minimally-sized format,
and deserialized when given a Metadata and optional ScopedSession object
to use as context on the way out.
Usage is nearly the same as that of the standard Python pickle module::
from sqlalchemy.ext.serializer import loads, dumps
metadata = MetaData(bind=some_engine)
Session = scoped_session(sessionmaker())
# ... define mappers
query = Session.query(MyClass).filter(MyClass.somedata=='foo').order_by(MyClass.sortkey)
# pickle the query
serialized = dumps(query)
# unpickle. Pass in metadata + scoped_session
query2 = loads(serialized, metadata, Session)
print query2.all()
Similar restrictions as when using raw pickle apply; mapped classes must be
themselves be pickleable, meaning they are importable from a module-level
namespace.
Note that instances of user-defined classes do not require this extension
in order to be pickled; these contain no references to engines, sessions
or expression constructs in the typical case and can be serialized directly.
This module is specifically for ORM and expression constructs.
i’’’’( t class_mappert Query( t Session( t Mapper( t QueryableAttribute( t Tablet Column( t Engine( t pickleN( t StringIOt
Serializert Deserializert dumpst loadsc O s( t i | | } d } | | _ | S( Nc S s3 t | t o@ | i i } | i i } d | d t i t i | } ną t | t o. | i
o# d t i t i | i } n¢ t | t o d t | } n~ t | t
o5 t | i t o" d t | i d | i } n9 t | t o
d } n t | t o
d } n d S| S( Ns
attribute:t :s mapper:s table:s column:s session:s engine:( t
isinstanceR t implt class_t keyt base64t b64encodeR R R t non_primaryR t strR t tableR R t None( t objt clsR t id( ( s= /usr/lib/python2.6/site-packages/sqlalchemy/ext/serializer.pyt
persistent_id5 s (##"
( R t PicklerR ( t argst kwt picklerR ( ( s= /usr/lib/python2.6/site-packages/sqlalchemy/ext/serializer.pyR
2 s s3 (mapper|table|column|session|attribute|engine):(.*)c sF t i | } f d f d } | | _ | S( Nc sL o S o i o i S o i o i Sd Sd S( N( t bindR ( ( t enginet scoped_sessiont metadata( s= /usr/lib/python2.6/site-packages/sqlalchemy/ext/serializer.pyt
get_engineQ s c s7 t i | } | p d S| i d d \ } } | d j o; | i d \ } } t i t i | } t | | S| d j o# t i t i | } t
| S| d j o i | S| d j o( | i d \ } } i | i | S| d j o S| d j o St
d
| d S( Ni i t attributeR t mapperR t columnt sessionR" s Unknown token: %s( t our_idst matchR t groupt splitR R
R t b64decodet getattrR t tablest ct Exception( R t mt type_R R t clsargR R t colname( R% R$ R# ( s= /usr/lib/python2.6/site-packages/sqlalchemy/ext/serializer.pyt persistent_load[ s*
( R t UnpicklerR7 ( t fileR$ R# R" t unpicklerR7 ( ( R" R% R# R$ s= /usr/lib/python2.6/site-packages/sqlalchemy/ext/serializer.pyR N s
c C s, t } t | } | i | | i S( N( R R
t dumpt getvalue( R t bufR ( ( s= /usr/lib/python2.6/site-packages/sqlalchemy/ext/serializer.pyR v s
c C s+ t | } t | | | | } | i S( N( R R t load( t dataR$ R# R" R= R: ( ( s= /usr/lib/python2.6/site-packages/sqlalchemy/ext/serializer.pyR
| s ( t __doc__t sqlalchemy.ormR R t sqlalchemy.orm.sessionR t sqlalchemy.orm.mapperR t sqlalchemy.orm.attributesR t
sqlalchemyR R t sqlalchemy.engineR t sqlalchemy.utilR t reR t cStringIOR t __all__R
t compileR* R R R R
( ( ( s= /usr/lib/python2.6/site-packages/sqlalchemy/ext/serializer.pyt