a
    Ad	                     @   sb   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 Z
dd ZG dd	 d	ejZdS )
    N)	Processed)cmd_optsc                 C   s"   d| _ d| _tj| jddd}|S )Nr   )lineno
col_offset)r   r   ast
Expressionvalue)exprresult r   ;/var/www/html/stable-diffusion-webui/scripts/custom_code.pyconvertExpr2Expression
   s    r   c                 C   s   t | }t|}|jdd |_t|}|jdd |_tt|dd|j t|jd t j	krt
tt|jd dd|jS tt|dd|j dS )z\
    like exec() but can return values
    https://stackoverflow.com/a/52361938/5862977
    Nz<ast>execr   eval)r   parsecopydeepcopybodyr   compile__dict__typeExprr   r   )codemoduleZcode_astinit_astZlast_astr   r   r   exec_with_return   s    


r   c                   @   s,   e Zd Zdd Zdd Zdd Zdd Zd	S )
Scriptc                 C   s   dS )NzCustom coder   )selfr   r   r   title(   s    zScript.titlec                 C   s   t jS )N)r   
allow_code)r   
is_img2imgr   r   r   show+   s    zScript.showc                 C   s<   d}t j|dd| dd}t jddd| d	d
}||gS )Nzfrom modules.processing import process_images

p.width = 768
p.height = 768
p.batch_size = 2
p.steps = 10

return process_images(p)
pythonzPython coder   )r   languagelabelelem_idzIndent level   r   indent_level)r%   r   	precisionr&   )grCoder&   Number)r   r!   exampler   r(   r   r   r   ui.   s    z	Script.uic                    s   t jsJ dg ddg  d  d f fdd	}dd	lm} |d
}|jt  ||_||_d| }|	dd| }d| | d}	t
|	|}
t|
tr|
S t|g R  S )Nz#--allow-code option must be enabledr       r'   c                    s   |  d< | d< | d< d S )Nr   r0   r'   r   )imgssiZdisplay_result_datar   r   displayD   s    zScript.run.<locals>.displayr   )
ModuleTypeZ
testmodule 
zdef __webuitemp__():
z
__webuitemp__())r   r    typesr6   r   updateglobalspr5   replacer   
isinstancer   )r   r<   r   r(   r5   r6   r   indentindentedr   r
   r   r4   r   run?   s&    


z
Script.runN)__name__
__module____qualname__r   r"   r.   rA   r   r   r   r   r   &   s   r   )modules.scriptsscriptsgradior*   r   r   Zmodules.processingr   Zmodules.sharedr   r   r   r   r   r   r   r   <module>   s   