U
    c                     @   s   d dl Z d dlmZ d dlmZmZ d dlZd dlmZmZ ddl	m
Z
 ddgZe eZejee
jeed	d
dZejeeeedf eedddZde
jejeedddZejeee dddZeje
jdddZdS )    N)datetime)OptionalUnion)genericmisc   )modelupdate_info_dictview_from_info_dict)
dictionarykeymeta_strexisting_onlyreturnc                 C   sr   t |tjr|j}nt |tr$|}ndS t|}z| | }||k}W n tk
r`   | }Y nX |rn|| |< |S )NF)
isinstancer   ZStringWithLanguagevaluestrr   TextStringObjectKeyError)r   r   r   r   stringZpdf_str	old_valuemod r   C/tmp/pip-unpacked-wheel-0kb_yl26/pyhanko/pdf_utils/metadata/info.py_write_meta_string   s    

r   )r   r   	meta_dater   r   c                 C   sT   t |tr|}n|dkr*tjt d}ndS |r:|| krLt|| |< dS dS d S )Nnow)tzFT)r   r   r   tzlocalZget_localzoner   Zpdf_date)r   r   r   r   r   r   r   r   _write_meta_date(   s    
r   F)metainfoonly_update_existingr   c              	   C   s  t |d| j|d}tj}z,|d }||krBt| d| }d}W n& ttfk
rj   t|}d}Y nX ||d< | jr~|S |t	|d| j
|dO }|t	|d| j|dO }|t	|d| j|dO }|t	|d	| j|dO }|t |d
| j|dO }| jrtd| j|d< d}|S )N/ModDate)r   z	/Producerz; Tz/Titlez/Authorz/Subjectz/Creator/CreationDate,	/Keywords)r   last_modifiedr   ZVENDORr   r   r   	TypeErrorZxmp_unmanagedr   titleauthorsubjectcreatorcreatedkeywordsjoin)r    r!   r"   r   ZproducerZproducer_stringr   r   r   r	   9   sj      

          )	info_dictr   r   c                 C   st   z| | }W n t k
r"   Y d S X z"t|tjtjfrDt|W S W n tjk
r\   Y nX t	d|t
| d S )NzBKey %s in info dict has value %s, which is not a valid date string)r   r   r   r   ZByteStringObjectZparse_pdf_dater   ZPdfReadErrorloggerwarningrepr)r0   r   Zdate_strr   r   r   _read_date_from_dictm   s"    
 r4   )r0   r   c              	   C   s   i }dD ]8}zt | d|   ||< W q tk
r>   Y qX qt| d}|d k	r\||d< t| d}|d k	rv||d< d| krt | d d|d	< tjf |S )
N)r)   r*   r+   r,   /r$   r-   r#   r'   r&   r%   r.   )r   r)   r   r4   splitr   DocumentMetadata)r0   kwargsZs_entryZcreation_dateZmod_dater   r   r   r
      s    

)F)loggingr   typingr   r   r   Zpyhanko.pdf_utilsr   r    r   __all__	getLogger__name__r1   ZDictionaryObjectr   Z
MetaStringboolr   r   r7   r	   r4   r
   r   r   r   r   <module>   s@   
      4 