���Z� � @ s{ d d l Z d d l m Z d d l m Z m Z d d l m Z m Z m Z d d l m Z d Z Gd d � d � Z d S) � N)� urlencode)� MultiDict�MultiDictProxy� )�hdrs� multipart�payload)�guess_filename�FormDatac @ s� e Z d Z d Z f d d d d � Z e d d � � Z d d d d d d d d � Z d d � Z d d � Z d d � Z d d � Z d S)r z_Helper class for multipart/form-data and application/x-www-form-urlencoded body generation.TNc C s� t j d � | _ g | _ d | _ | | _ | | _ t | t � rZ t | j � � } n t | t t f � sx | f } | j | � d S)Nz form-dataF) r ZMultipartWriter�_writer�_fields� _is_multipart� _quote_fields�_charset� isinstance�dict�list�items�tuple� add_fields)�self�fields�quote_fields�charset� r �/formdata.py�__init__ s zFormData.__init__c C s | j S)N)r )r r r r �is_multipart s zFormData.is_multipart�content_type�filename�content_transfer_encodingc C s� t | t j � r d | _ n6 t | t t t f � rT | d k rT | d k rT | } t d | i � } | d k r� t | t � r� t d | � � | d k r� t | t j � r� t | | � } | d k r� | | d <d | _ i } | d k r%t | t � st d | � � | | t j <d | _ | d k rft | t � sPt d | � � | | t j <d | _ | j j | | | f � d S)NT�namez,filename must be an instance of str. Got: %sr z0content_type must be an instance of str. Got: %sz=content_transfer_encoding must be an instance of str. Got: %s)r �io�IOBaser �bytes� bytearray� memoryviewr �str� TypeErrorr r �CONTENT_TYPEZCONTENT_TRANSFER_ENCODINGr �append)r r! �valuer r r �type_options�headersr r r � add_field"