[SQL-CVS] r2365 - SQLObject/trunk/sqlobject
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
|
From: <sub...@co...> - 2007-03-02 14:40:57
|
Author: phd
Date: 2007-03-02 07:40:52 -0700 (Fri, 02 Mar 2007)
New Revision: 2365
Modified:
SQLObject/trunk/sqlobject/col.py
Log:
Applied the patch 1450581: support for MySQL SET type.
Modified: SQLObject/trunk/sqlobject/col.py
===================================================================
--- SQLObject/trunk/sqlobject/col.py 2007-03-02 14:35:15 UTC (rev 2364)
+++ SQLObject/trunk/sqlobject/col.py 2007-03-02 14:40:52 UTC (rev 2365)
@@ -958,6 +958,43 @@
baseClass = SOEnumCol
+class SetValidator(validators.Validator):
+ """
+ Translates Python tuples into SQL comma-delimited SET strings.
+ """
+
+ def to_python(self, value, state):
+ if not isinstance(value, str):
+ raise validators.Invalid("expected a value string, got % instead" % \
+ (value), value, state)
+ return tuple(value.split(","))
+
+ def from_python(self, value, state):
+ if not isinstance(value, tuple):
+ value = (value,)
+ return ",".join([v for v in value])
+
+class SOSetCol(SOCol):
+ def __init__(self, **kw):
+ self.setValues = popKey(kw, 'setValues', None)
+ assert self.setValues is not None, \
+ 'You must provide a setValues keyword argument'
+ super(SOSetCol, self).__init__(**kw)
+
+ def autoConstraints(self):
+ return [consts.isString, consts.InList(self.setValues)]
+
+ def createValidators(self):
+ return [SetValidator(name = self.name, setValues = self.setValues)] + \
+ super(SOSetCol, self).createValidators()
+
+ def _mysqlType(self):
+ return "SET(%s)" % ', '.join([sqlbuilder.sqlrepr(v, 'mysql') for v in self.enumValues])
+
+class SetCol(Col):
+ baseClass = SOSetCol
+
+
if datetime_available:
class DateTimeValidator(validators.DateValidator):
def to_python(self, value, state):
@@ -1387,6 +1424,7 @@
class PickleCol(BLOBCol):
baseClass = SOPickleCol
+
def popKey(kw, name, default=None):
if not kw.has_key(name):
return default
|