The code in my example doesn't actually cause the AttributeError to be
raised.

In my real code, my own PolyModel class is named "PolyModel" and not
"MyPolyModel" (as the example shows). Renaming my custom PolyModel class
from "PolyModel" to something else (like "MyPolyModel") made the error go
away (again, haven't tried this in production yet).

Strange behaviour... I wonder if this is a Python quirk, something "wrong"
with the App Engine library, or maybe I need to go through Python 101
again...


On 3 March 2010 02:46, Nickolas Daskalou <n...@daskalou.com> wrote:

> 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 google-appeng...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.

Reply via email to