Commit c3655ce6 authored by Christian Theune's avatar Christian Theune

- style cleanups

parent 637c2bd0
...@@ -30,15 +30,16 @@ from struct import pack, unpack ...@@ -30,15 +30,16 @@ from struct import pack, unpack
fsync = getattr(os, "fsync", None) fsync = getattr(os, "fsync", None)
from ZODB import BaseStorage, ConflictResolution, POSException from ZODB import BaseStorage, ConflictResolution, POSException
from ZODB.POSException \ from ZODB.POSException import UndoError, POSKeyError, MultipleUndoErrors
import UndoError, POSKeyError, MultipleUndoErrors, VersionLockError from ZODB.POSException import VersionLockError
from persistent.TimeStamp import TimeStamp from persistent.TimeStamp import TimeStamp
from ZODB.lock_file import LockFile from ZODB.lock_file import LockFile
from ZODB.utils import p64, u64, cp, z64 from ZODB.utils import p64, u64, cp, z64
from ZODB.FileStorage.fspack import FileStoragePacker from ZODB.FileStorage.fspack import FileStoragePacker
from ZODB.FileStorage.format \ from ZODB.FileStorage.format import FileStorageFormatter, DataHeader
import FileStorageFormatter, DataHeader, TxnHeader, DATA_HDR, \ from ZODB.FileStorage.format import TxnHeader, DATA_HDR, DATA_HDR_LEN
DATA_HDR_LEN, TRANS_HDR, TRANS_HDR_LEN, CorruptedDataError from ZODB.FileStorage.format import TRANS_HDR, TRANS_HDR_LEN
from ZODB.FileStorage.format import CorruptedDataError
from ZODB.loglevels import BLATHER from ZODB.loglevels import BLATHER
from ZODB.fsIndex import fsIndex from ZODB.fsIndex import fsIndex
......
# this is a package # this is a package
from ZODB.FileStorage.FileStorage \ from ZODB.FileStorage.FileStorage import FileStorage, RecordIterator
import FileStorage, RecordIterator, FileIterator, Record, packed_version from ZODB.FileStorage.FileStorage import FileIterator, Record, packed_version
...@@ -30,9 +30,8 @@ from ZODB.serialize import referencesf ...@@ -30,9 +30,8 @@ from ZODB.serialize import referencesf
from ZODB.utils import p64, u64, z64 from ZODB.utils import p64, u64, z64
from ZODB.fsIndex import fsIndex from ZODB.fsIndex import fsIndex
from ZODB.FileStorage.format \ from ZODB.FileStorage.format import FileStorageFormatter, CorruptedDataError
import FileStorageFormatter, CorruptedDataError, DataHeader, \ from ZODB.FileStorage.format import DataHeader, TRANS_HDR_LEN
TRANS_HDR_LEN
class DataCopier(FileStorageFormatter): class DataCopier(FileStorageFormatter):
"""Mixin class for copying transactions into a storage. """Mixin class for copying transactions into a storage.
......
...@@ -21,8 +21,8 @@ Caution: This file needs to be kept in sync with FileStorage.py. ...@@ -21,8 +21,8 @@ Caution: This file needs to be kept in sync with FileStorage.py.
import cPickle import cPickle
import struct import struct
from ZODB.FileStorage.format import TRANS_HDR, DATA_HDR, TRANS_HDR_LEN, \ from ZODB.FileStorage.format import TRANS_HDR, DATA_HDR, TRANS_HDR_LEN
DATA_HDR_LEN, DATA_VERSION_HDR_LEN from ZODB.FileStorage.format import DATA_HDR_LEN, DATA_VERSION_HDR_LEN
from ZODB.utils import u64 from ZODB.utils import u64
from persistent.TimeStamp import TimeStamp from persistent.TimeStamp import TimeStamp
......
...@@ -230,8 +230,8 @@ class IConnection(Interface): ...@@ -230,8 +230,8 @@ class IConnection(Interface):
# Multi-database support. # Multi-database support.
connections = Attribute("""\ connections = Attribute(
A mapping from database name to a Connection to that database. """A mapping from database name to a Connection to that database.
In multi-database use, the Connections of all members of a database In multi-database use, the Connections of all members of a database
collection share the same .connections object. collection share the same .connections object.
...@@ -345,8 +345,8 @@ class IDatabase(IStorageDB): ...@@ -345,8 +345,8 @@ class IDatabase(IStorageDB):
TODO: This interface is incomplete. TODO: This interface is incomplete.
""" """
databases = Attribute("""\ databases = Attribute(
A mapping from database name to DB (database) object. """A mapping from database name to DB (database) object.
In multi-database use, all DB members of a database collection share In multi-database use, all DB members of a database collection share
the same .databases object. the same .databases object.
......
...@@ -258,16 +258,16 @@ def doit(srcdb, dstdb, options): ...@@ -258,16 +258,16 @@ def doit(srcdb, dstdb, options):
t = TimeStamp(tid) t = TimeStamp(tid)
if t <= ts: if t <= ts:
if ok: if ok:
print >> sys.stderr, \ print >> sys.stderr, (
'Time stamps are out of order %s, %s' % (ts, t) 'Time stamps are out of order %s, %s' % (ts, t))
ok = False ok = False
ts = t.laterThan(ts) ts = t.laterThan(ts)
tid = `ts` tid = `ts`
else: else:
ts = t ts = t
if not ok: if not ok:
print >> sys.stderr, \ print >> sys.stderr, (
'Time stamps are back in order %s' % t 'Time stamps are back in order %s' % t)
ok = True ok = True
if verbose > 1: if verbose > 1:
print ts print ts
......
...@@ -229,11 +229,11 @@ class ObjectWriter: ...@@ -229,11 +229,11 @@ class ObjectWriter:
If the jar doesn't match that of the writer, an error is raised: If the jar doesn't match that of the writer, an error is raised:
>>> bob._p_jar = DummyJar() >>> bob._p_jar = DummyJar()
>>> writer.persistent_id(bob) >>> writer.persistent_id(bob) # doctest: +NORMALIZE_WHITESPACE
Traceback (most recent call last): Traceback (most recent call last):
... ...
InvalidObjectReference: Attempt to store an object from a """ \ InvalidObjectReference: Attempt to store an object from a
"""foreign database connection foreign database connection
Constructor arguments used by __new__(), as returned by Constructor arguments used by __new__(), as returned by
__getnewargs__(), can affect memory allocation, but may also __getnewargs__(), can affect memory allocation, but may also
......
...@@ -21,8 +21,8 @@ All storages should be able to pass these tests. ...@@ -21,8 +21,8 @@ All storages should be able to pass these tests.
from ZODB import POSException from ZODB import POSException
from ZODB.tests.MinPO import MinPO from ZODB.tests.MinPO import MinPO
from ZODB.tests.StorageTestBase \ from ZODB.tests.StorageTestBase import zodb_unpickle, zodb_pickle
import zodb_unpickle, zodb_pickle, handle_serials from ZODB.tests.StorageTestBase import handle_serials
import transaction import transaction
......
...@@ -7,8 +7,8 @@ from persistent.mapping import PersistentMapping ...@@ -7,8 +7,8 @@ from persistent.mapping import PersistentMapping
import transaction import transaction
import ZODB import ZODB
from ZODB.tests.StorageTestBase \ from ZODB.tests.StorageTestBase import zodb_pickle, zodb_unpickle
import zodb_pickle, zodb_unpickle, handle_serials from ZODB.tests.StorageTestBase import handle_serials
from ZODB.tests.MinPO import MinPO from ZODB.tests.MinPO import MinPO
from ZODB.POSException import ConflictError from ZODB.POSException import ConflictError
......
...@@ -14,8 +14,8 @@ ...@@ -14,8 +14,8 @@
"""Check loadSerial() on storages that support historical revisions.""" """Check loadSerial() on storages that support historical revisions."""
from ZODB.tests.MinPO import MinPO from ZODB.tests.MinPO import MinPO
from ZODB.tests.StorageTestBase import \ from ZODB.tests.StorageTestBase import zodb_unpickle, zodb_pickle, snooze
zodb_unpickle, zodb_pickle, snooze, handle_serials from ZODB.tests.StorageTestBase import handle_serials
from ZODB.utils import p64, u64 from ZODB.utils import p64, u64
import transaction import transaction
......
...@@ -24,7 +24,7 @@ from zope.testing.doctest import DocTestSuite ...@@ -24,7 +24,7 @@ from zope.testing.doctest import DocTestSuite
from ZODB.tests.util import DB from ZODB.tests.util import DB
def test_integration(): def test_integration():
"""Test the integration of broken object support with the databse: r"""Test the integration of broken object support with the databse:
>>> db = DB() >>> db = DB()
...@@ -64,9 +64,9 @@ def test_integration(): ...@@ -64,9 +64,9 @@ def test_integration():
>>> conn3 = db.open() >>> conn3 = db.open()
>>> a3 = conn3.root()['a'] >>> a3 = conn3.root()['a']
>>> a3 >>> a3 # doctest: +NORMALIZE_WHITESPACE
<persistent broken ZODB.not.there.Atall instance """ \ <persistent broken ZODB.not.there.Atall instance
r"""'\x00\x00\x00\x00\x00\x00\x00\x01'> '\x00\x00\x00\x00\x00\x00\x00\x01'>
>>> a3.__Broken_state__ >>> a3.__Broken_state__
{'x': 1} {'x': 1}
......
...@@ -444,77 +444,75 @@ class InvalidationTests(unittest.TestCase): ...@@ -444,77 +444,75 @@ class InvalidationTests(unittest.TestCase):
""" """
def test_invalidateCache(): def test_invalidateCache():
"""\ """The invalidateCache method invalidates a connection's cache. It also
prevents reads until the end of a transaction::
The invalidateCache method invalidates a connection's cache. It also >>> from ZODB.tests.util import DB
prevents reads until the end of a transaction. >>> import transaction
>>> db = DB()
>>> from ZODB.tests.util import DB >>> tm = transaction.TransactionManager()
>>> import transaction >>> connection = db.open(transaction_manager=tm)
>>> db = DB() >>> connection.root()['a'] = StubObject()
>>> tm = transaction.TransactionManager() >>> connection.root()['a'].x = 1
>>> connection = db.open(transaction_manager=tm) >>> connection.root()['b'] = StubObject()
>>> connection.root()['a'] = StubObject() >>> connection.root()['b'].x = 1
>>> connection.root()['a'].x = 1 >>> connection.root()['c'] = StubObject()
>>> connection.root()['b'] = StubObject() >>> connection.root()['c'].x = 1
>>> connection.root()['b'].x = 1 >>> tm.commit()
>>> connection.root()['c'] = StubObject() >>> connection.root()['b']._p_deactivate()
>>> connection.root()['c'].x = 1 >>> connection.root()['c'].x = 2
>>> tm.commit()
>>> connection.root()['b']._p_deactivate() So we have a connection and an active transaction with some modifications.
>>> connection.root()['c'].x = 2 Lets call invalidateCache:
So we have a connection and an active transaction with some >>> connection.invalidateCache()
modifications. Lets call invalidateCache:
Now, if we try to load an object, we'll get a read conflict:
>>> connection.invalidateCache()
>>> connection.root()['b'].x
Now, if we try to load an object, we'll get a read conflict: Traceback (most recent call last):
...
ReadConflictError: database read conflict error
>>> connection.root()['b'].x If we try to commit the transaction, we'll get a conflict error:
Traceback (most recent call last):
...
ReadConflictError: database read conflict error
If we try to commit the transaction, we'll get a conflict error: >>> tm.commit()
Traceback (most recent call last):
...
ConflictError: database conflict error
>>> tm.commit() and the cache will have been cleared:
Traceback (most recent call last):
...
ConflictError: database conflict error
and the cache will have been cleared: >>> print connection.root()['a']._p_changed
None
>>> print connection.root()['b']._p_changed
None
>>> print connection.root()['c']._p_changed
None
>>> print connection.root()['a']._p_changed But we'll be able to access data again:
None
>>> print connection.root()['b']._p_changed
None
>>> print connection.root()['c']._p_changed
None
But we'll be able to access data again: >>> connection.root()['b'].x
1
>>> connection.root()['b'].x Aborting a transaction after a read conflict also lets us read data and go
1 on about our business:
Aborting a transaction after a read conflict also lets us read data >>> connection.invalidateCache()
and go on about our business:
>>> connection.invalidateCache()
>>> connection.root()['c'].x >>> connection.root()['c'].x
Traceback (most recent call last): Traceback (most recent call last):
... ...
ReadConflictError: database read conflict error ReadConflictError: database read conflict error
>>> tm.abort() >>> tm.abort()
>>> connection.root()['c'].x >>> connection.root()['c'].x
1 1
>>> connection.root()['c'].x = 2 >>> connection.root()['c'].x = 2
>>> tm.commit() >>> tm.commit()
>>> db.close() >>> db.close()
""" """
# ---- stubs # ---- stubs
......
...@@ -143,47 +143,45 @@ class DBTests(unittest.TestCase): ...@@ -143,47 +143,45 @@ class DBTests(unittest.TestCase):
def test_invalidateCache(): def test_invalidateCache():
"""\ """The invalidateCache method invalidates a connection caches for all of
the connections attached to a database::
The invalidateCache method invalidates a connection caches for all of the connections attached to a database.
>>> from ZODB.tests.util import DB
>>> from ZODB.tests.util import DB >>> import transaction
>>> import transaction >>> db = DB()
>>> db = DB() >>> tm1 = transaction.TransactionManager()
>>> tm1 = transaction.TransactionManager() >>> c1 = db.open(transaction_manager=tm1)
>>> c1 = db.open(transaction_manager=tm1) >>> c1.root()['a'] = MinPO(1)
>>> c1.root()['a'] = MinPO(1) >>> tm1.commit()
>>> tm1.commit() >>> tm2 = transaction.TransactionManager()
>>> tm2 = transaction.TransactionManager() >>> c2 = db.open(transaction_manager=tm2)
>>> c2 = db.open(transaction_manager=tm2) >>> c1.root()['a']._p_deactivate()
>>> c1.root()['a']._p_deactivate() >>> tm3 = transaction.TransactionManager()
>>> tm3 = transaction.TransactionManager() >>> c3 = db.open(transaction_manager=tm3)
>>> c3 = db.open(transaction_manager=tm3) >>> c3.root()['a'].value
>>> c3.root()['a'].value 1
1 >>> c3.close()
>>> c3.close() >>> db.invalidateCache()
>>> db.invalidateCache()
>>> c1.root()['a'].value
>>> c1.root()['a'].value Traceback (most recent call last):
Traceback (most recent call last): ...
... ReadConflictError: database read conflict error
ReadConflictError: database read conflict error
>>> c2.root()['a'].value
>>> c2.root()['a'].value Traceback (most recent call last):
Traceback (most recent call last): ...
... ReadConflictError: database read conflict error
ReadConflictError: database read conflict error
>>> c3 is db.open(transaction_manager=tm3)
>>> c3 is db.open(transaction_manager=tm3) True
True >>> print c3.root()['a']._p_changed
>>> print c3.root()['a']._p_changed None
None
>>> db.close()
>>> db.close()
""" """
def test_suite(): def test_suite():
s = unittest.makeSuite(DBTests) s = unittest.makeSuite(DBTests)
s.addTest(doctest.DocTestSuite()) s.addTest(doctest.DocTestSuite())
......
...@@ -18,12 +18,12 @@ import ZODB.tests.util ...@@ -18,12 +18,12 @@ import ZODB.tests.util
from ZODB import POSException from ZODB import POSException
from ZODB import DB from ZODB import DB
from ZODB.tests import StorageTestBase, BasicStorage, \ from ZODB.tests import StorageTestBase, BasicStorage, TransactionalUndoStorage
TransactionalUndoStorage, VersionStorage, \ from ZODB.tests import VersionStorage, TransactionalUndoVersionStorage
TransactionalUndoVersionStorage, PackableStorage, \ from ZODB.tests import PackableStorage, Synchronization, ConflictResolution
Synchronization, ConflictResolution, HistoryStorage, \ from ZODB.tests import HistoryStorage, IteratorStorage, Corruption
IteratorStorage, Corruption, RevisionStorage, PersistentStorage, \ from ZODB.tests import RevisionStorage, PersistentStorage, MTStorage
MTStorage, ReadOnlyStorage, RecoveryStorage from ZODB.tests import ReadOnlyStorage, RecoveryStorage
from ZODB.tests.StorageTestBase import MinPO, zodb_pickle from ZODB.tests.StorageTestBase import MinPO, zodb_pickle
class BaseFileStorageTests(StorageTestBase.StorageTestBase): class BaseFileStorageTests(StorageTestBase.StorageTestBase):
......
...@@ -15,8 +15,8 @@ import ZODB.MappingStorage ...@@ -15,8 +15,8 @@ import ZODB.MappingStorage
import unittest import unittest
from ZODB.tests import StorageTestBase from ZODB.tests import StorageTestBase
from ZODB.tests \ from ZODB.tests import BasicStorage, MTStorage, Synchronization
import BasicStorage, MTStorage, Synchronization, PackableStorage from ZODB.tests import PackableStorage
class MappingStorageTests(StorageTestBase.StorageTestBase, class MappingStorageTests(StorageTestBase.StorageTestBase,
BasicStorage.BasicStorage, BasicStorage.BasicStorage,
......
...@@ -28,9 +28,8 @@ from ZODB import POSException ...@@ -28,9 +28,8 @@ from ZODB import POSException
from ZODB.utils import z64 from ZODB.utils import z64
from ZODB.tests import StorageTestBase from ZODB.tests import StorageTestBase
from ZODB.tests \ from ZODB.tests import BasicStorage, MTStorage, Synchronization
import BasicStorage, MTStorage, Synchronization, PackableStorage, \ from ZODB.tests import PackableStorage, RevisionStorage
RevisionStorage
class Transaction(object): class Transaction(object):
"""Hold data for current transaction for MinimalMemoryStorage.""" """Hold data for current transaction for MinimalMemoryStorage."""
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment