3
d                 @   sD  d Z ddlmZ ddlmZ ddlmZ ddlZddlZddlmZ ddlm	Z	 ddlm
Z
 dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ dddddgZG dd deZG dd dejeZG dd deZdde iZG dd deZ G dd deZ!d ddZ"dS )!a=  
Parser plugin interface.

This module defines the parser plugin interface and contains other
related parser support code.

The module is mainly useful for those wanting to write a parser that
can plugin to rdflib. If you are wanting to invoke a parser you likely
want to do so through the Graph class parse method.

    )absolute_import)division)print_functionN)BytesIO)string_types)	text_type)pathname2url)Request)url2pathname)urljoin)urlopen)	xmlreader)__version__)URIRef)	NamespaceParserInputSourceStringInputSourceURLInputSourceFileInputSourcec               @   s   e Zd Zdd Zdd ZdS )r   c             C   s   d S )N )selfr   r   //tmp/pip-build-7vycvbft/rdflib/rdflib/parser.py__init__*   s    zParser.__init__c             C   s   d S )Nr   )r   sourceZsinkr   r   r   parse-   s    zParser.parseN)__name__
__module____qualname__r   r   r   r   r   r   r   (   s   c               @   s"   e Zd ZdZdddZdd ZdS )r   z
    TODO:
    Nc             C   s    t jj| |d d | _d| _d S )N)	system_idF)r   r   r   content_type
auto_close)r   r   r   r   r   r   6   s    zInputSource.__init__c             C   s"   | j  }|rt|dr|j  d S )Nclose)getByteStreamhasattrr"   )r   fr   r   r   r"   ;   s    zInputSource.close)N)r   r   r   __doc__r   r"   r   r   r   r   r   1   s   
c                   s"   e Zd ZdZd fdd	Z  ZS )r   z
    TODO:
    Nc                s&   t t| j| t|}| j| d S )N)superr   r   r   setByteStream)r   valuer   stream)	__class__r   r   r   F   s    zStringInputSource.__init__)N)r   r   r   r&   r   __classcell__r   r   )r+   r   r   A   s   z
User-agentz1rdflib-%s (http://rdflib.net/; eikeon@eikeon.com)c                   s*   e Zd ZdZd fdd	Zdd Z  ZS )r   z
    TODO:
    Nc                s   t t| j| || _tt}|dkr0d|d< nP|dkrBd|d< n>|dkrTd|d< n,|dkrfd	|d< n|d
krxd|d< nd|d< t|d |}t|}|j | _| j	| j |j
 jd| _| jd k	r| jjddd | _| j| |j
 | _d S )Nzapplication/rdf+xmlzapplication/rdf+xml, */*;q=0.1AcceptZn3ztext/n3, */*;q=0.1Zturtlez+text/turtle,application/x-turtle, */*;q=0.1ntztext/plain, */*;q=0.1zjson-ldz6application/ld+json, application/json;q=0.9, */*;q=0.1z&application/rdf+xml,text/rdf+n3;q=0.9,z&application/xhtml+xml;q=0.5, */*;q=0.1zcontent-type;   r   zLapplication/rdf+xml,text/rdf+n3;q=0.9,application/xhtml+xml;q=0.5, */*;q=0.1)r'   r   r   urldictheadersr	   r   geturlsetPublicIdinfogetr    splitr(   Zresponse_info)r   r   formatZ	myheadersreqfile)r+   r   r   r   Z   s0    




 


zURLInputSource.__init__c             C   s   | j S )N)r1   )r   r   r   r   __repr__|   s    zURLInputSource.__repr__)NN)r   r   r   r&   r   r<   r,   r   r   )r+   r   r   U   s   "c                   s$   e Zd Z fddZdd Z  ZS )r   c                sN   t dttj }tt dt|j|d}tt| j| || _	| j
| d S )Nzfile:)base)r   r   osgetcwdr   namer'   r   r   r;   r(   )r   r;   r=   r   )r+   r   r   r      s
    zFileInputSource.__init__c             C   s
   t | jS )N)reprr;   )r   r   r   r   r<      s    zFileInputSource.__repr__)r   r   r   r   r<   r,   r   r   )r+   r   r      s   c             C   s  t | dk	|dk	|dk	|dk	fdkr,tdd}| dk	rt| trH| }n|t| trX| }nlt| drt| t r| }t }|j| |tj	kr|j
d qt|dr|j
|j ntdt| | f d}d}	|dk	rFtjj|rt|}td	d
ttj  }
t||
dj }|jdr8t|jdd}t|d}n
t||}d}	|dk	rXt|}|dk	rt|trx|jd}t|}d}	|dkrtdnF| j|	O  _|dk	r|j | n|j! dkr|j |pd |S dS )zR
    Return an appropriate InputSource instance for the given
    parameters.
    Nr0   z;exactly one of source, location, file or data must be givenreadzfile:///dev/stdinr@   z$Unexpected type '%s' for source '%s'Fzfile:z%s/)r=   zfile:////rbTzutf-8zcould not create InputSource )"sum
ValueError
isinstancer   r   r$   r   r(   sysstdinsetSystemIdr@   	Exceptiontyper>   pathexistsr   r   r?   r   defrag
startswithr
   replaceopenr   r   r   encoder   r!   r5   getPublicId)r   ZpublicIDlocationr;   datar9   Zinput_sourcer%   Zabsolute_locationr!   r=   filenamer   r   r   create_input_source   sf    













rY   )NNNNNN)#r&   
__future__r   r   r   r>   rI   sixr   r   r   Zsix.moves.urllib.requestr   r	   r
   Zsix.moves.urllib.parser   r   Zxml.saxr   Zrdflibr   Zrdflib.termr   Zrdflib.namespacer   __all__objectr   r   r   r3   r   r   rY   r   r   r   r   <module>   s8   	
+ 