o
    dB                     @   s,  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZddlm	Z	 ddl
mZ dZdZdZdZd	Zd
ZdZdddZdZdZg dZdd Zd9ddZdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Z d'd( Z!d)d* Z"d+d, Z#d-d. Z$d/d0 Z%d1d2 Z&d3d4 Z'd5d6 Z(d7d8 Z)dS ):    N   )julia_keywords)reorder_propsz$03207cf0-e2b3-4b91-9ca8-690cf0fb507ez$1b08a953-4be3-4667-9a23-3db579824955ak  
export {funcname}

"""
    {funcname}(;kwargs...){children_signatures}

{docstring}
"""
function {funcname}(; kwargs...)
        available_props = Symbol[{component_props}]
        wild_props = Symbol[{wildcard_symbols}]
        return Component("{funcname}", "{element_name}", "{module_name}", available_props, wild_props; kwargs...)
end
{children_definitions}
z\
    {funcname}(children::Any;kwargs...)
    {funcname}(children_maker::Function;kwargs...)
z
{funcname}(children::Any; kwargs...) = {funcname}(;kwargs..., children = children)
{funcname}(children_maker::Function; kwargs...) = {funcname}(children_maker(); kwargs...)
a  
module {package_name}
using {base_package}

const resources_path = realpath(joinpath( @__DIR__, "..", "deps"))
const version = "{version}"

{component_includes}

function __init__()
    DashBase.register_package(
        DashBase.ResourcePkg(
            "{project_shortname}",
            resources_path,
            version = version,
            [
                {resources_dist}
            ]
        )

    )
end
end
z
name = "{package_name}"
uuid = "{package_uuid}"
{authors}version = "{version}"

[deps]
{base_package} = "{dash_uuid}"

[compat]
julia = "1.2"
{base_package} = "{base_version}"
z
0.1.3, 1.0z0.1)DashDashBasezinclude("jl/{name}.jl")zDashBase.Resource(
    relative_package_path = {relative_package_path},
    external_url = {external_url},
    dynamic = {dynamic},
    async = {async_string},
    type = :{type}
))dash_html_componentsdash_core_components
dash_tablec                 C   s   |  d}ddd |D S )N_ c                 s   s    | ]}|  V  qd S N)
capitalize).0w r   o/var/www/html/visualizacion-main/env/lib/python3.10/site-packages/dash/development/_jl_components_generation.py	<genexpr>k   s    z"jl_package_name.<locals>.<genexpr>)splitjoin)
namestringsr   r   r   jl_package_namei   s   
r   Fc                 C   s4   |rd dd | D }|S d dd | D }|S )N|c                 s       | ]}d  |V  qdS )z{}-Nformatr   itemr   r   r   r   p       z&stringify_wildcards.<locals>.<genexpr>, c                 s   r   )zSymbol("{}-")Nr   r   r   r   r   r   r   r   )r   )wclist	no_symbolwcstringr   r   r   stringify_wildcardsn   s
   r#   c                 C   s   dd | D S )Nc                 S   s"   g | ]}| d r|d dqS )-*r   )endswithreplace)r   keyr   r   r   
<listcomp>w   s   " z$get_wildcards_jl.<locals>.<listcomp>r   propsr   r   r   get_wildcards_jlv   s   r+   c                    sp    fdd}t dd dd dd dd dd d	d d
d dd  fdd fdd fdd fdd||dS )z<Mapping from the PropTypes js type object to the Julia type.c                
      s>   d ddd  d D d ddd  d  D S )	Nz lists containing elements {}.
{}r   c                 s   r   )z'{}'Nr   r   tr   r   r   r      r   z<get_jl_prop_types.<locals>.shape_or_exact.<locals>.<genexpr>valuez+Those elements have the following types:
{}
c              	   s   s2    | ]\}}t |||d  |ddddV  qdS )requireddescriptionr   r   	prop_nametype_objectr0   r1   
indent_numN)create_prop_docstring_jlget)r   r3   propr   r   r   r      s    

)r   r   itemsr   r4   r   r   shape_or_exact}   s   

z)get_jl_prop_types.<locals>.shape_or_exactc                   S      dS )NArrayr   r   r   r   r   <lambda>       z#get_jl_prop_types.<locals>.<lambda>c                   S   r<   )NBoolr   r   r   r   r   r>      r?   c                   S   r<   )NRealr   r   r   r   r   r>      r?   c                   S   r<   )NStringr   r   r   r   r   r>      r?   c                   S   r<   )NDictr   r   r   r   r   r>      r?   c                   S   r<   )Nz#Bool | Real | String | Dict | Arrayr   r   r   r   r   r>      r?   c                   S   r<   )Nzdash componentr   r   r   r   r   r>      r?   c                   S   r<   )Nz8a list of or a singular dash component, string or numberr   r   r   r   r   r>      r?   c                         d ddd  d D S )Nza value equal to: {}r   c                 s   s"    | ]}d  t|d V  qdS ){}r.   N)r   strr,   r   r   r   r      s     6get_jl_prop_types.<locals>.<lambda>.<locals>.<genexpr>r.   r   r   r   r:   r   r   r>      s    c                      rD   )NrE   z | c                 s   s*    | ]}t |d krdt |V  qdS )r   rE   Nget_jl_typer   )r   subTyper   r   r   r      s    

rG   r.   rH   r   r:   r   r   r>      s
    
c                      s,   dt  d dkrdt  d  S d S )Nr=   r.   r   z of {}srI   r   r:   r   r   r>      s   c                      s   d t d S )Nz/Dict with Strings as keys and values of type {}r.   )r   rJ   r   r:   r   r   r>      s    
)arrayboolnumberstringobjectanyelementnodeenumunionarrayOfobjectOfshapeexact)dict)r4   r;   r   r:   r   get_jl_prop_typesz   s"   



	r[   c                 C   s   t | }t| D ]I\}}d|vrd|vr|| qd|v r1|d d }|dv r0|| qd|v rS|d d }|dkrRd|d vsM|d d dkrR|| qt|S )a  Filter props from the Component arguments to exclude:
        - Those without a "type" or a "flowType" field
        - Those with arg.type.name in {'func', 'symbol', 'instanceOf'}
    Parameters
    ----------
    props: dict
        Dictionary with {propName: propMetadata} structure
    Returns
    -------
    dict
        Filtered dictionary with {propName: propMetadata} structure
    typeflowTypename>   funcsymbol
instanceOf	signaturerP   )copydeepcopylistr9   pop
ValueError)r*   filtered_propsarg_nameargarg_typearg_type_namer   r   r   filter_props   s$   



rm   c                 C   s,   | d }t | d}||v r||  }|S dS )z
    Convert JS types to Julia types for the component definition
    Parameters
    ----------
    type_object: dict
        react-docgen-generated prop type dictionary
    Returns
    -------
    str
        Julia type string
    r^   r:   r   )r[   )r4   js_type_namejs_to_jl_types	prop_typer   r   r   rJ      s   

rJ   c                 C   s   t |  }|r|d7 }|S )Nz. )rJ   r   )typedata
typestringr   r   r   print_jl_type   s   rs   c              	   C   sH   t |d}dj| d  dv rdnd| |ddd	 t| D d
S )a5  Create the Dash component docstring.
    Parameters
    ----------
    component_name: str
        Component name
    props: dict
        Dictionary with {propName: propMetadata} structure
    description: str
        Component description
    Returns
    -------
    str
        Dash component docstring
    r)   z>A{n} {name} component.
{description}
Keyword arguments:
{args}r   aeiounr   r/   c                 s   sB    | ]\}}t |d |v r|d  n|d |d |d ddV  qdS )r\   r]   r0   r1   r   r2   N)r6   )r   pr8   r   r   r   r     s    
z&create_docstring_jl.<locals>.<genexpr>)ru   r^   r1   args)r   r   lowerr   rm   r9   component_namer*   r1   r   r   r   create_docstring_jl   s   


r{   c                 C   sz   t |d}d| }d|v rdj|| |||rddS ddS dj|| |r(d	|nd
|d
kr2d|nd
|r9ddS ddS )aS  
    Create the Dash component prop docstring
    Parameters
    ----------
    prop_name: str
        Name of the Dash component prop
    type_object: dict
        react-docgen-generated prop type dictionary
    required: bool
        Component is required?
    description: str
        Dash component description
    indent_num: int
        Number of indents to use for the context block
        (creates 2 spaces for every indent)
    is_flow_type: bool
        Does the prop use Flow types? Otherwise, uses PropTypes
    Returns
    -------
    str
        Dash component prop docstring
    r:   z  r/   z`{indent_spacing}- `{name}` ({is_required}): {description}. {name} has the following type: {type}r0   optional)indent_spacingr^   r\   r1   is_requiredz={indent_spacing}- `{name}` ({type}{is_required}){description}z{}; r   z: {}rI   )r3   r4   r0   r1   r5   jl_type_namer}   r   r   r   r6     s0   

r6   c                 C   s   | r
d | | S | S )Nz{}_{})r   rx   )prefixr^   r   r   r   format_fn_nameS  s   r   c                    s   dd  fdd| D S )Nc                 S   s   | rd | S dS )Nz"{}"nothingr   )vr   r   r   nothing_or_stringZ  s   z4generate_metadata_strings.<locals>.nothing_or_stringc                    sl   g | ]2}t j|d d|ddt|dd  d| v r0dt|d nddqS )relative_package_pathr   external_urldynamicr   async:{})r   r   r   r\   async_string)jl_resource_tuple_stringr   r7   rF   rx   keys)r   resourcemetatyper   r   r   r(   ]  s    

z-generate_metadata_strings.<locals>.<listcomp>r   )	resourcesr   r   r   r   generate_metadata_stringsY  s   r   c                 C   s   | t v S r   )core_packagesproject_shortnamer   r   r   is_core_packagem  s   r   c                 C   s   t | rdS dS )Nr   r   )r   r   r   r   r   base_package_nameq     r   c                 C   s   t | rtS tS r   )r   jl_dash_base_uuidjl_dash_uuidr   r   r   r   base_package_uidu  r   r   c                    s   t | }tjdt  t| }t|dg }t|dg }|	d}d
t|dt|d }	tj|d
 fd	d
|D |	|| t| d}
tj
d|d }t|ddd}||
 W d    n1 sgw   Y  td| d S )Nr   _js_dist	_css_distversionz,
jscssr/   c                    s   g | ]}t jt |d qS ))r^   )jl_component_include_stringr   r   )r   	comp_namer   r   r   r(     s    z)generate_package_file.<locals>.<listcomp>)package_namecomponent_includesresources_distr   r   base_packagesrc.jlr   utf-8encodingGenerated {})r   syspathinsertosgetcwd	importlibimport_modulegetattrr7   r   r   jl_package_file_stringr   r   openwriteprint)r   
componentspkg_datar   r   modjs_distcss_distproject_verr   package_string	file_pathfr   r   r   generate_package_filey  s8   


r   c              	   C   s   | dd}| d}t| }tt}tj|jd d t|d	 dd   d}|r4d
|nd}t| }tj
|||||t| t| d}	d	}
t|
d
dd}||	 W d    n1 scw   Y  td
|
 d S )Nauthorr   r   ir   )hexzauthors = ["{}"]
)r   package_uuidr   authorsr   base_version	dash_uuidzProject.tomlr   r   r   )r7   r   uuidUUIDr   r   hashlibmd5encode	hexdigestr   r   jl_projecttoml_stringjl_base_versionr   r   r   r   )r   r   package_authorr   r   ur   authors_stringr   toml_stringr   r   r   r   r   generate_toml_file  s0   

(	r   c                 C   s  t t|}t| }t| ||ddddd}t|}d}	|d d  D ]#}
|
ds2|
dkr8||
 q'|
t	v rJ||
 t
d	|
|  q'|	d
dd |D 7 }	d|v }t|| }|rhtj|dnd}|rrtj|dnd}tjt|| ||	t|ddt|dd| |||d	S )Nry   z
r/   $z\$r   r$   setPropszZWARNING: prop "{}" in component "{}" is a Julia keyword - REMOVED FROM THE JULIA COMPONENTr   c                 s   r   )r   Nr   )r   rv   r   r   r   r     r   z(generate_class_string.<locals>.<genexpr>children)funcnameF)r!   T)	r   	docstringcomponent_propswildcard_symbolswildcard_nameselement_namemodule_namechildren_signatureschildren_definitions)r   rm   re   r   r{   r&   r+   r%   remover   warningswarnr   r   r   jl_children_signaturesjl_children_definitionsjl_component_stringr#   )r^   r*   r1   r   r   rh   	prop_keysr   r    default_paramtextr   has_childrenr   r   r   r   r   r   generate_class_string  sL   



r   c           
      C   s   t |d}d}t| ||||}t|| d }tjds!td tjdd|}t|ddd	}	|		| |		| W d    n1 sEw   Y  t
d
| d S )Nr)   z$# AUTO GENERATED FILE - DO NOT EDIT
r   zsrc/jlr   jlr   r   r   r   )r   r   r   r   r   existsmakedirsr   r   r   r   r   )
r^   r*   r1   r   r   import_stringclass_string	file_namer   r   r   r   r   generate_struct_file  s   



r   c              	   K   s   t jdrtd t d t | D ]9\}}}|D ]1}	t j|	d }
|
dv r+qt jdt j	|| }t j|sBt | t
t j||	| qqt| ||| t| | d S )Ndepsr   )z.pyz.pycz.jsonzdeps/)r   r   r   shutilrmtreer   walksplitextr   relpathrc   r   r   )r   r   metadatar   r   kwargsrel_dirnamer
   	filenamesfilename	extensiontarget_dirnamer   r   r   generate_module  s"   


r   )F)*rc   r   r   r   r   r   r   r   _all_keywordsr   _py_components_generationr   r   r   r   r   r   r   r   r   r   r   r   r   r#   r+   r[   rm   rJ   rs   r{   r6   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sT   
=&#8#5