[TransWarp] Test suite fails

Vineet Jain vinjvinj at yahoo.com
Tue May 13 16:53:44 EDT 2003


I just checked the 0.5a1 release for windows and tried to run Roche's
original example from November. It crashed my python interpreter. I
removed line by line till I got to the following code and it still
crashed my interpreter. 

I then tried to run the test cases that came with peak and got the
following error:

 

C:\programming\PEAK-0.5a1>python setup.py test

Traceback (most recent call last):

  File "setup.py", line 5, in ?

    execfile('src/setup/prologue.py')

IOError: [Errno 2] No such file or directory: 'src/setup/prologue.py'

 

I get the following error from the interpreter:

 

AppName: python.exe             AppVer: 0.0.0.0      ModName: ntdll.dll

ModVer: 5.1.2600.0 Offset: 00017f26

 

It would be great if you have an updated version of contact example
below which works with the current release of PEAK. 

 

Thanks,

 

vinjvinj

 

from peak.api import storage

from peak.api import binding, model

from peak.model.datatypes import String

 

class MySQLConnection(SQLConnection):

 

    API = binding.bindTo("import:MySQLdb")

 

 

    def _open(self):

 

        a = self.address

 

        return self.API.connect(

            host=a.server, db=a.db, user=a.user, passwd=a.passwd

        )

            

 

    def onJoinTxn(self, txnService):

        self.connection.begin()

 

 

 

    def txnTime(self,d,a):

 

        # First, ensure that we're in a transaction

        self.joinedTxn

 

        # Then retrieve the server's idea of the current time

        r = ~ self('SELECT NOW()')

        return r[0]

 

    txnTime = binding.Once(txnTime)

 

    supportedTypes = (

        'BINARY','DATE','TIME','TIMESTAMP','NUMBER',

        'ROWID','STRING',

    )

    

 

class Address:

 

    server = binding.requireBinding('server')

    db = binding.requireBinding('db')

    user = binding.requireBinding('user')

    passwd = binding.requireBinding('passwd')

 

 

class ContactsDB(MySQLConnection):

 

    __implements__ = storage.ISQLConnection

 

    address = Address()

    address.server = 'localhost'

    address.db = 'test'

    address.user = 'admin'

    address.passwd = ''

 

 

class Contact(model.Element):

 

    Name = binding.New(String)

    Surname = binding.New(String)

    HomePhone = binding.New(String)

    WorkPhone = binding.New(String)

    Email = binding.New(String)

 

 

class ContactDM(storage.EntityDM):

 

    defaultClass = Contact

 

    attrs = ['Name', 'Surname', 'HomePhone', 'WorkPhone', 'Email']

 

    DBConn = binding.bindTo(storage.ISQLConnection)

 

    def defaultState(self, ob):

        state = {}

        for attr in self.attrs:

            state[attr] = ''

        return state

 

    def load(self, oid, ob):

        print "load"

        result = self.DBConn('SELECT * FROM Contact WHERE oid=%s'%oid)

        state = {}

        for r in result:

            for attr in self.attrs:

                value = getattr(r, attr)

                state[attr] = value

        return state

 

 

    def new(self, ob):

        print "new"

        sql = "INSERT INTO Contact (%s) VALUES (" % ','.join(self.attrs)

        values = []

        for attr in self.attrs:

            values.append('"%s"' % getattr(ob, attr))

        sql += ','.join(values) + ")"

        self.DBConn(sql)

 

        # get new oid

        sql = """SELECT MAX(oid) FROM Contact"""

        for r in self.DBConn(sql):

            return r[0]

 

    def save(self, ob):

        sql = "UPDATE Contact SET "

        sql_where = "oid = %s" % ob._p_oid

        values = []

        for attr in self.attrs:

            value = getattr(ob, attr)

            values.append('%s = "%s"' % (attr, value))

        sql += ','.join(values)

        sql += sql_where

        self.DBConn(sql)

 

Lines removed from Roche's original posting:

 

db = ContactsDB()

db._open()

myDM = ContactDM()

myDM.DBConn = db

 

# Create a new instance

storage.begin(ContactDM)

ni = myDM.newItem()

ni.Name = 'John'

ni.Surname = 'Smith'

ni.HomePhone = '888 0000'

ni.WorkPhone = '999 0000'

ni.Email = 'john at smith.com'

storage.commit(ContactDM)

 

# Retrieve and modify existing instance with oid=1

storage.begin(ContactDM)

ni = myDM.preloadState(1)

 

# I would have thought that the object will get loaded here but it

# doesn't.  If I call print ni.HomePhone before assigning to it the load

# method on the DM does get called.

ni.HomePhone = '777 0000'

storage.commit(ContactDM)

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.eby-sarna.com/pipermail/peak/attachments/20030513/bc0a9bf4/attachment.html


More information about the PEAK mailing list