Skip to content

Instantly share code, notes, and snippets.

@dfm
Created August 13, 2011 10:42
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dfm/1143729 to your computer and use it in GitHub Desktop.
Save dfm/1143729 to your computer and use it in GitHub Desktop.
import cPickle as pickle
import numpy as np
from bson.binary import Binary
from pymongo.son_manipulator import SONManipulator
class NumpySONManipulator(SONManipulator):
def transform_incoming(self, value, collection):
if isinstance(value, (list,tuple,set)):
return [self.transform_incoming(item,collection) for item in value]
if isinstance(value,dict):
return dict((key,self.transform_incoming(item,collection))
for key,item in value.iteritems())
if isinstance(value,np.ndarray):
return {'_type': 'np.ndarray',
'data': Binary(pickle.dumps(value,-1))}
return value
def transform_outgoing(self, son, collection):
if isinstance(son,(list,tuple,set)):
return [self.transform_outgoing(value,collection) for value in son]
if isinstance(son,dict):
if son.get('_type') == 'np.ndarray':
return pickle.loads(son.get('data'))
return dict((key,self.transform_outgoing(value,collection))
for key,value in son.iteritems())
return son
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment