Commit 34bcdf7a authored by Jason Madden's avatar Jason Madden

Remove version tests for < 2.6.

2.6 is unsupported. 2.6 is long unsupported.

Consistently spell the version checks that remain as PY2 or PY3 to make
them slightly easier to find.
parent 5619509c
......@@ -85,11 +85,10 @@
import logging
import struct
import sys
from ZODB.POSException import POSKeyError
from ZODB.utils import u64, oid_repr, as_bytes
from ZODB._compat import PY3
class CorruptedError(Exception):
pass
......@@ -245,7 +244,7 @@ class DataHeader(object):
if vlen:
raise ValueError(
"Non-zero version length. Versions aren't supported.")
self.oid = oid
self.tid = tid
self.prev = prev
......@@ -262,7 +261,7 @@ class DataHeader(object):
def TxnHeaderFromString(s):
res = TxnHeader(*struct.unpack(TRANS_HDR, s))
if sys.version_info[0] >= 3:
if PY3:
res.status = res.status.decode('ascii')
return res
......
......@@ -15,8 +15,6 @@
$Id$"""
import sys
from ZODB.utils import oid_repr, readable_tid_repr
# BBB: We moved the two transactions to the transaction package
......@@ -37,39 +35,22 @@ _recon.__no_side_effects__ = True
class POSError(Exception):
"""Persistent object system error."""
if sys.version_info[:2] == (2, 6):
# The 'message' attribute was deprecated for BaseException with
# Python 2.6; here we create descriptor properties to continue using it
def __set_message(self, v):
self.__dict__['message'] = v
def __get_message(self):
return self.__dict__['message']
def __del_message(self):
del self.__dict__['message']
message = property(__get_message, __set_message, __del_message)
if sys.version_info[:2] >= (2, 5):
def __reduce__(self):
# Copy extra data from internal structures
state = self.__dict__.copy()
if sys.version_info[:2] == (2, 5):
state['message'] = self.message
state['args'] = self.args
return (_recon, (self.__class__, state))
def __setstate__(self, state):
# PyPy doesn't store the 'args' attribute in an instance's
# __dict__; instead, it uses what amounts to a slot. Because
# we customize the pickled representation to just be a dictionary,
# the args would then get lost, leading to unprintable exceptions
# and worse. Manually assign to args from the state to be sure
# this doesn't happen.
super(POSError,self).__setstate__(state)
self.args = state['args']
def __reduce__(self):
# Copy extra data from internal structures
state = self.__dict__.copy()
state['args'] = self.args
return (_recon, (self.__class__, state))
def __setstate__(self, state):
# PyPy doesn't store the 'args' attribute in an instance's
# __dict__; instead, it uses what amounts to a slot. Because
# we customize the pickled representation to just be a dictionary,
# the args would then get lost, leading to unprintable exceptions
# and worse. Manually assign to args from the state to be sure
# this doesn't happen.
super(POSError,self).__setstate__(state)
self.args = state['args']
class POSKeyError(POSError, KeyError):
"""Key not found in database."""
......
......@@ -82,7 +82,7 @@ def PersistentPickler(persistent_id, *args, **kwargs):
This covers the differences between Python 2 and 3 and PyPy/zodbpickle.
"""
p = Pickler(*args, **kwargs)
if sys.version_info[0] < 3:
if not PY3:
p.inst_persistent_id = persistent_id
# PyPy uses a python implementation of cPickle/zodbpickle in both Python 2
......
......@@ -36,9 +36,10 @@ from ZODB._compat import PersistentUnpickler
from ZODB._compat import decodebytes
from ZODB._compat import ascii_bytes
from ZODB._compat import INT_TYPES
from ZODB._compat import PY3
if sys.version_info[0] >= 3:
if PY3:
from io import FileIO as file
......
......@@ -24,7 +24,6 @@ from ZODB.utils import U64, p64, load_current
from transaction import Transaction
import sys
import ZODB.blob
try:
......@@ -159,10 +158,8 @@ class IteratorStorage(IteratorCompare):
# We store another transaction with 1 object, the already running
# iterator does not pick this up.
self._dostore()
if sys.version_info[0] < 3:
self.assertRaises(StopIteration, iterator.next)
else:
self.assertRaises(StopIteration, iterator.__next__)
with self.assertRaises(StopIteration):
next(iterator)
class ExtendedIteratorStorage(IteratorCompare):
......
......@@ -33,7 +33,6 @@ import ZODB
import ZODB.MappingStorage
import ZODB.tests.util
PY2 = sys.version_info[0] == 2
class CacheTestBase(ZODB.tests.util.TestCase):
......
......@@ -227,63 +227,62 @@ def open_convenience():
"""
if sys.version_info >= (2, 6):
def db_with_transaction():
"""Using databases with with
def db_with_transaction():
"""Using databases with with
The transaction method returns a context manager that when entered
starts a transaction with a private transaction manager. To
illustrate this, we start a trasnaction using a regular connection
and see that it isn't automatically committed or aborted as we use
the transaction context manager.
The transaction method returns a context manager that when entered
starts a transaction with a private transaction manager. To
illustrate this, we start a trasnaction using a regular connection
and see that it isn't automatically committed or aborted as we use
the transaction context manager.
>>> db = ZODB.tests.util.DB()
>>> conn = db.open()
>>> conn.root()['x'] = conn.root().__class__()
>>> transaction.commit()
>>> conn.root()['x']['x'] = 1
>>> db = ZODB.tests.util.DB()
>>> conn = db.open()
>>> conn.root()['x'] = conn.root().__class__()
>>> transaction.commit()
>>> conn.root()['x']['x'] = 1
>>> with db.transaction() as conn2:
... conn2.root()['y'] = 1
>>> with db.transaction() as conn2:
... conn2.root()['y'] = 1
>>> conn2.opened
>>> conn2.opened
Now, we'll open a 3rd connection a verify that
Now, we'll open a 3rd connection a verify that
>>> conn3 = db.open()
>>> conn3.root()['x']
{}
>>> conn3.root()['y']
1
>>> conn3.close()
>>> conn3 = db.open()
>>> conn3.root()['x']
{}
>>> conn3.root()['y']
1
>>> conn3.close()
Let's try again, but this time, we'll have an exception:
Let's try again, but this time, we'll have an exception:
>>> with db.transaction() as conn2:
... conn2.root()['y'] = 2
... XXX #doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
...
NameError: name 'XXX' is not defined
>>> with db.transaction() as conn2:
... conn2.root()['y'] = 2
... XXX #doctest: +IGNORE_EXCEPTION_DETAIL
Traceback (most recent call last):
...
NameError: name 'XXX' is not defined
>>> conn2.opened
>>> conn2.opened
>>> conn3 = db.open()
>>> conn3.root()['x']
{}
>>> conn3.root()['y']
1
>>> conn3.close()
>>> conn3 = db.open()
>>> conn3.root()['x']
{}
>>> conn3.root()['y']
1
>>> conn3.close()
>>> transaction.commit()
>>> transaction.commit()
>>> conn3 = db.open()
>>> conn3.root()['x']
{'x': 1}
>>> conn3 = db.open()
>>> conn3.root()['x']
{'x': 1}
>>> db.close()
"""
>>> db.close()
"""
def connection_allows_empty_version_for_idiots():
r"""
......
......@@ -13,11 +13,11 @@
##############################################################################
"""Test the list interface to PersistentList
"""
import sys
import unittest
from persistent.list import PersistentList
PY2 = sys.version_info[0] == 2
from six import PY2
l0 = []
l1 = [0]
......@@ -84,7 +84,7 @@ class TestPList(unittest.TestCase):
except IndexError:
pass
else:
raise TestFailed("uu2[2] shouldn't be assignable")
self.fail("uu2[2] shouldn't be assignable")
# Test __delitem__
......@@ -95,7 +95,7 @@ class TestPList(unittest.TestCase):
except IndexError:
pass
else:
raise TestFailed("uu2[0] shouldn't be deletable")
self.fail("uu2[0] shouldn't be deletable")
# Test __getslice__
......@@ -191,7 +191,7 @@ class TestPList(unittest.TestCase):
except ValueError:
pass
else:
raise TestFailed("expected ValueError")
self.fail("expected ValueError")
# Test reverse
......
......@@ -23,20 +23,12 @@ old code, developers will have a hard time testing the new code.
import unittest
import sys
import transaction
from transaction import Transaction
import ZODB
from ZODB.MappingStorage import MappingStorage
from ZODB._compat import Unpickler
try:
import cStringIO
except ImportError:
# Py3
import io as cStringIO
PY2 = sys.version_info[0] == 2
from six import PY2
# This pickle contains a persistent mapping pickle created from the
# old code.
......@@ -68,35 +60,6 @@ class PMTests(unittest.TestCase):
self.assertTrue(hasattr(r, 'data'))
self.assertTrue(not hasattr(r, '_container'))
# TODO: This test fails in ZODB 3.3a1. It's making some assumption(s)
# about pickles that aren't true. Hard to say when it stopped working,
# because this entire test suite hasn't been run for a long time, due to
# a mysterious "return None" at the start of the test_suite() function
# below. I noticed that when the new checkBackwardCompat() test wasn't
# getting run.
def TODO_checkNewPicklesAreSafe(self):
s = MappingStorage()
db = ZODB.DB(s)
r = db.open().root()
r[1] = 1
r[2] = 2
r[3] = r
transaction.commit()
# MappingStorage stores serialno + pickle in its _index.
root_pickle = s._index['\000' * 8][8:]
# XXX not BytesIO really?
f = cStringIO.StringIO(root_pickle)
u = Unpickler(f)
klass_info = u.load()
klass = find_global(*klass_info[0])
inst = klass.__new__(klass)
state = u.load()
inst.__setstate__(state)
self.assertTrue(hasattr(inst, '_container'))
self.assertTrue(not hasattr(inst, 'data'))
def checkBackwardCompat(self):
# Verify that the sanest of the ZODB 3.2 dotted paths still works.
from persistent.mapping import PersistentMapping as newPath
......
......@@ -19,7 +19,6 @@ import atexit
import os
import persistent
import re
import sys
import tempfile
import time
import transaction
......@@ -136,9 +135,6 @@ class AAAA_Test_Runner_Hack(unittest.TestCase):
pass
def assert_warning(category, func, warning_text=''):
if sys.version_info < (2, 6):
return func() # Can't use catch_warnings :(
with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('default')
result = func()
......@@ -154,7 +150,7 @@ def assert_deprecated(func, warning_text=''):
def wait(func=None, timeout=30):
if func is None:
return lambda f: wait(f, timeout)
for i in range(int(timeout*100)):
for _ in range(int(timeout*100)):
if func():
return
time.sleep(.01)
......
......@@ -28,6 +28,8 @@ from ZODB._compat import Unpickler
from ZODB._compat import BytesIO
from ZODB._compat import ascii_bytes
from six import PY2
__all__ = ['z64',
'p64',
'u64',
......@@ -71,7 +73,7 @@ def deprecated38(msg):
DeprecationWarning, stacklevel=3)
if sys.version_info[0] < 3:
if PY2:
def as_bytes(obj):
"Convert obj into bytes"
return str(obj)
......
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