2016-04-22 7 views
0

Ich versuche, eine Python-Funktion aus dem Schlüsselwort robotframework aufzurufen. Die Python-Funktion wurde so eingerichtet, dass sie mit run_keyword aus der Builtin-Bibliothek aufgerufen werden kann. Dies liegt daran, dass Roboterprotokolle gut strukturiert aussehen, wenn Bibliotheksfunktionen über die Funktion run_keyword aus der integrierten Bibliothek aufgerufen werden. anstatt direkt aufgerufen zu werden. Dies führt jedoch zu einer Endlosschleife. Gibt es eine Lösung, um das Ziel zu erreichen?Aufruf einer verzierten Python-Funktion aus dem Skript robotframework, was zu einer unendlichen Rekursion führt

robotkeyword : 

do something 
#creates a user by calling a function from python based library 
create user 

python function 
@wrap_with_run_keyword 
def create_user(): 
    pass 

def wrap_with_run_keyword(func): 
    def func_wrapper(*args, **kwargs): 
     return run_keyword(func, *args, **kwargs) 
    return func_wrapper 

Ich konnte das Problem nicht mit Teilanwendung lösen.

Allerdings vermittle ich die rekursive Schleife durch Setzen und Deaktivieren eines Attributs wie unten angegeben.

def wrap_with_run_keyword(func): 
def func_wrapper(*args, **kwargs): 
    if not hasattr(func, 'second'): 
     setattr(func, "second", True) 
     return run_keyword(func, *args, **kwargs) 
    else: 
     delattr(func, "second") 
     return func(*args, **kwargs) 

return func_wrapper 

Ich habe jedoch in ein anderes Problem gerannt. Ich create_user wie folgt definiert

def create_user(properties): 
    #some code 
    pass 

Auf diese Funktion in der Art und Weise aufrufen unter

create_user("name=abc") 

ich die folgende Fehlermeldung erhalten: bekam ein unerwartetes Stichwort Argument ‚name‘

+0

Warum rufen Sie das Schlüsselwort "create user" auf, wenn Sie das Schlüsselwort "create user" aufrufen? Sie haben ein Keyword erstellt, das sich selbst aufruft. Möchten Sie ein _new_-Schlüsselwort erstellen, das ein existierendes Schlüsselwort aus einer anderen Bibliothek aufruft? Und was meinst du mit "gut strukturiert"? Es sollte keinen Unterschied in den Protokollen geben, wenn Sie das Schlüsselwort direkt über "run keyword" aufrufen, außer im letzteren Fall haben Sie eine zusätzliche Verschachtelungsstufe. –

+0

@BryanOakley unterscheidet sich in der Art und Weise, wie Protokolle erstellt werden. Wenn Sie ein Bibliotheksschlüsselwort von robot aufrufen, erscheint es gut verschachtelt. Wenn Ihre Bibliothek jedoch eine andere Funktion/ein anderes Schlüsselwort aufruft, erscheint sie auf der gleichen Ebene. Wenn Sie jedoch eine Bibliotheksfunktion über ein anderes run-Schlüsselwort aufrufen, wird die Verschachtelung auch in den Protokollen in einer Baumstruktur angezeigt, die sie deutlich lesbarer macht. – decoder

Antwort

-2

Werfen Sie einen Blick an der partial Klasse von functools Modul. Ich denke, das könnte dir helfen.

Oder take a look at how decorators work in python.

+0

Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz zur Verfügung zu stellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. - [Aus Bewertung] (/ review/low-quality-posts/12108573) – Oz123

+0

Ich sehe. Das werde ich mir merken – salomonderossi