bg"dZddlmZddlZddlmZddlmZddlZddlm Z ddl m Z m Z ddl mZmZdd lmZGd d ZGd d eeZGddeZGddZdS)zHHandle diagram generation options for class diagram or default diagrams.) annotationsN) Generator)Any)nodes) ClassDiagramPackageDiagram)LinkerProject) LocalsVisitorcbeZdZdZd dZd!d Zd"dZd#dZd$dZd%dZ d&dZ d'dZ d(dZ d)dZ dS)*DiaDefGeneratorz"Handle diagram generation options.linkerr handlerDiadefsHandlerreturnNonecf|j|_d|_|||_|dS)z&Common Diagram Handler initialization.FN)config module_names_set_default_optionsrselfrrs l/builddir/build/BUILD/cloudlinux-venv-1.0.7/venv/lib/python3.11/site-packages/pylint/pyreverse/diadefslib.py__init__zDiaDefGenerator.__init__s8n "' !!###  '''nodenodes.ClassDefstrc^|j}|jr|jd|}|S)zGet title for objects..)namerroot)rrtitles r get_titlezDiaDefGenerator.get_title"s7    2yy{{'11%11E roption bool | Noneboolc<|t|jjS|S)z4Activate some options if not explicitly deactivated.)r'rclasses)rr%s r _set_optionzDiaDefGenerator._set_option)s! > +,, , rcb||jj|_||jj}||jj}d\}}|rd}|rd}|jj |jj}|jj |jj}||c|_|_dS)z7Set different default options with _default dictionary.)rrN) r*rr all_ancestorsall_associatedshow_ancestorsshow_associated anc_levelassociation_level)rr-r.r1r2s rrz$DiaDefGenerator._set_default_options1s ,,T[-EFF(()BCC ))$+*DEE'-$ $  I  # "  ; % 1 2I ; & 2 $ ; 1:>(++ NNNN  r klass_nodec#nK|dkrdSt|jt|jzD]\}|D]W}t |t jr|j}t |tj r| |sS|VX]dS)z(Return associated nodes of a class node.rN) listinstance_attrs_typevalues locals_type isinstanceastroidInstance_proxiedrClassDefr:)rrHr@association_nodesrs rget_associatedzDiaDefGenerator.get_associated[s A:: F!%j&D&K&K&M&M!N!NQU  " ) ) + +R R "    *  dG$455)=D"488T^^D=Q=Q    rr1r2c^|j|s||sdS|||||D]}|||dz ||||D]}||||dz dS)z2Extract recursively classes related to klass_node.N)r=has_noder:r?rGextract_classesrT)rrHr1r2rFrs rrXzDiaDefGenerator.extract_classesks   % %j 1 1  9S9S  F z"""**:yAA M MH  9q=:K L L L L'' 4EFF I ID  y2Ca2G H H H H I IrNrr rrrr)rrrr)r%r&rr')rr)rr3)rrrr'rrrr)rrr@rArrB)rHrr@rArrB)rHrr1rAr2rArr)__name__ __module__ __qualname____doc__rr$r*rr5r:r?rGrTrXrrr r s,,((((NNNN 6666.... AAAA     I I I I I Irr cBeZdZdZddZdd ZddZddZddZddZ dS)DefaultDiadefGeneratorzGenerate minimum diagram definition for the project : * a package diagram including project's modules * a class diagram including project's classes rr rrrrcft|||tj|dSN)r rr rs rrzDefaultDiadefGenerator.__init__s1  vw777t$$$$$rrr c|jj}t|jdkrt d|j||_nd|_td|j||_dS)z`Visit a pyreverse.utils.Project node. create a diagram definition for packages rVz packages Nzclasses ) rmodelenmodulesrr! pkgdiagramrr=)rrres r visit_projectz$DefaultDiadefGenerator.visit_projectsq { t|  q 5C'DI''66DOO#DO()?DI)?)?FFr_rc<|jr|j|jfS|jfS)zaLeave the pyreverse.utils.Project node. return the generated diagram definition )rhr=)rrjs r leave_projectz$DefaultDiadefGenerator.leave_projects* ? 6?D$55 5!##r nodes.Modulec|jr<|j||j|j|dSdS)z`Visit an astroid.Module node. add this class to the package diagram definition N)rhrr<r>r!r9s r visit_modulez#DefaultDiadefGenerator.visit_modulesN ? 8 K  d # # # O & &ty$ 7 7 7 7 7 8 8rrcb|\}}||||dS)z]Visit an astroid.Class node. add this class to the class diagram definition N)r5rX)rrr1r2s rvisit_classdefz%DefaultDiadefGenerator.visit_classdefs: (,'7'7'9'9$ $ T9.?@@@@@rnodes.ImportFromcX|jr"|j||jdSdS)z@Visit astroid.ImportFrom and catch modules for package diagram.N)rhadd_from_dependmodnamer9s rvisit_importfromz'DefaultDiadefGenerator.visit_importfroms9 ? @ O + +D$, ? ? ? ? ? @ @rNrY)rr rr)rjr rr)rrmrrrZ)rrrrr) r[r\r]r^rrirlrorqrvr_rrrarazs %%%% G G G G$$$$8888AAAA@@@@@@rraceZdZdZd dZd S) ClassDiadefGeneratorz\Generate a class diagram definition including all classes related to a given class. projectr klassrrrct||jj|_t |jdkr/|dd\}}||}n(|jd}|dd}t| |}| \}}| ||||jS)zDReturn a class diagram definition for the class and related classes.rVr rr,) rrrer=rfrgrsplit get_modulesplitnextilookupr5rX)rryrzmoduler1r2s r class_diagramz"ClassDiadefGenerator.class_diagrams( 0@AA w  ! # #!LLa00MFE''//FF_Q'FKK$$R(EV^^E**++'+'7'7'9'9$ $ UI/@AAA  rN)ryr rzrrr)r[r\r]r^rr_rrrxrxs2 ! ! ! ! ! !rrxc"eZdZdZddZdd Zd S)rzDGet diagram definitions from user (i.e. xml files) or generate them.rargparse.Namespacerrc||_dSrc)r)rrs rrzDiadefsHandler.__init__s  rryr rr list[ClassDiagram]cg}t||}|jjD]+}||||,|s#t |||}|D]}||S)axGet the diagram's configuration data. :param project:The pyreverse project :type project: pyreverse.utils.Project :param linker: The linker :type linker: pyreverse.inspector.Linker(IdGeneratorMixIn, LocalsVisitor) :returns: The list of diagram definitions :rtype: list(:class:`pylint.pyreverse.diagrams.ClassDiagram`) )rxrr)appendrrar<extract_relationships)rryrdiagrams generatorrzdiagrams r get_diadefszDiadefsHandler.get_diadefss(66 [( E EE OOI33GUCC D D D D K-fd;;AA'JJH , ,G  ) ) + + + +rN)rrrr)ryr rr rr)r[r\r]r^rrr_rrrrsBNNrr)r^ __future__rargparsecollections.abcrtypingrrOrpylint.pyreverse.diagramsrrpylint.pyreverse.inspectorr r pylint.pyreverse.utilsr r rarxrr_rrrst ON""""""%%%%%%BBBBBBBB66666666000000 `I`I`I`I`I`I`I`IF6@6@6@6@6@]O6@6@6@r!!!!!?!!!0r