§
    kÍâh	F  ã                   ó  — 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mZ d dl	m
Z
 d dlmZmZ d dlmZ 	 d dlZdZn# e$ r dZY nw xY w	 	 d dlZn# e$ r d dlZY nw xY wdZn# e$ r dZY nw xY wi fd	„Z G d
„ de¦  «        ZdS )é    N)Úsettings)ÚBaseCommandÚCommandError)Úloader)Ú
ModelGraphÚgenerate_dot)ÚsignalcommandTFc                 óÀ  — t          |t          ¦  «        r’t          j                             |¦  «        rq	 t          |d¦  «        5 }t          j        |¦  «        }d d d ¦  «         n# 1 swxY w Y   n5# t          $ r&}t          d|› �¦  «         t          |¦  «        ‚d }~ww xY w| S | d         D ]-}|D ](}d|v r"|d         D ]}|d         }||v r||         |d<   ŒŒ)Œ.| S )NÚrtzInvalid app style file ÚgraphsÚnameÚmodelsÚapp_nameÚstyle)
Ú
isinstanceÚstrÚosÚpathÚexistsÚopenÚjsonÚloadÚ	ExceptionÚprint)Ú
graph_dataÚ	app_styleÚfÚeÚgcÚgÚmr   s           úi/var/www/histauto/venv/lib/python3.11/site-packages/django_extensions/management/commands/graph_models.pyÚrethemer#      sY  € Ý�)�SÑ!Ô!ð 	ÝŒ7�>Š>˜)Ñ$Ô$ð 	ð#Ý˜) TÑ*Ô*ð -¨aÝ $¤	¨!¡¤�Ið-ð -ð -ñ -ô -ð -ð -ð -ð -ð -ð -øøøð -ð -ð -ð -øøåð #ð #ð #ÝÐ;°	Ð;Ð;Ñ<Ô<Ð<Ý ‘l”lÐ"øøøøð#øøøð Ðà˜Ô"ð 9ð 9ˆØð 	9ð 	9ˆAØ˜ˆ{ˆ{Ø˜8œð 9ð 9�AØ  œ}�HØ 9Ð,Ð,Ø%.¨xÔ%8˜˜'™
øøð	9ð Ðs;   ¶A3 ÁA'ÁA3 Á'A+Á+A3 Á.A+Á/A3 Á3
B#Á=!BÂB#c                   ób   ‡ — e Zd ZdZ	 	 dZˆ fd„Zd„ Zed„ ¦   «         Zdd„Z	dd„Z
d	„ Zd
„ Zˆ xZS )ÚCommandz8Creates a GraphViz dot file for the specified app names.Tc                 óê  •— i ddddddœ“ddd	d
ddœ“ddd	dddœ“ddd	dddœ“ddd	dddœ“ddd	dddœ“ddd	dddœ“ddd	dddœ“ddd	d d!dœ“d"dd	d#d$dœ“d%dd&d'd(œ“d)dd*dd+d,œ“d-dd.d/d0d,œ“d1dd	d2d3dœ“d4dd5d6d(œ“d7dd8d9d(œ“d:dd;d<d(œ“dd=d>d(œdd?d@dAdœdBd	d@dCdœdBd?dDdEdœdd	dFdGdœdBd?dHdIdœdd	dJdKdœdddLg dM¢dNdOœdd	dPdQdœddRdSg dT¢dUdOœddVdWdXdYgdZdOœd[œ¥| _         t          t          d\dV¦  «        }|rh| j         D ]`}|                     d]¦  «        }|d^                              d_¦  «                             d_d`¦  «        }||v r||         | j         |         da<   Œa t          ¦   «         j        |i |¤Ž dVS )baÃ  
        Allow defaults for arguments to be set in settings.GRAPH_MODELS.

        Each argument in self.arguments is a dict where the key is the
        space-separated args and the value is our kwarg dict.

        The default from settings is keyed as the long arg name with '--'
        removed and any '-' replaced by '_'. For example, the default value for
        --disable-fields can be set in settings.GRAPH_MODELS['disable_fields'].
        z--app-styleÚstorez1Path to style json to configure the style per appú	app-stylez.app-style.json)ÚactionÚhelpÚdestÚdefaultz--pygraphvizÚ
store_trueFÚ
pygraphvizz,Output graph data as image using PyGraphViz.)r)   r,   r+   r*   z--pydotÚpydotz-Output graph data as image using PyDot(Plus).z--dotÚdotzDOutput graph data as raw DOT (graph description language) text data.z--jsonr   zOutput graph data as JSONz--disable-fields -dÚdisable_fieldsz#Do not show the class member fieldsz--disable-abstract-fieldsÚdisable_abstract_fieldsz7Do not show the class member fields that were inheritedz--display-field-choicesÚdisplay_field_choicesz%Display choices instead of field typez--group-models -gÚgroup_modelsz5Group models together respective to their applicationz--all-applications -aÚall_applicationsz:Automatically include all applications from INSTALLED_APPSz--output -oÚ
outputfileziRender output file. Type of output dependend on file extensions. Use png or jpg to render graph to image.)r)   r+   r*   z--layout -lÚlayoutzaLayout to be used by GraphViz for visualization. Layouts: circo dot fdp neato nop nop1 nop2 twopi)r)   r+   r,   r*   z
--theme -tÚthemeÚ
django2018z¬Theme to use. Supplied are 'original' and 'django2018'. You can create your own by creating dot templates in 'django_extentions/graph_models/themename/' template directory.z--verbose-names -nÚverbose_namesz%Use verbose_name of models and fieldsz--language -LÚlanguagez3Specify language used for verbose_name localizationz--exclude-columns -xÚexclude_columnszPExclude specific column(s) from the graph. Can also load exclude list from file.z--exclude-models -XÚexclude_modelszjExclude specific model(s) from the graph. Can also load exclude list from file. Wildcards (*) are allowed.Úinclude_modelszBRestrict the graph to specified models. Wildcards (*) are allowed.TÚinheritancez$Include inheritance arrows (default)Ústore_falsez!Do not include inheritance arrowsÚrelations_as_fieldsz-Do not show relations as fields in the graph.Úrelation_fields_onlyz3Only display fields that are relevant for relationsÚsort_fieldszDo not sort fieldsÚhide_edge_labelsz*Do not show relations labels in the graph.Úarrow_shape)ÚboxÚcrowÚcurveÚicurveÚdiamondr0   ÚinvÚnoneÚnormalÚteeÚveezˆArrow shape to use for relations. Default is dot. Available shapes: box, crow, curve, icurve, diamond, dot, inv, none, normal, tee, vee.)r)   r,   r+   Úchoicesr*   Úcolor_code_deletionszàColor the relations according to their on_delete setting, where it is applicable. The colors are: red (CASCADE), orange (SET_NULL), green (SET_DEFAULT), yellow (SET), blue (PROTECT), grey (DO_NOTHING), and purple (RESTRICT).ÚTBÚrankdir)rR   ÚBTÚLRÚRLzßSet direction of graph layout. Supported directions: TB, LR, BT and RL. Corresponding to directed graphs drawn from top to bottom, from left to right, from bottom to top, and from right to left, respectively. Default is TB.NÚorderingÚinÚoutz�Controls how the edges are arranged. Supported orderings: "in" (incoming relations first), "out" (outgoing relations first). Default is None.)z--include-models -Iz--inheritance -ez--no-inheritance -Ez--hide-relations-from-fields -Rz--relation-fields-onlyz--disable-sort-fields -Sz--hide-edge-labelsz--arrow-shapez--color-code-deletionsz	--rankdirz
--orderingÚGRAPH_MODELSú r   ú-Ú_r,   )Ú	argumentsÚgetattrr   ÚsplitÚlstripÚreplaceÚsuperÚ__init__)ÚselfÚargsÚkwargsÚdefaultsÚargumentÚ	arg_splitÚsetting_optÚ	__class__s          €r"   rd   zCommand.__init__<   sE  ø€ ðI
ØØ!ØKØ#Ø,ð	ð ðI
ð Ø&Ø Ø$ØFð	ð ðI
ð Ø&Ø ØØGð	ð ðI
ð& Ø&Ø Øð!ðð ð'I
ð8 Ø&Ø ØØ3ð	ð ð9I
ðD "Ø&Ø Ø(Ø=ð	$ð $ðEI
ðP (Ø&Ø Ø1ØQð	*ð *ðQI
ð\ &Ø&Ø Ø/Ø?ð	(ð (ð]I
ðh  Ø&Ø Ø&ØOð	"ð "ðiI
ðt $Ø&Ø Ø*ØTð	&ð &ðuI
ð@ Ø!Ø$ð?ð	ð ðAI
ðP Ø!Ø Ø ð:ð	ð ðQI
ð^ Ø!ØØ'ðRð	ð ð_I
ðn !Ø&Ø Ø'Ø?ð	#ð #ðoI
ðz Ø!Ø"ØMðð ð{I
ðD #Ø!Ø)ð8ð%ð %ðEI
ðP "Ø!Ø(ðEð$ð $ðQI
ð^ "Ø(ð-ð$ð $ð 'ØØ%Ø>ð	!ð !ð (Ø Ø%Ø;ð	$ð $ð (ØØ-ØGð	0ð 0ð "Ø Ø.ØMð	'ð 'ð (ØØ%Ø,ð	)ð )ð 'Ø Ø*ØDð	#ð #ð "Ø Ø%ðð ð ð*ð#ð ð, 'Ø Ø.ðLð	'ð 'ð "ØØ!Ø3Ð3Ð3ð>ð	ð 	ð "ØØ"Ø  %˜=ð#ðð ðAI
ð I
ð I
ˆŒõV �8 ^°TÑ:Ô:ˆàð 	PØ œNð Pð P�Ø$ŸNšN¨3Ñ/Ô/�	Ø'¨œl×1Ò1°#Ñ6Ô6×>Ò>¸sÀCÑHÔH�Ø (Ð*Ð*Ø:BÀ;Ô:O�D”N 8Ô,¨YÑ7øà�‰ŒÔ˜$Ð) &Ð)Ð)Ð)Ð)Ð)ó    c                 óž   — |                      dd¬¦  «         | j        D ]-} |j         |                     d¦  «        i | j        |         ¤Ž Œ.dS )z/Unpack self.arguments for parser.add_arguments.Ú	app_labelÚ*)Únargsr[   N)Úadd_argumentr^   r`   )re   Úparserri   s      r"   Úadd_argumentszCommand.add_arguments  sh   € à×Ò˜K¨sÐÑ3Ô3Ð3Øœð 	Rð 	RˆHØˆFÔ §¢°Ñ!4Ô!4ÐQ¸¼ÀxÔ8PÐQÐQÐQÐQð	Rð 	Rrm   c                 óJ  ‡— |d         }|sE|d         s=t          t          di ¦  «                             d¦  «        }|r|}nt          d¦  «        ‚|                     d¦  «        pd}t          j                             |¦  «        \  }}|                     ¦   «         }g d¢Šˆfd	„|                     ¦   «         D ¦   «         }t          | 
                    ¦   «         ¦  «        }|d
k    r/t          dd                     d„ ‰D ¦   «         ¦  «        z  ¦  «        ‚|d
k    r,t          d„ |                     ¦   «         D ¦   «         ¦  «        }	n:|sd}	n5|dk    rd}	n,|dk    rd}	n#t          rd}	nt          rd}	nt          d¦  «        ‚|                     d¦  «        dk    r|	dvrt          d¦  «        ‚|                     d¦  «        r|	dvrt          d¦  «        ‚|	dv r|st          d¦  «        ‚d                     t          j        dd …         ¦  «        }
t#          |fd |
i|¤Ž}|                     ¦   «          |	dk    r,|                     d!¬"¦  «        }|                      ||¦  «        S |                     d#¬"¦  «        }|d$         }t          j                             d%d&|d'¦  «        }t+          j        |¦  «        }t/          ||d(         ¬)¦  «        }t1          ||¬*¦  «        }|	dk    r | j        |fi |¤ŽS |	dk    r | j        |fi |¤ŽS |                      ||¦  «         d S )+Nro   r5   rZ   Ú
app_labelsz&need one or more arguments for appnamer6   Ú )r/   r.   r   r0   c                 ó$   •— i | ]\  }}|‰v ¯	||“ŒS © ry   )Ú.0ÚkÚvÚoutput_opts_namess      €r"   ú
<dictcomp>z"Command.handle.<locals>.<dictcomp>3  s*   ø€ ÐRÐRÐR¡  1¸1Ð@QÐ;QÐ;Q�q˜!Ð;QÐ;QÐ;Qrm   é   zOnly one of %s can be set.z, c                 ó   — g | ]}d |z  ‘ŒS )z--%sry   )rz   Úopts     r"   ú
<listcomp>z"Command.handle.<locals>.<listcomp>8  s   € ÐGÐGÐG¨c˜V c™\ÐGÐGÐGrm   c              3   ó$   K  — | ]\  }}|¯|V — Œd S ©Nry   )rz   ÚkeyÚvals      r"   ú	<genexpr>z!Command.handle.<locals>.<genexpr><  s+   è è € ÐIÐI¡( # sÀSÐI˜#ÐIÐIÐIÐIÐIÐIrm   r0   z.dotz.jsonr   r.   r/   z€Neither pygraphviz nor pydotplus could be found to generate the image. To generate text output, use the --json or --dot options.rS   rR   )r/   r.   r0   z7--rankdir is not supported for the chosen output formatrW   z8--ordering is not supported for the chosen output format)r/   r.   zQAn output file (--output) must be specified when --pydot or --pygraphviz are set.r[   é   Úcli_optionsT)Úas_jsonFr8   Údjango_extensionsÚgraph_modelszdigraph.dotr(   )r   )Útemplate)r_   r   Úgetr   r   r   ÚsplitextÚlowerÚitemsÚsumÚvaluesÚjoinÚnextÚHAS_PYGRAPHVIZÚ	HAS_PYDOTÚsysÚargvr   Úgenerate_graph_dataÚget_graph_dataÚrender_output_jsonr   Úget_templater#   r   Úrender_output_pygraphvizÚrender_output_pydotÚprint_output)re   rf   ÚoptionsÚdefault_app_labelsr6   r]   Úoutputfile_extÚoutput_optsÚoutput_opts_countÚoutputr‰   rŒ   r   r8   Útemplate_namer�   Údotdatar}   s                    @r"   ÚhandlezCommand.handle#  sÖ  ø€ à�{Ô#ˆØð 	M˜GÐ$6Ô7ð 	MÝ!(­°>À2Ñ!FÔ!F×!JÒ!JÈ<Ñ!XÔ!XÐØ!ð MØ)��å"Ð#KÑLÔLÐLð —[’[ Ñ.Ô.Ð4°"ˆ
ÝœG×,Ò,¨ZÑ8Ô8Ñˆˆ>Ø'×-Ò-Ñ/Ô/ˆØBÐBÐBÐØRÐRÐRÐR¨¯ª©¬ÐRÑRÔRˆÝ × 2Ò 2Ñ 4Ô 4Ñ5Ô5ÐØ˜qÒ Ð ÝØ,Ø—)’)ÐGÐGÐ5FÐGÑGÔGÑHÔHñIñô ð ð
  Ò!Ð!ÝÐIÐI¨k×.?Ò.?Ñ.AÔ.AÐIÑIÔIÑIÔIˆFˆFØð 	ð ˆFˆFØ˜vÒ%Ð%ØˆFˆFØ˜wÒ&Ð&ØˆFˆFÝð 	Ø!ˆFˆFÝð 	ØˆFˆFåðMñô ð ð
 �;Š;�yÑ!Ô! TÒ)Ð)¨fð =
ð /
ð /
õ
 ØIñô ð ð �;Š;�zÑ"Ô"ð 	 vÐ5SÐ'SÐ'SÝØJñô ð ð Ð,Ð,Ð,°ZÐ,Ýð(ñô ð ð
 —h’h�sœx¨¨¨œ|Ñ,Ô,ˆÝ! $ÐKÐK°KÐKÀ7ÐKÐKˆØ×(Ò(Ñ*Ô*Ð*à�VÒÐØ%×4Ò4¸TÐ4ÑBÔBˆJØ×*Ò*¨:°zÑBÔBÐBà!×0Ò0¸Ð0Ñ?Ô?ˆ
à˜Ô ˆÝœŸšØ °¸ñ
ô 
ˆõ Ô& }Ñ5Ô5ˆå˜Z°7¸;Ô3GÐHÑHÔHˆ
Ý˜z°HÐ=Ñ=Ô=ˆà�\Ò!Ð!Ø0�4Ô0°ÐDÐD¸GÐDÐDÐDØ�WÒÐØ+�4Ô+¨GÐ?Ð?°wÐ?Ð?Ð?Ø×Ò˜' :Ñ.Ô.Ð.Ð.Ð.rm   Nc                 ó  — t          |t          ¦  «        r|                     ¦   «         }|r@t          |d¦  «        5 }|                     |¦  «         ddd¦  «         dS # 1 swxY w Y   dS | j                             |¦  «         dS )z8Write model data to file or stdout in DOT (text) format.ÚwtN)r   ÚbytesÚdecoder   ÚwriteÚstdout)re   r¨   Úoutput_fileÚdot_output_fs       r"   r    zCommand.print_output€  sÎ   € å�g�uÑ%Ô%ð 	'Ø—n’nÑ&Ô&ˆGàð 	'Ý�k 4Ñ(Ô(ð ,¨LØ×"Ò" 7Ñ+Ô+Ð+ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,ð ,ð ,ð ŒK×Ò˜gÑ&Ô&Ð&Ð&Ð&s   ¼AÁA#Á&A#c                 óâ   — |r@t          |d¦  «        5 }t          j        ||¦  «         ddd¦  «         dS # 1 swxY w Y   dS | j                             t          j        |¦  «        ¦  «         dS )z2Write model data to file or stdout in JSON format.r«   N)r   r   Údumpr¯   r®   Údumps)re   r   r°   Újson_output_fs       r"   rœ   zCommand.render_output_json‹  sµ   € àð 	6Ý�k 4Ñ(Ô(ð 5¨MÝ”	˜* mÑ4Ô4Ð4ð5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5ð 5ð 5ð 5ð 5øøøð 5ð 5ð 5ð 5ð 5ð 5ð ŒK×Ò�dœj¨Ñ4Ô4Ñ5Ô5Ð5Ð5Ð5s   “6¶:½:c                 ó  — t           st          d¦  «        ‚t          j                             d¦  «        }	 t          d„ |                     d¦  «        D ¦   «         ¦  «        dk     rDt          j        ¦   «         }| 	                    |¦  «         | 
                    d¦  «         |j        }n# t          $ r Y nw xY wt          j        |¦  «        }|                     |d         ¬¦  «         |                     |d	         ¦  «         d
S )z,Render model data as image using pygraphviz.z,You need to install pygraphviz python modulez-svnc              3   ó4   K  — | ]}t          |¦  «        V — Œd S r„   )Úint)rz   r|   s     r"   r‡   z3Command.render_output_pygraphviz.<locals>.<genexpr>š  s(   è è € Ð8Ð8 •S˜‘V”VÐ8Ð8Ð8Ð8Ð8Ð8rm   ú.)r   é$   r   r7   )Úprogr6   N)r–   r   r.   Ú__version__ÚrstripÚtupler`   ÚtempfileÚNamedTemporaryFiler®   Úseekr   Ú
ValueErrorÚAGraphr7   Údraw)re   r¨   rg   ÚversionÚtmpfileÚgraphs         r"   rž   z Command.render_output_pygraphviz“  s  € åð 	OÝÐMÑNÔNÐNåÔ(×/Ò/°Ñ7Ô7ˆð		ÝÐ8Ð8 W§]¢]°3Ñ%7Ô%7Ð8Ñ8Ô8Ñ8Ô8¸7ÒBÐBõ #Ô5Ñ7Ô7�Ø—’˜gÑ&Ô&Ð&Ø—’˜Q‘”�Ø!œ,�øøÝð 	ð 	ð 	ØˆDð	øøøõ Ô! 'Ñ*Ô*ˆØ�Š˜& Ô*ˆÑ+Ô+Ð+Ø�
Š
�6˜,Ô'Ñ(Ô(Ð(Ð(Ð(s   ·A4B, Â,
B9Â8B9c                 ó¾  — t           st          d¦  «        ‚t          j        |¦  «        }|st          d¦  «        ‚t	          |t
          t          f¦  «        r:t          |¦  «        dk    rt          j	         
                    d¦  «         |d         }|d         }g d¢}||                     d¦  «        dz   d	…         }||v r|nd
}| 
                    ||¬¦  «         d	S )z'Render model data as image using pydot.z'You need to install pydot python modulezpydot returned an errorr   z9Found more then one graph, rendering only the first one.
r   r6   )*ÚbmpÚcanonÚcmapÚcmapxÚcmapx_npr0   ÚdiaÚemfÚemÚfplusÚepsÚfigÚgdÚgd2ÚgifÚgvÚimapÚimap_npÚismapÚjpeÚjpegÚjpgÚmetafileÚpdfÚpicÚplainz	plain-extÚpngÚpovÚpsÚps2ÚsvgÚsvgzÚtifÚtiffÚtkÚvmlÚvmlzÚvrmlÚwbmpÚwebpÚxdotr¹   NÚraw)Úformat)r—   r   r/   Úgraph_from_dot_datar   Úlistr¾   Úlenr˜   Ústderrr®   Úrfind)re   r¨   rg   rÇ   r°   ÚformatsÚextÚformat_s           r"   rŸ   zCommand.render_output_pydot¨  sü   € åð 	JÝÐHÑIÔIÐIåÔ)¨'Ñ2Ô2ˆØð 	:ÝÐ8Ñ9Ô9Ð9Ý�e�d¥E˜]Ñ+Ô+ð 	Ý�5‰zŒz˜AŠ~ˆ~Ý”
× Ò ØPñô ð ð ˜!”HˆEà˜\Ô*ˆð+
ð +
ð +
ˆðX ˜+×+Ò+¨CÑ0Ô0°1Ñ4Ð6Ð6Ô7ˆØ ˜˜�#�#¨UˆØ�Š�K¨ˆÑ0Ô0Ð0Ð0Ð0rm   r„   )Ú__name__Ú
__module__Ú__qualname__r*   Úcan_import_settingsrd   rt   r	   r©   r    rœ   rž   rŸ   Ú__classcell__)rl   s   @r"   r%   r%   5   sÆ   ø€ € € € € ØE€DØKØ>àÐð_*ð _*ð _*ð _*ð _*ðBRð Rð Rð ðZ/ð Z/ñ „]ðZ/ðx	'ð 	'ð 	'ð 	'ð6ð 6ð 6ð 6ð)ð )ð )ð*>1ð >1ð >1ð >1ð >1ð >1ð >1rm   r%   )r˜   r   r   r¿   Údjango.confr   Údjango.core.management.baser   r   Údjango.templater   Ú%django_extensions.management.modelvizr   r   Ú"django_extensions.management.utilsr	   r.   r–   ÚImportErrorÚ	pydotplusr/   r—   r#   r%   ry   rm   r"   ú<module>r     sŽ  ðà 
€
€
€
Ø €€€Ø 	€	€	€	Ø €€€à  Ð  Ð  Ð  Ð  Ð  Ø AÐ AÐ AÐ AÐ AÐ AÐ AÐ AØ "Ð "Ð "Ð "Ð "Ð "à JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ <Ð <Ð <Ð <Ð <Ð <ðØÐÐÐà€N€NøØð ð ð Ø€N€N€NðøøøððØ!Ð!Ð!Ð!Ð!øØð ð ð Øˆˆˆˆˆðøøøà€I€IøØð ð ð Ø€I€I€Iðøøøð #%ð ð ð ð ð,q1ð q1ð q1ð q1ð q1ˆkñ q1ô q1ð q1ð q1ð q1s?   ´; »AÁAÁ
A ÁA! Á	AÁA! ÁAÁA! Á!A+Á*A+