U
    ª6#^Â  ã                   @   s¢   d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	Z	ddlZej
d dkrZeZdZedfedfedfed	fed
fedfedfdœZG dd„ deƒZdS )z:Class to show and manipulate user fields in odf documents.é    N)ÚUserFieldDecl)ÚOFFICENS)Úloadé   zutf-8Úvaluez
date-valuez
time-valuezboolean-valuezstring-value)ÚfloatZ
percentageÚcurrencyÚdateÚtimeZbooleanÚstringc                   @   sd   e Zd ZdZdZdZddd„Zdd„ Zdd„ Zd	d
„ Z	ddd„Z
dd„ Zdd„ Zdd„ Zdd„ ZdS )Ú
UserFieldsz&List, view and manipulate user fields.Nc                 C   s–   |dks@dt |ƒks@dt |ƒks@dt |ƒks@t|ƒtdƒks@t‚|dks€dt |ƒks€dt |ƒks€dt |ƒks€t|ƒtdƒks€t‚|| _|| _d| _dS )a  Constructor

        @param src open file in binary mode: source document,
        or filename as a unicode string, or None for stdin.
        @param dest opendile in binary mode: destination document,
        or filename as a unicode string, or None for stdout.
        NÚrbÚBufferedReaderÚBytesIOÚ ÚwbÚBufferedWriter)ÚreprÚtypeÚAssertionErrorÚsrc_fileÚ	dest_fileÚdocument)ÚselfÚsrcÚdest© r   úM/var/www/html/UseVoiceDocker/env/lib/python3.8/site-packages/odf/userfield.pyÚ__init__9   s
    @@zUserFields.__init__c                 C   s€   t jd dkr(t| jtƒsBt| jtjƒsBt jd dkr^t| jtƒr^t 	| j¡spt
d| j ƒ‚n| jd krpt j| _t| jƒ| _d S )Nr   r   é   z%s is no odt file.)ÚsysÚversion_infoÚ
isinstancer   ÚstrÚioÚIOBaseÚ
basestringÚzipfileÚ
is_zipfileÚ	TypeErrorÚstdinr   r   ©r   r   r   r   ÚloaddocG   s    B
zUserFields.loaddocc                 C   s*   | j d kr| j d¡ n| j | j ¡ d S )Nú-)r   r   Úsaver+   r   r   r   ÚsavedocR   s    
zUserFields.savedocc                 C   s   dd„ |   ¡ D ƒS )zlList (extract) all known user-fields.

        @return list of user-field names as unicode strings.
        c                 S   s   g | ]}|d  ‘qS )r   r   ©Ú.0Úxr   r   r   Ú
<listcomp>_   s     z*UserFields.list_fields.<locals>.<listcomp>©Úlist_fields_and_valuesr+   r   r   r   Úlist_fieldsZ   s    zUserFields.list_fieldsc                 C   sx   |   ¡  g }| j t¡}|D ]V}| d¡}|dkr>| d¡}n
| d¡}| d¡}|dksb||kr| |||f¡ q|S )a(  List (extract) user-fields with type and value.

        @param field_names list of field names as unicode strings
        to show, or None for all.

        @return list of tuples (<field name>, <field type>, <value>)
        as type (unicode string, stringified type, unicode string).

        Ú	valuetyper   Ústringvaluer   ÚnameN)r,   r   ÚgetElementsByTyper   ÚgetAttributeÚappend)r   Úfield_namesZfound_fieldsÚ
all_fieldsÚfÚ
value_typer   Ú
field_namer   r   r   r5   a   s    



þz!UserFields.list_fields_and_valuesc                 C   s   dd„ |   |¡D ƒS )z¿Extract the contents of given field names from the file.

        @param field_names list of field names as unicode strings

        @return list of field values as unicode strings.

        c                 S   s   g | ]}|d  ‘qS )r   r   r0   r   r   r   r3   „   s     z*UserFields.list_values.<locals>.<listcomp>r4   )r   r=   r   r   r   Úlist_values|   s    zUserFields.list_valuesc                 C   s0   t |ƒt dƒkst‚|  |g¡}|s(dS |d S )zÆExtract the contents of this field from the file.
        @param field_name unicode string: name of a field
        @return field value as a unicode string or None if field does not exist.

        r   Nr   )r   r   rB   )r   rA   Úvaluesr   r   r   Úget†   s
    zUserFields.getc                 C   s>   t |ƒt dƒkst‚|  |g¡}|s(dS |d \}}}||fS )zòExtract the type and contents of this field from the file.
        @param field_name unicode string: name of a field
        @return tuple (<type>, <field-value>) as a pair of unicode strings
        or None if field does not exist.

        r   Nr   )r   r   r5   )r   rA   Úfieldsr@   r   r   r   r   Úget_type_and_value’   s    zUserFields.get_type_and_valuec                 C   sr   |   ¡  | j t¡}|D ]L}| d¡}||kr| d¡}| |¡}|dkrX| d|¡ q| d|¡ q|  ¡  dS )z¤Set the value of user fields. The field types will be the same.

        data ... dict, with field name as key, field value as value

        Returns None

        r9   r7   r   r8   r   N)r,   r   r:   r   r;   rD   ZsetAttributer/   )r   Údatar>   r?   rA   r@   r   r   r   r   Úupdate    s    


zUserFields.update)NN)N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r,   r/   r6   r5   rB   rD   rF   rH   r   r   r   r   r   2   s   


r   )rL   r    r'   Zodf.textr   Zodf.namespacesr   Zodf.opendocumentr   r$   r!   r#   ÚunicodeZOUTENCODINGZVALUE_TYPESÚobjectr   r   r   r   r   Ú<module>   s$   ù