[z3-checkins] r37087 - in z3/sqlos/trunk/src/sqlos: . interfaces
kobold at codespeak.net
kobold at codespeak.net
Sun Jan 21 13:06:42 CET 2007
Author: kobold
Date: Sun Jan 21 10:50:30 2007
New Revision: 37087
Modified:
z3/sqlos/trunk/src/sqlos/interfaces/container.py
z3/sqlos/trunk/src/sqlos/zsqlobject.py
Log:
SQLObjectJoinContainer now implements ISelectResults, too; added unit test.
Modified: z3/sqlos/trunk/src/sqlos/interfaces/container.py
==============================================================================
--- z3/sqlos/trunk/src/sqlos/interfaces/container.py (original)
+++ z3/sqlos/trunk/src/sqlos/interfaces/container.py Sun Jan 21 10:50:30 2007
@@ -20,6 +20,8 @@
from zope.app.container.interfaces import IContainerNamesContainer, IReadContainer, \
IContainer, IContained
+from sqlos.interfaces import ISelectResults
+
class ISQLObjectContainer(IContainerNamesContainer, IAttributeAnnotatable):
"""A SQLObject container"""
@@ -43,7 +45,7 @@
"""A mono-type SQLObject container"""
-class ISQLObjectJoinContainer(IContainerNamesContainer, IEnumerableMapping, IContained):
+class ISQLObjectJoinContainer(IContainerNamesContainer, IEnumerableMapping, IContained, ISelectResults):
"""A SQLObject container for joins"""
Modified: z3/sqlos/trunk/src/sqlos/zsqlobject.py
==============================================================================
--- z3/sqlos/trunk/src/sqlos/zsqlobject.py (original)
+++ z3/sqlos/trunk/src/sqlos/zsqlobject.py Sun Jan 21 10:50:30 2007
@@ -127,18 +127,10 @@
>>> from zope.interface import Attribute
>>> from sqlos.interfaces import ISQLSchema
- >>> class IPerson(ISQLSchema):
- ... fullname = Attribute(u'Fullname')
- ... company = Attribute(u'Company')
-
>>> class Person(SQLOSContainer):
... fullname = UnicodeCol(length=100)
... company = SingleJoin('Company')
- >>> class ICompany(ISQLSchema):
- ... name = Attribute(u'Name')
- ... person = Attribute(u'Person')
-
>>> class Company(SQLOSContainer):
... name = UnicodeCol(length=100)
... person = ForeignKey('Person')
@@ -263,7 +255,50 @@
class SelectResultsContainer:
- """Adapter for SelectResults objects"""
+ """Adapter for SelectResults objects
+
+ Test the join container:
+
+ >>> from sqlobject import *
+ >>> from zope.interface import Attribute
+ >>> from sqlos.interfaces import ISQLSchema
+
+ >>> class User(SQLOSContainer):
+ ... name = UnicodeCol(length=100)
+ ... addresses = SQLMultipleJoin('Address', joinColumn='user_id')
+
+ >>> class Address(SQLOSContainer):
+ ... address = UnicodeCol(length=100)
+ ... user = ForeignKey('User', cascade=True)
+
+ >>> from sqlos import testing
+ >>> testdb = testing.TestDB([User, Address])
+
+ >>> user = User(name='John Doe')
+ >>> user.addresses is None
+ False
+
+ >>> address = Address(address='Test Address', user=user)
+ >>> user.addresses.count()
+ 1
+
+ >>> from sqlos.container import contained
+ >>> container = contained(SelectResultsContainer(user.addresses),
+ ... name='test', parent=user)
+
+ >>> from zope.interface.verify import verifyObject
+ >>> verifyObject(ISQLObjectJoinContainer, container)
+ True
+ >>> verifyObject(ISelectResults, container)
+ True
+ >>> container.count()
+ 1
+
+ And finally call tearDown and cleanup:
+
+ >>> testdb.tearDown()
+
+ """
adapts(ISelectResults)
@@ -327,3 +362,84 @@
def __setitem__(self, name, content):
return name
+
+ def orderBy(self, orderBy):
+ """See sqlos.interfaces.ISelectResults"""
+ return contained(self.context.orderBy(orderBy),
+ name=self.__name__, parent=self.__parent__)
+
+ def newClause(self, newClause):
+ """See sqlos.interfaces.ISelectResults"""
+ return contained(self.context.newClause(newClause),
+ name=self.__name__, parent=self.__parent__)
+
+ def max(self, attribute):
+ """See sqlos.interfaces.ISelectResults"""
+ return self.context.max(attribute)
+
+ def min(self, attribute):
+ """See sqlos.interfaces.ISelectResults"""
+ return self.context.min(attribute)
+
+ def sum(self, attribute):
+ """See sqlos.interfaces.ISelectResults"""
+ return self.context.sum(attribute)
+
+ def avg(self, attribute):
+ """See sqlos.interfaces.ISelectResults"""
+ return self.context.avg(attribute)
+
+ def reversed(self):
+ """See sqlos.interfaces.ISelectResults"""
+ return contained(self.context.reversed(),
+ name=self.__name__, parent=self.__parent__)
+
+ def accumulate(self, *expressions):
+ """See sqlos.interfaces.ISelectResults"""
+ return self.context.accumulate(*expressions)
+
+ def count(self):
+ """See sqlos.interfaces.ISelectResults"""
+ return self.context.count()
+
+ def lazyIter(self):
+ """See sqlos.interfaces.ISelectResults"""
+ return self.context.lazyIter()
+
+ def accumulateOne(self, func_name, attribute):
+ """See sqlos.interfaces.ISelectResults"""
+ return self.context.accumulateOne(func_name, attribute)
+
+ def accumulateMany(self, *attributes):
+ """See sqlos.interfaces.ISelectResults"""
+ return self.context.accumulateMany(*attributes)
+
+ def distinct(self):
+ """See sqlos.interfaces.ISelectResults"""
+ return contained(self.context.distinct(),
+ name=self.__name__, parent=self.__parent__)
+
+ def filter(self, filter_clause):
+ """See sqlos.interfaces.ISelectResults"""
+ return contained(self.context.filter(filter_clause),
+ name=self.__name__, parent=self.__parent__)
+
+ def connection(self, conn):
+ """See sqlos.interfaces.ISelectResults"""
+ return contained(self.context.connection(connection=con),
+ name=self.__name__, parent=self.__parent__)
+
+ def limit(self, limit):
+ """See sqlos.interfaces.ISelectResults"""
+ return contained(self.context.limit(limit),
+ name=self.__name__, parent=self.__parent__)
+
+ def lazyColumns(self, value):
+ """See sqlos.interfaces.ISelectResults"""
+ return contained(self.context.lazyColumns(value),
+ name=self.__name__, parent=self.__parent__)
+
+ def clone(self, **newOpts):
+ """See sqlos.interfaces.ISelectResults"""
+ return contained(self.context.clone(**newOpts),
+ name=self.__name__, parent=self.__parent__)
More information about the z3-checkins
mailing list