a Me.@sddlZddlZddlZddlZeddeddDZdZdZ dZ dZ d Z d Z d Zd d ZddZddZddZddZddZejjGdddejjZdS)Nccs|]}d|VqdS) N).0irr7/usr/lib/python3.9/site-packages/dns/rdtypes/ANY/LOC.py r Y@g.Ag@@lY&i'll2?MiN`YcCsZ|dkr dSd}ttD]\}}||kr|d}q6q|dusF|dkrVtjd||S)Nrz%s value out of bounds) enumerate_powsdns exception SyntaxError)whatdescZexprpowrrr _exponent_of&srcCs|dkrd}|d9}nd}t|d}t|d}||d8}t|d}||d8}t|d}|t|d8}t|}|||||fS)Nrr 6`)roundint)rsignZdegreesZminutessecondsrrr_float_to_tuple3s       rcCsXt|d}|t|dd7}|t|dd7}|t|dd7}t|d|S) Nrr gN@g @g@wKA)float)rvaluerrr_tuple_to_floatDs  r#cCs4t|}t||d@}|td|d@}|d|S)Nr)rrrrrZexponentbaserrr _encode_sizeLsr(cCsR|d@}|dkr tjd||d@d?}|dkrDtjd||td|S)Nr$ zbad %s exponentr z bad %s baser)rr FormErrorrr&rrr _decode_sizeSs r,cCs|d|ks|d|kr.td|d|d|ddksF|ddkrNtd|ddksf|ddkrntd |d dks|d d krtd |d dkr|d dkrtddS)Nrznot in range [z, ]r ;zbad minutes valuerzbad seconds valuerizbad milliseconds valuer rzbad hemisphere value) ValueError)r"ZlowZhighrrr_check_coordinate_list]sr0csxeZdZdZgdZeeeffdd ZdddZ e dd d Z dd d Z e dddZ eddZeddZZS)LOCz LOC record)latitude longitudealtitudesizehorizontal_precisionvertical_precisionc st||t|tr t|}t|tr2t|}t|ddt||_t|trZt|}t|trlt|}t|ddt||_ t||_ t||_ t||_ t||_ dS)aInitialize a LOC record instance. The parameters I{latitude} and I{longitude} may be either a 4-tuple of integers specifying (degrees, minutes, seconds, milliseconds), or they may be floating point values specifying the number of degrees. The other parameters are floats. Size, horizontal precision, and vertical precision are specified in centimeters.iZiLN)super__init__ isinstancerr!rr0tupler2r3r4r5r6r7) selfrdclassrdtyper2r3r4r5hprecvprec __class__rrr;ys"           z LOC.__init__NTc Ks|jddkrd}nd}|jddkr,d}nd}d|jd|jd|jd |jd ||jd|jd|jd |jd ||jd f }|jtks|jtks|jtkr|d |jd |jd |jd 7}|S) Nr rNSEWz(%d %d %d.%03d %s %d %d %d.%03d %s %0.2fmr rrr z {:0.2f}m {:0.2f}m {:0.2f}m) r2r3r4r5 _default_sizer6_default_hprecr7_default_vprecformat)r>origin relativizekwZlat_hemisphereZlong_hemispheretextrrrto_texts>z LOC.to_textc Csgd}gd}t} t} t} ||d<|} | rt| |d<|} d| vr| d\} }| sxtj dt| |d<t |}|dks|dks|stj d|dkrd }n|dkrd }nd}|t||d<|} n| rt| |d<|} | d krd |d <n| dkr2tj d||d<|} | r,t| |d<|} d| vr| d\} }| stj dt| |d<t |}|dks|dks|stj d|dkrd }n|dkrd }nd}|t||d<|} n| r,t| |d<|} | dkr@d |d <n| dkrVtj d|} | d dkrx| dd } t | d}|j dd}t |dkrV|dj}|d dkr|dd }t |d} t |dkrV|dj}|d dkr|dd }t |d} t |dkrV|dj}|d dkrJ|dd }t |d} t| dt| dt| d||||||| | | S)N)rrrrr rr .zbad latitude seconds valuerrzbad latitude milliseconds valuedrrFrr rEzbad latitude hemisphere valuezbad longitude seconds valuez bad longitude milliseconds valuerHrGzbad longitude hemisphere valuemr )Z max_tokensr5horizontal precisionvertical precision)rIrJrKZget_intZ get_stringisdigitrsplitrrrlenr!Z get_remainingZunescaper"r()clsr?r@tokrMrNZ relativize_tor2r3r5rArBtr millisecondslrTr4tokensr"rrr from_texts                                          z LOC.from_textFc Cs|jdd|jdd|jdd|jd|jd}d |}|jdd|jdd|jdd|jd|jd}d |}t|jd }t|jd } t|jd } t|jd } t dd| | | |||} | | dS)Nrrr rrrrr ir5rUrV!BBBBIII) r2r3rr4r(r5r6r7structpackwrite) r>filecompressrMZ canonicalizer]r2r3r4r5rArBZwirerrr_to_wire#s8         z LOC._to_wirec Cs|d\}}}}} } } |dkr,tjd| tks<| tkrHtjd| dkr^| dd} ndd| d} | tks~| tkrtjd| dkr| dd} ndd| d} t| d } t |d }t |d }t |d }|||| | | |||S) NrbrzLOC version not zeroz bad latituderarrz bad longitudegcAr5rUrV) Z get_structrrr+ _MIN_LATITUDE _MAX_LATITUDE_MIN_LONGITUDE_MAX_LONGITUDEr!r,) rZr?r@parserrMversionr5rArBr2r3r4rrrfrom_wire_parser;s4        zLOC.from_wire_parsercCs t|jS)z"latitude as a floating point value)r#r2r>rrrfloat_latitudeZszLOC.float_latitudecCs t|jS)z#longitude as a floating point value)r#r3rprrrfloat_longitude_szLOC.float_longitude)NT)NTN)NNF)N)__name__ __module__ __qualname____doc__ __slots__rIrJrKr;rQ classmethodr`rhropropertyrqrr __classcell__rrrCrr1js"% $ `   r1)rcZ dns.exceptionrZ dns.immutableZ dns.rdatar=ranger rIrJrKrjrirlrkrrr#r(r,r0Z immutableZrdataZRdatar1rrrrs&