mirror of
https://github.com/psycopg/psycopg2.git
synced 2025-03-03 23:55:46 +03:00
NumberRange renamed to NumericRange
I was avoiding Numeric to avoid conflicting with the 'numeric' Postgres type, which is an alias for 'decimal'. But now that there is a single numeric range I can use the preferred name
This commit is contained in:
parent
45cbcc0713
commit
94c6353d55
|
@ -343,7 +343,7 @@ where typname = %s and (%s is null or ns.nspname = %s);
|
||||||
register_adapter(self.range, self.adapter)
|
register_adapter(self.range, self.adapter)
|
||||||
|
|
||||||
|
|
||||||
class NumberRange(Range):
|
class NumericRange(Range):
|
||||||
"""A `Range` suitable to pass Python numeric types to a PostgreSQL range."""
|
"""A `Range` suitable to pass Python numeric types to a PostgreSQL range."""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -360,10 +360,10 @@ class DateTimeTZRange(Range):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
# Special adaptation for NumberRange. Allows to pass number range regardless
|
# Special adaptation for NumericRange. Allows to pass number range regardless
|
||||||
# of whether they are ints, floats and what size of ints are, which are
|
# of whether they are ints, floats and what size of ints are, which are
|
||||||
# pointless in Python world. On the way back, no numeric range is casted to
|
# pointless in Python world. On the way back, no numeric range is casted to
|
||||||
# NumberRange, but only to their subclasses
|
# NumericRange, but only to their subclasses
|
||||||
|
|
||||||
class NumberRangeAdapter(RangeAdapter):
|
class NumberRangeAdapter(RangeAdapter):
|
||||||
"""Adapt a range if the subtype doesn't need quotes."""
|
"""Adapt a range if the subtype doesn't need quotes."""
|
||||||
|
@ -390,21 +390,21 @@ class NumberRangeAdapter(RangeAdapter):
|
||||||
r._bounds[0], lower, upper, r._bounds[1])
|
r._bounds[0], lower, upper, r._bounds[1])
|
||||||
|
|
||||||
# TODO: probably won't work with infs, nans and other tricky cases.
|
# TODO: probably won't work with infs, nans and other tricky cases.
|
||||||
register_adapter(NumberRange, NumberRangeAdapter)
|
register_adapter(NumericRange, NumberRangeAdapter)
|
||||||
|
|
||||||
|
|
||||||
# Register globally typecasters and adapters for builtin range types.
|
# Register globally typecasters and adapters for builtin range types.
|
||||||
|
|
||||||
# note: the adapter is registered more than once, but this is harmless.
|
# note: the adapter is registered more than once, but this is harmless.
|
||||||
int4range_caster = RangeCaster(NumberRangeAdapter, NumberRange,
|
int4range_caster = RangeCaster(NumberRangeAdapter, NumericRange,
|
||||||
oid=3904, subtype_oid=23, array_oid=3905)
|
oid=3904, subtype_oid=23, array_oid=3905)
|
||||||
int4range_caster._register()
|
int4range_caster._register()
|
||||||
|
|
||||||
int8range_caster = RangeCaster(NumberRangeAdapter, NumberRange,
|
int8range_caster = RangeCaster(NumberRangeAdapter, NumericRange,
|
||||||
oid=3926, subtype_oid=20, array_oid=3927)
|
oid=3926, subtype_oid=20, array_oid=3927)
|
||||||
int8range_caster._register()
|
int8range_caster._register()
|
||||||
|
|
||||||
numrange_caster = RangeCaster(NumberRangeAdapter, NumberRange,
|
numrange_caster = RangeCaster(NumberRangeAdapter, NumericRange,
|
||||||
oid=3906, subtype_oid=1700, array_oid=3907)
|
oid=3906, subtype_oid=1700, array_oid=3907)
|
||||||
numrange_caster._register()
|
numrange_caster._register()
|
||||||
|
|
||||||
|
|
|
@ -968,7 +968,7 @@ def register_composite(name, conn_or_curs, globally=False):
|
||||||
|
|
||||||
|
|
||||||
# Expose range-related objects
|
# Expose range-related objects
|
||||||
from psycopg2._range import Range, NumberRange
|
from psycopg2._range import Range, NumericRange
|
||||||
from psycopg2._range import DateRange, DateTimeRange, DateTimeTZRange
|
from psycopg2._range import DateRange, DateTimeRange, DateTimeTZRange
|
||||||
from psycopg2._range import register_range, RangeAdapter, RangeCaster
|
from psycopg2._range import register_range, RangeAdapter, RangeCaster
|
||||||
|
|
||||||
|
|
|
@ -911,12 +911,12 @@ class RangeCasterTestCase(unittest.TestCase):
|
||||||
self.assert_(r.upper_inf)
|
self.assert_(r.upper_inf)
|
||||||
|
|
||||||
def test_cast_numbers(self):
|
def test_cast_numbers(self):
|
||||||
from psycopg2.extras import NumberRange
|
from psycopg2.extras import NumericRange
|
||||||
cur = self.conn.cursor()
|
cur = self.conn.cursor()
|
||||||
for type in ('int4range', 'int8range'):
|
for type in ('int4range', 'int8range'):
|
||||||
cur.execute("select '(10,20)'::%s" % type)
|
cur.execute("select '(10,20)'::%s" % type)
|
||||||
r = cur.fetchone()[0]
|
r = cur.fetchone()[0]
|
||||||
self.assert_(isinstance(r, NumberRange))
|
self.assert_(isinstance(r, NumericRange))
|
||||||
self.assert_(not r.isempty)
|
self.assert_(not r.isempty)
|
||||||
self.assertEqual(r.lower, 11)
|
self.assertEqual(r.lower, 11)
|
||||||
self.assertEqual(r.upper, 20)
|
self.assertEqual(r.upper, 20)
|
||||||
|
@ -927,7 +927,7 @@ class RangeCasterTestCase(unittest.TestCase):
|
||||||
|
|
||||||
cur.execute("select '(10.2,20.6)'::numrange")
|
cur.execute("select '(10.2,20.6)'::numrange")
|
||||||
r = cur.fetchone()[0]
|
r = cur.fetchone()[0]
|
||||||
self.assert_(isinstance(r, NumberRange))
|
self.assert_(isinstance(r, NumericRange))
|
||||||
self.assert_(not r.isempty)
|
self.assert_(not r.isempty)
|
||||||
self.assertEqual(r.lower, Decimal('10.2'))
|
self.assertEqual(r.lower, Decimal('10.2'))
|
||||||
self.assertEqual(r.upper, Decimal('20.6'))
|
self.assertEqual(r.upper, Decimal('20.6'))
|
||||||
|
@ -984,56 +984,56 @@ class RangeCasterTestCase(unittest.TestCase):
|
||||||
self.assert_(r.upper_inc)
|
self.assert_(r.upper_inc)
|
||||||
|
|
||||||
def test_adapt_number_range(self):
|
def test_adapt_number_range(self):
|
||||||
from psycopg2.extras import NumberRange
|
from psycopg2.extras import NumericRange
|
||||||
cur = self.conn.cursor()
|
cur = self.conn.cursor()
|
||||||
|
|
||||||
r = NumberRange(empty=True)
|
r = NumericRange(empty=True)
|
||||||
cur.execute("select %s::int4range", (r,))
|
cur.execute("select %s::int4range", (r,))
|
||||||
r1 = cur.fetchone()[0]
|
r1 = cur.fetchone()[0]
|
||||||
self.assert_(isinstance(r1, NumberRange))
|
self.assert_(isinstance(r1, NumericRange))
|
||||||
self.assert_(r1.isempty)
|
self.assert_(r1.isempty)
|
||||||
|
|
||||||
r = NumberRange(10, 20)
|
r = NumericRange(10, 20)
|
||||||
cur.execute("select %s::int8range", (r,))
|
cur.execute("select %s::int8range", (r,))
|
||||||
r1 = cur.fetchone()[0]
|
r1 = cur.fetchone()[0]
|
||||||
self.assert_(isinstance(r1, NumberRange))
|
self.assert_(isinstance(r1, NumericRange))
|
||||||
self.assertEqual(r1.lower, 10)
|
self.assertEqual(r1.lower, 10)
|
||||||
self.assertEqual(r1.upper, 20)
|
self.assertEqual(r1.upper, 20)
|
||||||
self.assert_(r1.lower_inc)
|
self.assert_(r1.lower_inc)
|
||||||
self.assert_(not r1.upper_inc)
|
self.assert_(not r1.upper_inc)
|
||||||
|
|
||||||
r = NumberRange(10.2, 20.5, '(]')
|
r = NumericRange(10.2, 20.5, '(]')
|
||||||
cur.execute("select %s::numrange", (r,))
|
cur.execute("select %s::numrange", (r,))
|
||||||
r1 = cur.fetchone()[0]
|
r1 = cur.fetchone()[0]
|
||||||
self.assert_(isinstance(r1, NumberRange))
|
self.assert_(isinstance(r1, NumericRange))
|
||||||
self.assertEqual(r1.lower, Decimal('10.2'))
|
self.assertEqual(r1.lower, Decimal('10.2'))
|
||||||
self.assertEqual(r1.upper, Decimal('20.5'))
|
self.assertEqual(r1.upper, Decimal('20.5'))
|
||||||
self.assert_(not r1.lower_inc)
|
self.assert_(not r1.lower_inc)
|
||||||
self.assert_(r1.upper_inc)
|
self.assert_(r1.upper_inc)
|
||||||
|
|
||||||
def test_adapt_numeric_range(self):
|
def test_adapt_numeric_range(self):
|
||||||
from psycopg2.extras import NumberRange
|
from psycopg2.extras import NumericRange
|
||||||
cur = self.conn.cursor()
|
cur = self.conn.cursor()
|
||||||
|
|
||||||
r = NumberRange(empty=True)
|
r = NumericRange(empty=True)
|
||||||
cur.execute("select %s::int4range", (r,))
|
cur.execute("select %s::int4range", (r,))
|
||||||
r1 = cur.fetchone()[0]
|
r1 = cur.fetchone()[0]
|
||||||
self.assert_(isinstance(r1, NumberRange), r1)
|
self.assert_(isinstance(r1, NumericRange), r1)
|
||||||
self.assert_(r1.isempty)
|
self.assert_(r1.isempty)
|
||||||
|
|
||||||
r = NumberRange(10, 20)
|
r = NumericRange(10, 20)
|
||||||
cur.execute("select %s::int8range", (r,))
|
cur.execute("select %s::int8range", (r,))
|
||||||
r1 = cur.fetchone()[0]
|
r1 = cur.fetchone()[0]
|
||||||
self.assert_(isinstance(r1, NumberRange))
|
self.assert_(isinstance(r1, NumericRange))
|
||||||
self.assertEqual(r1.lower, 10)
|
self.assertEqual(r1.lower, 10)
|
||||||
self.assertEqual(r1.upper, 20)
|
self.assertEqual(r1.upper, 20)
|
||||||
self.assert_(r1.lower_inc)
|
self.assert_(r1.lower_inc)
|
||||||
self.assert_(not r1.upper_inc)
|
self.assert_(not r1.upper_inc)
|
||||||
|
|
||||||
r = NumberRange(10.2, 20.5, '(]')
|
r = NumericRange(10.2, 20.5, '(]')
|
||||||
cur.execute("select %s::numrange", (r,))
|
cur.execute("select %s::numrange", (r,))
|
||||||
r1 = cur.fetchone()[0]
|
r1 = cur.fetchone()[0]
|
||||||
self.assert_(isinstance(r1, NumberRange))
|
self.assert_(isinstance(r1, NumericRange))
|
||||||
self.assertEqual(r1.lower, Decimal('10.2'))
|
self.assertEqual(r1.lower, Decimal('10.2'))
|
||||||
self.assertEqual(r1.upper, Decimal('20.5'))
|
self.assertEqual(r1.upper, Decimal('20.5'))
|
||||||
self.assert_(not r1.lower_inc)
|
self.assert_(not r1.lower_inc)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user