Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
djangorestframework / __pycache__ / parsers.cpython-35.pyc
Size: Mime:


«¬šYE ã@sbdZddlmZddlZddlZddlmZddlmZddl	m
Z
ddlmZ
ddlmZmZmZdd	lmZdd
lmZddlmZddlmZdd
lmZGdd„deƒZGdd„deƒZGdd„deƒZGdd„deƒZ Gdd„deƒZGdd„deƒZ!dS)zÅ
Parsers are used to parse the content of incoming HTTP requests.

They give us a generic way of being able to handle various media types
on the request, such as form content or json encoded data.
é)Úunicode_literalsN)Úsettings)ÚStopFutureHandlers)Ú	QueryDict)ÚMultiPartParser)Ú	ChunkIterÚMultiPartParserErrorÚparse_header)Úsix)Ú
force_text)Úparse)Ú	renderers)Ú
ParseErrorc@seZdZdd„ZdS)ÚDataAndFilescCs||_||_dS)N)ÚdataÚfiles)Úselfrr©rúU/Users/carlton/Documents/Django-Stack/django-rest-framework/rest_framework/parsers.pyÚ__init__s	zDataAndFiles.__init__N)Ú__name__Ú
__module__Ú__qualname__rrrrrrsrc@s.eZdZdZdZdddd„ZdS)Ú
BaseParserz€
    All parsers should extend `BaseParser`, specifying a `media_type`
    attribute, and overriding the `.parse()` method.
    NcCstdƒ‚dS)z¿
        Given a stream to read from, return the parsed representation.
        Should return parsed data, or a `DataAndFiles` object consisting of the
        parsed data and files.
        z.parse() must be overridden.N)ÚNotImplementedError)rÚstreamÚ
media_typeÚparser_contextrrrr)szBaseParser.parse)rrrÚ__doc__rrrrrrr"src@s7eZdZdZdZejZdddd„ZdS)Ú
JSONParserz&
    Parses JSON-serialized data.
    zapplication/jsonNcCsŒ|p	i}|jdtjƒ}y&tj|ƒ|ƒ}tj|ƒSWn>tk
r‡}ztdt	j
|ƒƒ‚WYdd}~XnXdS)zX
        Parses the incoming bytestream as JSON and returns the resulting data.
        ÚencodingzJSON parse error - %sN)ÚgetrÚDEFAULT_CHARSETÚcodecsÚ	getreaderÚjsonÚloadÚ
ValueErrorrr
Ú	text_type)rrrrr Zdecoded_streamÚexcrrrr9szJSONParser.parse)	rrrrrr
ÚJSONRendererÚrenderer_classrrrrrr2s	rc@s.eZdZdZdZdddd„ZdS)Ú
FormParserz
    Parser for form data.
    z!application/x-www-form-urlencodedNcCs=|p	i}|jdtjƒ}t|jƒd|ƒ}|S)zt
        Parses the incoming bytestream as a URL encoded form,
        and returns the resulting QueryDict.
        r )r!rr"rÚread)rrrrr rrrrrMszFormParser.parse)rrrrrrrrrrr,Gsr,c@s.eZdZdZdZdddd„ZdS)rzF
    Parser for multipart form data, which may include file data.
    zmultipart/form-dataNcCsÊ|p	i}|d}|jdtjƒ}|jjƒ}||d<|j}y8t||||ƒ}|jƒ\}	}
t|	|
ƒSWn>t	k
rÅ}zt
dtj|ƒƒ‚WYdd}~XnXdS)a	
        Parses the incoming bytestream as a multipart encoded form,
        and returns a DataAndFiles object.

        `.data` will be a `QueryDict` containing all the form parameters.
        `.files` will be a `QueryDict` containing all the form files.
        Úrequestr ÚCONTENT_TYPEzMultipart form parse error - %sN)
r!rr"ÚMETAÚcopyÚupload_handlersÚDjangoMultiPartParserrrrrr
r()rrrrr.r Úmetar2Úparserrrr)rrrr^s

	zMultiPartParser.parse)rrrrrrrrrrrXsrc@sXeZdZdZdZddddiZdddd	„Zd
d„Zdd
„ZdS)ÚFileUploadParserz&
    Parser for file upload data.
    z*/*Ú	unhandledzFFileUpload parse error - none of upload handlers can handle the streamÚno_filenamez`Missing filename. Request should include a Content-Disposition header with a filename parameter.NcCsž|p	i}|d}|jdtjƒ}|j}|j}|j|||ƒ}|skt|jdƒ‚|jd|jddƒƒ}	y(t|jd|jdd	ƒƒƒ}
Wnt	t
fk
rÑd
}
YnXxL|D]D}|j|||
d
|ƒ}|d
k	rÙtid|diƒSqÙWd
d„|Dƒ}
t
dg|
ƒ}t||ƒ}d	gt|ƒ}xat|ƒD]S\}}y|jd
||	|
|ƒWqvtk
rÈ|d
|d…}PYqvXqvWxh|D]`}xWt|ƒD]I\}}t|ƒ}|j|||ƒ}|||7<|d
krçPqçWqÔWxLt|ƒD]>\}}|j||ƒ}|d
k	rEtid|iƒSqEWt|jdƒ‚d
S)a
        Treats the incoming bytestream as a raw file upload and returns
        a `DataAndFiles` object.

        `.data` will be None (we expect request body to be a file content).
        `.files` will be a `QueryDict` containing one 'file' element.
        r.r r8ÚHTTP_CONTENT_TYPEr/ÚÚHTTP_CONTENT_LENGTHÚCONTENT_LENGTHrNÚfileécSs"g|]}|jr|j‘qSr)Ú
chunk_size)Ú.0Úxrrrú
<listcomp>¦s	z*FileUploadParser.parse.<locals>.<listcomp>ééér7liüÿÿ)r!rr"r0r2Úget_filenamerÚerrorsÚintr'Ú	TypeErrorÚhandle_raw_inputrÚminrÚlenÚ	enumerateÚnew_filerÚreceive_data_chunkÚ
file_complete)rrrrr.r r4r2ÚfilenameÚcontent_typeÚcontent_lengthÚhandlerÚresultÚpossible_sizesr?ÚchunksÚcountersÚindexÚchunkÚchunk_lengthÚfile_objrrrrs\
			
		


	zFileUploadParser.parsecCs¢y|ddSWntk
r$YnXy[|dj}t|djdƒƒ}|d}d|krq|j|ƒSt|dƒSWntttfk
rYnXdS)	z
        Detects the uploaded file name. First searches a 'filename' url kwarg.
        Then tries to parse Content-Disposition header.
        ÚkwargsrQr.ZHTTP_CONTENT_DISPOSITIONzutf-8r>z	filename*N)ÚKeyErrorr0r	ÚencodeÚget_encoded_filenamerÚAttributeErrorr')rrrrr4ÚdispositionÚ
filename_parmrrrrFÂs



zFileUploadParser.get_filenamecCsmt|dƒ}y.|jddƒ\}}}tj|ƒ}Wn(ttfk
rht|dƒ}YnX|S)zv
        Handle encoded filenames per RFC6266. See also:
        http://tools.ietf.org/html/rfc2231#section-4
        z	filename*ú'rCrQ)rÚsplitÚurlparseÚunquoter'ÚLookupError)rrcZencoded_filenameÚcharsetÚlangrQrrrr`Ösz%FileUploadParser.get_encoded_filename)	rrrrrrGrrFr`rrrrr6usCr6)"rÚ
__future__rr#r%Údjango.confrZdjango.core.files.uploadhandlerrÚdjango.httprÚdjango.http.multipartparserrr3rrr	Údjango.utilsr
Údjango.utils.encodingrZdjango.utils.six.moves.urllibrrfÚrest_frameworkr
Úrest_framework.exceptionsrÚobjectrrrr,r6rrrrÚ<module>s&