U
     f
                     @   sP   d dl mZ d dlmZmZ d dlmZ d dlmZ G dd deZ	dd Z
d	S )
    )apps)CommandErrorLabelCommand)	force_str)signalcommandc                   @   s$   e Zd ZdZdd Zedd ZdS )Commandz>Outputs the specified model as a form definition to the shell.c                 C   s*   |j dtdd |j ddddg dd	 d S )
Nlabelzapplication name and model name)typehelpz--fieldsz-fappendfieldsz$Describe form with these fields only)actiondestdefaultr
   )add_argumentstr)selfparser r   W/tmp/pip-unpacked-wheel-1isl55vw/django_extensions/management/commands/describe_form.pyadd_arguments   s        zCommand.add_argumentsc                 O   s   |d }|d }t ||S )Nr   r   )describe_form)r   argsoptionsr   r   r   r   r   handle   s    zCommand.handleN)__name__
__module____qualname__r
   r   r   r   r   r   r   r   r   	   s   r   c                 C   s  z|  ddd \}}W n  ttfk
r:   tdY nX t||}|j}g }|j|j D ]}|j	slq^|r||j
|kr|q^| }dt|krq^i }	dddd	d
ddddddg}
|j D ]r\}}||
kr|dk	r|dkr|rq|dkr|sq|dkr|j|	|< q|dkr$tt| |	|< q||	|< qddd t|	 D }|d|j
|jj|d  q^d||jd|d S )z6 Return a string describing a form based on the model .Nz:Need application and model name in the form: appname.model__dict__requiredinitial
max_lengthZ
min_lengthZ	max_valueZ	min_valueZ
max_digitsZdecimal_placeschoices	help_textr   Zwidget)r%   r   z, c                 S   s   g | ]\}}d ||f qS )z%s=%rr   ).0kvr   r   r   
<listcomp>>   s     z!describe_form.<locals>.<listcomp>z5    %(field_name)s = forms.%(field_type)s(%(params)s))
field_nameZ
field_typeparamsz
from django import forms
from %(app_name)s.models import %(object_name)s

class %(object_name)sForm(forms.Form):
%(field_list)s

)app_nameobject_name
field_list)split
IndexError
ValueErrorr   r   Z	get_modelZ_metar   Zmany_to_manyeditablename	formfielddirr    items	__class__r   r   stripjoinsortedr   r   r.   )r   r   r-   Z
model_namemodeloptsr/   fr5   attrsZvalid_fieldsr'   r(   r+   r   r   r   r      sJ    


r   N)Zdjango.appsr   Zdjango.core.management.baser   r   Zdjango.utils.encodingr   Z"django_extensions.management.utilsr   r   r   r   r   r   r   <module>   s
   