
    $g                         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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 d dlmZ  ej(                         Zd Zd Z	 d!dZd	 Zd
 Z G d de      Zd"dZd Zd Zd Z d Z!d Z"d Z#d Z$d#dZ%d Z& G d dejN                  jP                        Z)d Z*de+fdZ,deedf   de+fdZ-d Z.d  Z/y)$    N)escapewraps)Union)RendererHooksc                     ddl m}  ||       S )Nr   )to_json_plotly)plotly.io.jsonr	   )valuer	   s     H/var/www/dash_apps/app1/venv/lib/python3.12/site-packages/dash/_utils.pyto_jsonr      s    -%      c                 n    | }|j                         D ]  \  }}d|z   dz   }|j                  ||      }! |S )Nz{%z%})itemsreplace)templatedataskvkeys         r   interpolate_strr      sD    A

 1QhoIIc1 Hr   c                     dj                  |j                         D cg c]  \  }}| d|rt        |      n| d c}}      }d|  d| }|r|dz  }|S |r|dz  }|S |d|z   d|  dz   z  }|S c c}}w )N z=""<z/>>z</)joinr   r   )	tag_name
attributesinnerclosedopenedsanitizer   r   tags	            r   
format_tagr&   %   s     =G=M=M=OPTQA3bhA.a	0PJ hZq
%Ct
 J	 
s
 J 	sU{r(1---J 	Qs   A1
c                  n    t        t        j                         j                        j	                  d      S )N-)struuiduuid4hexstrip r   r   generate_hashr/   5   s$    tzz| &&s++r   c                 6    t        t        j                  |       S N)getattrcollectionsabc)members    r   patch_collections_abcr6   :   s    ;??F++r   c                   J     e Zd ZdZd Zd Zd	dZd
dZ fdZd Z	d Z
 xZS )AttributeDicta'  Dictionary subclass enabling attribute lookup/assignment of keys/values.

    For example::
        >>> m = AttributeDict({'foo': 'bar'})
        >>> m.foo
        'bar'
        >>> m.foo = 'not bar'
        >>> m['foo']
        'not bar'
    ``AttributeDict`` objects also provide ``.first()`` which acts like
    ``.get()`` but accepts multiple keys as arguments, and returns the value of
    the first hit, e.g.::
        >>> m = AttributeDict({'foo': 'bar', 'biz': 'baz'})
        >>> m.first('wrong', 'incorrect', 'foo', 'biz')
        'bar'
    c                     || |<   y r1   r.   )selfr   r   s      r   __setattr__zAttributeDict.__setattr__P   s    S	r   c                 @    	 | |   S # t         $ r Y t        |      w xY wr1   )KeyErrorAttributeError)r:   r   s     r   __getattr__zAttributeDict.__getattr__S   s0    	9 	 S!!		s    	c                     |D ci c]  }|| }}t        | dd      r| j                  j                  |       yt        j	                  | d|       yc c}w )z
        Designate named attributes as read-only with the corresponding msg

        Method is additive. Making additional calls to this method will update
        existing messages and add to the current set of _read_only names.
        
_read_onlyFN)r2   rA   updateobjectr;   )r:   namesmsgnamenew_read_onlys        r   set_read_onlyzAttributeDict.set_read_only\   sP     055ts554u-OO""=1t\=A	 6s   
Ac                 2    t         j                  | d|       y)zPrevent any new keys being set._finalN)rC   r;   )r:   rE   s     r   finalizezAttributeDict.finalizei   s    43/r   c                     || j                   j                  di       v rt        | j                  |   |      | j                   j                  d      }|r|| vrt        ||      t        |   ||      S )NrA   rJ   )__dict__getr>   rA   super__setitem__)r:   r   val	final_msg	__class__s       r   rP   zAttributeDict.__setitem__m   sn    $--##L"55 !5s;;MM%%h/	D C00w"3,,r   c                 >    |j                         D ]
  \  }}|| |<    y r1   )r   )r:   otherr   r   s       r   rB   zAttributeDict.updatew   s$    KKM 	DAqDG	r   c                 n    |D ]  }| j                  |      }|s|c S  |st        t        |       i       S y r1   )rN   nextiter)r:   rD   rF   r   s       r   firstzAttributeDict.first}   sA     	DHHTNE	 T
B'' r   )zAttribute is read-only)z*Object is final: No new keys may be added.)__name__
__module____qualname____doc__r;   r?   rH   rK   rP   rB   rY   __classcell__)rS   s   @r   r8   r8   >   s,    ""B0-(r   r8   c                     d fdfd|r        S t        | t        t        f      r ddj                  fd| D              z   dz   S  |       S )Nc                      t        j                  dj                  d  D              j                  d            j	                         S )N.c              3   2   K   | ]  }t        |        y wr1   )r)   ).0xs     r   	<genexpr>z;create_callback_id.<locals>._hash_inputs.<locals>.<genexpr>   s     ,SV,   utf-8)hashlibsha256r   encode	hexdigest)inputss   r   _hash_inputsz(create_callback_id.<locals>._hash_inputs   s8    ~~HH,V,,33G<

)+	r   c                     | j                         j                  dd      dz   | j                  z   }| j                  rs        |d z  }|S )Nra   z\.@)component_id_strr   component_propertyallow_duplicate)rd   _idrm   hashed_inputss     r   _concatz#create_callback_id.<locals>._concat   sW      "**36<q?S?SS  ,Q}o&&C
r   .....c              3   .   K   | ]  } |        y wr1   r.   )rc   rd   ru   s     r   re   z%create_callback_id.<locals>.<genexpr>   s      < <s   )
isinstancelisttupler   )outputrl   	no_outputru   rm   rt   s    ` @@@r   create_callback_idr~      sX     M
 ~&4-(ejj <V <<<tCC6?r   c                     | j                  d      r+| dd j                  d      D cg c]  }t        |       c}S | j                  dd      \  }}||dS c c}w )Nrv      rw   ra      )idproperty)
startswithsplitsplit_callback_idrsplit)callback_idoiid_props       r   r   r      s`    d#0;Ab0A0G0G0NO"!"%OO""3*IC4(( Ps   Ac                      d t         t              r*ddj                   fdt               D              z   dz   S  S )Nc                     t        |d      r|j                         nt        j                  |      }t        j                  |        d| S )Nr   :)hasattrr   jsondumps)r   r   vstrs      r   _jsonzstringify_id.<locals>._json   s9    %a3qyy{A**Q-$((r   {,c              3   6   K   | ]  } ||           y wr1   r.   )rc   r   r   r   s     r   re   zstringify_id.<locals>.<genexpr>   s     D1eAs1v.Ds   })ry   dictr   sorted)r   r   s   `@r   stringify_idr      s<    ) #tSXXDsDDDsJJJr   c                     t               }| D ]H  }t        |t              r|n|g}|D ],  }t        |d         }|j	                  d      || d|d    <   . J |S )Nr   r   ra   r   )r8   ry   rz   r   rN   )inputs_listrl   iinputsiiiid_strs         r   inputs_to_dictr      st    _F C!!T*! 	CB!"T(+F3566'?FfXQr*~./0	CC
 Mr   c           	          g }| D ]U  }t        |t              r|j                  t        |             .|j                  |D cg c]  }t        |       c}       W |S c c}w r1   )ry   r   appendr8   )nested_listnew_dictr   r   s       r   convert_to_AttributeDictr      sY    H =aOOM!,-OO;2]2.;<	=
 O <s   A
c           
          | D cg c]B  }t        |t              r|D cg c]  }|j                  d       c}n|j                  d      D c}}S c c}w c c}}w )Nr   )ry   rz   rN   )rl   r   r   s      r   inputs_to_valsr      sP      *4At)<1%R%!%%.P %s   AAAAc                    t         j                  dk(  }t        j                  t	        j
                  | |      |      5 }|j                          |j                         &t        j                  d       	 |j                          d d d        y # t        $ r8 t        j                  d       |j                          |j                          Y Iw xY w# 1 sw Y   y xY w)Nwin32)posix)shellu/   🚨 trying to terminate subprocess in safe wayu!   🚨 first try communicate failed)sysplatform
subprocessPopenshlexr   waitpollloggerwarningcommunicate	Exception	exceptionkill)cmdis_winprocs      r   run_command_with_processr      s    \\W$F			%++c8	G 	#4		99;NNLM#  "	# 	#  #  !DE		  "#	# 	#s*    6C7B>CCCCCc                     t        j                  | d      5 }t        j                  |j	                         j                  d            j                         cd d d        S # 1 sw Y   y xY w)Nrg   )encoding)ioopenrh   ri   readrj   rk   )pathfps     r   compute_hashr      sQ    		( EB~~bggi..w78BBDE E Es   A A""A+c                       fd}|S )Nc                 2     t                fd       }|S )Nc                      t         j                  dj                          | i |}t         j                  dj                         |S )Nu   🏗️  [%s] 🏗️️  - %su/   ::: 🍻🍻🍻 [%s] job done 🍻🍻🍻 :::)r   inforZ   )argskwargsresfuncrE   s      r   _wrapperz&job.<locals>.wrapper.<locals>._wrapper   s?    KK8$--M''CKKI4==YJr   r   )r   r   rE   s   ` r   wrapperzjob.<locals>.wrapper   s     	t	 
	 r   r.   )rE   r   s   ` r   jobr      s     Nr   c                 D    dj                  d t        |       D              S )N c              3      K   | ]8  }t        j                  t        j                  t        j                  z          : y wr1   )secretschoicestringascii_lettersdigits)rc   _s     r   re   zgen_salt.<locals>.<genexpr>   s-      ABv++fmm;<s   >A )r   range)charss    r   gen_saltr      s$    77 FKEl  r   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)
OrderedSetc                 B    g | _         |D ]  }| j                  |        y r1   )_dataadd)r:   r   r   s      r   __init__zOrderedSet.__init__   s#    
 	AHHQK	r   c                 X    || j                   vr| j                   j                  |       y y r1   )r   r   r:   r   s     r   r   zOrderedSet.add  s%    

"JJe$ #r   c                 :    | j                   j                  |       y r1   )r   remover   s     r   discardzOrderedSet.discard  s    

% r   c                     || j                   v S r1   r   )r:   rd   s     r   __contains__zOrderedSet.__contains__	  s    DJJr   c                 ,    t        | j                        S r1   )lenr   )r:   s    r   __len__zOrderedSet.__len__  s    4::r   c              #   6   K   | j                   D ]  }|  y wr1   r   )r:   r   s     r   __iter__zOrderedSet.__iter__  s      	AG	s   N)	rZ   r[   r\   r   r   r   r   r   r   r.   r   r   r   r      s     
%!r   r   c                 8    t        | t        t        f      s| gS | S r1   )ry   rz   r{   )objs    r   coerce_to_listr     s    cD%=)uJr   rF   c                 *    | j                  d      d   S )Nro   r   )r   )rF   s    r   clean_property_namer     s    ::c?1r   hooksreturnc                 `    | ydj                  d | j                         D              }d| dS )Nr   r   c              3   0   K   | ]  \  }}| d |   yw)z: Nr.   )rc   r   rQ   s      r   re   z%hooks_to_js_object.<locals>.<genexpr>!  s     FHC3%r#Fs   r   r   )r   r   )r   hook_strs     r   hooks_to_js_objectr     s3    }xxFFFHzr   c                 D    t        d | j                  d      D              S )Nc              3   2   K   | ]  }t        |        y wr1   )int)rc   r   s     r   re   z parse_version.<locals>.<genexpr>'  s     4AQ4rf   ra   )r{   r   )versions    r   parse_versionr   &  s    4s!3444r   c                      t        j                         } | D ]9  }|j                  dk(  s|j                  j                  j                  dd      c S  y)Nz<module>rZ   __main__)inspectstackfunctionframef_localsrN   )r  r   s     r   get_caller_namer  *  sL    MMOE @::#77##''
J??@ r   )r   FFF)F)r   )0r   r   r*   rh   r3   r   loggingr   r   r   r   r  htmlr   	functoolsr   typingr   
dash.typesr   	getLoggerr   r   r   r&   r/   r6   r   r8   r~   r   r   r   r   r   r   r   r   r   r4   
MutableSetr   r   r)   r   r   r   r  r.   r   r   <module>r     s     
      	        $				! JO ,
,E(D E(PD)#E
++ 0c eM4$78 S 5r   