Conver network array types into array of strings by default

This commit is contained in:
Daniele Varrazzo 2016-10-11 02:31:45 +01:00
parent 86198c1c21
commit 706ad2f177
4 changed files with 36 additions and 7 deletions

3
NEWS
View File

@ -19,7 +19,8 @@ New features:
- The attributes `~connection.notices` and `~connection.notifies` can be
customized replacing them with any object exposing an `!append()` method
(:ticket:`#326`).
- old ``inet`` adapters deprecated (:ticket:`#343`).
- old ``inet`` adapters deprecated, but arrays of network types converted
to lists by default (:tickets:`#343, #387`).
- Added `~psycopg2.extensions.quote_ident()` function (:ticket:`#359`).
- Added `~connection.get_dsn_parameters()` connection method (:ticket:`#364`).

View File

@ -930,13 +930,20 @@ UUID data type
.. index::
pair: INET; Data types
pair: CIDR; Data types
pair: MACADDR; Data types
:sql:`inet` data type
^^^^^^^^^^^^^^^^^^^^^^
Networking data type
^^^^^^^^^^^^^^^^^^^^
.. deprecated:: 2.7
these objects will not receive further development and disappear in future
versions
Psycopg casts the PostgreSQL networking data types (:sql:`inet`, :sql:`cidr`,
:sql:`macaddr`) into ordinary strings. However their array are detected as
arrays and directly cast into lists.
.. versionchanged:: 2.7
in previous version array of networking types were not treated as arrays
.. autofunction:: register_inet
.. doctest::
@ -950,11 +957,16 @@ UUID data type
>>> cur.fetchone()[0].addr
'192.168.0.1/24'
.. deprecated:: 2.7
this function will not receive further development and disappear in future
versions
.. autofunction:: register_inet
.. autoclass:: Inet
.. deprecated:: 2.7
this object will not receive further development and disappear in future
versions
.. index::

View File

@ -25,6 +25,9 @@ static long int typecast_DATEARRAY_types[] = {1182, 0};
static long int typecast_INTERVALARRAY_types[] = {1187, 0};
static long int typecast_BINARYARRAY_types[] = {1001, 0};
static long int typecast_ROWIDARRAY_types[] = {1028, 1013, 0};
static long int typecast_INETARRAY_types[] = {1041, 0};
static long int typecast_CIDRARRAY_types[] = {651, 0};
static long int typecast_MACADDRARRAY_types[] = {1040, 0};
static long int typecast_UNKNOWN_types[] = {705, 0};
@ -57,6 +60,9 @@ static typecastObject_initlist typecast_builtins[] = {
{"BINARYARRAY", typecast_BINARYARRAY_types, typecast_BINARYARRAY_cast, "BINARY"},
{"ROWIDARRAY", typecast_ROWIDARRAY_types, typecast_ROWIDARRAY_cast, "ROWID"},
{"UNKNOWN", typecast_UNKNOWN_types, typecast_UNKNOWN_cast, NULL},
{"INETARRAY", typecast_INETARRAY_types, typecast_STRINGARRAY_cast, "STRING"},
{"CIDRARRAY", typecast_CIDRARRAY_types, typecast_STRINGARRAY_cast, "STRING"},
{"MACADDRARRAY", typecast_MACADDRARRAY_types, typecast_STRINGARRAY_cast, "STRING"},
{NULL, NULL, NULL, NULL}
};

View File

@ -349,6 +349,16 @@ class TypesBasicTests(ConnectingTestCase):
a = self.execute("select '{1, 2, NULL}'::int4[]")
self.assertEqual(a, [2, 4, 'nada'])
@testutils.skip_before_postgres(8, 2)
def testNetworkArray(self):
# we don't know these types, but we know their arrays
a = self.execute("select '{192.168.0.1/24}'::inet[]")
self.assertEqual(a, ['192.168.0.1/24'])
a = self.execute("select '{192.168.0.0/24}'::cidr[]")
self.assertEqual(a, ['192.168.0.0/24'])
a = self.execute("select '{10:20:30:40:50:60}'::macaddr[]")
self.assertEqual(a, ['10:20:30:40:50:60'])
class AdaptSubclassTest(unittest.TestCase):
def test_adapt_subtype(self):