3

I need to have a decorator that takes an argument and checks (based on some simple logic) if the method should be allowed to run or raise an exception.

class One(obj):
    trend = "trend"
    @myDecorator(self.trend)
    def click_button(self):
        clickable_element = self.driver.find_element_by_id(self.trend)
        clickable_element.click()
        return self


class Two(obj):
    map = "map"

    @myDecorator(self.map)
    def click_button(self):
        clickable_element = self.driver.find_element_by_id(self.map)
        clickable_element.click()
        return self

The logic should be something like this:

def my Decorator(arg):
    if arg:
        "run the method"
    else:
        raise "Exception"
Am1rr3zA
  • 7,115
  • 18
  • 83
  • 125

3 Answers3

2
def parametrised_decorator(parameter):
    def parametrised(function):
        @functools.wraps(function)
        def inner(*args, **kwargs):
            if parameter:
                return function(*args, **kwargs)
            else:
                raise Exception()

        return inner

    return parametrised
domandinho
  • 1,260
  • 2
  • 16
  • 29
0
def my_Decorator(arg=None):
    def decorator(func):
        def wrapper(*args, **kwargs):
            if arg:
                return func(*args, **kwargs)

            else:
                raise Exception()

        return wrapper

    return decorator
Yevhen Kuzmovych
  • 10,940
  • 7
  • 28
  • 48
0
from functools import wraps


def my_decorator(f):
    @wraps(f)
    def wrapper(*args, **kwargs):
        if kwargs.pop('runit', None):
            return f(*args, **kwargs)
        else:
            raise Exception()
    return wrapper


@my_decorator
def example():
    print('example')


if __name__ == '__main__':
    # runs function
    example(runit=True)
    # runs exception
    example()
davidejones
  • 1,869
  • 1
  • 16
  • 18