[kforge-dev] Re: [kforge-user] kforge-config-rebuild problem

John Bywater john.bywater at appropriatesoftwarefoundation.org
Mon Jan 16 17:51:30 UTC 2006


Hi Mark,

I think I've now fixed kforge for SQLObject 0.7.

Firstly, ...

Mark Constable wrote:

...

>The current
>INSTALL doc mentions kforge-test-run but I don't seem to have that in bin.
>  
>

Can you see a kforge-test in bin? The kforge-test-run was renamed 
kforge-test.

I'll update the INSTALL doc now....

Anyway, the method we were discussing needs to look like:

        def addPersistenceAttribute(self, className, attribute):
            mapperClass = self.getRecordClass(className)
            mapperAttribute = mapperClass.meta.addAttribute(attribute)
            sqlAttribute = mapperAttribute.createNamedMapperClassAttribute()
            if hasattr(mapperClass.sqlmeta, 'addColumn'):
                addColumn = mapperClass.sqlmeta.addColumn
                delColumn = mapperClass.sqlmeta.delColumn
            else:
                addColumn = mapperClass.addColumn
                delColumn = mapperClass.delColumn
            # todo: check if table already has column
            try:
                addColumn(sqlAttribute, changeSchema=True)
            except:  # table has column, but class needs field
                try:
                    delColumn(sqlAttribute, changeSchema=False)
                    addColumn(sqlAttribute, changeSchema=False)
                except:
                    raise
#                    pass  # todo: log warning?


Additionally, to eliminate the "_table" depractation warning:

1. Search for the getSQLObjectAttributes method in that file

    def getSQLObjectAttributes(self):


2. Comment out (or delete) these two commented-out lines:

    def getSQLObjectAttributes(self):
        mapperAttributes = {}
        #if self.dbName:
        #    mapperAttributes['_table'] = self.dbName
        for a in self.attributes:
            mapperAttributes[a.dbName] = a.createMapperClassAttribute()
        return mapperAttributes


3. Search for the MetaMapper.createMapperClass method (just above the 
getSQLObjectAttributes method):

    def createMapperClass(self, baseClass):


4. Change the bottom of that method so it looks like:

    def createMapperClass(self, baseClass):
        mapperAttributes = self.getSQLObjectAttributes()
        mapperAttributes['meta'] = self
        mapperAttributes['map'] = {}
        mapperAttributes['map']['isUnique'] = self.isUnique
        mapperAttributes['_connection'] = DatabaseFacade().getConnection()
        mapperClass = self.createClass(self.domName, baseClass, 
mapperAttributes)
        if self.dbName:
            mapper.sqlmeta.table = self.dbName
        return mapper


Now try "bin/kforge-db rebuild", and then "bin/kforge-test". To run the 
tests, you may need to change "system_mode" in "etc/kforge.conf" from 
"production" to "development".

Any questions, or other problems, just send me another message!

Regards,

John.




More information about the kforge-dev mailing list