Skip to content

Instantly share code, notes, and snippets.

@tfausak
Created March 25, 2011 21:07
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tfausak/887629 to your computer and use it in GitHub Desktop.
Save tfausak/887629 to your computer and use it in GitHub Desktop.
Every mongoengine field can be deep copied, except for file fields.
from copy import deepcopy
from mongoengine import *
from pymongo import Connection
class A(Document):
binary_field = BinaryField()
boolean_field = BooleanField()
date_time_field = DateTimeField()
decimal_field = DecimalField()
dict_field = DictField()
email_field = EmailField()
embedded_document_field = EmbeddedDocumentField(EmbeddedDocument)
file_file = FileField()
float_field = FloatField()
generic_reference_field = GenericReferenceField()
geo_point_field = GeoPointField()
int_field = IntField()
list_field = ListField(boolean_field)
object_id_field = ObjectIdField()
reference_field = ReferenceField(Document)
sorted_list_field = SortedListField(boolean_field)
string_field = StringField()
url_field = URLField()
db = 'tmp-deepcopy'
Connection().drop_database(db)
connect(db)
a = A()
a.save()
for field in sorted(a._fields):
try:
print field, a[field], deepcopy(a[field])
except TypeError as e:
print 'FAILED'
print '\t', e
binary_field None None
boolean_field None None
date_time_field None None
decimal_field None None
dict_field {} {}
email_field None None
embedded_document_field None None
file_file <mongoengine.fields.GridFSProxy object at 0x9930e2c> FAILED
'Collection' object is not callable. If you meant to call the '__deepcopy__' method on a 'Collection' object it is failing because no such method exists.
float_field None None
generic_reference_field None None
geo_point_field None None
id 4d8d039e8b61460f65000000 4d8d039e8b61460f65000000
int_field None None
list_field [] []
object_id_field None None
reference_field None None
sorted_list_field [] []
string_field None None
url_field None None
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment