On Mon, Aug 24, 2009 at 6:44 PM, Jeff Enderwick <[email protected]>wrote:

>
> thanks - I got bit by those __init__ nuances over the weekend. I ended
> up passing an optional flag to the __init__ to say "this is really a
> new() vs a datastore reconstitution". I del the optional flag from
> kwargs before calling the super __init__. In the datastore
> reconstitution case, I do nothing but call the super __init__.
>
> Does that cover the __init__ gotchas, or am I digging my own grave by
> not converting to a distinct create function?


I don't know the gotchas well enough to say. I still think a factory
function is your best bet. :)

-Nick Johnson


>
>
> On Mon, Aug 24, 2009 at 3:56 AM, Nick Johnson
> (Google)<[email protected]> wrote:
> > Hi Jeff,
> >
> > On Sat, Aug 22, 2009 at 7:24 PM, Jeff Enderwick <
> [email protected]>
> > wrote:
> >>
> >> Currently, one must put() in order to have obj.key() be valid. In some
> >> flows, I find my self having to put() object twice for this reason.
> >>
> >> If I make a synthetic key, it appears that I can avoid this:
> >>
> >> class Joker(db.Model):
> >>  unused = db.StringProperty()
> >>  def __init__(self):
> >>    m = hashlib.sha1()
> >>    m.update(str(time.time()))
> >>    name = base64.b64encode(m.digest())
> >>    logging.debug("name="+name)
> >>    db.Model.__init__(self, key_name=name)
> >>
> >> 1) GOOG folks - are there any performance downsides to taking this
> >> approach?
> >
> > Not really, no.
> >
> >>
> >> 2) If no, are there any other environmental factors that might be
> >> fodder for the hash (user, etc)?
> >
> > I would recommend using uuid.uuid4().hex instead of a straight SHA1 sum.
> > UUIDs are guaranteed to be unique.
> > I would also recommend defining a class method called something like
> > 'create' that generates the key name and calls __init__. There are
> > subtle-use cases around __init__ and reconstructing entities from the
> > datastore, and it's difficult to get right - much more straightforward to
> > define a class method to construct new entities.
> > -Nick Johnson
> >>
> >>
> >> Thanks,
> >> Jeff
> >>
> >>
> >
> >
> >
> > --
> > Nick Johnson, Developer Programs Engineer, App Engine
> >
> > >
> >
>
> >
>


-- 
Nick Johnson, Developer Programs Engineer, App Engine

--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to