本文整理汇总了Python中pydot.Dot.get_edge方法的典型用法代码示例。如果您正苦于以下问题:Python Dot.get_edge方法的具体用法?Python Dot.get_edge怎么用?Python Dot.get_edge使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pydot.Dot
的用法示例。
在下文中一共展示了Dot.get_edge方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: pkgTree
# 需要导入模块: from pydot import Dot [as 别名]
# 或者: from pydot.Dot import get_edge [as 别名]
def pkgTree(db, packageName):
"""Creates the call tree of internal package functions and procedures"""
# Tries to import pydot module
try:
from pydot import find_graphviz, Dot, Edge, Node
except ImportError:
message = _("Function not available because pydot module is not installed.\n\t")
message += _("Go to http://dkbza.org/pydot.html to get it.")
raise PysqlException(message)
# Reads conf
conf = PysqlConf.getConfig()
format = conf.get("graph_format") # Output format of the picture
fontname = conf.get("graph_fontname") # Font used for functions names
fontsize = conf.get("graph_fontsize") # Font size for functions names
fontcolor = conf.get("graph_fontcolor") # Color of functions names
# Gets picture generator
prog = getProg(find_graphviz(), conf.get("graph_program"), "fdp")
package = OraObject(objectName=packageName)
package.guessInfos(db)
graph = Dot(overlap="false", splines="true")
# Lists of function or procedure
verbs = []
# Tries to resolve synonym and describe the target
#TODO: factorise this code!!
if package.getType() == "SYNONYM":
package = package.getTarget(db)
if package.getType() == "SYNONYM":
raise PysqlException(_("Too much synonym recursion"))
if package.getType() not in ("PACKAGE", "PACKAGE BODY"):
raise PysqlException(_("This is not a package or package not found"))
# Gets package body content
package.setType(u"PACKAGE BODY")
print CYAN + _("Extracting package source...") + RESET
content = package.getSQLAsList(db)
# Removes comments
print CYAN + _("Parsing source and building graph...") + RESET
newContent = []
comment = False
for line in content:
line, comment = removeComment(line, comment)
newContent.append(line)
content = newContent
# Gets procedures and functions
for line in content:
result = re.match("\s*(FUNCTION|PROCEDURE)\s+(.+?)[\s|\(]+", line, re.I)
if result:
verbs.append(re.escape(result.group(2)))
graph.add_node(Node(result.group(2).upper(), shape="box", label=result.group(2).upper(), \
fontsize=str(fontsize), fontname=fontname, fontcolor=fontcolor))
if not verbs:
raise PysqlException(_("This package does not have any readable function or procedure"))
verbs = "|".join(verbs)
# Gets call of functions/procedure inside each other
currentVerb = ""
for line in content:
# Doesn't pay attention to end lines
if re.match("\s*END.*;", line, re.I):
continue
# Marks the function/procedure we are parsing
result = re.match("\s*(FUNCTION|PROCEDURE)\s+(.+?)[\s|\(]+", line, re.I)
if result:
currentVerb = result.group(2)
continue # else we get a circular reference below ;-)
result = re.match(".*\s(%s).*" % verbs, line, re.I)
if result:
if graph.get_edge(currentVerb.upper(), result.group(1).upper()) is None:
graph.add_edge(Edge(src=currentVerb.upper(), dst=result.group(1).upper()))
filename = package.getName() + "_dep." + format
generateImage(graph, filename, prog, format)
viewImage(filename)