î
Þ^Q\.  ã               @   sâ   d  Z  d d l Z d d l Z d d l Z d d l m Z m Z d d l m Z d d l	 m
 Z
 d d l m Z d d l m Z Gd d	 „  d	 e ƒ Z Gd
 d „  d e e ƒ Z Gd d „  d e e ƒ Z Gd d „  d e ƒ Z d S)zSelect2 view implementation.é    N)ÚBaseQuerySetViewÚ	ViewMixin)Úhttp)ÚImproperlyConfigured)Úugettext)ÚViewc               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	ÚSelect2ViewMixinz1View mixin to render a JSON response for Select2.c                s   ‡  f d d †  | d Dƒ S)z2Return data for the 'results' key of the response.c                s6   g  |  ], } i ˆ  j  | ƒ d  6ˆ  j | ƒ d 6‘ q S)ÚidÚtext)Zget_result_valueZget_result_label)Ú.0Úresult)Úself© úF/var/www/dbchiro/venv/lib/python3.4/site-packages/dal_select2/views.pyú
<listcomp>   s   	z0Select2ViewMixin.get_results.<locals>.<listcomp>Zobject_listr   )r   Úcontextr   )r   r   Úget_results   s    zSelect2ViewMixin.get_resultsc             C   s¢   g  } d } |  j  rT | rT | j d d ƒ } | d k sH | j d k rT d } qT n  | rž |  j |  j ƒ rž i | d 6t d ƒ i | d 6d	 6d d
 6g } n  | S)z4Form the correct create_option to append to results.FÚpage_objNé   Tr	   zCreate "%(new_value)s"Z	new_valuer
   Ú	create_id)Zcreate_fieldÚgetÚnumberZhas_add_permissionÚrequestÚ_)r   r   ÚqÚcreate_optionZdisplay_create_optionr   r   r   r   Úget_create_option   s    z"Select2ViewMixin.get_create_optionc             C   sq   |  j  j j d d ƒ } |  j | | ƒ } t j t j i |  j | ƒ | d 6i |  j	 | ƒ d 6d 6ƒ d d ƒS)z)Return a JSON response in Select2 format.r   NÚresultsZmoreZ
paginationÚcontent_typezapplication/json)
r   ÚGETr   r   r   ÚHttpResponseÚjsonÚdumpsr   Zhas_more)r   r   r   r   r   r   r   Úrender_to_response,   s    	z#Select2ViewMixin.render_to_responseN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r#   r   r   r   r   r      s   	r   c               @   s   e  Z d  Z d Z d S)ÚSelect2QuerySetViewz"List options for a Select2 widget.N)r$   r%   r&   r'   r   r   r   r   r(   =   s   r(   c               @   s:   e  Z d  Z d Z d d „  Z d d „  Z d d „  Z d S)	ÚSelect2ListViewz9Autocomplete from a list of items rather than a QuerySet.c             C   s   g  S)z4"Return the list strings from which to autocomplete.r   )r   r   r   r   Úget_listD   s    zSelect2ListView.get_listc                s¥   ˆ  j  ƒ  } g  } ˆ  j rq ‡  f d d †  | Dƒ } t ˆ  d ƒ rq i ˆ  j d 6d ˆ  j d 6d d 6g } qq n  t j t j i d	 d „  | Dƒ | d
 6ƒ d d ƒS)z""Return option list json response.c                s1   g  |  ]' } ˆ  j  j ƒ  | j ƒ  k r | ‘ q Sr   )r   Úlower)r   Úx)r   r   r   r   M   s   	 z'Select2ListView.get.<locals>.<listcomp>Úcreater	   zCreate "%s"r
   Tr   c             S   s%   g  |  ] } t  d  | d | ƒ ‘ q S)r	   r
   )Údict)r   r,   r   r   r   r   U   s   	 r   r   zapplication/json)r*   r   Úhasattrr   r    r!   r"   )r   r   ÚargsÚkwargsr   r   r   )r   r   r   H   s    	
zSelect2ListView.getc             C   s’   t  |  d ƒ s t d ƒ ‚ n  | j j d d ƒ } | d k rI t j ƒ  S|  j | ƒ } | d k rn t j ƒ  St j t j	 i | d 6| d 6ƒ ƒ S)zÎ"Add an option to the autocomplete list.

        If 'text' is not defined in POST or self.create(text) fails, raises
        bad request. Raises ImproperlyConfigured if self.create if not defined.
        r-   zMissing "create()"r
   Nr	   )
r/   r   ÚPOSTr   r   ZHttpResponseBadRequestr-   r    r!   r"   )r   r   r
   r   r   r   ÚpostX   s    

zSelect2ListView.postN)r$   r%   r&   r'   r*   r   r3   r   r   r   r   r)   A   s   r)   c               @   s(   e  Z d  Z d d „  Z d d „  Z d S)ÚSelect2GroupListViewc             C   s¼   d  } | } t  | t j ƒ r~ t  | t j ƒ r~ t | ƒ } | d k rb | d d … \ } } q~ | d k r~ | d } q~ n  t  | t j ƒ s£ t  | t j ƒ r¯ | f } n  | | f f S)Nr   r   é   )Ú
isinstanceÚcollectionsÚSequenceÚsixZstring_typesÚlen)r   ÚentryÚgroupÚvalueZentry_lengthr   r   r   Úget_item_as_groupr   s    z&Select2GroupListView.get_item_as_groupc       	         sð   i  } ˆ j  ƒ  } | r  ‡ f d d †  | Dƒ } ˆ j re ˆ j j ƒ  ‰  ‡  f d d †  | Dƒ } n  x8 | D]- \ } } | j | g  ƒ | | j | ƒ ql Wn  t j t j i d d „  | j	 d g  ƒ Dƒ d d „  t
 j | ƒ Dƒ d 6ƒ ƒ S)z3"Return option list with children(s) json response.c                sE   g  |  ]; } ˆ  j  | ƒ D]% \ } } | D] } | | f ‘ q) q q Sr   )r>   )r   r;   r<   ÚitemsÚitem)r   r   r   r   ‹   s   	 z,Select2GroupListView.get.<locals>.<listcomp>c                s4   g  |  ]* \ } } ˆ  | j  ƒ  k r | | f ‘ q Sr   )r+   )r   Úgr,   )r   r   r   r   ‘   s   	 	c             S   s$   g  |  ] } i | d  6| d 6‘ q S)r	   r
   r   )r   r,   r   r   r   r   ™   s   	 Nc             S   s>   g  |  ]4 \ } } i | d  6| d 6d d „  | Dƒ d 6‘ q S)r	   r
   c             S   s$   g  |  ] } i | d  6| d 6‘ q S)r	   r
   r   )r   r,   r   r   r   r   š   s   	z7Select2GroupListView.get.<locals>.<listcomp>.<listcomp>Úchildrenr   )r   rA   Úlr   r   r   r   š   s   	r   )r*   r   r+   Ú
setdefaultÚappendr   r    r!   r"   Úpopr9   Ú	iteritems)	r   r   r0   r1   Zresults_dictr   Zflat_resultsr<   r=   r   )r   r   r   r   …   s    		zSelect2GroupListView.getN)r$   r%   r&   r>   r   r   r   r   r   r4   q   s   r4   )r'   r7   r!   r9   Z	dal.viewsr   r   Zdjangor   Zdjango.core.exceptionsr   Zdjango.utils.translationr   r   Zdjango.views.generic.listr   Úobjectr   r(   r)   r4   r   r   r   r   Ú<module>   s   .0