
    !h                         d dl Z ddlmZ ddlmZmZ d d d dddddZ e j                  de j                  	      Z	dd
e
de
fdZd Z G d de      Zy)    N   )FieldHandler   )resolve_missing_textextract_number_and_label)parterzwysoki parterzniski partersuterena	sutereniepiwnica
przyziemieuB   (-?\d+(?:[.,]\d+)?)\s*(?:-|–|—|/|\bdo\b)\s*(-?\d+(?:[.,]\d+)?))flagstokencastc                 v   | y | j                         j                  dd      j                  dd      }|sy |dk(  r	 t        t        |            S |dk(  r	 t        |      S 	 t        |      }t        |      }t        ||z
        dk  r|S |S # t        $ r Y y w xY w# t        $ r Y y w xY w# t        $ r Y y w xY w)N  ,.intfloatg&.>)stripreplacer   r   
ValueErrorabs)r   r   sfis        =/var/www/extractly/manual_agregator/parser/handlers/number.py
_to_numberr       s    }c2&..sC8Au}	uQx=  w	8O!HFAJ%q,1,  		
  		  s;   B 
B #(B, B, 	BB	B)(B),	B87B8c                    |j                  d      xs dj                         }|xs dj                         j                         }t        |      \  }}}|j                  d      r
|r|||d   <   |j                  d      r
|r|||d   <   |j                  dd      }	|j                  d      }
|j                  d	      }|j                  d
      xs dj                         }t	        t
              }|j                  |j                  di              |	r|r|}|j                         D ]<  \  }}t        j                  dt        j                  |       dt        |      |      }> t        j                  |      }|r|j                  d      |j                  d      }}t        ||      }t        ||      }|
r||t!        ||      n|xs |||
<   |r||t#        ||      n|xs |||<   |7|5|dk(  rt#        ||      }n)|dk(  r	||z   dz  }n|dk(  r|}nt!        ||      }n||n|}|Q|rO|j                         D ]<  \  }}||v st        t        |      |      }|j                  d      r
|s|||d   <    n |W|j                  d      xs dj                         }|dk(  rt        d|      }|S |dk(  r|}|S |dk(  rt%        |  d|      d}|S )u  
    Rdzeń parsowania liczby z tekstu:
    - obsługa waluty/etykiety (extract_number_and_label)
    - zakresy (1/4, 1970–1980, 1-4, 1 do 4)
    - specialMap (parter/suterena/…)
    - onNotNumeric: null|zero|keep|raise
    - minField/maxField, rangeMode, cast
    Zwraca liczbę (int/float) lub None. Uzupełnia extracted[minField/maxField/currencyField/labelField] jeśli trzeba.
    r   autor   currencyField
labelField
allowRangeTminFieldmaxField	rangeModemin
specialMapz\br   r   )r   NmaxavgfirstonNotNumericnullzero0keepraisez: non-numeric value: )getlowerr   r   dictDEFAULT_SPECIAL_MAPupdateitemsresubescapestrRANGE_REsearchgroupr    r)   r+   r   )
field_namerawconfig	extractedr   textnumber	label_valcurrencyallow_range	min_field	max_field
range_modespecial_maptext_for_rangekey
mapped_valma_rawb_rawabbehaviors                          r   parse_number_from_textrW   '   s    JJv(&//1DI2$$&D #;3"?FIx zz/"x-5	&)*zz,I*3	&&'**\40K

:&I

:&I**[)2U99;J *+Kvzz,34t*002OCVVr"))C.)9$<c*o~^N  3 OON+771:qwwqz5E5t,A5t,A67mAq	]^]cbc	)$67mAq	]^]cbc	)$}& AYF5(!eq[F7*F AYFm ~$*002OCd{#C
O$?::l+I69If\23  3 ~JJ~.8&??Av$/F M F M  
|+@HIIFM    c                       e Zd Zd Zy)NumberHandlerc                     |j                  d      }|r|j                  |      nd }|r|j                  d      n
t        |      }	t	        ||	||      S )NselectorT)r   )r4   
select_oneget_textr   rW   )
selfrA   rC   soupmain_values	selectorsrD   selelrB   s
             r   parsezNumberHandler.parse{   sM    jj$%(T__S!d)+bkkk%1Ef1M%j#vyIIrX   N)__name__
__module____qualname__re    rX   r   rZ   rZ   z   s    JrX   rZ   )r"   )r:   baser   utilsr   r   r7   compile
IGNORECASEr>   r=   r    rW   rZ   ri   rX   r   <module>rn      sl    	  B !Q" 
 2::I
--
c  .PfJL JrX   