
    hl                     2    d dl mZ ddlmZ  G d de      Zy)   )FieldHandler   )resolve_missing_textc                   &    e Zd ZdZd ZdedefdZy)
KeyHandlera  
    Map free-form text to a canonical key using keyMap:
      keyMap: {
        "miejskie": ["miejskie", "cieplik miejski", "z sieci"],
        "gazowe": ["gazowe", "piec gazowy"],
        ...
      }
    First matching variant wins. If no match, returns ifMissing/default.
    c                    d|v r)|d   xs dj                         }| j                  ||      S |j                  d      }|r|j                  |      nd }	|	st	        |      S |	j                  dd      }
| j                  |
|      S )NrawOverride selector T)strip)r   
_map_valueget
select_oner   get_text)self
field_nameconfigsoupmain_values	selectors	extractedtxtselelcontents              :/var/www/extractly/manual_agregator/parser/handlers/key.pyparsezKeyHandler.parse   s    F"-(.B557C??3// jj$%(T__S!d'//++c+.w//    r   r   c                     |j                         }|j                  di       xs i }|j                         D ]1  \  }}|xs g D ]#  }t        |      j                         |v s|c c S  3 t	        |      S )NkeyMap)lowerr   itemsstrr   )r   r   r   content_lowkey_mapfinal_valuevariantsvs           r   r   zKeyHandler._map_value   sl    mmo**Xr*0b%,]]_!Kn"nq6<<>[0&& % &5
 $F++r   N)__name__
__module____qualname____doc__r   r$   dictr    r   r   r   r      s    0,# ,t ,r   r   N)baser   utilsr   r   r/   r   r   <module>r2      s     ( ,  ,r   