@@ -421,6 +421,39 @@ def numeric_unpack(x):
421421 pg_types .CIRCLEOID : (circle_pack , circle_unpack ),
422422}
423423
424+ # Conditionally use ipaddr.
425+ # Condition goes away when 3.0 is deprecated.
426+ try :
427+ import ipaddr
428+ def net_pack (ip ):
429+ family = None
430+ converted = False
431+ while family is None :
432+ if isinstance (ip , ipaddr .IPv4 ):
433+ family = 2
434+ elif isinstance (ip , ipaddr .IPv6 ):
435+ family = 3
436+ else :
437+ if converted is True :
438+ raise ValueError ("unknown IP type: " + repr (ip ))
439+ ip = ipaddr .IP (ip )
440+ converted = True
441+ return ts .net_pack ((family , ip .prefixlen , ip .packed ))
442+
443+ def net_unpack (data ):
444+ family , mask , data = ts .net_unpack (data )
445+ if family in (2 , 3 ):
446+ v = ipaddr .IP (data )
447+ else :
448+ raise ValueError ("unknown net family: " + repr (family ))
449+ v .prefixlen = mask
450+ return v
451+ oid_to_io [pg_types .CIDROID ] = (net_pack , net_unpack )
452+ oid_to_io [pg_types .INETOID ] = (net_pack , net_unpack )
453+ except ImportError :
454+ oid_to_io [pg_types .CIDROID ] = (None , None )
455+ oid_to_io [pg_types .INETOID ] = (None , None )
456+
424457def process_tuple (procs , tup , exception_handler ):
425458 """
426459 Call each item in `procs` with the corresponding
@@ -716,8 +749,6 @@ def __init__(self):
716749 pg_types .VARCHAROID : (None , None ),
717750 pg_types .CSTRINGOID : (None , None ),
718751 pg_types .TEXTOID : (None , None ),
719- pg_types .CIDROID : (None , None ),
720- pg_types .INETOID : (None , None ),
721752 pg_types .REGPROCEDUREOID : (None , None ),
722753 pg_types .REGTYPEOID : (None , None ),
723754 pg_types .REGPROCOID : (None , None ),
0 commit comments