o
    ûi>…  ã                   @   s‚   d Z ddlZddlmZmZmZ ddlmZmZmZm	Z	 edƒZ
G dd„ deeƒZG d	d
„ d
eeƒZdd„ ZG dd„ deeƒZdS )z PhoneMetadata object definitionsé    Né   )ÚUnicodeMixinÚImmutableMixinÚmutating_method)ÚuÚunicodÚrprÚforce_unicodeÚ001c                   @   sR   e Zd ZdZe						ddd„ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚNumberFormatzERepresentation of way that a phone number can be formatted for outputNc                 C   sd   t |ƒ| _t |ƒ| _g | _|d urdd„ |D ƒ| _t |ƒ| _|d ur(t|ƒ| _nd | _t |ƒ| _d S )Nc                 S   ó   g | ]}t |ƒ‘qS © )r	   )Ú.0Úpr   r   úz/var/www/snowflake_co_dev_github/snow_flake_back_end_deploy/env/lib/python3.10/site-packages/phonenumbers/phonemetadata.pyÚ
<listcomp>D   ó    z)NumberFormat.__init__.<locals>.<listcomp>)r	   ÚpatternÚformatÚleading_digits_patternÚnational_prefix_formatting_ruleÚboolÚ(national_prefix_optional_when_formattingÚ%domestic_carrier_code_formatting_rule)Úselfr   r   r   r   r   r   r   r   r   Ú__init__   s   



zNumberFormat.__init__c                 C   sp   |j dur	|j | _ |jdur|j| _| j |j¡ |jdur"|j| _|jdur+|j| _|jdur6|j| _dS dS )zAMerge information from another NumberFormat object into this one.N)r   r   r   Úextendr   r   r   ©r   Úotherr   r   r   Ú
merge_froml   s   




ÿzNumberFormat.merge_fromc                 C   ó   t |tƒsdS t| ƒt|ƒkS ©NF)Ú
isinstancer   Úreprr   r   r   r   Ú__eq__z   ó   
zNumberFormat.__eq__c                 C   ó   |   |¡ S ©N©r$   r   r   r   r   Ú__ne__   ó   zNumberFormat.__ne__c                 C   ó   t | ƒS r'   ©Ústr©r   r   r   r   Ú__repr__‚   ó   zNumberFormat.__repr__c                 C   s¸   t dƒt| jƒt| jƒf }| jr$|t dƒt dƒ dd„ | jD ƒ¡ 7 }| jd ur4|t dƒt| jƒ 7 }| jd urD|t dƒt| jƒ 7 }| j	d urT|t dƒt| j	ƒ 7 }|t d	ƒ7 }|S )
Nz"NumberFormat(pattern=%s, format=%sz, leading_digits_pattern=[%s]ú, c                 S   r   r   )r   )r   Úldr   r   r   r   ‹   r   z,NumberFormat.__unicode__.<locals>.<listcomp>z$, national_prefix_formatting_rule=%sz-, national_prefix_optional_when_formatting=%sz*, domestic_carrier_code_formatting_rule=%sú))
r   r   r   r   r   Újoinr   r   r-   r   ©r   Úresultr   r   r   Ú__unicode__…   s   ÿ


zNumberFormat.__unicode__)NNNNNN©Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r$   r)   r/   r7   r   r   r   r   r      s    úOr   c                   @   sN   e Zd ZdZe				ddd„ƒZdd„ Zdd„ Zd	d
„ Zdd„ Z	dd„ Z
dS )ÚPhoneNumberDescz=Class representing the description of a set of phone numbers.Nc                 C   s<   t |ƒ| _t |ƒ| _|d u rd}|| _|d u rd}|| _d S )Nr   )r	   Únational_number_patternÚexample_numberÚpossible_lengthÚpossible_length_local_only)r   r>   r?   r@   rA   r   r   r   r   ˜   s   
	


zPhoneNumberDesc.__init__c                 C   s,   |j dur	|j | _ |jdur|j| _dS dS )zDMerge information from another PhoneNumberDesc object into this one.N)r>   r?   r   r   r   r   r   Â   s
   

ÿzPhoneNumberDesc.merge_fromc                 C   r    r!   )r"   r=   r#   r   r   r   r   r$   É   r%   zPhoneNumberDesc.__eq__c                 C   r&   r'   r(   r   r   r   r   r)   Î   r*   zPhoneNumberDesc.__ne__c                 C   r+   r'   r,   r.   r   r   r   r/   Ñ   r0   zPhoneNumberDesc.__repr__c                 C   sÈ   t dƒ}t dƒ}| jd ur|t dƒ|t| jƒf 7 }t dƒ}| jd ur4|t dƒ|t| jƒf 7 }t dƒ}| jrH|t dƒ|t| jƒf 7 }t dƒ}| jr\|t dƒ|t| jƒf 7 }t dƒ}|t dƒ7 }|S )	NzPhoneNumberDesc(Ú z%snational_number_pattern=%sr1   z%sexample_number=%sz%spossible_length=%sz%spossible_length_local_only=%sr3   )r   r>   r   r?   r@   ÚtuplerA   )r   r6   Úsepr   r   r   r7   Ô   s    

zPhoneNumberDesc.__unicode__)NNNNr8   r   r   r   r   r=   –   s    ü)r=   c                 C   s4   | d u r
|d u r
dS | d u s|d u rdS | j |j kS )NTF)r>   )ÚleftÚrightr   r   r   Ú_same_patternè   s
   rG   c                   @   s  e Zd ZdZe ¡ Zi Zi Zi Z	i Z
i Zi Zeddd„ƒZeddd„ƒZedd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d„ƒZdd„ Zdd„ Zdd„ Zdd„ ZdS )!ÚPhoneMetadataa8  Class representing metadata for international telephone numbers for a region.

    This class is hand created based on phonemetadata.proto. Please refer to that file
    for detailed descriptions of the meaning of each field.

    WARNING: This API isn't stable. It is considered libphonenumber-internal
    and can change at any time. We only declare it as public for easy
    inclusion in our build tools not in this package.  Clients should not
    refer to this file, we do not commit to support backwards-compatibility or
    to warn about breaking changes.

    Nc                 C   óJ   | j  |d ¡}|d ur| j ¡  ||ƒ d | j |< | j ¡  | j ||¡S r'   )Ú_region_availableÚgetÚ_metadata_lockÚacquireÚreleaseÚ_region_metadata©ÚklsÚregion_codeÚdefaultÚloaderr   r   r   Úmetadata_for_region  ó   


z!PhoneMetadata.metadata_for_regionc                 C   rI   r'   )Ú_short_region_availablerK   rL   rM   rN   Ú_short_region_metadatarP   r   r   r   Úshort_metadata_for_region  rV   z'PhoneMetadata.short_metadata_for_regionc                 C   rI   r'   )Ú_country_code_availablerK   rL   rM   rN   Ú_country_code_metadata)rQ   Úcountry_coderS   rT   r   r   r   Úmetadata_for_nongeo_region)  rV   z(PhoneMetadata.metadata_for_nongeo_regionc                 C   s    |t kr
|  |d ¡S |  |d ¡S r'   )ÚREGION_CODE_FOR_NON_GEO_ENTITYr]   rU   )rQ   Úcountry_calling_coderR   r   r   r   Ú#metadata_for_region_or_calling_code4  s   z1PhoneMetadata.metadata_for_region_or_calling_codec                 C   ó   || j |< d S r'   )rJ   ©rQ   rR   rT   r   r   r   Úregister_region_loader;  ó   z$PhoneMetadata.register_region_loaderc                 C   ra   r'   )rW   rb   r   r   r   Úregister_short_region_loader?  rd   z*PhoneMetadata.register_short_region_loaderc                 C   ra   r'   )rZ   )rQ   r\   rT   r   r   r   Úregister_nongeo_region_loaderC  rd   z+PhoneMetadata.register_nongeo_region_loaderc                 C   sh   t | j ¡ ƒD ]\}}|dur||ƒ d| j|< qt | j ¡ ƒD ]\}}|dur1||ƒ d| j|< q dS )z$Force immediate load of all metadataN)ÚlistrJ   ÚitemsrZ   )rQ   rR   Úregion_loaderr\   Ú	cc_loaderr   r   r   Úload_allG  s   
€
€ýzPhoneMetadata.load_allFTc"           #      C   s  || _ || _|| _|| _|| _|| _|| _|	| _|
| _|| _	|| _
|| _|| _|| _|| _|| _|| _t|ƒ| _|| _t|ƒ| _t|ƒ| _t|ƒ| _t|ƒ| _t|ƒ| _t|ƒ| _t| j| jƒ| _g | _|d urk|| _g | _|d uru|| _t|ƒ| _t|ƒ| _ t|ƒ| _!|| _"| | _#|!r| jt$kr¸| jt%j&v r°t%j&| j }"| |"kr®t'd| j| j| jf ƒ‚d S | t%j&| j< d S | j#rá| jt%j(v rÙt%j(| j }"| |"kr×t'd| j| j| jf ƒ‚d S | t%j(| j< d S | jt%j)v rÿt%j)| j }"| |"krýt'd| j| j| jf ƒ‚d S | t%j)| j< d S d S )Nz3Duplicate non-geo PhoneMetadata for %s (from %s:%s)z1Duplicate short PhoneMetadata for %s (from %s:%s)z+Duplicate PhoneMetadata for %s (from %s:%s))*Úgeneral_descÚ
fixed_lineÚmobileÚ	toll_freeÚpremium_rateÚshared_costÚpersonal_numberÚvoipÚpagerÚuanÚ	emergencyÚ	voicemailÚ
short_codeÚstandard_rateÚcarrier_specificÚsms_servicesÚno_international_diallingr	   Úidr\   Úinternational_prefixÚpreferred_international_prefixÚnational_prefixÚpreferred_extn_prefixÚnational_prefix_for_parsingÚnational_prefix_transform_rulerG   Ú"same_mobile_and_fixed_line_patternÚnumber_formatÚintl_number_formatr   Úmain_country_for_codeÚleading_digitsÚleading_zero_possibleÚmobile_number_portable_regionÚ
short_datar^   rH   r[   Ú	ExceptionrX   rO   )#r   r}   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r\   r~   r   r€   r   r‚   rƒ   r…   r†   r‡   rˆ   r‰   rŠ   r‹   Úregisterr   r   r   r   r   T  sv   *






	

	

ÿÿÿêzPhoneMetadata.__init__c                 C   r    r!   )r"   rH   r#   r   r   r   r   r$   5  r%   zPhoneMetadata.__eq__c                 C   r&   r'   r(   r   r   r   r   r)   :  r*   zPhoneMetadata.__ne__c                 C   r+   r'   r,   r.   r   r   r   r/   =  r0   zPhoneMetadata.__repr__c                 C   sj  t dƒ| j| jt| jƒf }|t dƒ| j 7 }| jd ur%|t dƒ| j 7 }| jd ur3|t dƒ| j 7 }| jd urA|t dƒ| j 7 }| j	d urO|t dƒ| j	 7 }| j
d ur]|t dƒ| j
 7 }| jd urk|t dƒ| j 7 }| jd ury|t d	ƒ| j 7 }| jd ur‡|t d
ƒ| j 7 }| jd ur•|t dƒ| j 7 }| jd ur£|t dƒ| j 7 }| jd ur±|t dƒ| j 7 }| jd ur¿|t dƒ| j 7 }| jd urÍ|t dƒ| j 7 }| jd urÛ|t dƒ| j 7 }| jd uré|t dƒ| j 7 }| jd ur÷|t dƒ| j 7 }| jd ur|t dƒt| jƒ 7 }| jd ur|t dƒt| jƒ 7 }| jd ur*|t dƒt| jƒ 7 }| jd ur;|t dƒt| jƒ 7 }| jd urL|t dƒt| jƒ 7 }| jra|t dƒt dƒ tt| jƒ¡ 7 }| jrv|t dƒt dƒ tt| jƒ¡ 7 }| j r€|t dƒ7 }| j!d ur|t dƒ| j! 7 }| j"r™|t dƒ7 }| j#r£|t dƒ7 }| j$r­|t dƒ7 }|t d ƒ7 }|S )!Nz?PhoneMetadata(id='%s', country_code=%r, international_prefix=%sz,
    general_desc=%sz,
    fixed_line=%sz,
    mobile=%sz,
    toll_free=%sz,
    premium_rate=%sz,
    shared_cost=%sz,
    personal_number=%sz,
    voip=%sz,
    pager=%sz,
    uan=%sz,
    emergency=%sz,
    voicemail=%sz,
    short_code=%sz,
    standard_rate=%sz,
    carrier_specific=%sz,
    sms_services=%sz",
    no_international_dialling=%sz',
    preferred_international_prefix=%sz,
    national_prefix=%sz,
    preferred_extn_prefix=%sz$,
    national_prefix_for_parsing=%sz',
    national_prefix_transform_rule=%sz,
    number_format=[%s]z
,
        z,
    intl_number_format=[%s]z ,
    main_country_for_code=Truez,
    leading_digits='%s'z ,
    leading_zero_possible=Truez(,
    mobile_number_portable_region=Truez,
    short_data=Truer3   )%r   r}   r\   r   r~   rl   rm   rn   ro   rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   r   r€   r   r‚   rƒ   r…   r4   Úmapr   r†   r‡   rˆ   r‰   rŠ   r‹   r5   r   r   r   r7   @  s|   ÿ















""zPhoneMetadata.__unicode__r'   ) NNNNNNNNNNNNNNNNNNNNNNNNNNFNFFFT)r9   r:   r;   r<   Ú	threadingÚLockrL   rJ   rW   rZ   rO   rX   r[   ÚclassmethodrU   rY   r]   r`   rc   re   rf   rk   r   r   r$   r)   r/   r7   r   r   r   r   rH   ð   s€    







ß arH   )r<   r   Úutilr   r   r   r   r   r   r	   r^   r   r=   rG   rH   r   r   r   r   Ú<module>   s    |R