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