U _7 @sXdZddlmZmZddlmZmZdZ dZ ddZ dd Z d d Z d d ZddZdS)z=Fallback routines for Python's standard library socket module)unpackpack) _bytes_join_is_str cCs:t|stdt|t|dkr,tddtd|S)zR Convert an IP address from 32-bit packed binary format to string format. zstring type expected, not %s*invalid length of packed IP address stringz %d.%d.%d.%dZ4B)r TypeErrortypelen ValueError_unpack) packed_iprh/private/var/folders/y3/n__7lzs1191bf6ypqtmfbcr1rfn98y/T/pip-unpacked-wheel-_tyv3h66/netaddr/fbsocket.py inet_ntoas  rc Cs"g}g}d}d}t|D]N\}}|dkr>|dkr4|}|d7}n|dkrT|||fd}d}||q|dkr~|||ft|dkr|jddd|d}|D]}|d|dkr|}q|\} } |d| dg|| | d}|ddkr|dd|ddkr|d|S) Nr0cSs|dS)Nrr)xrrr9z&_compact_ipv6_tokens..)key) enumerateappendr sortinsert) tokensZ new_tokensZ positionsZ start_indexZ num_tokensidxtokenZ best_positionpositionlengthZ start_idxrrr_compact_ipv6_tokenss:  "  r$c Cs|tkrt|S|tkrt|dks,t|s4tdddtd|D}ttd|}d}tt |D] \}}|}|d|>}||B}qfd|krdksn|d ?dkrt dd d|d d D}t|} |dd | g}d t |Std|d S)zBConvert an packed IP address of the given family to string format.r cSsg|] }d|qS)%xr.0irrr Vszinet_ntop..z>8Hrl >2HcSsg|]}t|dqSr%intr'rrrr*bsN:zunknown address family %d)r-) AF_INETrAF_INET6r rr rlistrreversed_packjoinr$) afrrwordsZint_valr)numwordZ packed_ipv4ipv4_strrrr inet_ntopLs$  "r>c Cst|rtd|}|d}t|dkrg}|D]n}|dsV|drZt|dkrZ|z t|}Wntk r~|YnX|d?dkr||td |q2t|S|td t |d S) a Convert an IP address in string format (123.45.67.89) to the 32-bit packed binary format used in low-level network functions. Differs from inet_aton by only support decimal octets. Using octal or hexadecimal values will raise a ValueError exception. illegal IP address string %r.r0xrrrBz#argument should be a string, not %sN) rr splitr startswithr0rr7rr ) ip_string invalid_addrrr:r!octetrrr_inet_pton_af_inetks$       rIcCsL|tkrt|S|tkrHrrrrBcSsg|]}tdt|dqSrKr%r7r0r'rrrr*szinet_pton..cSsg|] }dqS)z)encoder'rrrr*scSsg|]}tdt|dqSrMrNr'rrrr*sr+Nr)rZffffcSsg|]}tdt|dqSrMrNr'rrrr*scSsg|]}t|dqSr.r/)r(r!rrrr*scSsg|]}td|qS)rK)r7r'rrrr*szUnknown address family %d)r3rIr4r rrOrDr poprrranger0lowerr)r9rFrGvaluesprefixsuffixZl_prefixZl_suffixr=Z token_countZgap_sizer!r<rZ ipv6_prefixrrr inet_ptons                        rVN)__doc__structrrrr7Znetaddr.compatrrr3r4rr$r>rIrVrrrrs /"