Among other methods, I'm trying to "catch" the put() method of both db.Model
and db.polymodel.PolyModel, so that I can set the entity in Memcache (after
it's been put into the Datastore).
I'm using the same common mixin class for both. The setup looks something
like this:
from google.appengine.ext.db.polymodel import PolyModel
from google.appengine.ext import db
class ModelMixin(object):
def __init__(self, *args, **kwds):
self.do_something_cool()
def do_something_cool(self):
...
def put(self, *args, **kwds):
super(ModelMixin, self).put(*args, **kwds)
memcache.set('EntityKey:'+self.key(), db.model_to_protobuf(self))
class MyModel(ModelMixin, db.Model):
def __init__(self, *args, **kwds):
db.Model.__init__(self, *args, **kwds)
ModelMixin.__init__(self, *args, **kwds)
class MyPolyModel(ModelMixin, PolyModel):
def __init__(self, *args, **kwds):
PolyModel.__init__(self, *args, **kwds)
ModelMixin.__init__(self, *args, **kwds)
Subclassing from MyModel is working fine, but when I try and subclass
MyPolyModel, eg:
class Animal(MyPolyModel):
...
class Cat(Animal):
...
I get this error on the dev appserver (I haven't tried it in production):
AttributeError: type object 'Animal' has no attribute '__root_class__'
Can someone suggest a way to fix this?
I'm also worried that, even if I get this fixed, the entity kind of those
subclasses of MyPolyModel will be 'MyPolyModel' instead of eg. 'Animal'
(because the direct subclass of PolyModel is MyPolyModel and not Animal). I
hope there's a way around that as well, and welcome suggestions.
Nick
--
You received this message because you are subscribed to the Google Groups
"Google App Engine" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-appengine?hl=en.