2016-04-22 2 views
0

Я пытаюсь вызвать функцию python из ключевого слова robotframework. Функция python была украшена для вызова с использованием run_keyword из встроенной библиотеки. Это связано с тем, что журналы роботов выглядят хорошо структурированными, если функции библиотеки вызываются через функцию run_keyword из встроенной библиотеки. а не вызываться напрямую. Однако это приводит к бесконечному циклу. Есть ли решение для изящного достижения цели?Вызов украшенной функции python из скрипта robotframework, приводящего к бесконечному рекурсированию

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 

Я не смог решить эту проблему с помощью частичного приложения.

Однако я выполняю рекурсивный цикл, устанавливая и отменяя атрибут, как показано ниже.

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 

Однако у меня есть проблема. Я определил CREATE_USER следующим

def create_user(properties): 
    #some code 
    pass 

На вызов этой функции в том, как ниже

create_user("name=abc") 

Я получаю следующее сообщение об ошибке: получил аргумент «имя» неожиданное ключевое слово

+0

Почему вы вызываете ключевое слово «создать пользователя» при вызове ключевого слова «создать пользователя»? Вы создали ключевое слово, которое вызывает себя. Вы собираетесь создать ключевое слово _new_, которое вызывает _an существующее_ ключевое слово из какой-либо другой библиотеки? И что вы подразумеваете под «хорошо структурированным»? Не должно быть разницы в журналах, если вы вызываете ключевое слово напрямую через «ключевое слово запуска», за исключением того, что в последнем случае у вас есть один дополнительный уровень вложенности. –

+0

@BryanOakley существует разница в том, как формируются журналы. Если вы вызываете ключевое слово библиотеки из робота, оно выглядит красиво вложенным. Однако, если ваша библиотека дополнительно вызывает другую функцию/ключевое слово, она кажется плоской на том же уровне. Однако, если вы вызываете одну библиотечную функцию из другого с помощью ключевого слова запуска, вложенность также появляется в журналах в виде дерева, что делает его более читаемым. – decoder

ответ

-2

Посмотрите на классе partial от модуля functools. Я думаю, это может вам помочь.

или take a look at how decorators work in python.

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/12108573) – Oz123

+0

Я вижу. Я запомню это – salomonderossi