o
    i_                     @   sX   d Z ddlZddlmZ ddlmZ dZdZG dd deZ	dd	 Z
G d
d deZdS )ab  
This wrapper intercepts calls through the store interface which make use of
the REGEXTerm class to represent matches by REGEX instead of literal
comparison.

Implemented for stores that don't support this and essentially
provides the support by replacing the REGEXTerms by wildcards (None) and
matching against the results from the store it's wrapping.
    N)Graph)Store   c                   @   s    e Zd ZdZdd Zdd ZdS )	REGEXTermz
    REGEXTerm can be used in any term slot and is interpreted as a request to
    perform a REGEX match (not a string comparison) using the value
    (pre-compiled) for checking rdf:type matches
    c                 C   s   t || _d S N)recompilecompiledExpr)selfexpr r   ^/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/rdflib/plugins/stores/regexmatching.py__init__      zREGEXTerm.__init__c                 C   s   t tdffS )N )r   strr
   r   r   r   
__reduce__       zREGEXTerm.__reduce__N)__name__
__module____qualname____doc__r   r   r   r   r   r   r      s    r   c                 C   s:   t dD ]}t|| tr|| j| | s dS qdS )N   FT)range
isinstancer   r	   match)quad	regexQuadindexr   r   r   regexCompareQuad$   s   r    c                   @   s   e Zd Zdd Zd$ddZd%ddZd	d
 Zd%ddZd&ddZd&ddZ	d&ddZ
d&ddZdd Zd$ddZdd Zdd Zdd Zd d! Zd"d# ZdS )'REGEXMatchingc                 C   s"   || _ |j| _|j| _|j| _d S r   )storagecontext_awareformula_awaretransaction_aware)r
   r"   r   r   r   r   .   s   zREGEXMatching.__init__Tc                 C   s   | j ||S r   )r"   open)r
   configurationcreater   r   r   r&   6   r   zREGEXMatching.openFc                 C      | j   d S r   )r"   close)r
   commit_pending_transactionr   r   r   r*   9   r   zREGEXMatching.closec                 C   s   | j | d S r   )r"   destroy)r
   r'   r   r   r   r,   <   r   zREGEXMatching.destroyc                 C   s$   |\}}}| j |||f|| d S r   )r"   add)r
   triplecontextquotedsubject	predicateobject_r   r   r   r-   ?   s   
zREGEXMatching.addNc              	   C   sX  |\}}}t |tst |tst |ts|d urt |jtrt |t r&|p'd }t |t r0|p1d }t |t r:|p;d }|d urIt |jt rI|pJd }	g }
| j|||f|	D ],\\}}}}|D ]"}|j}t||||f||||d uru|jpv|fr|
||||f q`qW|
D ]\}}}}	| j|||f|	rt| |	p|	 qd S | j|||f| d S r   )	r   r   
identifierr"   triplesr    appendremover   )r
   r.   r/   r1   r2   r3   spocremoveQuadLists1p1o1cgctxr   r   r   r7   C   sF   
"
	$zREGEXMatching.removec                 c   st   |\}}}t |tst |tst |ts|d urt |jtrt |t r'|p(d }t |t r1|p2d }t |t r;|p<d }|d urJt |jt rJ|pKd }	| j|||f|	D ]E\\}
}}}g }|D ]}|	d u ry|d u ss|jj|jrx|| qa|| qa|rt|
||d f|||d fr|
||fdd |D fV  qVd S | j|||f|D ]\\}
}}}|
||f|fV  qd S )Nc                 s   s    | ]}|V  qd S r   r   ).0r;   r   r   r   	<genexpr>   s    z(REGEXMatching.triples.<locals>.<genexpr>)	r   r   r4   r"   r5   r	   r   r6   r    )r
   r.   r/   r1   r2   r3   r8   r9   r:   r;   r=   r>   r?   r@   matchingCtxsrA   r   r   r   r5   i   sL   
"

zREGEXMatching.triplesc                 C      | j |S r   )r"   __len__)r
   r/   r   r   r   rF      s   zREGEXMatching.__len__c                 c   s    | j |D ]}|V  qd S r   )r"   contexts)r
   r.   rA   r   r   r   rG      s   zREGEXMatching.contextsc                 C   s   | j d| d S )N)NNN)r"   r7   )r
   r4   r   r   r   remove_context   s   zREGEXMatching.remove_contextc                 C   s   | j j|||d d S )N)override)r"   bind)r
   prefix	namespacerI   r   r   r   rJ      s   zREGEXMatching.bindc                 C   rE   r   )r"   rK   )r
   rL   r   r   r   rK         zREGEXMatching.prefixc                 C   rE   r   )r"   rL   )r
   rK   r   r   r   rL      rM   zREGEXMatching.namespacec                 C   s
   | j  S r   )r"   
namespacesr   r   r   r   rN      s   
zREGEXMatching.namespacesc                 C   r)   r   )r"   commitr   r   r   r   rO      r   zREGEXMatching.commitc                 C   r)   r   )r"   rollbackr   r   r   r   rP      r   zREGEXMatching.rollback)T)Fr   )r   r   r   r   r&   r*   r,   r-   r7   r5   rF   rG   rH   rJ   rK   rL   rN   rO   rP   r   r   r   r   r!   -   s"    




&
&

r!   )r   r   rdflib.graphr   rdflib.storer   NATIVE_REGEXPYTHON_REGEXr   r   r    r!   r   r   r   r   <module>   s    
	