B
    Ob>                 @   s  d dl mZ d dl mZ d dlZd dlZd dlZd dlmZ d dlm	Z	 d dl
mZmZmZ d dlmZ d dlmZ d dl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Z!G dd dej"Z#e$ddidd Z%G dd de&Z'G dd de&Z(G dd de&Z)G dd de&Z*G dd de	j+Z,G d d! d!e	j-Z.G d"d# d#e	j/Z0G d$d% d%e	j1Z2G d&d' d'e	j3Z4G d(d) d)e&Z5G d*d+ d+e,Z6G d,d- d-e.Z7G d.d/ d/ej8j9Z:d0d1 Z;d2d3 Z<dS )4    )print_function)unicode_literalsN)forms)helpers)flatten_fieldsetshelp_text_for_fieldlabel_for_field)flatatt)capfirst)	force_str)conditional_escapeformat_html)	mark_safe)gettext_lazy)settings)coloredZ_selected_actionc               @   s8   e Zd ZejeddZejdddeddidZ	d	S )
ZKActionFormZhelpers_actionForm_actionLabel)label Fr   classzselect-across)r   requiredinitialwidgetN)
__name__
__module____qualname__r   ZChoiceField_actionZBooleanFieldZHiddenInputZselect_across r   r   -G:\easytimepro\master/mysite/admin\helpers.pyr      s   r   r   zaction-selectc             C   s   dS )NFr   )valuer   r   r   <lambda>)       r!   c               @   sB   e Zd ZdddZdd Zedd Zedd	 Zed
d ZdS )ZKActionAdminFormNc             C   s   || | _ | _|| _d S )N)form	fieldsetsadmin)selfr$   r%   r&   r   r   r   __init__-   s    zZKActionAdminForm.__init__c             c   s4   x.| j D ]$\}}t| j|fd| ji|V  qW d S )Nr&   )r%   ZKActionFieldsetr$   r&   )r'   nameoptionsr   r   r   __iter__1   s
    
zZKActionAdminForm.__iter__c             C   s   | j jS )N)r$   errors)r'   r   r   r   r-   9   s    zZKActionAdminForm.errorsc             C   s   | j jS )N)r$   non_field_errors)r'   r   r   r   r.   =   s    z"ZKActionAdminForm.non_field_errorsc             C   s$   | j j}x| D ]}||j }qW |S )N)r$   media)r'   r/   fsr   r   r   r/   A   s    
zZKActionAdminForm.media)N)	r   r   r   r(   r,   propertyr-   r.   r/   r   r   r   r   r#   ,   s
   
r#   c               @   s   e Zd ZdddZdd ZdS )r)   Nr   c             C   s6   || _ || | _| _d|| _|| _|| _|| _d S )N )r$   r*   fieldsjoinclassesdescriptionr&   readonly_fields)r'   r$   r*   r7   r3   r5   r6   r&   r   r   r   r(   K   s    zZKActionFieldset.__init__c             c   s,   x&| j D ]}t| j|| j| jdV  qW d S )N)r&   )r3   ZKActionFieldliner$   r7   r&   )r'   fieldr   r   r   r,   T   s    zZKActionFieldset.__iter__)Nr   r   r   NN)r   r   r   r(   r,   r   r   r   r   r)   I   s    
r)   c               @   s&   e Zd ZdddZdd Zdd ZdS )	r8   Nc                sd   | _ t|drt|tjr&|g _n| _t fdd jD   _| _|d krZd}| _	d S )Nr,   c             3   s*   | ]"}| j jko  j j| jjV  qd S )N)r$   r3   r   	is_hidden).0r9   )r'   r   r   	<genexpr>b   s   z-ZKActionFieldline.__init__.<locals>.<genexpr>r   )
r$   hasattr
isinstancesixZ	text_typer3   allZhas_visible_fieldr&   r7   )r'   r$   r9   r7   r&   r   )r'   r   r(   [   s    

zZKActionFieldline.__init__c             c   s>   x8t | jD ]*\}}|| jkr qt| j||dkdV  qW d S )Nr   )is_first)	enumerater3   r7   ZKActionAdminFieldr$   )r'   ir9   r   r   r   r,   j   s    
zZKActionFieldline.__iter__c                s$   t d fdd jD dS )N
c             3   s(   | ] }| j kr j| j V  qd S )N)r7   r$   r-   as_ul)r;   f)r'   r   r   r<   u   s    z+ZKActionFieldline.errors.<locals>.<genexpr>)r   r4   r3   strip)r'   r   )r'   r   r-   r   s    zZKActionFieldline.errors)NN)r   r   r   r(   r,   r-   r   r   r   r   r8   Y   s   
r8   c               @   s$   e Zd Zdd Zdd Zdd ZdS )rC   c             C   s.   || | _ || _t| j j jtj| _d| _d S )NF)r9   rA   r>   r   r   CheckboxInputis_checkboxZis_readonly)r'   r$   r9   rA   r   r   r   r(   {   s    
zZKActionAdminField.__init__c             C   s~   dg}t t| jj}| jr&|d | jjjr8d| }| jsH|d |rZdd|ini }| jj	t
||| jrvdnd dS )	Nzlayui-form-labelvCheckboxLabelz!%s<span class="required">*</span>inliner   r2   r   )contentsattrslabel_suffix)r   r   r9   r   rJ   appendr   rA   r4   	label_tagr   )r'   r5   rM   rN   r   r   r   rQ      s    


zZKActionAdminField.label_tagc             C   s   t | jj S )N)r   r9   r-   rF   )r'   r   r   r   r-      s    zZKActionAdminField.errorsN)r   r   r   r(   rQ   r-   r   r   r   r   rC   z   s   rC   c               @   s   e Zd Zdd ZdS )ZKAdminFormc             c   s8   x2| j D ](\}}t| j|f| j| jd|V  qW d S )N)r7   model_admin)r%   
ZKFieldsetr$   r7   rS   )r'   r*   r+   r   r   r   r,      s    zZKAdminForm.__iter__N)r   r   r   r,   r   r   r   r   rR      s   rR   c               @   s   e Zd Zdd ZdS )rT   c             c   s,   x&| j D ]}t| j|| j| jdV  qW d S )N)rS   )r3   ZKFieldliner$   r7   rS   )r'   r9   r   r   r   r,      s    zZKFieldset.__iter__N)r   r   r   r,   r   r   r   r   rT      s   rT   c               @   s   e Zd Zdd ZdS )rU   c             c   sX   xRt | jD ]D\}}|| jkr:t| j||dk| jdV  qt| j||dkdV  qW d S )Nr   )rA   rS   )rA   )rB   r3   r7   ZKAdminReadonlyFieldr$   rS   ZKAdminField)r'   rD   r9   r   r   r   r,      s    
zZKFieldline.__iter__N)r   r   r   r,   r   r   r   r   rU      s   rU   c               @   s   e Zd Zdd ZdS )rW   c             C   s~   dg}t t| jj}| jr&|d | jjjr8d| }| jsH|d |rZdd|ini }| jj	t
||| jrvdnd dS )	Nzlayui-form-labelrK   z!%s<span class="required">*</span>rL   r   r2   r   )rM   rN   rO   )r   r   r9   r   rJ   rP   r   rA   r4   rQ   r   )r'   r5   rM   rN   r   r   r   rQ      s    


zZKAdminField.label_tagN)r   r   r   rQ   r   r   r   r   rW      s   rW   c               @   s   e Zd Zdd ZdS )rV   c             C   s4   i }| j sd|d< | jd }tdt|tt|S )NrL   r   r   z<label{}>{}:</label>)rA   r9   r   r	   r
   r   )r'   rN   r   r   r   r   rQ      s    
zZKAdminReadonlyField.label_tagN)r   r   r   rQ   r   r   r   r   rV      s   rV   c               @   sV   e Zd ZdZdddZdd Zdd Zd	d
 Zedd Z	edd Z
edd ZdS )InlineAdminFormSetzI
    A wrapper around an inline formset for use in the admin system.
    Nc             C   sX   || _ || _|| _|| _|d kr$d}|| _|d kr6i }|| _|jrNd|jnd| _d S )Nr   r2   r   )optsformsetr%   rS   r7   prepopulated_fieldsr5   r4   )r'   rL   rZ   r%   r[   r7   rS   r   r   r   r(      s    zInlineAdminFormSet.__init__c             c   s   xPt | jj| j D ]8\}}| j|}t| j|| j| j|| j	| j|dV  qW x2| jj
D ]&}t| j|| j| jd | j	| jdV  q\W t| j| jj| j| jd | j	| jdV  d S )N)rS   view_on_site_url)rS   )ziprZ   Zinitial_formsZget_querysetrY   Zget_view_on_site_urlZKInlineAdminFormr%   r[   r7   Zextra_forms
empty_form)r'   r$   originalr\   r   r   r   r,      s    


zInlineAdminFormSet.__iter__c             c   s   t | jdd }xtt| jD ]\}}|r6|j|kr6q|| jkrnt|| jj	| jddidt
|| jj	dV  q| jjj| }|j}|d krt|| jj	| j}||j|j|jdV  qW d S )Nfkr:   F)r   r   r   	help_text)getattrrZ   rB   r   r%   r*   r7   r   rY   modelr   r_   r3   r   r   r   rb   )r'   ra   rD   Z
field_nameZ
form_fieldr   r   r   r   r3      s"    
zInlineAdminFormSet.fieldsc          	   C   sH   | j j}td| jj | jjdtddt|i  dtd ddS )Nz#%sz%sz*helpers_addText_addAnother%(verbose_name)sverbose_nameZhelpers_deleteText_remove)prefixZaddTextZ
deleteText)r*   r+   )rY   re   jsondumpsrZ   rf   r   r
   )r'   re   r   r   r   inline_formset_data  s    
z&InlineAdminFormSet.inline_formset_datac             C   s   | j jS )N)rZ   r   )r'   r   r   r   r   "  s    zInlineAdminFormSet.formsc             C   s   | j jS )N)rZ   non_form_errors)r'   r   r   r   rj   &  s    z"InlineAdminFormSet.non_form_errorsc             C   s,   | j j| jj }x| D ]}||j }qW |S )N)rY   r/   rZ   )r'   r/   r0   r   r   r   r/   *  s    
zInlineAdminFormSet.media)NNN)r   r   r   __doc__r(   r,   r3   ri   r1   r   rj   r/   r   r   r   r   rX      s    
rX   c                   sR   e Zd ZdZd fdd	Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
  ZS )r^   zF
    A wrapper around an inline form for use in the admin system.
    Nc	       	         sB   || _ || _|| _|o|d k	| _|| _tt| ||||| d S )N)rZ   rS   r`   Zshow_urlZabsolute_urlsuperr^   r(   )	r'   rZ   r$   r%   r[   r`   r7   rS   r\   )	__class__r   r   r(   7  s    zZKInlineAdminForm.__init__c             c   s<   x6| j D ],\}}t| j| j|| jfd| ji|V  qW d S )NrS   )r%   ZKInlineFieldsetrZ   r$   r7   rS   )r'   r*   r+   r   r   r   r,   @  s    zZKInlineAdminForm.__iter__c             C   sZ   | j jjjjs| j jjjjjs"dS x2| j jjj D ]}|jjsN|jjjjjs4dS q4W dS )NTF)r$   Z_metard   Z
auto_fieldZpkZeditableZget_parent_list)r'   parentr   r   r   needs_explicit_pk_fieldG  s    z)ZKInlineAdminForm.needs_explicit_pk_fieldc             C   s   t | j| jjjdS )NF)rW   r$   rZ   Z	_pk_fieldr*   )r'   r   r   r   pk_fieldR  s    zZKInlineAdminForm.pk_fieldc             C   s*   t | jdd }|r"t| j|jdS dS d S )Nra   Fr   )rc   rZ   rW   r$   r*   )r'   ra   r   r   r   fk_fieldU  s    zZKInlineAdminForm.fk_fieldc             C   s   ddl m} t| j|dS )Nr   )DELETION_FIELD_NAMEF)django.forms.formsetsrs   rW   r$   )r'   rs   r   r   r   deletion_field\  s    z ZKInlineAdminForm.deletion_fieldc             C   s   ddl m} t| j|dS )Nr   )ORDERING_FIELD_NAMEF)rt   rv   rW   r$   )r'   rv   r   r   r   ordering_field`  s    z ZKInlineAdminForm.ordering_field)NNN)r   r   r   rk   r(   r,   rp   rq   rr   ru   rw   __classcell__r   r   )rm   r   r^   2  s   r^   c                   s$   e Zd Z fddZdd Z  ZS )rn   c                s   || _ tt| j|| d S )N)rZ   rl   rn   r(   )r'   rZ   argskwargs)rm   r   r   r(   f  s    zZKInlineFieldset.__init__c             c   sJ   t | jdd }x6| jD ],}|r*|j|kr*qt| j|| j| jdV  qW d S )Nra   )rS   )rc   rZ   r3   r*   rU   r$   r7   rS   )r'   ra   r9   r   r   r   r,   j  s
    zZKInlineFieldset.__iter__)r   r   r   r(   r,   rx   r   r   )rm   r   rn   e  s   rn   c                   s    e Zd ZdZ fddZ  ZS )AdminErrorListzN
    Stores all errors for the form/formsets in an add/change stage view.
    c                sb   t t|   |jr^| |j  x8|D ]0}| |  x|jD ]}| |  qDW q*W d S )N)rl   r{   r(   Zis_boundextendr-   valuesrj   )r'   r$   Zinline_formsetsZinline_formsetZerrors_in_inline_form)rm   r   r   r(   w  s    
zAdminErrorList.__init__)r   r   r   rk   r(   rx   r   r   )rm   r   r{   r  s   r{   c                s   t   fdd}|S )z
    t_start - t_end = used_time

    you can offer a dict to store the timing result

    example:
    log_time_container ={}
    result = SomeClass.get_all_result(log_time=log_time_container)

    :param method: callable
    :return:
    c                 s|   t   } | |}t   }d|krN|d j }t|| d |d |< n*tjrxtdtd	 j|| d d  |S )NZlog_timeZlog_namei  z
# z{!r} --- {: >10.5f} ms ---Zblue)
timegetr   upperintr   DEBUGprintr   format)ry   kwZt_startresultZt_endr*   )methodr   r   timed  s    
ztime_it.<locals>.timed)	functoolswraps)r   r   r   )r   r   time_it  s    r   c        
   	   O   s   ddl }ddlm} ddlm} |dd}tddd}d}x@| D ]8}|dkrPqBy|| W n |k
rr   wBY qBX |}P qBW |dkr|r||d}nFy |j|j	| d	 d }	W n t
k
r   Y nX |	r||	d}|S )
u   模板哨兵(当 model 自定义的模板文件不存在时，选用对应类型的默认的模板文件)
    :param tmp_list: template list
    :param kwargs: specfiy the template type
    :return: return valid template file (if any)
    r   N)get_template)TemplateDoesNotExisttmp_typezdata_grid.htmlzdata_edit.html)ZgridZedit)osZdjango.template.loaderr   Zdjango.templater   r   dictpathbasenamesplitext	TypeError)
Ztmp_listrz   r   r   r   r   Zreserved_sentryZvalidtmpsuffixr   r   r   template_sentry  s6    
 r   )=Z
__future__r   r   r   rg   r~   Zdjangor   Zdjango.contrib.adminr   Zdjango.contrib.admin.utilsr   r   r   Zdjango.forms.utilsr	   Zdjango.template.defaultfiltersr
   r?   Zdjango.utils.encodingr   Zdjango.utils.htmlr   r   Zdjango.utils.safestringr   Zdjango.utils.translationr   r   Zdjango.confr   Zmysite._utilsr   ZACTION_CHECKBOX_NAMEZFormr   rI   Zcheckboxobjectr#   r)   r8   rC   Z	AdminFormrR   ZFieldsetrT   Z	FieldlinerU   Z
AdminFieldrW   ZAdminReadonlyFieldrV   rX   r^   rn   ZutilsZ	ErrorListr{   r   r   r   r   r   r   <module>   sD   
!
[3 