
    mh*                        d Z ddlZddlmZ ddlmZmZmZmZm	Z	 ddl
mZ  G d de          Z G d	 d
e          Z G d dej                  Z G d dej                  Z G d de          Z eed            G d de          Z ee            G d de          Z ee            G d de          Z ee           dZdZ G d de          Z ee           d Zd Zd Zd+dZd Zd!Z G d" d#e          Z eed$            G d% d&e          Z  ee d'            G d( d)e          Z! ee!d*           dS ),z&Definitions and behavior for vCard 3.0    N   )behavior)ContentLineregisterBehaviorbackslashEscape
basestringstr_stringToTextValuesc                   B    e Zd Z	 	 ddZed             Zd Zd Zd ZdS )	Name c                 L    || _         || _        || _        || _        || _        dS zK
        Each name attribute can be a string or a list of strings.
        Nfamilygiven
additionalprefixsuffix)selfr   r   r   r   r   s         M/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/vobject/vcard.py__init__zName.__init__   s+    
 
$    c                 j    t          |           t          t          fv rd                    |           S | S )=
        Turn a string or array value into a string.
         typelisttuplejoin)vals    r   toStringzName.toString   s.    
 99u%%88C== 
r   c                 h     d}d                      fd|D                       }t          |          S )N)r   r   r   r   r   r   c              3   ^   K   | ]'}                     t          |                    V  (d S Nr$   getattr.0r#   r   s     r   	<genexpr>zName.__str__.<locals>.<genexpr>%   s9      NNSt}}WT3%7%788NNNNNNr   )r"   r	   )r   	eng_orderouts   `  r   __str__zName.__str__#   s:    I	hhNNNNINNNNNCyyr   c                 P    d                     |                                           S )Nz<Name: {0!s}>)formatr/   r   s    r   __repr__zName.__repr__(   s    %%dllnn555r   c                     	 | j         |j         k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S #  Y dS xY wNFr   r   others     r   __eq__zName.__eq__+   sq    	K5</ 0J%+-0Ou'770 K5</0 K5</	1
	55s   AA AN)r   r   r   r   r   )	__name__
__module____qualname__r   staticmethodr$   r/   r3   r8    r   r   r   r      sv        BD	 	 	 	   \  
6 6 6    r   r   c                   L    e Zd Z	 	 ddZedd            ZdZdZd Zd Z	d	 Z
d
S )Addressr   c                 h    || _         || _        || _        || _        || _        || _        || _        dS r   boxextendedstreetcityregioncodecountry)r   rD   rE   rF   rG   rH   rB   rC   s           r   r   zAddress.__init__7   s9    
  		r   
c                 j    t          |           t          t          fv r|                    |           S | S )r   r   )r#   	join_chars     r   r$   zAddress.toStringD   s0    
 99u%%>>#&&&
r   )rB   rC   rD   )rE   rF   rG   c                      d                      fd j        D                       }t           fd j        D                       }| dj        | z  } j        r |d                      j                  z   z  }|S )NrI   c              3   ~   K   | ]7}t          |                              t          |                    V  8d S r'   )r)   r$   r*   s     r   r,   z"Address.__str__.<locals>.<genexpr>Q   sd       G G!743E3EG$--c(:(:;; G G G G G Gr   c              3   `   K   | ](}                     t          |          d           V  )dS )r   Nr(   r*   s     r   r,   z"Address.__str__.<locals>.<genexpr>S   sO       3 3  wtS'9'93?? 3 3 3 3 3 3r   z
{0!s}, {1!s} {2!s})r"   linesr!   one_liner1   rH   r$   )r   rO   rP   s   `  r   r/   zAddress.__str__P   s    		 G G G G%)ZG G G G G 3 3 3 3$(M3 3 3 3 3.'.99< 	8TDMM$,7777Er   c                 ,    d                     |           S )Nz<Address: {0!s}>)r1   r2   s    r   r3   zAddress.__repr__Z   s    !((...r   c                     	 | j         |j         k    o_| j        |j        k    oO| j        |j        k    o?| j        |j        k    o/| j        |j        k    o| j        |j        k    o| j        |j        k    S #  Y dS xY wr5   rA   r6   s     r   r8   zAddress.__eq__]   s    		H	) 2MU^32K5</2 I+2 K5</	2
 I+2 LEM13	55s   A/A2 2A7N)r   r   r   r   r   r   r   )rI   )r9   r:   r;   r   r<   r$   rO   rP   r/   r3   r8   r=   r   r   r?   r?   6   s        ;=.0       \ *E)H  / / /
 
 
 
 
r   r?   c                   F    e Zd ZdZdZdZed             Zed             ZdS )VCardTextBehaviorz
    Provide backslash escape encoding/decoding for single valued properties.

    TextBehavior also deals with base64 encoding if the ENCODING parameter is
    explicitly set to BASE64.
    TBc                    |j         rd|j        v r&|j                            d           | j        |_        t          |dd          }|rmt          |j        t                    r t          j
        |j        d          |_        nRt          j
        |j                            d          d          |_        nt          |j                  d         |_        d|_         dS dS )a  
        Remove backslash escaping from line.valueDecode line, either to remove
        backslash espacing, or to decode base64 encoding. The content line should
        contain a ENCODING=b for base64 encoding, but Apple Addressbook seems to
        export a singleton parameter of 'BASE64', which does not match the 3.0
        vCard spec. If we encouter that, then we transform the parameter to
        ENCODING=b
        BASE64encoding_paramNbase64utf-8r   F)encodedsingletonparamsremovebase64stringrX   r)   
isinstancevaluebytescodecsdecodeencoder   clslineencodings      r   rc   zVCardTextBehavior.decodev   s     < 	!4///$++H555&)&6#t%5t<<H ?dj%00 U!'tz8!D!DDJJ!'tz/@/@/I/I8!T!TDJJ/
;;A>
 DLLL	! 	!r   c                    |j         st          |dd          }|r|                                | j        k    rt	          |j        t                    rGt          j        |j        d          	                    d          
                    dd          |_        n_t          j        |j                            |          d          	                    d          |_        nt          |j                  |_        d|_         dS dS )z.
        Backslash escape line.value.
        rX   NrY   rZ   rI   r   T)r[   r)   upperr^   r_   r`   ra   rb   rd   rc   replacer   re   s      r   rd   zVCardTextBehavior.encode   s    
 | 		 t%5t<<H 9HNN,,0@@@dj%00 f!'tz8!D!D!K!KG!T!T!\!\]ace!f!fDJJ!'tz/@/@/J/JH!U!U!\!\]d!e!eDJJ,TZ88
DLLL		  		 r   N)	r9   r:   r;   __doc__
allowGroupr^   classmethodrc   rd   r=   r   r   rT   rT   l   s^          JL! ! [!.     [     r   rT   c                       e Zd ZdZeZdS )VCardBehaviorTN)r9   r:   r;   rm   rT   defaultBehaviorr=   r   r   rp   rp      s        J'OOOr   rp   c                   X    e Zd ZdZdZdZdZdZdZddd	dd
d
d
d
d
d
d
dZ	e
d             ZdS )VCard3_0z
    vCard 3.0 behavior.
    VCARDzvCard 3.0, defined in rfc2426z3.0T)versionprodiduid)r   r   N)r   NN)r   r   N)r   NN)NFNVERSIONPRODIDLABELUIDADRORGPHOTO
CATEGORIESGEOc                 |    t          |d          s+|                    t          dg | j                             dS dS )z
        Create PRODID, VERSION, and VTIMEZONEs if needed.

        VTIMEZONEs will need to exist whenever TZID parameters exist or when
        datetimes with tzinfo exist.
        ru   rz   N)hasattraddr   versionString)rf   objs     r   generateImplicitParametersz#VCard3_0.generateImplicitParameters   sJ     sI&& 	CGGK	2s/@AABBBBB	C 	Cr   N)r9   r:   r;   rl   namedescriptionr   isComponent	sortFirstknownChildrenrn   r   r=   r   r   rs   rs      s          D1KMK,I"%""%%%%%%% M C C [C C Cr   rs   T)defaultc                       e Zd Zd ZdZdS )ry   zFormatted nameNr9   r:   r;   r   r   r=   r   r   ry   ry      s        D"KKKr   ry   c                       e Zd Zd ZdZdS )LabelzFormatted addressNr   r=   r   r   r   r      s        D%KKKr   r   c                       e Zd Zd ZdZdS )r   zGeographical locationNr   r=   r   r   r   r      s        D)KKKr   r   gd~QJc                   B    e Zd Zd ZdZed             Zed             ZdS )Photo
Photographc                 P    d                     t          |j                            S )Nz  (BINARY PHOTO DATA at 0x{0!s}) )r1   idr`   )rf   rg   s     r   	valueReprzPhoto.valueRepr   s    188DJHHHr   c                 R    t           rt          }t          j        ||||g|R i | dS )z
        Apple's Address Book is *really* weird with images, it expects
        base64 data to have very specific whitespace.  It seems Address Book
        can handle PHOTO if it's not wrapped, so don't wrap it.
        N)wacky_apple_photo_serializeREALLY_LARGErT   	serialize)rf   r   buf
lineLengthvalidateargskwargss          r   r   zPhoto.serialize   s>     ' 	&%J#Cj(TTTTTVTTTTTr   N)r9   r:   r;   r   r   rn   r   r   r=   r   r   r   r      sZ        DKI I [I U U [U U Ur   r   c                 Z    t          |           }t          |          dk    r|d         S |S )Nr   r   )r   len)string
stringLists     r   toListOrStringr      s0    #F++J
:!!}r   c                 :    d t          | dd          D             S )zC
    Return a list of strings or lists from a Name or Address.
    c                 ,    g | ]}t          |          S r=   )r   )r+   is     r   
<listcomp>zsplitFields.<locals>.<listcomp>   s2     I I I!N1 I I Ir   ;)listSeparatorcharListr
   )r   s    r   splitFieldsr      s8    I IvS3GGGI I I Ir   c                 6    t          | t                    r| gS | S r'   )r_   r   )stringOrLists    r   toListr     s"    ,
++ ~r   c                     g }|d | D             }nT|D ]Q}d t          t          | |                    D             }|                    d                    |                     Rd                    |          S )z
    Turn an object's fields into a ';' and ',' seperated string.

    If order is None, obj should be a list, backslash escape each field and
    return a ';' separated string.
    Nc                 ,    g | ]}t          |          S r=   r   r+   r#   s     r   r   z#serializeFields.<locals>.<listcomp>  s     6663/#&&666r   c                 ,    g | ]}t          |          S r=   r   r   s     r   r   z#serializeFields.<locals>.<listcomp>  s,      =  =  = 4 4  =  =  =r   ,r   )r   r)   appendr"   )r   orderfieldsfieldescapedValueLists        r   serializeFieldsr   	  s     F}66#666 	6 	6E =  = &wsE':': ; ; =  =  =MM#((#344555588Fr   r   rA   c                   B    e Zd ZdZdZed             Zed             ZdS )NameBehaviorz
    A structured name.
    Tc                     | j         r| S d| _         t          di t          t          t          t          | j                                      | _        | S )z-
        Turn obj.value into a Name.
        Tr=   )isNativer   dictzip
NAME_ORDERr   r`   r   s    r   transformToNativezNameBehavior.transformToNative&  sP    
 < 	JII4JCI0F0F G GHHII	
r   c                 R    d| _         t          | j        t                    | _        | S )z>
        Replace the Name in obj.value with a string.
        F)r   r   r`   r   r   s    r   transformFromNativez NameBehavior.transformFromNative1  s#    
 #CIz::	
r   Nr9   r:   r;   rl   	hasNativer<   r   r   r=   r   r   r   r      Y          I  \   \  r   r   rx   c                   B    e Zd ZdZdZed             Zed             ZdS )AddressBehaviorz
    A structured address.
    Tc                     | j         r| S d| _         t          di t          t          t          t          | j                                      | _        | S )z1
        Turn obj.value into an Address.
        Tr=   )r   r?   r   r   ADDRESS_ORDERr   r`   r   s    r   r   z!AddressBehavior.transformToNativeB  sP    
 < 	JOOd3}k#)6L6L#M#MNNOO	
r   c                 R    d| _         t          | j        t                    | _        | S )zA
        Replace the Address in obj.value with a string.
        F)r   r   r`   r   r   s    r   r   z#AddressBehavior.transformFromNativeM  s#    
 #CI}==	
r   Nr   r=   r   r   r   r   <  r   r   r   r~   c                   B    e Zd ZdZdZed             Zed             ZdS )OrgBehaviorzD
    A list of organization values and sub-organization values.
    Tc                 X    | j         r| S d| _         t          | j                  | _        | S )z-
        Turn obj.value into a list.
        T)r   r   r`   r   s    r   r   zOrgBehavior.transformToNative^  s0    
 < 	J	**	
r   c                 X    | j         s| S d| _         t          | j                  | _        | S )z>
        Replace the list in obj.value with a string.
        F)r   r   r`   r   s    r   r   zOrgBehavior.transformFromNativei  s0    
 | 	J#CI..	
r   Nr   r=   r   r   r   r   X  sY          I  \   \  r   r   r   r'   )"rl   rb   r   r   baser   r   r   r   r	   	icalendarr   objectr   r?   BehaviorrT   rp   rs   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   r   r   <module>r      s   , ,        R R R R R R R R R R R R R R ) ) ) ) ) )% % % % %6 % % %P1 1 1 1 1f 1 1 1l0  0  0  0  0 ) 0  0  0 f( ( ( ( (H% ( ( (
 C  C  C  C  C}  C  C  CB  4 ( ( ( (# # # # #	 # # #     & & & & & & & &     * * * * *- * * *      # U U U U U U U U$       I I I     $ C
    =   2  s # # #    m   2  % ( ( (    -   6  e $ $ $ $ $r   