U
    <g                     @   s   d dl Z d dlmZ d dlmZmZ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e dddZde	jeejdddZdS )    N)datetime)AnyDict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-w101_d3s/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   >   sl       

               )	info_dictr   strictr   c                 C   sr   z| | }W n t k
r"   Y d S X z t|tjrBtj||dW S W n tjk
rZ   Y nX td|t	| d S )Nr3   zBKey %s in info dict has value %s, which is not a valid date string)
r   r   r   r   Zparse_pdf_dater   ZPdfReadErrorloggerwarningrepr)r2   r   r3   Zdate_strr   r   r   _read_date_from_dictn   s    r8   T)r2   r3   r   c              	   C   s   i }dD ]8}zt | d|   ||< W q tk
r>   Y qX qt| d|d}|d k	r`||d< t| d|d}|d k	r~||d< d| krt | d d	|d
< tjf |S )N)r+   r,   r-   r.   /r&   r4   r/   r%   r)   r(   r'   r0   )r   r+   r   r8   splitr
   DocumentMetadata)r2   r3   kwargsZs_entryZcreation_dateZmod_dater   r   r   r      s&      )F)T)loggingr   typingr   r   r   r   r    Zpyhanko.pdf_utilsr   r    r
   __all__	getLogger__name__r5   ZDictionaryObjectr   Z
MetaStringboolr   r!   r;   r   r8   r   r   r   r   r   <module>   sJ   
 1    