o
    .j*                     @   s  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 deZG d	d
 d
eZG dd dejZG dd dejZG dd deZeedd G dd deZee G dd deZee G dd deZee dZdZG dd deZee dd Zdd Zd d! Zd/d"d#Zd$Zd%ZG d&d' d'eZeed( G d)d* d*eZ ee d+ G d,d- d-eZ!ee!d. dS )0z&Definitions and behavior for vCard 3.0    N   )behavior)ContentLineregisterBehaviorbackslashEscape
basestringstr_stringToTextValuesc                   @   s>   e Zd Z		dddZedd Zdd Zdd	 Zd
d ZdS )Name c                 C   s"   || _ || _|| _|| _|| _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    r   B/home/thesage/.local/lib/python3.10/site-packages/vobject/vcard.py__init__   s
   
zName.__init__c                 C   s   t | ttfv rd| S | S )=
        Turn a string or array value into a string.
         typelisttuplejoin)valr   r   r   toString      
zName.toStringc                    s$   d}d  fdd|D }t|S )N)r   r   r   r   r   r   c                 3   s     | ]}  t |V  qd S Nr    getattr.0r   r   r   r   	<genexpr>%   s    zName.__str__.<locals>.<genexpr>)r   r   )r   	eng_orderoutr   r'   r   __str__#   s   zName.__str__c                 C   s   d |  S )Nz<Name: {0!s}>)formatr+   r'   r   r   r   __repr__(   s   zName.__repr__c                 C   sL   z| j |j ko| j|jko| j|jko| j|jko| j|jkW S    Y dS NFr   r   otherr   r   r   __eq__+   s   



zName.__eq__N)r   r   r   r   r   )	__name__
__module____qualname__r   staticmethodr    r+   r-   r1   r   r   r   r   r      s    

r   c                   @   sH   e Zd Z		dddZedddZdZdZd	d
 Zdd Z	dd Z
dS )Addressr   c                 C   s.   || _ || _|| _|| _|| _|| _|| _dS r   boxextendedstreetcityregioncodecountry)r   r:   r;   r<   r=   r>   r8   r9   r   r   r   r   7   s   
zAddress.__init__
c                 C   s   t | ttfv r|| S | S )r   r   )r   	join_charr   r   r   r    D   r!   zAddress.toString)r8   r9   r:   )r;   r<   r=   c                    s^   d  fdd jD }t fdd jD }|dj| 7 } jr-|d  j 7 }|S )Nr?   c                 3   s*    | ]}t  |r t  |V  qd S r"   )r$   r    r%   r'   r   r   r(   Q   s    
z"Address.__str__.<locals>.<genexpr>c                 3   s"    | ]}  t |d V  qdS )r   Nr#   r%   r'   r   r   r(   S   s    z
{0!s}, {1!s} {2!s})r   linesr   one_liner,   r>   r    )r   rA   rB   r   r'   r   r+   P   s   zAddress.__str__c                 C   s
   d | S )Nz<Address: {0!s}>)r,   r'   r   r   r   r-   Z   s   
zAddress.__repr__c                 C   sd   z+| j |j ko*| j|jko*| j|jko*| j|jko*| j|jko*| j|jko*| j|jkW S    Y dS r.   r7   r/   r   r   r   r1   ]   s    





zAddress.__eq__N)r   r   r   r   r   r   r   )r?   )r2   r3   r4   r   r5   r    rA   rB   r+   r-   r1   r   r   r   r   r6   6   s    

r6   c                   @   s0   e Zd ZdZdZdZedd Zed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                 C   s   |j rBd|jv r|jd | j|_t|dd}|r5t|jtr)t	
|jd|_nt	
|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base64stringrF   r$   
isinstancevaluebytescodecsdecodeencoder
   clslineencodingr   r   r   rQ   v   s   


zVCardTextBehavior.decodec                 C   s   |j sBt|dd}|r7| | jkr7t|jtr(t|jd	d
dd|_nt|j|d	d|_nt|j|_d|_ dS dS )z.
        Backslash escape line.value.
        rF   NrG   rH   r?   r   T)rI   r$   upperrL   rM   rN   rO   rP   rR   rQ   replacer   rS   r   r   r   rR      s    
zVCardTextBehavior.encodeN)	r2   r3   r4   __doc__
allowGrouprL   classmethodrQ   rR   r   r   r   r   rC   l   s    
rC   c                   @   s   e Zd ZdZeZdS )VCardBehaviorTN)r2   r3   r4   rZ   rC   defaultBehaviorr   r   r   r   r\          r\   c                   @   sL   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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                 C   s&   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.
        ra   rf   N)hasattraddr   versionString)rT   objr   r   r   generateImplicitParameters   s   
z#VCard3_0.generateImplicitParametersN)r2   r3   r4   rY   namedescriptionrq   isComponent	sortFirstknownChildrenr[   rs   r   r   r   r   r_      s*    r_   T)defaultc                   @      e Zd Zd ZdZdS )re   zFormatted nameNr2   r3   r4   rt   ru   r   r   r   r   re      r^   re   c                   @   rz   )LabelzFormatted addressNr{   r   r   r   r   r|      r^   r|   c                   @   rz   )rn   zGeographical locationNr{   r   r   r   r   rn      r^   rn   gd~QJc                   @   s,   e Zd Zd ZdZedd Zedd ZdS )Photo
Photographc                 C   s   d t|jS )Nz  (BINARY PHOTO DATA at 0x{0!s}) )r,   idrN   )rT   rU   r   r   r   	valueRepr   s   zPhoto.valueReprc                 O   s*   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_LARGErC   	serialize)rT   rr   buf
lineLengthvalidateargskwargsr   r   r   r      s   "zPhoto.serializeN)r2   r3   r4   rt   ru   r[   r   r   r   r   r   r   r}      s    
r}   c                 C   s    t | }t|dkr|d S |S )Nr   r   )r
   len)string
stringListr   r   r   toListOrString   s   r   c                 C   s   dd t | dddD S )zC
    Return a list of strings or lists from a Name or Address.
    c                 S      g | ]}t |qS r   )r   )r&   ir   r   r   
<listcomp>       zsplitFields.<locals>.<listcomp>;)listSeparatorcharListr	   )r   r   r   r   splitFields   s   r   c                 C   s   t | tr| gS | S r"   )rM   r   )stringOrListr   r   r   toList  s   
r   c                 C   sX   g }|du rdd | D }n|D ]}dd t t| |D }|d| qd|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                 S   r   r   r   r%   r   r   r   r     r   z#serializeFields.<locals>.<listcomp>c                 S   r   r   r   r%   r   r   r   r     r   ,r   )r   r$   appendr   )rr   orderfieldsfieldescapedValueListr   r   r   serializeFields	  s   
r   r   r7   c                   @   ,   e Zd ZdZdZedd Zedd ZdS )NameBehaviorz
    A structured name.
    Tc                 C   4   | j r| S d| _ tdi tttt| j| _| S )z-
        Turn obj.value into a Name.
        TNr   )isNativer   dictzip
NAME_ORDERr   rN   rr   r   r   r   transformToNative&  
    zNameBehavior.transformToNativec                 C      d| _ t| jt| _| S )z>
        Replace the Name in obj.value with a string.
        F)r   r   rN   r   r   r   r   r   transformFromNative1     z NameBehavior.transformFromNativeNr2   r3   r4   rY   	hasNativer5   r   r   r   r   r   r   r          

r   rd   c                   @   r   )AddressBehaviorz
    A structured address.
    Tc                 C   r   )z1
        Turn obj.value into an Address.
        TNr   )r   r6   r   r   ADDRESS_ORDERr   rN   r   r   r   r   r   B  r   z!AddressBehavior.transformToNativec                 C   r   )zA
        Replace the Address in obj.value with a string.
        F)r   r   rN   r   r   r   r   r   r   M  r   z#AddressBehavior.transformFromNativeNr   r   r   r   r   r   <  r   r   rj   c                   @   r   )OrgBehaviorzD
    A list of organization values and sub-organization values.
    Tc                 C   s    | j r| S d| _ t| j| _| S )z-
        Turn obj.value into a list.
        T)r   r   rN   r   r   r   r   r   ^  
   zOrgBehavior.transformToNativec                 C   s    | j s| S d| _ t| j| _| S )z>
        Replace the list in obj.value with a string.
        F)r   r   rN   r   r   r   r   r   i  r   zOrgBehavior.transformFromNativeNr   r   r   r   r   r   X  r   r   rk   r"   )"rY   rP   r   r   baser   r   r   r   r   	icalendarr
   objectr   r6   BehaviorrC   r\   r_   re   r|   rn   r   r   r}   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sB    (63!


