3
d                 @   sZ   d Z ddlmZ ddlmZmZmZ ddlmZm	Z	 ddl
mZ dgZG dd deZdS )	zb
Trig RDF graph serializer for RDFLib.
See <http://www.w3.org/TR/trig/> for syntax specification.
    )defaultdict)TurtleSerializer_GEN_QNAME_FOR_DTVERB)BNodeLiteral)bTrigSerializerc                   sB   e Zd ZdZdZ fddZdd Z fdd	ZdddZ  Z	S )r	   Ztrig    c                sV   |j r4t|j | _|jj| _|jrB| jj|j n|g| _d | _tt| j| d S )N)	Zcontext_awarelistcontextsdefault_context
identifierappendsuperr	   __init__)selfstore)	__class__ A/tmp/pip-build-7vycvbft/rdflib/rdflib/plugins/serializers/trig.pyr      s    
zTrigSerializer.__init__c             C   sf   x`| j D ]V}|| _| j|j tt| _i | _x|D ]}| j| q4W | j	 | j| jf| j
|< qW d S )N)r   r   getQNamer   r   int_references	_subjectsZpreprocessTripleZorderSubjects	_contexts)r   contextZtripler   r   r   
preprocess    s    

zTrigSerializer.preprocessc                s   t t| j  i | _d S )N)r   r	   resetr   )r   )r   r   r   r   ,   s    zTrigSerializer.resetNc             K   s  | j   || _|d k	r|| _n| jjd k	r4| jj| _|d k	rB|| _| j  | j  d}x| jj D ]\}\}}	}
|szqd|
| _	i | _
|| _|	| _| jr|j| jkr| j| j d  nLt|jtr|jj }n| j|j}|d kr|jj }| j| j d|   |  jd7  _xF|D ]>}| j|r,q|r6d}| j|r| r| jd qW |  jd8  _| jd qdW | j  |jtd d S )NTz
{z
%s {   F
z}
)r   streambaser   Z	_spaciousr   startDocumentr   itemsr   Z_serializedr   r   r   writeindent
isinstancer   Zn3r   depthZisDoneZ	statementendDocumentr   )r   r"   r#   encodingZspaciousargsZ	firstTimer   Zordered_subjectsZsubjectsrefZirisubjectr   r   r   	serialize0   sL    


zTrigSerializer.serializez    )NNN)
__name__
__module____qualname__Z
short_nameZindentStringr   r   r   r/   __classcell__r   r   )r   r   r	      s    N)__doc__collectionsr   Z!rdflib.plugins.serializers.turtler   r   r   Zrdflib.termr   r   sixr   __all__r	   r   r   r   r   <module>   s   