Re: [Zope-dev] zope generations updating objects with method name change

2013-03-11 Thread Joshua Immanuel
Hello Tres,

Thanks for the reply.

On Sun, 2013-03-10 at 23:32 -0400, Tres Seaver wrote:
> Method names are not stored in the ZODB at all:  only the instance
> attributes are stored.

Apologies. I've reported it wrong. I was not able to reproduce the
problem after a fresh start.

-- 
Joshua Immanuel
HiPro IT Solutions Private Limited
http://hipro.co.in


signature.asc
Description: This is a digitally signed message part
___
Zope-Dev maillist  -  Zope-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists -
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )


Re: [Zope-dev] zope generations updating objects with method name change

2013-03-10 Thread Tres Seaver
-BEGIN PGP SIGNED MESSAGE-
Hash: SHA1

On 03/10/2013 04:19 PM, Joshua Immanuel wrote:

> My application is based on Grok. Whenver, I change a method-name or
> add a method to a Model, Grok fails to load the previous version from
> the ZODB. I resorted to writing simple generations (zope.generations)
> to update the stored model objects.
> 
> For 'method name' changes, this basically means: 1. create new object 
> 2. copy every single attribute of old-object to the new-object 3.
> delete old-object 4. save new-object
> 
> How does everyone else do this? Or is there a way to make
> grok/zope/zodb not persist the method-names and signatures in a
> content component (grok Model)?

Method names are not stored in the ZODB at all:  only the instance
attributes are stored.

What you report doesn't correspond with how ZODB is designed, nor with
how Zope has been using it forever.  For instance, I can create a class
inside a module:, derived from Persistent:

  # foo.py, v1
  from persistent import Persistent
  class Foo(Persistent):
  def __init__(self, bar, baz):
  self.bar = bar
  self.baz = baz

and make instances of it, adding them to another persistent object:

  from ZODB.DB import DB
  from ZODB.FileStorage import FileStorage
  db = DB(FileStorage('/tmp/data.fs'))
  conn = db.open()
  root = db.root()
  from foo import Foo
  root.foo = Foo('bar 1', 0)
  import transaction
  transation.commit()

and then later modify 'foo.py', adding methods to the Foo class

  # foo.py, v2
  from persistent import Persistent
  class Foo(Persistent)
  def __init__(self, bar, baz):
  self.bar = bar
  self.baz = baz
  def spam(self):
  return self.bar * self.baz

and still load the previously created object from the database::

  from ZDOB.DB import DB
  from ZODB.FileStorage import FileStorage
  db = DB(FileStorage('/tmp/data.fs'))
  conn = db.open()
  root = db.root()
  from foo import Foo
  assert isinstance(root.foo, Foo)
  print root.foo.spam()

If that isn't working for your models, you must be doing something very
weird.  Possible issues:

- - Do your model classes derive from Persistent?

- - Do they have attributes with multable values (e.g., native Python dict
  or list)?  If so, does your code mutate those values without telling the
  containing object it has changed?

- - Are you remembering to commit the transaction?



Tres.
- -- 
===
Tres Seaver  +1 540-429-0999  tsea...@palladion.com
Palladion Software   "Excellence by Design"http://palladion.com
-BEGIN PGP SIGNATURE-
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with undefined - http://www.enigmail.net/

iEYEARECAAYFAlE9UFkACgkQ+gerLs4ltQ6euQCeORe7UvO3a4VK8oAP+pvd7Rce
lL8An1TxxJcb48YjFa9Ih67U7N1Y57cl
=2eUa
-END PGP SIGNATURE-

___
Zope-Dev maillist  -  Zope-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists -
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )


[Zope-dev] zope generations updating objects with method name change

2013-03-10 Thread Joshua Immanuel
Hello,

My application is based on Grok. Whenver, I change a method-name or add
a method to a Model, Grok fails to load the previous version from the
ZODB. I resorted to writing simple generations (zope.generations) to
update the stored model objects.

For 'method name' changes, this basically means:
 1. create new object
 2. copy every single attribute of old-object to the new-object
 3. delete old-object
 4. save new-object 

How does everyone else do this? Or is there a way to make grok/zope/zodb
not persist the method-names and signatures in a content component (grok
Model)?

-- 
Joshua Immanuel
HiPro IT Solutions Private Limited
http://hipro.co.in


signature.asc
Description: This is a digitally signed message part
___
Zope-Dev maillist  -  Zope-Dev@zope.org
https://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists -
 https://mail.zope.org/mailman/listinfo/zope-announce
 https://mail.zope.org/mailman/listinfo/zope )