@@ -334,25 +334,18 @@ def _to_pointer(self):
334334 }
335335
336336 def _merge_metadata (self , server_data ):
337- for key in ("objectId" , "createdAt" , "updatedAt" ):
338- if server_data .get (key ) is None :
339- continue
340- if key == "objectId" :
341- self .id = server_data [key ]
342- else :
343- if isinstance (server_data [key ], six .string_types ):
344- dt = utils .decode (key , {"__type" : "Date" , "iso" : server_data [key ]})
345- elif server_data [key ]["__type" ] == "Date" :
346- dt = utils .decode (key , server_data [key ])
347- else :
348- raise TypeError ("Invalid date type" )
349- server_data [key ] = dt
350- if key == "createdAt" :
351- self .created_at = dt
352- elif key == "updatedAt" :
353- self .updated_at = dt
354- else :
355- raise TypeError
337+ object_id = server_data .get ("objectId" )
338+ _created_at = utils .decode_date_string (server_data .get ("createdAt" ))
339+ _updated_at = utils .decode_updated_at (server_data .get ("updatedAt" ), _created_at )
340+
341+ if object_id is not None :
342+ self .id = object_id
343+ if _created_at is not None :
344+ self .created_at = _created_at
345+ if _updated_at is not None :
346+ self .updated_at = _updated_at
347+
348+
356349
357350 def validate (self , attrs ):
358351 if "ACL" in attrs and not isinstance (attrs ["ACL" ], leancloud .ACL ):
@@ -370,6 +363,23 @@ def get(self, attr, default=None, deafult=None):
370363 # for backward compatibility
371364 if (deafult is not None ) and (default is None ):
372365 default = deafult
366+
367+ # createdAt is stored as string in the cloud but used as datetime object on the client side.
368+ # We need to make sure that `.created_at` and `.get("createdAt")` return the same value.
369+ # Otherwise users will get confused.
370+ if attr == "createdAt" :
371+ if self .created_at is None :
372+ return None
373+ else :
374+ return self .created_at
375+
376+ # Similar to createdAt.
377+ if attr == "updatedAt" :
378+ if self .updated_at is None :
379+ return None
380+ else :
381+ return self .updated_at
382+
373383 return self ._attributes .get (attr , default )
374384
375385 def relation (self , attr ):
0 commit comments