Merge branch 'range-picklable'

This commit is contained in:
Daniele Varrazzo 2016-08-07 02:40:05 +01:00
commit ab671146de
3 changed files with 24 additions and 0 deletions

6
NEWS
View File

@ -21,6 +21,12 @@ New features:
- Added `~connection.get_dsn_parameters()` connection method (:ticket:`#364`).
What's new in psycopg 2.6.3
^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Make `~psycopg2.extras.Range` objects picklable (:ticket:`#462`).
What's new in psycopg 2.6.2
^^^^^^^^^^^^^^^^^^^^^^^^^^^

View File

@ -171,6 +171,17 @@ class Range(object):
else:
return self.__gt__(other)
def __getstate__(self):
return dict(
(slot, getattr(self, slot))
for slot in self.__slots__
if hasattr(self, slot)
)
def __setstate__(self, state):
for slot, value in state.items():
setattr(self, slot, value)
def register_range(pgrange, pyrange, conn_or_curs, globally=False):
"""Create and register an adapter and the typecasters to convert between

View File

@ -20,6 +20,7 @@ import sys
from decimal import Decimal
from datetime import date, datetime
from functools import wraps
from pickle import dumps, loads
from testutils import unittest, skip_if_no_uuid, skip_before_postgres
from testutils import ConnectingTestCase, decorate_all_tests
@ -1397,6 +1398,12 @@ class RangeTestCase(unittest.TestCase):
with py3_raises_typeerror():
self.assert_(Range(1, 2) >= 1)
def test_pickling(self):
from psycopg2.extras import Range
r = Range(0, 4)
self.assertEqual(loads(dumps(r)), r)
def skip_if_no_range(f):
@wraps(f)