
    Ng              
       j   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                            ej                            e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j        fdZ ej                    	 ddede
eeeef                           defd            Z ej                    de	e         fd            ZdS )zThe Language class.    N)	dataclass)IterableListOptionalTuplezlanguages.dbF)check_same_threadc                       e Zd ZdS )LanguageNotFoundErrorN)__name__
__module____qualname__     K/var/www/html/ai-engine/env/lib/python3.11/site-packages/iso639/language.pyr
   r
      s        Dr   r
   T)frozenc                   ,    e Zd ZU dZdZeed<   eed<   dS )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7%IJJJMMMMMr   r   c                   l   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dS )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    DJr   c                 L    t          |t                    o| j        |j        k    S r.   )
isinstancer   r   )r0   others     r   __eq__zLanguage.__eq__S   s     %**HtzU[/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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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8I. JJJKKKKKKJJJJJJ
IIIKKK
IIILLL d   #        It I I I I (6 (6 (6 [(6T = = = [= A A A [A A A A [A @ @ @ [@ 6 6 6 [6 6 6r   r   tablefieldxr,   c                 H    t                               d|  d| d|f          S )NzSELECT * FROM z where z = ?)_DBexecute)r`   ra   rb   s      r   	_query_dbrf      s,    ;;AAAeAAAA4HHHr   rL   rM   c                    |J|D ]4\  }}t          |||                                           }|r
|d          n5t          | d          n| dt          dt          j        ffd} |d                                          } |d                                          } |d	                                          } |d
                                          }	|r|d         nd}
|	r|	d         nd}|	r|	d         nd}|	r|	d         nd}|	r8t          j                            |	d         d          	                                nd}|rK|d         }|d         }|d         }|d         }|d         }d}|d         |d         }fd|D             pd}nd}d}d}d}d}d}|	d         d}d}t          |||||||||
||||          }|S )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                 :    | 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6666D%000r   r8   rD   ri   r@               z%Y-%m-%d   A      c                 V    g | ]%\  }}}|cxk    r|k    n t          ||          &S r   )r   ).0_
print_nameinverted_nameref_names       r   
<listcomp>z!_get_language.<locals>.<listcomp>   sR     
 
 
,:}
;;;;m;;;; ]++;;;r   IRr   )rf   fetchoner
   r   sqlite3Cursorfetchallr[   strptimer\   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#   r%   r&   languager   rz   s                           @@r   rI   rI      s   2 ' 	 	LE5ueZ88AACCF q	 (DDD    1C 1GN 1 1 1 1 1 1 g&&//11J"l<0099;;O&,'788AACC#|M22;;==.AK'**tM+;E$Q''M.>H'**D+;E$Q''M 	""#3A#6
CCHHJJJ   AA11!}a=Q-
 
 
 
0?
 
 
  	 	 #A&##)#  H$ Or   c                      d d t                               d                                          D             D             S )Nc                 ,    g | ]}t          |          S r   rH   )rv   r   s     r   r{   z&_get_all_languages.<locals>.<listcomp>  s0        	e  r   c                     g | ]
}|d          S )r   r   )rv   rows     r   r{   z&_get_all_languages.<locals>.<listcomp>  s    WWWc!fWWWr   zSELECT Id FROM codes)rd   re   r   r   r   r   _get_all_languagesr     sJ     WW4J(K(K(T(T(V(VWWW   r   r.   )r   r[   	functoolsosr   dataclassesr   typingr   r   r   r   connectpathjoindirnamerealpath__file__rd   	Exceptionr
   r   r   r   r   rf   	lru_cacherI   r   r   r   r   <module>r      sO          				  ! ! ! ! ! ! 2 2 2 2 2 2 2 2 2 2 2 2 goGLL!1!1(!;!;<<nMM  	 	 	 	 	I 	 	 	 $        $}6 }6 }6 }6 }6 }6 }6 }6@IS I I I I I I I HLf ff"*8E#s(O+D"Eff f f fR DN      r   