Your IP : 216.73.216.213


Current Path : /opt/alt/python35/lib64/python3.5/site-packages/maxminddb/__pycache__/
Upload File :
Current File : //opt/alt/python35/lib64/python3.5/site-packages/maxminddb/__pycache__/decoder.cpython-35.pyc



�jvX+�@sbdZddlmZddlZddlmZmZddlmZGdd�de	�Z
dS)zl
maxminddb.decoder
~~~~~~~~~~~~~~~~~

This package contains code for decoding the MaxMind DB data section.

�)�unicode_literalsN)�
byte_from_int�int_from_bytes)�InvalidDatabaseErrorc@sNeZdZdZdddd�Zdd�Zdd	�Zd
d�Zddd
�Zdd�Z	ddddddddiZ
dd�Zdd�Zdd�Z
dede
dedd�dededed e	ded!dd"d#�d$ed%ed&ed'ed(ed)d�i
Zd*d+�Zd,d-�Zd.d/�Zd0d1�Zd2S)3�Decoderz.Decoder for the data section of the MaxMind DBrFcCs||_||_||_dS)aCreated a Decoder for a MaxMind DB

        Arguments:
        database_buffer -- an mmap'd MaxMind DB file.
        pointer_base -- the base number to use when decoding a pointer
        pointer_test -- used for internal unit testing of pointer code
        N)�
_pointer_test�_buffer�
_pointer_base)�selfZdatabase_bufferZpointer_baseZpointer_test�r�D/opt/alt/python35/lib64/python3.5/site-packages/maxminddb/decoder.py�__init__s		zDecoder.__init__cCsIg}x6t|�D](}|j|�\}}|j|�qW||fS)N)�range�decode�append)r
�size�offset�array�_�valuerrr�
_decode_arrays
zDecoder._decode_arraycCs|dk|fS)Nrr)r
rrrrr�_decode_boolean&szDecoder._decode_booleancCs!||}|j||�|fS)N)r)r
rr�
new_offsetrrr�
_decode_bytes)s
zDecoder._decode_bytescs���fdd�}|S)Ncsj�s|j|��|�}|j||�}�rK|j�d�}tj�|�\}||fS)Ns)�_verify_sizer�rjust�struct�unpack)r
rrrZpacked_bytesr)�pad�	type_code�	type_sizerr�unpack_type2s
z0Decoder._decode_packed_type.<locals>.unpack_typer)rr rr!r)rrr r�_decode_packed_type0s
zDecoder._decode_packed_typecCs[i}xHt|�D]:}|j|�\}}|j|�\}}|||<qW||fS)N)rr)r
rrZ	containerr�keyrrrr�_decode_map>szDecoder._decode_map��i�i�cCs�|d?d@d}||}|j||�}|dkrA|ntjdt|d@��|}t|�}||j|j|}|jr�||fS|j|�\}	}
|	|fS)Nr'r%r(s!c�)	rr�packrrr	�_pointer_value_offsetrr)r
rrZpointer_sizerZ
pointer_bytesZpackedZunpacked�pointerrrrrr�_decode_pointerMs

	
zDecoder._decode_pointercCs-||}|j||�}t|�|fS)N)rr)r
rrrZ
uint_bytesrrr�_decode_uint[s
zDecoder._decode_uintcCs*||}|j||�jd�|fS)Nzutf-8)rr)r
rrrrrr�_decode_utf8_string`s
zDecoder._decode_utf8_strings!d���r)s!irT�	�
���s!fcCs�|d}tjd|j||��\}|d?}|sQ|j|�\}}||jkrxtdjd|���|j|||�\}}|j||||�S)z�Decode a section of the data section starting at offset

        Arguments:
        offset -- the location of the data structure to decode
        r%s!Br1z+Unexpected type number ({type}) encountered�type)rrr�_read_extended�
_type_decoderr�format�_size_from_ctrl_byte)r
rr�	ctrl_byte�type_numrrrrrus
"
zDecoder.decodecCsbtjd|j||d��\}|d}|dkrTtdjd|���||dfS)Ns!Br%r)zeSomething went horribly wrong in the decoder. An extended type resolved to a type number < 8 ({type})r8)rrrrr;)r
rZ	next_byter>rrrr9�s&
	zDecoder._read_extendedcCs||krtd��dS)NzXThe MaxMind DB file's data section contains bad data (unknown data type or corrupt data))r)r
Zexpected�actualrrrr�szDecoder._verify_sizecCs�|d@}|dkr ||fS|dkr2dn|d}||}|j||�}|dkr�dtjd|�d}n[|dkr�dtjd	|�d}n2|dkr�tjd
|jdd��dd
}||fS)N�r%�r�s!B�is!Hs!Ir(si)rrrr)r
r=rr>rZ
bytes_to_readrZ
size_bytesrrrr<�s


zDecoder._size_from_ctrl_byteN)�__name__�
__module__�__qualname__�__doc__r
rrrr"r$r+r-r.r/r:rr9rr<rrrrrs@	
r)rG�
__future__rrZmaxminddb.compatrrZmaxminddb.errorsr�objectrrrrr�<module>s