a
    Ad["                     @   sp   d dl Z d dlZd dlZd dlmZ d dlmZ G dd dZG dd deZ	dd	 Z
h d
ZG dd dZdS )    N)errors)cmd_optsc                   @   sF   e Zd ZdddZdd Zdd	 Zd
d Zdd Zdd Zdd Z	dS )
OptionInfoN Fc                 C   sL   || _ || _|| _|| _|| _|| _|| _d| _|| _|	| _	|
| _
|| _d S )NF)defaultlabel	componentcomponent_argsonchangesectionrefreshdo_not_savecomment_beforecomment_afterinfotextrestrict_api)selfr   r   r   r	   r
   r   r   r   r   r   r    r   7/var/www/html/stable-diffusion-webui/modules/options.py__init__   s    zOptionInfo.__init__c                 C   s    |  j d| d| d7  _ | S )Nz
[<a href='z' target='_blank'></a>]r   )r   r   urlr   r   r   link    s    zOptionInfo.linkc                 C   s    |  j d| d| d7  _ | S )Nz[<a onclick='z(); return false'>r   r   )r   r   Zjs_funcr   r   r   js$   s    zOptionInfo.jsc                 C   s   |  j d| d7  _ | S )Nz<span class='info'>(z)</span>r   )r   infor   r   r   r   (   s    zOptionInfo.infoc                 C   s   |  j |7  _ | S Nr   )r   htmlr   r   r   r   ,   s    zOptionInfo.htmlc                 C   s   |  j d7  _ | S )Nz- <span class='info'>(requires restart)</span>r   r   r   r   r   needs_restart0   s    zOptionInfo.needs_restartc                 C   s   |  j d7  _ | S )Nz/ <span class='info'>(requires Reload UI)</span>r   r   r   r   r   needs_reload_ui4   s    zOptionInfo.needs_reload_ui)Nr   NNNNNr   r   NF)
__name__
__module____qualname__r   r   r   r   r   r    r!   r   r   r   r   r   
   s   
r   c                       s   e Zd Z fddZ  ZS )
OptionHTMLc                    s(   t  jt| ddd d d| _d S )Nr   c                  [   s   t jf ddi| S )Nelem_classeszsettings-info)grHTML)kwargsr   r   r   <lambda>;       z%OptionHTML.__init__.<locals>.<lambda>)r   r   T)superr   strstripr   )r   text	__class__r   r   r   :   s    zOptionHTML.__init__)r"   r#   r$   r   __classcell__r   r   r0   r   r%   9   s   r%   c                 C   s   |  D ]
}| |_q|S r   )valuesr   )Zsection_identifierZoptions_dictvr   r   r   options_section@   s    r5   >   datadata_labelstypemaprestricted_optsc                       s   e Zd ZeeiZeeef dddZ	 fddZ
 fddZdd
dZdd Zdd Zdd Zdd ZdddZdd Zdd Zdd Zdd Z  ZS ) Optionsr7   c                 C   s&   || _ dd | j  D | _|| _d S )Nc                 S   s   i | ]\}}||j qS r   )r   .0kr4   r   r   r   
<dictcomp>O   r+   z$Options.__init__.<locals>.<dictcomp>)r7   itemsr6   r9   )r   r7   r9   r   r   r   r   M   s    zOptions.__init__c                    s   |t v rtt| ||S | jd ur|| jv s8|| jv rtjrFJ d| j|d }|j	r^d S |rh|j
nd }t|tr|dddu rtd| dtjr|| jv rtd| d|| j|< d S tt| ||S )Nzchanging settings is disabledvisibleTFznot possible to set z because it is restricted)options_builtin_fieldsr,   r:   __setattr__r6   r7   r   freeze_settingsgetr   r	   
isinstancedictRuntimeErrorhide_ui_dir_configr9   )r   keyvaluer   Z	comp_argsr0   r   r   rC   R   s     

zOptions.__setattr__c                    s\   |t v rtt| |S | jd ur6|| jv r6| j| S || jv rL| j| jS tt| |S r   )rB   r,   r:   __getattribute__r6   r7   r   )r   itemr0   r   r   __getattr__j   s    



zOptions.__getattr__FTc              
   C   s   | j |d}||krdS | j| }|jr.dS |r<|jr<dS zt| || W n ty`   Y dS 0 |r|jdurz|  W nJ ty } z2t	
|d| d|  t| || W Y d}~dS d}~0 0 dS )zhsets an option and calls its onchange callback, returning True if the option changed and False otherwiseNFzchanging setting z to T)r6   rE   r7   r   r   setattrrH   r
   	Exceptionr   display)r   rJ   rK   Zis_apiZrun_callbacksZoldvaloptioner   r   r   setw   s(    

zOptions.setc                 C   s   | j |}|du rdS |jS )z%returns the default value for the keyN)r7   rE   r   )r   rJ   
data_labelr   r   r   get_default   s    zOptions.get_defaultc                 C   sR   t jrJ dt|ddd"}tj| j|dd W d    n1 sD0    Y  d S )Nzsaving settings is disabledwutf8encoding   )indent)r   rD   openjsondumpr6   )r   filenamefiler   r   r   save   s    zOptions.savec                 C   sH   |d u s|d u rdS | j t|t|}| j t|t|}||kS )NT)r8   rE   type)r   xyZtype_xZtype_yr   r   r   	same_type   s
    zOptions.same_typec                 C   s  t |ddd}t|| _W d    n1 s00    Y  | jdd urn| jdd u rn| jd | jd< | jdd ur| jdd u rdd	 | jdd
D | jd< t| jdtr| jdrd| jvrdd	 | jdd
D | jd< d}| j D ]p\}}| j	|d }|d ur| 
|j|std| d| dt|j dt|jj d	tjd |d7 }q|dkrtd| dtjd d S )NrrX   rY   Zsd_vae_as_default&sd_vae_overrides_per_model_preferencesZquicksettingsZquicksettings_listc                 S   s   g | ]}|  qS r   r.   r=   ir   r   r   
<listcomp>   r+   z Options.load.<locals>.<listcomp>,Z
ui_reorderZui_reorder_listc                 S   s   g | ]}|  qS r   ri   rj   r   r   r   rl      r+   r   zWarning: bad setting value: z: z (z; expected ))ra      zDThe program is likely to not work with bad settings.
Settings file: z/
Either fix the file, or delete it and restart.)r]   r^   loadr6   rE   splitrF   r-   r@   r7   rf   r   printrc   r"   sysstderr)r   r`   ra   Zbad_settingsr>   r4   r   r   r   r   rp      s     *  "("6
zOptions.loadc                 C   s    | j |}||_|r|  d S r   )r7   rE   r
   )r   rJ   funccallrM   r   r   r   r
      s    zOptions.onchangec                    sR    fdd j  D }dd  j  D |d< dd  j  D |d< t|S )Nc                    s"   i | ]\}}| j ||jqS r   )r6   rE   r   r<   r   r   r   r?      r+   z$Options.dumpjson.<locals>.<dictcomp>c                 S   s"   i | ]\}}|j d ur||j qS r   r   r<   r   r   r   r?      r+   Z_comments_beforec                 S   s"   i | ]\}}|j d ur||j qS r   r   r<   r   r   r   r?      r+   Z_comments_after)r7   r@   r^   dumps)r   dr   r   r   dumpjson   s    zOptions.dumpjsonc                 C   s   || j |< d S r   r;   )r   rJ   r   r   r   r   
add_option   s    zOptions.add_optionc                    sR   i  | j  }|D ] \}}|j vrt  |j< qtt| fddd| _ dS )zHreorder settings so that all items related to section always go togetherc                    s    | d j  S )Nro   )r   )rd   Zsection_idsr   r   r*      r+   z!Options.reorder.<locals>.<lambda>)rJ   N)r7   r@   r   lenrG   sorted)r   Zsettings_items_rM   r   r{   r   reorder   s    

zOptions.reorderc                 C   sb   |du rdS | j | j}|du r,t| |d}|du r8dS t|}|tkrV|dkrVd}n||}|S )zcasts an arbitrary to the same type as this setting's value with key
        Example: cast_value("eta_noise_seed_delta", "12") -> returns 12 (an int rather than str)
        NFalseF)r7   r   getattrrc   bool)r   rJ   rK   default_valueexpected_typer   r   r   
cast_value   s    zOptions.cast_value)FT)T)r"   r#   r$   intfloatr8   rG   r-   r   r   rC   rN   rT   rV   rb   rf   rp   r
   ry   rz   r   r   r2   r   r   r0   r   r:   J   s   
		
r:   )r^   rs   gradior'   modulesr   modules.shared_cmd_optionsr   r   r%   r5   rB   r:   r   r   r   r   <module>   s   /