
    i}                        d Z ddlmZ ddlZddlZddlmZmZmZm	Z	m
Z
mZmZmZ ddlmZmZmZmZ ddlmZmZ ddlmZ ddlmZmZmZmZ 	 ddlZd	ZdgZ  G d de      Z!y# e$ r dZd
ZY w xY w)z~
HextuplesSerializer RDF graph serializer for RDFLib.
See <https://github.com/ontola/hextuples> for details about the format.
    )annotationsN)IOAnyCallableListOptionalTypeUnioncast)DATASET_DEFAULT_GRAPH_IDConjunctiveGraphDatasetGraph)RDFXSD)
Serializer)BNodeIdentifiedNodeLiteralURIRefTFHextuplesSerializerc                  x     e Zd ZU dZded<   ded<   d fdZddZ	 	 d	 	 	 	 	 	 	 	 	 ddZdd	Zd
 Z	ddZ
 xZS )r   z3
    Serializes RDF graphs to NTriples format.
    z"List[Union[Graph, IdentifiedNode]]contextsr   dumpsc                B   t         rt        j                  d      | _        t        j                  d      | _        t        j                  d      | _        t        j                  dt        j                  j                  d      z   dz         | _	        t        j                  dt        j                  j                  d      z   dz         | _        nAd| _        d| _        d| _        t        j                   | _	        t        j                   | _        t        | | ;  |       S )	Ns	   "localId"s
   "globalId"s   ""   "utf-8localIdglobalId )_HAS_ORJSONorjsonFragmentstr_local_idstr_global_idemptyr   
langStringencodelang_strr   string
xsd_stringsuper__new__)clsstore	__class__s     NC:\Projects\mas-dev\.venv\Lib\site-packages\rdflib/plugins/serializers/hext.pyr-   zHextuplesSerializer.__new__$   s    060MC171OC)/)?CI,2OOs~~,,W55<-CL /5ooszz((11D8/CN  )C *CCI!nn-CL #

|CNS#&s++    c                   |  |  t        |t        t        f      rt        |t              rt        nt        | _        t	        |j                               | _        |j                  r7|j                  | _        | j
                  j                  |j                         n"d | _        nt        | _        |g| _        d | _        t        j                  | |       y N)
isinstancer   r   
graph_typelistr   default_contextappendr   r   __init__)selfr/   s     r1   r:   zHextuplesSerializer.__init__7   s    eg'789%eW5;K O !!12DM$$','<'<$$$U%:%:;'+$#DO"GDM#'D D%(r2   c                N   |t        j                  d       |dvrt        j                  d| d       | j                  j                  du rt	        d      | j
                  D ]  }|D ]  }t        t        t        t        f   | j                  t        u r| j                  n@t        r*t        j                  d| j!                  |      z   dz         n| j!                  |            }| j#                  ||      }||j%                  t        r|n|j'                                  y )NzIbase has no meaning for Hextuples serialization. I will ignore this valueNr   z8Hextuples files are always utf-8 encoded. I was passed: z*, but I'm still going to use utf-8 anyway!Tz>Hextuple serialization can't (yet) handle formula-aware stores")warningswarnr/   formula_aware	Exceptionr   r   r
   strbytesr6   r   r&   r!   r"   r#   _context_str	_hex_linewriter(   )	r;   streambaseencodingkwargscontexttriplecontext_strhls	            r1   	serializezHextuplesSerializer.serializeK   s    MM+
 ?*MM!!)
 +;; ::##t+P 
 }}G! ##u*%  ??e3 

  + #OOC$2C2CG2L,Ls,RS!%!2!27!; ^^FK8>LL{		D# " %r2   c                *   t        |d   t        t        f      ryt        |d   t              r|d   n| j	                  |d         }t        |d   t              r| j
                  }n}t        |d   t              r| j                  }n]t        |d   t              rI|d   j                  |d   j                   }n*|d   j                  | j                  }n| j                  }ny t        |d   t              r-|d   j                  |d   j                   }n| j                  }n| j                  }| j	                  |d         |d   ||||g}t        r't        j                  |t        j                        }|S t!        j                  |      dz   }|S y )Nr         )option
)r5   r   r   r   
_iri_or_bnr%   r$   datatypelanguager)   r+   r&   r!   r"   r   OPT_APPEND_NEWLINEjson)r;   rM   rN   valuerW   rX   	line_listoutlines           r1   rF   zHextuplesSerializer._hex_liney   s{   1I
 fQi1 q	__VAY/  &)V,--F1Iu-,,F1Iw/!9%%1"()"4"4!5Hay))5#'==#'?? &)W-!9%%1"()"4"4!5H#zzH::q	*q	I  ,,y9R9RS N **Y/$6Nr2   c                l    t        |t              r| S t        |t              r|j                          S y r4   )r5   r   r   n3)r;   i_s     r1   rV   zHextuplesSerializer._iri_or_bn   s.    b&!TNE"eegYr2   c                   t        |t              r|j                  n|}|t        k(  ry| j                  ^t        | j                  t
              r|| j                  k(  ryt        | j                  t              r|| j                  j                  k(  ry| j                  t        u ryt        |t              r| S |j                         S )Nr    )	r5   r   
identifierr   r8   r   r6   r   r_   )r;   rL   context_identifiers      r1   rE   z HextuplesSerializer._context_str   s    ",We"<G' 	 !99+4//@&$*>*>>4//7&$*>*>*I*II??e# ,f5 ""	
 $&&(	
r2   )r/   z'Union[Graph, Dataset, ConjunctiveGraph]r=   )
rH   z	IO[bytes]rI   Optional[str]rJ   rd   rK   r   returnNone)rN   zUnion[bytes, str])rL   zUnion[Graph, IdentifiedNode]re   rC   )__name__
__module____qualname____doc____annotations__r-   r:   rP   rF   rV   rE   __classcell__)r0   s   @r1   r   r      ss     10O,&). #")	,E,E ,E  	,E
 ,E 
,E\4l
r2   )"rj   
__future__r   rZ   r?   typingr   r   r   r   r   r	   r
   r   rdflib.graphr   r   r   r   rdflib.namespacer   r   rdflib.serializerr   rdflib.termr   r   r   r   r"   r!   ImportError__all__r    r2   r1   <module>rv      sp   
 #   G G G S S % ( > >K
 !
!s
* s
  FKs   A! !	A-,A-