Update of /cvsroot/webware/Webware/MiddleKit/Design
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15924/Design
Modified Files:
PythonGenerator.py SQLGenerator.py
Log Message:
- revamp the enum settings
Index: PythonGenerator.py
===================================================================
RCS file: /cvsroot/webware/Webware/MiddleKit/Design/PythonGenerator.py,v
retrieving revision 1.30
retrieving revision 1.31
diff -C2 -d -r1.30 -r1.31
*** PythonGenerator.py 24 Feb 2004 02:04:13 -0000 1.30
--- PythonGenerator.py 28 Feb 2004 00:08:07 -0000 1.31
***************
*** 356,360 ****
def stringToValue(self, string):
! if self.setting('ExternalEnumsTableName', None):
return self.intValueForString(string)
else:
--- 356,360 ----
def stringToValue(self, string):
! if self.usesExternalSQLEnums():
return self.intValueForString(string)
else:
***************
*** 368,372 ****
_%(name)sAttr = self.klass().lookupAttr('%(name)s')
''' % {'name': self.name()})
! if self.setting('ExternalEnumsTableName', None):
out.write('''
if value is not None:
--- 368,372 ----
_%(name)sAttr = self.klass().lookupAttr('%(name)s')
''' % {'name': self.name()})
! if self.usesExternalSQLEnums():
out.write('''
if value is not None:
***************
*** 410,413 ****
--- 410,424 ----
+ ## Settings ##
+
+ def usesExternalSQLEnums(self):
+ # @@ 2004-02-25 ce: seems like this method and its use should be pushed down to SQLPythonGenerator.py
+ flag = getattr(self, '_usesExternalSQLEnums', None)
+ if flag is None:
+ flag = self.model().usesExternalSQLEnums()
+ self._usesExternalSQLEnums = flag
+ return flag
+
+
class AnyDateTimeAttr:
Index: SQLGenerator.py
===================================================================
RCS file: /cvsroot/webware/Webware/MiddleKit/Design/SQLGenerator.py,v
retrieving revision 1.40
retrieving revision 1.41
diff -C2 -d -r1.40 -r1.41
*** SQLGenerator.py 24 Feb 2004 02:04:13 -0000 1.40
--- SQLGenerator.py 28 Feb 2004 00:08:07 -0000 1.41
***************
*** 709,715 ****
def sqlType(self):
! if self.setting('ExternalEnumsTableName', None):
! tableName, columnName = self.externalEnumsTableAndColumnName()
! return 'int references %s(%sId)' % (tableName, tableName)
else:
return self.nativeEnumSQLType()
--- 709,715 ----
def sqlType(self):
! if self.usesExternalSQLEnums():
! tableName, valueColName, nameColName = self.externalEnumsSQLNames()
! return 'int references %s(%s)' % (tableName, valueColName)
else:
return self.nativeEnumSQLType()
***************
*** 720,724 ****
def sqlForNonNoneSampleInput(self, input):
! if self.setting('ExternalEnumsTableName', None):
return self.intValueForString(input)
else:
--- 720,724 ----
def sqlForNonNoneSampleInput(self, input):
! if self.usesExternalSQLEnums():
return self.intValueForString(input)
else:
***************
*** 726,745 ****
return repr(input)
- def externalEnumsTableAndColumnName(self):
- values = {
- 'ClassName': self.klass().name(),
- 'AttrName': self.name()[0].upper() + self.name()[1:],
- 'attrName': self.name(),
- }
- tableName = self.setting('ExternalEnumsTableName') % values # typical setting value is '%(ClassName)s%(AttrName)sEnum'. can use also use %(attrName)s for non-capped attr name
- columnName = self.setting('ExternalEnumsColumnName') % values # typical setting value is simply 'name'
- return tableName, columnName
-
def writeAuxiliaryCreateTable(self, generator, out):
! if self.setting('ExternalEnumsTableName', None):
! tableName, columnName = self.externalEnumsTableAndColumnName()
out.write('create table %s (\n' % tableName)
! out.write('\t%sId int not null primary key,\n' % tableName)
! out.write('\t%s varchar(255)\n' % columnName)
out.write(');\n')
--- 726,735 ----
return repr(input)
def writeAuxiliaryCreateTable(self, generator, out):
! if self.usesExternalSQLEnums():
! tableName, valueColName, nameColName = self.externalEnumsSQLNames()
out.write('create table %s (\n' % tableName)
! out.write('\t%s int not null primary key,\n' % valueColName)
! out.write('\t%s varchar(255)\n' % nameColName)
out.write(');\n')
***************
*** 747,755 ****
sep = ''
for enum in self.enums():
! out.write("insert into %(tableName)s (%(tableName)sId, %(columnName)s) values (%(i)i, '%(enum)s');\n" % locals())
i += 1
out.write('\n')
class PrimaryKey:
"""
--- 737,776 ----
sep = ''
for enum in self.enums():
! out.write("insert into %(tableName)s values (%(i)i, '%(enum)s');\n" % locals())
i += 1
out.write('\n')
+ ## Settings ##
+
+ def usesExternalSQLEnums(self):
+ flag = getattr(self, '_usesExternalSQLEnums', None)
+ if flag is None:
+ flag = self.model().usesExternalSQLEnums()
+ self._usesExternalSQLEnums = flag
+ return flag
+
+ def externalEnumsSQLNames(self):
+ """
+ Returns the tuple (tableName, valueColName, nameColName)
+ derived from the model setting ExternalEnumsSQLNames.
+ """
+ names = getattr(self, '_externalEnumsSQLNames', None)
+ if names is None:
+ _ClassName = self.klass().name()
+ ClassName = _ClassName[0].upper() + _ClassName[1:]
+ className = _ClassName[0].lower() + _ClassName[1:]
+ _AttrName = self.name()
+ AttrName = _AttrName[0].upper() + _AttrName[1:]
+ attrName = _AttrName[0].lower() + _AttrName[1:]
+ values = locals()
+ names = self.setting('ExternalEnumsSQLNames')
+ names = [names['TableName'], names['ValueColName'], names['NameColName']]
+ for i in range(len(names)):
+ names[i] %= values
+ self._externalEnumsSQLNames = names
+ return names
+
+
class PrimaryKey:
"""
|