
    :Qg              
       6   d Z ddlZddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZ  ej                  ej                  j                  ej                  j                  ej                  j!                  e            d      d      Z G d d	e      Z ed
       G d d             Z ed
       G d d             Zdedededej0                  fdZ ej4                         	 ddede
eeeef         defd       Z ej4                         de	e   fd       Zy)zThe Language class.    N)	dataclass)IterableListOptionalTuplezlanguages.dbF)check_same_threadc                       e Zd Zy)LanguageNotFoundErrorN)__name__
__module____qualname__     L/var/www/html/answerous/venv/lib/python3.12/site-packages/iso639/language.pyr
   r
      s    r   r
   T)frozenc                   *    e Zd ZU dZdZeed<   eed<   y)Namez-Represents an alternative name of a language.)printinvertedr   r   N)r   r   r   __doc__	__slots__str__annotations__r   r   r   r   r      s    7%IJMr   r   c                   J   e Zd ZU dZdZeed<   eed<   eed<   eed<   eed<   eed<   eed	<   eed
<   eed<   ee   ed<   eed<   eed<   eed<   eed<   e	j                  ed<   defdZdefdZedd       Zedd       Zedd       Zedd       Zedd       Zedd       Zy)Languagez.Represents a language in the ISO 639-3 charts.part3part2bpart2tpart1scopetypestatusnamecommentother_namesmacrolanguageretire_reasonretire_change_toretire_remedyretire_dater   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   returnc                 ,    t        | j                        S N)hashr   )selfs    r   __hash__zLanguage.__hash__P   s    DJJr   c                 X    t        |t              xr | j                  |j                  k(  S r.   )
isinstancer   r   )r0   others     r   __eq__zLanguage.__eq__S   s!    %*HtzzU[[/HHr   c                     d}t        ||      S )aM  Return a ``Language`` instance by matching on the user input.

        Parameters
        ----------
        user_input : str
            A language code or name.

        Returns
        -------
        Language

        Notes
        -----
        At a high level, `Language.match` assumes the input is more likely to be
        a language code rather than a language name.
        Beyond that, the precise order in matching is as follows:

        * ISO 639-3 codes (among the active codes)
        * ISO 639-2 (bibliographic) codes
        * ISO 639-2 (terminological) codes
        * ISO 639-1 codes
        * ISO 639-3 codes (among the retired codes)
        * ISO 639-3 reference language names
        * ISO 639-3 alternative language names (the "print" ones)
        * ISO 639-3 alternative language names (the "inverted" ones)
        )codesIdr8   Part2Br8   Part2Tr8   Part1)retirementsr9   r8   Ref_Name
name_index
Print_NamerD   Inverted_Name_get_languagecls
user_inputquery_orders      r   matchzLanguage.matchV   s    >	
 Z55r   c                     t        |d      S )z6Return a ``Language`` instance from an ISO 639-3 code.)r7   rH   rK   rL   s     r   
from_part3zLanguage.from_part3   s     Z);<<r   c                     t        |d      S )zFReturn a ``Language`` instance from an ISO 639-2 (bibliographic) code.)r:   rH   rP   s     r   from_part2bzLanguage.from_part2b        Z)?@@r   c                     t        |d      S )zGReturn a ``Language`` instance from an ISO 639-2 (terminological) code.)r<   rH   rP   s     r   from_part2tzLanguage.from_part2t   rT   r   c                     t        |d      S )z6Return a ``Language`` instance from an ISO 639-1 code.)r>   rH   rP   s     r   
from_part1zLanguage.from_part1   s     Z)>??r   c                     d}t        ||      S )zIReturn a ``Language`` instance from an ISO 639-3 reference language name.)rA   rC   rF   rH   rJ   s      r   	from_namezLanguage.from_name   s    

 Z55r   N)r,   r   )r   r   r   r   r   r   r   r   r   datetimedateintr1   boolr5   classmethodrN   rQ   rS   rV   rX   rZ   r   r   r   r   r      s   8I. JKKJJ
IK
IL d   #  It I (6 (6T = = A A A A @ @ 6 6r   r   tablefieldxr,   c                 >    t         j                  d|  d| d|f      S )NzSELECT * FROM z where z = ?)_DBexecute)r`   ra   rb   s      r   	_query_dbrf      s$    ;;wgeWDAA4HHr   rL   rM   c                 D   |<|D ])  \  }}t        |||       j                         }|s$|d    n t        | d      | dt        dt        j
                  ffd} |d      j                         } |d      j                         } |d	      j                         } |d
      j                         }	|r|d   nd}
|	r|	d   nd}|	r|	d   nd}|	r|	d   nd}|	r1t        j                  j                  |	d   d      j                         nd}|rY|d   }|d   }|d   }|d   }|d   }d}|d   }|d   }|D cg c]  \  }}}||cxk(  r|k(  sn t        ||      ! c}}}xs d}nd}d}d}d}d}d}|	d   }d}d}t        ||||||||||
||||      }|S c c}}}w )a  Create a ``Language`` instance.

    Parameters
    ----------
    user_input : str
        The user-provided language code or name.
    query_order : Iterable[Tuple[str, str], optional
        An iterable of (table, field) pairs to specify query order.
        If not provided, no queries are made and `part3` is assumed to be
        an actual ISO 639-3 code.

    Returns
    -------
    Language

    Raises
    ------
    LanguageNotFoundError
        If `part3` isn't a language name or code
    Nr   z# isn't an ISO language code or namer`   r,   c                 0    | dk(  rdnd}t        | |      S )NmacrolanguagesI_Idr9   )rf   )r`   id_fieldr   s     r   query_for_idz#_get_language.<locals>.query_for_id   s!    "&666D%00r   r8   rD   ri   r@               z%Y-%m-%d   A      IRr   )rf   fetchoner
   r   sqlite3Cursorfetchallr[   strptimer\   r   r   )rL   rM   r`   ra   resultrl   
from_codesfrom_name_indexfrom_macrolanguagesfrom_retirementsr'   r(   r)   r*   r+   r   r   r    r!   r"   r#   ref_namer%   _
print_nameinverted_namer&   languager   s                               @r   rI   rI      sF   2 ' 	LE5ueZ8AACFq			 (. CD  1C 1GNN 1 g&//1J"<099;O&'78AAC#M2;;=.A'*tM+;$Q'M.>'*D+;$Q'M  	""#3A#6
CHHJ  AA11!}a=Q- 1@
 
,:}
;m; ]+
  	 	 #A&##)#H$ OI
s   <$Fc                      t         j                  d      j                         D  cg c]  } | d   	 c} D cg c]  }t        |       c}S c c} w c c}w )NzSELECT Id FROM codesr   )rd   re   rz   rI   )rowr   s     r   _get_all_languagesr     sN     ),4J(K(T(T(VWc!fW 	e Ws
   AAr.   )r   r[   	functoolsosrx   dataclassesr   typingr   r   r   r   connectpathjoindirnamerealpath__file__rd   	Exceptionr
   r   r   r   ry   rf   	lru_cacherI   r   r   r   r   <module>r      sR      	  ! 2 2 gooGGLL!1!1(!;<nM	I 	 $   $}6 }6 }6@IS I I I I HLff"*8E#s(O+D"Eff fR DN  r   