[POS-commit] r6443 - stoqlib/trunk/external/sqlobject
Johan Dahlin
jdahlin at async.com.br
Thu Apr 26 12:38:24 BRT 2007
Author: jdahlin
Date: Thu Apr 26 12:38:23 2007
New Revision: 6443
Modified:
stoqlib/trunk/external/sqlobject/viewable.py
Log:
Add support for hidden_columns
Modified: stoqlib/trunk/external/sqlobject/viewable.py
==============================================================================
--- stoqlib/trunk/external/sqlobject/viewable.py (original)
+++ stoqlib/trunk/external/sqlobject/viewable.py Thu Apr 26 12:38:23 2007
@@ -29,22 +29,30 @@
class SQLObjectView(object):
- def __init__(self, cls):
+ def __init__(self, cls, columns):
self.cls = cls
+ self.columns = columns.copy()
def __getattr__(self, attr):
if attr == 'id':
return SQLObjectField(self.cls.sqlmeta.table,
self.cls.sqlmeta.idName, attr)
- return self.cls.sqlmeta.columns[attr].value
+ return self.columns[attr]
class Viewable(object):
+ """
+ @cvar columns:
+ @cvar hidden_columns: a string list of columns which means that the
+ column will not included in the SELECT part, but you will still be able
+ to query for it using the Viewable.q.column magic
+ """
__metaclass__ = DeclarativeMeta
sqlmeta = ViewableMeta
columns = {}
clause = None
+ hidden_columns = []
def __classinit__(cls, new_attrs):
if not cls.__bases__ == (object,):
@@ -59,6 +67,8 @@
if not columns:
return
+ cls.q = SQLObjectView(cls, columns)
+
cols = columns.copy()
if not 'id' in cols:
raise TypeError("You need a id column in %r" % cls)
@@ -66,12 +76,18 @@
idquery = cols.pop('id')
cls.sqlmeta.table = idquery.tableName
+ for hidden in cls.hidden_columns:
+ if not hidden in columns:
+ raise TypeError(
+ "%s specified in hidden_columns is not a column" % (
+ hidden))
+ del cols[hidden]
+ del columns[hidden]
+
assert not cls.sqlmeta.columns
for colName in sorted(cols):
cls.addColumn(colName, cols[colName])
- cls.q = SQLObjectView(cls)
-
@classmethod
def addColumn(cls, name, query):
col = None
More information about the POS-commit
mailing list