
    %i )                        d Z 	 ddlmZ ddlm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 dd	lmZ  G d
 de      Z G d dee      Z G d de      Z G d dee      Z G d de      Zy# e$ r	 ddlmZ Y sw xY w)zSelect2 view implementation.    )Sequence)OrderedDict)BaseQuerySetView	ViewMixin)http)ImproperlyConfigured)F)gettext)Viewc                   &    e Zd ZdZdZd Zd Zd Zy)Select2ViewMixinz1View mixin to render a JSON response for Select2.Fc                     |d   D cg c]5  }| j                  |      | j                  |      | j                  |      d7 c}S c c}w )z2Return data for the 'results' key of the response.object_listidtextselected_text)get_result_valueget_result_labelget_selected_result_label)selfcontextresults      k/var/www/html/navyabakers_fullstack/navyabakers_prod/venv/lib/python3.12/site-packages/dal_select2/views.pyget_resultszSelect2ViewMixin.get_results   sW     $M2

  ++F3--f5!%!?!?!G
 	
 
s   :Ac                 `    g }d} j                   rj|rh|j                  dd      }||j                  dk(  rd} j                  s# fd|d   D        }|j	                         |v rd}n fd|d   D        }||v rd}|r0 j                   j                        r|t        d	      d
|iz  ddg}|S )z4Form the correct create_option to append to results.Fpage_objN   Tc              3   \   K   | ]#  }j                  |      j                          % y wN)r   lower.0r   r   s     r   	<genexpr>z5Select2ViewMixin.get_create_option.<locals>.<genexpr>-   s/      $J(. %)$9$9&$A$G$G$I $Js   ),r   c              3   @   K   | ]  }j                  |        y wr    )r   r"   s     r   r$   z5Select2ViewMixin.get_create_option.<locals>.<genexpr>2   s$      $ ))&1$s   Create "%(new_value)s"	new_valuer   r   	create_id)create_fieldgetnumbercase_sensitive_creater!   has_add_permissionrequest_)r   r   qcreate_optiondisplay_create_optionr   existing_optionss   `      r   get_create_optionz"Select2ViewMixin.get_create_option!   s     %{{:t4H8??a#7(,%--$J29-2H$J 779 00,1)$")-"8$  ((,1) T%<%<T\\%J23{A6FF! M
     c                     | j                   j                  j                  dd      }| j                  ||      }t	        j
                  | j                  |      |z   d| j                  |      id      S )z)Return a JSON response in Select2 format.r1   Nmore)results
pagination)r/   GETr+   r5   r   JsonResponser   has_more)r   r   r1   r2   s       r   render_to_responsez#Select2ViewMixin.render_to_responseA   sn    LL  d+..w:  ++G4}DDMM'2 	r6   N)__name__
__module____qualname____doc__r-   r   r5   r>    r6   r   r   r      s    ;!
@r6   r   c                       e Zd ZdZy)Select2QuerySetViewz"List options for a Select2 widget.N)r?   r@   rA   rB   rC   r6   r   rE   rE   P   s    ,r6   rE   c                       e Zd ZdZdZdZd Zy)Select2GroupQuerySetViewa  List of grouped options for a Select2 widget.

    .. py:attribute:: group_by_related

        Name of the field for the related Model on a One to Many relation

    .. py:attribute:: related_field_name

        Name of the related Model field to run filter against.
    Nnamec                    | j                   st        d      t               }|d   }|j                  t	        | j                    d| j
                               }|D ]4  }t        |d      }|j                  |g        ||   j                  |       6 |j                         D cg c]J  \  }}d||D cg c]5  }| j                  |      | j                  |      | j                  |      d7 c}dL c}}}S c c}w c c}}}w )	zReturn the options grouped by a common related model.

        Raises ImproperlyConfigured if self.group_by_name is not configured
        zMissing group_by_related.r   __)
group_namerK   Nr   r   r   children)group_by_relatedr   r   annotater	   related_field_namegetattr
setdefaultappenditemsr   r   r   )r   r   groupsr   r   rK   groupr9   s           r   r   z$Select2GroupQuerySetView.get_resultsc   s'   
 $$&'BCCm,!**D112"T5L5L4MNO + Q " 	.F 6Jj"-:%%f-	. !'0 0 eW 
 $	%  ++F3--f5!%!?!?!G %
 0 	0%0s   (D6:C<0D<D)r?   r@   rA   rB   rN   rP   r   rC   r6   r   rG   rG   T   s    	 0r6   rG   c                   .    e Zd ZdZd Zd Zd Zd Zd Zy)Select2ListViewz9Autocomplete from a list of items rather than a QuerySet.c                     g S )z3Return the list strings from which to autocomplete.rC   )r   s    r   get_listzSelect2ListView.get_list   s    	r6   c                     | j                         }g }| j                  rF| j                  |      }t        | d      r)| j                  t	        d      d| j                  iz  ddg}t        j                  d| j                  |      |z   id      S )	z!Return option list json response.creater&   r'   Tr(   r9   zapplication/json)content_type)rZ   r1   autocomplete_resultshasattrr0   r   r<   r9   )r   r/   argskwargsr9   r2   s         r   r+   zSelect2ListView.get   s    --/66//8GtX&&&67#TVV;  "&" !   t||G,}<"
*, 	,r6   c                 "   t        d |D              rPt        |      dkD  rB|D cg c]4  \  }}| j                  j                         |j                         v s1||g6 c}}S t        d |D              rPt        |      dkD  rB|D cg c]4  \  }}| j                  j                         |j                         v s1||g6 c}}S |D cg c]/  }| j                  j                         |j                         v s.|1 c}S c c}}w c c}}w c c}w )z9Return list of strings that match the autocomplete query.c              3   <   K   | ]  }t        |t                y wr    
isinstancelistr#   els     r   r$   z7Select2ListView.autocomplete_results.<locals>.<genexpr>        6z"d#6   r   c              3   <   K   | ]  }t        |t                y wr    re   tuplerg   s     r   r$   z7Select2ListView.autocomplete_results.<locals>.<genexpr>   s     7z"e$7rj   )alllenr1   r!   r   r9   xys       r   r^   z$Select2ListView.autocomplete_results   s    6g663w<!;K)0Pv1DFFLLNaggi4OQFPP7w77CL1<L)0Pv1DFFLLNaggi4OQFPP&F!$&&,,.AGGI*EAFF	 QPFs#   2D D 2D;D	/D9Dc                 Z   t        d |D              r.t        |      dkD  r |D cg c]  \  }}t        ||       c}}S t        d |D              r.t        |      dkD  r |D cg c]  \  }}t        ||       c}}S |D cg c]  }t        ||       c}S c c}}w c c}}w c c}w )zReturn the result dictionary.c              3   <   K   | ]  }t        |t                y wr    rd   rg   s     r   r$   z*Select2ListView.results.<locals>.<genexpr>   ri   rj   r   r   r   c              3   <   K   | ]  }t        |t                y wr    rl   rg   s     r   r$   z*Select2ListView.results.<locals>.<genexpr>   s     92B&9rj   )rn   ro   dictrp   s       r   r9   zSelect2ListView.results   s    6g663w<!;K5<=6AqDAA&==999c'lQ>N5<=6AqDAA&==0781DAA&88	 >=8s   B&B"B(c                    t        | d      st        d      |j                  j                  dd      }|t	        j
                         S | j                  |      }|t	        j
                         S t	        j                  ||d      S )zAdd 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   Nru   )r_   r   POSTr+   r   HttpResponseBadRequestr\   r<   )r   r/   r`   ra   r   s        r   postzSelect2ListView.post   s     tX&&';<<||-<..00{{4 <..00  "
  	r6   N)	r?   r@   rA   rB   rZ   r+   r^   r9   r{   rC   r6   r   rX   rX      s    C,$G9r6   rX   c                       e Zd ZdZd Zd Zy)Select2GroupListViewzView mixin for grouped options.c                 p   d}|}t        |t              r{t        |t              skt        |      }t	        d |D              r|dkD  r|dd \  }}||ffS t	        d |D              r|dkD  r|dd \  }}||ffS |dkD  r	|dd \  }}n
|dkD  r|d   }t        |t              rt        |t              r|f}||ffS )zReturn the item with its group.Nc              3   <   K   | ]  }t        |t                y wr    rd   rg   s     r   r$   z9Select2GroupListView.get_item_as_group.<locals>.<genexpr>   s     8B:b$'8rj   r   r      c              3   <   K   | ]  }t        |t                y wr    rd   rg   s     r   r$   z9Select2GroupListView.get_item_as_group.<locals>.<genexpr>   s     :bZD):rj   )re   r   strro   rn   )r   entryrV   itementry_lengths        r   get_item_as_groupz&Select2GroupListView.get_item_as_group   s    eX&z%/Eu:L8%88\A=M#Aajtt}~%:E::|a?O#Aajtt}~%  !#"'!*KE4!A% 8D$)Zc-B7Dt}~r6   c                    i }| j                         }|rt        d |D              st        d |D              rX|D 	cg c]4  }| j                  |      D ]  \  }}|D ]  }	|d   |d   |	d   |	d   f   6 }
}}}}	| j                  rJ| j                  j	                         }|
D cg c]  \  }}}}||j	                         v r||||f! }
}}}}|
D ]3  \  }}}}	|j                  ||fg        |||f   j                  ||	g       5 t        j                  d|j                  dg       D cg c]
  \  }}||d c}}|j                         D cg c]'  \  }}|d   |d   |D cg c]
  \  }}||d c}}d) c}}}}z   i      S |D 	cg c]&  }| j                  |      D ]  \  }}|D ]  }	||	f  ( }
}}}}	| j                  rB| j                  j	                         }|
D cg c]  \  }}||j	                         v r||f }
}}|
D ]+  \  }}	|j                  |g        ||   j                  |	       - t        j                  d|j                  d	g       D cg c]  }||d	 c}|j                         D cg c]  \  }}|||D cg c]  }||d	 c}d c}}}z   i      S y	c c}	}}}w c c}}}}w c c}}w c c}}w c c}}}}w c c}	}}}w c c}}w c c}w c c}w c c}}}w )
z2Return option list with children(s) json response.c              3   <   K   | ]  }t        |t                y wr    rd   rg   s     r   r$   z+Select2GroupListView.get.<locals>.<genexpr>   s     ;RJr4(;rj   c              3   <   K   | ]  }t        |t                y wr    rl   rg   s     r   r$   z+Select2GroupListView.get.<locals>.<genexpr>   s     ?z"e,?rj   r   r   r9   )NNru   rL   N)rZ   rn   r   r1   r!   rR   rS   r   r<   poprT   )r   r/   r`   ra   results_dictr9   r   rV   rT   r   flat_resultsr1   ghrq   rr   group_iditem_idls                      r   r+   zSelect2GroupListView.get   s   --/;7;;?w?? IP   ?D(,(>(>u(E $u %   1XuQxa$q': : :    66ACO $7 $7ZQ1a'(AGGI~ &'1aL $7L $76B L2HeWd ++Xu,=rB (E!23::GT?KL (( '3&6&6|R&H  #a #$Q  %1$6$6$8	 	 !Aq #$A$$%aDAB)9=Aq! 4)		 *  $ <C  3  3%484J4J54Q 3$0E5,1 3$( "'  3  3  3  3 66A7C $7tq!'(AGGI~ &'F $7L $7#/ 5KE4 ++E26 '..t45 ((6B6F6FtR6P 12q!,  %1$6$6$8	 	 !Aq #$$%>?)9:q! 4)	 *  c 
 $7 )		 3$7 )		sT   9J<
-$K
3KK/K>K+K 
5 K(,K.
K8K3(K8K3K8N)r?   r@   rA   rB   r   r+   rC   r6   r   r}   r}      s    )6Cr6   r}   N)rB   collections.abcr   ImportErrorcollectionsr   	dal.viewsr   r   djangor   django.core.exceptionsr   django.db.modelsr	   django.utils.translationr
   r0   django.views.generic.listr   objectr   rE   rG   rX   r}   rC   r6   r   <module>r      s    "%( $ 1  7  1 *;v ;|-*,< -*02 *0ZAi AHa? aA  %$%s   A0 0A>=A>