Ticket #307: gae-db-key-attr-307.diff

File gae-db-key-attr-307.diff, 1.6 KB (added by nick, 6 months ago)

Patch to include the _key attribute when encoding Model/Expando objects

  • pyamf/adapters/_google_appengine_ext_db.py

     
    2626        remove = True 
    2727        self.context.class_aliases[obj.__class__] = pyamf.ClassAlias(obj.__class__, None) 
    2828 
     29    try: 
     30        obj._pyamf_key = obj.key().id() 
     31    except: 
     32        obj._pyamf_key = None 
     33 
    2934    self.writeObject(obj, *args, **kwargs) 
    3035 
     36    del obj._pyamf_key 
     37 
    3138    if remove: 
    3239        self.context.class_aliases[obj.__class__] = None 
    3340 
     
    4451            alias = pyamf.ClassAlias(obj.__class__, None) 
    4552            self.context.class_aliases[obj.__class__] = alias 
    4653 
     54    try: 
     55        obj._pyamf_key = obj.key().id() 
     56    except: 
     57        obj._pyamf_key = None 
     58 
    4759    self.writeObject(obj, *args, **kwargs) 
    4860 
     61    del obj._pyamf_key 
     62 
    4963    if remove: 
    5064        self.context.class_aliases[obj.__class__] = None 
    5165 
     
    5367    """ 
    5468    Returns a list of properties on an C{db.Model} instance. 
    5569    """ 
    56     return list(obj.__class__._properties) 
     70    return list(obj.__class__._properties) + ['_pyamf_key'] 
    5771 
    5872def get_attrs_for_expando(obj): 
    5973    """ 
    6074    Returns a list of dynamic properties on a C{db.Expando} instance. 
    6175    """ 
    62     return obj.dynamic_properties() 
     76    return obj.dynamic_properties() + ['_pyamf_key'] 
    6377 
    6478pyamf.register_class(db.Model, attr_func=get_attrs_for_model, metadata=['dynamic']) 
    6579pyamf.register_class(db.Expando, attr_func=get_attrs_for_expando, metadata=['dynamic'])