Index: trunk/dejavu/sandboxes.py =================================================================== --- trunk/dejavu/sandboxes.py (revision 479) +++ trunk/dejavu/sandboxes.py (revision 482) @@ -157,6 +157,5 @@ if not classes: # Even the requested class is not registered. - raise errors.UnrecallableError("The '%s' class is not registered." - % cls.__name__) + raise KeyError("The '%s' class is not registered." % cls.__name__) for cls in classes: @@ -342,6 +341,8 @@ # to avoid duplicating objects which are already in our cache. if isinstance(query.attributes, logic.Expression): + # TODO: add support for this choke elif isinstance(query.relation, dejavu.UnitJoin): + # TODO: add support for this choke else: Index: trunk/dejavu/storage/db.py =================================================================== --- trunk/dejavu/storage/db.py (revision 481) +++ trunk/dejavu/storage/db.py (revision 482) @@ -482,8 +482,8 @@ first issue and the sync process is aborted. - If 'warn', then a warning is raised (instead of an error) - for each issue, and the sync process is not aborted. This - allows you to see all errors at once, without having to stop - and fix each one and then execute the process again. + If 'warn', then a StorageWarning is raised (instead of an + error) for each issue, and the sync process is not aborted. + This allows you to see all errors at once, without having to + stop and fix each one and then execute the process again. If 'repair', then each issue will be resolved by changing @@ -514,8 +514,8 @@ first issue and the sync process is aborted. - If 'warn', then a warning is raised (instead of an error) - for each issue, and the sync process is not aborted. This - allows you to see all errors at once, without having to stop - and fix each one and then execute the process again. + If 'warn', then a Storagewarning is raised (instead of an + error) for each issue, and the sync process is not aborted. + This allows you to see all errors at once, without having to + stop and fix each one and then execute the process again. If 'repair', then each issue will be resolved by changing @@ -537,5 +537,5 @@ def notify(msg): if conflict_mode == 'warn': - warnings.warn(msg) + warnings.warn(msg, StorageWarning) elif conflict_mode == 'ignore': pass Index: trunk/dejavu/storage/partitions.py =================================================================== --- trunk/dejavu/storage/partitions.py (revision 476) +++ trunk/dejavu/storage/partitions.py (revision 482) @@ -251,5 +251,5 @@ yield unit - def multirecall(self, classes, expr): + def xmultirecall(self, classes, expr=None, order=None, limit=None, offset=None): """Yield lists of units of the given classes which match expr. @@ -259,9 +259,11 @@ expr = logic.Expression(lambda *args: True) - return self._single_store(classes).multirecall(classes, expr) + return self._single_store(classes).xmultirecall(classes, expr, order, + limit, offset) def _single_store(self, relation): """Return the store for the given relation (or raise ValueError).""" if hasattr(relation, "class1"): + # This is a UnitJoin stores = [self.storage(cls) for cls in relation] store = stores[0]