o
    gL                     @   s~   d Z ddlZddlZddlmZmZ ddlmZmZm	Z	m
Z
mZ ddlmZmZmZ ddlmZ ddlmZ G dd	 d	ZdS )
z+Utilities for creating VCG and Dot diagrams    N)modutilsnodes)ClassDiagramClassEntityDiagramEntityPackageDiagramPackageEntity)EdgeTypeNodePropertiesNodeType)get_printer_for_filetype)is_exceptionc                   @   s   e Zd ZdZdd Zdd Zdeddfd	d
ZdeddfddZ	de
de
ddfddZdedefddZdedefddZdede
fddZdddZdS )DiagramWriterz'base class for writing project diagramsc                 C   sD   || _ t| j j| _d | _d| _| j j| _t	g d| _
i | _d S )N )	aliceblueantiquewhite
aquamarine	burlywood	cadetblue
chartreuse	chocolatecoralcornflowerbluecyandarkgoldenroddarkseagreen
dodgerblueforestgreengoldhotpinkmediumspringgreen)configr   output_formatprinter_classprinter	file_namemax_color_depthdepth	itertoolscycleavailable_colorsused_colors)selfr!    r-   U/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/pylint/pyreverse/writer.py__init__)   s   

zDiagramWriter.__init__c                 C   s   |D ]?}|j  dd}| d| jj }tj| jjr'tj	| jj|}| 
|| |jdkr8| | n| | |   qdS )z0write files for <project> according to <diadefs> _.classN)titlestripreplacer!   r"   ospathexistsoutput_directoryjoinset_printerTYPEwrite_classeswrite_packagessave)r,   diadefsdiagrambasenamer%   r-   r-   r.   writeF   s   


zDiagramWriter.writerB   returnNc                 C   sr   t | dd dD ]}|j |_| jj|jtj| 	|d q
|
dD ]}| jj|jj|jjtjd q&dS )zwrite a package diagramc                 S      | j S Nr4   xr-   r-   r.   <lambda>W       z.DiagramWriter.write_packages.<locals>.<lambda>keytype_
propertiesdependsrP   N)sortedmodulesnodeqnamefig_idr$   	emit_noder   PACKAGEget_package_propertiesget_relationships	emit_edgefrom_object	to_objectr	   USES)r,   rB   modulerelr-   r-   r.   r?   T   s   zDiagramWriter.write_packagesc                 C   s   t |jdd dD ] }|j |_|jdkrtjntj}| j	j
|j|| |d q	|dD ]}| j	j|jj|jjtjd q/|dD ]}| j	j|jj|jjtjd qE|d	D ]}| j	j|jj|jj|jtjd
 q[dS )zwrite a class diagramc                 S   rF   rG   rH   rI   r-   r-   r.   rK   i   rL   z-DiagramWriter.write_classes.<locals>.<lambda>rM   	interfacerO   specializationrS   
implementsassociation)labelrP   N)rT   objectsrV   rW   rX   shaper   	INTERFACECLASSr$   rY   get_class_propertiesr\   r]   r^   r_   r	   INHERITS
IMPLEMENTSnameASSOCIATION)r,   rB   objrP   rb   r-   r-   r.   r>   f   s4   zDiagramWriter.write_classesr%   rC   c                 C   s   |  || _|| _dS )zset printerN)r#   r$   r%   )r,   r%   rC   r-   r-   r.   r<      s   
zDiagramWriter.set_printerrq   c                 C   s$   t |j| jjr| |dS ddS )z!get label and shape for packages.black)rg   color)r
   r4   r!   	colorizedget_shape_color)r,   rq   r-   r-   r.   r[      s   z$DiagramWriter.get_package_propertiesc                 C   sT   t |j| jjs
|jnd| jjs|jndt|jrdnd| jjr$| 	|ndd}|S )z get label and shape for classes.Nredrr   )rg   attrsmethods	fontcolorrs   )
r
   r4   r!   only_classnamesrw   rx   r   rV   rt   ru   )r,   rq   rQ   r-   r-   r.   rl      s   z"DiagramWriter.get_class_propertiesc                 C   s   |j  }t|jdddd rdS t|j tjr$|jdddd }n|j j	r+|}n	|jdddd }d
|d| jd| j }|| jvrPt| j| j|< | j| S )zget shape colorr2      )maxsplitr   grey   N)rV   rW   r   is_standard_modulesplit
isinstancer   ClassDefrsplitpackager;   r'   r+   nextr*   )r,   rq   qualified_namer   	base_namer-   r-   r.   ru      s   


zDiagramWriter.get_shape_colorc                 C   s   | j | j dS )zwrite to diskN)r$   generater%   )r,   r-   r-   r.   r@      s   zDiagramWriter.save)rE   N)__name__
__module____qualname____doc__r/   rD   r   r?   r   r>   strr<   r   r
   r[   r   rl   r   ru   r@   r-   r-   r-   r.   r   &   s     r   )r   r(   r7   astroidr   r   pylint.pyreverse.diagramsr   r   r   r   r   pylint.pyreverse.printerr	   r
   r    pylint.pyreverse.printer_factoryr   pylint.pyreverse.utilsr   r   r-   r-   r-   r.   <module>   s   