[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