Example #1
0
def array_from_db(from_db, data):
    data_oid, dims, elements = pgtype.unpack_array(data)
    if len(dims) != 1:
        raise InterfaceError('Cannot unpack multi-dimensional arrays - %s' %
                             dims)
    try:
        cvt = from_db[data_oid]
    except KeyError:
        raise InterfaceError('No from_db function for oid %r' % data_oid)
    return [cvt(e) for e in elements]
Example #2
0
def unpack_inet(buf):
    family, prefix, is_cidr, length = struct.unpack('!BBBB', buf[:4])
    if length == 4:
        return ipaddress.IPv4Address(buf[4:])
    elif length == 16:
        return ipaddress.IPv6Address(buf[4:])
    else:
        raise InterfaceError('Unable to unpack \'inet\' value %r' % buf)
Example #3
0
def unpack_cidr(buf):
    family, prefix, is_cidr, length = struct.unpack('!BBBB', buf[:4])
    if length == 4:
        octets = struct.unpack('!4B', buf[4:])
        return ipaddress.IPv4Network('%d.%d.%d.%d/%d' % (octets + (prefix, )))
    elif length == 16:
        octets = struct.unpack('!8H', buf[4:])
        return ipaddress.IPv6Network('%x:%x:%x:%x:%x:%x:%x:%x/%d' %
                                     (octets + (prefix, )))
    else:
        raise InterfaceError('Unable to unpack \'inet\' value %r' % buf)
Example #4
0
def unpack_cidr(buf):
    family, prefix, is_cidr, length = struct.unpack('!BBBB', buf[:4])
    if length == 4:
        val = ipaddress.IPv4Network(buf[4:])
    elif length == 16:
        val = ipaddress.IPv6Network(buf[4:])
    else:
        raise InterfaceError('Unable to unpack \'inet\' value %r' % buf)
    # This is violates the documented interface, but the interface provides
    # no efficient way to create an IP*Network from packed data *with* a mask.
    val._prefixlen = prefix
    val.netmask = val._ip_int_from_prefix(val._prefixlen)
    return val
Example #5
0
def value_from_db(from_db, cell):
    if cell.value is None:
        return None
    try:
        cvt = from_db[cell.type]
    except KeyError:
        raise InterfaceError(
            'No from_db function for type %r (column %r, value %r)' %
            (cell.type, cell.name, cell.value))
    try:
        if cvt is array_from_db:
            return cvt(from_db, cell.value)
        else:
            return cvt(cell.value)
    except Exception, e:
        raise InternalError, 'failed to convert column value %r (column %r, type %r): %s' % (
            cell.value, cell.name, cell.type, e), sys.exc_info()[2]