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:
Daniele Varrazzo 2012-09-23 21:11:06 +01:00
parent 45cbcc0713
commit 94c6353d55
3 changed files with 25 additions and 25 deletions

View File

@ -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()

View File

@ -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

View File

@ -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)