Hey Leute,
vorweg: ich habe das Thema bereits in zwei anderen Communitys veröffentlicht:
http://stackoverflow.com/questions/3...s-ast-function
https://www.python-forum.de/viewtopic.php?f=1&t=37445
Da ich aber auf das jetzt anliegendes Problem keine Rückmeldung erhalte, möchte ich mich gerne hier an jemanden wenden.. Sollte sich das ändern, so werde ich das hier entsprechend aktualisieren.
Es geht darum, mit dem AST-Modul Methoden-Parameter aus fremd liegenden Python-Dateien auszulesen. Hier ist das Beispiel-Inhalt von dem, was ich auslesen will:
Hiervon brauche ich die Liste, die als Parameter der Methode extend() angegeben ist. Zusätzlich muss ich allerdings auch prüfen, ob im Parameter des ersten Methodenaufrufs setdefault() das Stichwort "alias" angegeben ist.
Folgend lasse ich mir den Parameter "alias" ausgeben:
Und so komme ich an die benötigte Liste:
Ich weiß nun allerdings nicht, wie ich beides verknüpfen kann. Sprich: wie ich erst den String "alias" überprüfe, und falls dieser so vorhanden ist, mir nur dann die Liste ausgebe.
Ich habe mir zuvor einige Methoden geschrieben, um mir die Typen der verschiedenen Code-Teile ausgeben zu lassen. Vielleicht hilft das an dieser Stelle weiter:
Ich bekomme es einfach nicht hin und hoffe, dass man mir hier vielleicht weiter helfen kann.. :/
vorweg: ich habe das Thema bereits in zwei anderen Communitys veröffentlicht:
http://stackoverflow.com/questions/3...s-ast-function
https://www.python-forum.de/viewtopic.php?f=1&t=37445
Da ich aber auf das jetzt anliegendes Problem keine Rückmeldung erhalte, möchte ich mich gerne hier an jemanden wenden.. Sollte sich das ändern, so werde ich das hier entsprechend aktualisieren.
Es geht darum, mit dem AST-Modul Methoden-Parameter aus fremd liegenden Python-Dateien auszulesen. Hier ist das Beispiel-Inhalt von dem, was ich auslesen will:
extra_host_conf.setdefault('alias', []).extend( [(u'alias1', ['host1']), (u'alias2', ['host2']), (u'alias3', ['host3'])])
Folgend lasse ich mir den Parameter "alias" ausgeben:
Code:
import ast class MyVisitor(ast.NodeVisitor): def visit_Call(self, node): if node.func.attr == "setdefault": print ast.literal_eval(node.args[0]) self.generic_visit(node)
Code:
import ast class MyVisitor(ast.NodeVisitor): def visit_Call(self, node): if node.func.attr == "extend": print ast.literal_eval(node.args[0]) self.generic_visit(node)
Ich habe mir zuvor einige Methoden geschrieben, um mir die Typen der verschiedenen Code-Teile ausgeben zu lassen. Vielleicht hilft das an dieser Stelle weiter:
[(u'alias1', ['host1']), (u'alias2', ['host2']), (u'alias3', ['host3'])]
Type: Call
extend
Type: Attribute
alias
Type: Call
setdefault
Type: Attribute
extra_host_conf
Type: Name
alias
Type: Str
Type: Call
extend
Type: Attribute
alias
Type: Call
setdefault
Type: Attribute
extra_host_conf
Type: Name
alias
Type: Str