Log message for revision 29869: Added configuration of class factory. Use explicit tm for second connection rather than separate thread. Added copy test
Changed: U Zope/branches/jim-fix-zclasses/lib/python/ZClasses/ZClass.txt -=- Modified: Zope/branches/jim-fix-zclasses/lib/python/ZClasses/ZClass.txt =================================================================== --- Zope/branches/jim-fix-zclasses/lib/python/ZClasses/ZClass.txt 2005-04-04 11:03:57 UTC (rev 29868) +++ Zope/branches/jim-fix-zclasses/lib/python/ZClasses/ZClass.txt 2005-04-04 11:04:21 UTC (rev 29869) @@ -4,6 +4,12 @@ We can create ZClasses from Python, It's a bit complicated, as ZClasses were designed mainly to be used from the web. +First, we need to install the ZClass-aware class factory in our +database: + + >>> import Zope2.App.ClassFactory + >>> some_database.classFactory = Zope2.App.ClassFactory.ClassFactory + To do anything, we need a working Zope object space: >>> conn = some_database.open() @@ -22,7 +28,7 @@ >>> test.manage_addZClass('C', zope_object=True, CreateAFactory=True) -Having create a ZClass, we can create an instance: +Having created a ZClass, we can create an instance: >>> c = test.C() >>> c._setId('c') @@ -65,35 +71,44 @@ >>> import transaction >>> transaction.commit() -We can access the class in another connection: +We can access the class in another connection. We'll ise an explicit +transaction manager so that we can use the second connection without +creating a separate thread: - >>> import threading - >>> def run(func): - ... thread = threading.Thread(target=func) - ... thread.start() - ... thread.join() + >>> tm2 = transaction.TransactionManager() + >>> conn2 = some_database.open(txn_mgr=tm2) + >>> app2 = conn2.root()['Application'] + >>> test2 = app2.Control_Panel.Products['test'] + >>> c2 = test2.C() + >>> c2._setId('c2') + >>> app2._setObject('c2', c2) + 'c2' - >>> def read_class(): - ... connection = some_database.open() - ... app = connection.root()['Application'] - ... test = app.Control_Panel.Products['test'] - ... c2 = test.C() - ... c2._setId('c') - ... app._setObject('c2', c2) - ... app.c2.x = '*' - ... print app.c2.x, app.c2.y, app.c2.eek(), '!' - ... print app.c.x, app.c.y, app.c.eek(), '!' - ... transaction.commit() - ... connection.close() + >>> app2.c2.x = '*' + >>> print app2.c2.x, app2.c2.y, app2.c2.eek(), '!' + * 42 ****************************************** ! - - >>> run(read_class) - * 42 ****************************************** ! + >>> print app.c.x, app.c.y, app.c.eek(), '!' hi 3 hi hi hi ! + >>> tm2.commit() + + Of course, we should be able to see the new object created in the other connection: >>> conn.sync() >>> app.c2.eek() '******************************************' + +We can copy instances: + + >>> c3 = app.c2._getCopy(app) + >>> c3 is app.c2.aq_base + False + + >>> c3.eek() + '******************************************' + + >>> c3.__class__ is app.c2.__class__ + True _______________________________________________ Zope-Checkins maillist - Zope-Checkins@zope.org http://mail.zope.org/mailman/listinfo/zope-checkins