🏡 index : quine-global/quine-anaconda-webui.git

import os


class BrowserSnapshot():
    SNAPSHOT_NUMBER = 0

    @classmethod
    def new(cls, browser):
        browser.snapshot(f'snapshot-{browser.label}', str(cls.SNAPSHOT_NUMBER))
        cls.SNAPSHOT_NUMBER += 1


def log_step(snapshots=False, snapshot_before=False, snapshot_after=False, docstring=False):
    """ Decorator for logging steps durring testing.

    Decorated function needs to be part of class with self.browser.

    :param snapshots: Create snapshots before and after function call, defaults to False
    :type snapshots: bool, optional
    :param snapshot_before: Create snapshots before function call, defaults to False
    :type snapshot_before: bool, optional
    :param snapshot_after: Create snapshots after function call, defaults to False
    :type snapshot_after: bool, optional
    :param docstring: Print docstring of the function, defaults to False
    :type docstring: bool, optional
    """
    def decorator(function):
        def wrapper(*args, **kwargs):
            nice_args = ', '.join(str(a) for a in args[1:])
            if kwargs:
                nice_args += ', ' + ', '.join(f'{k}: {v}' for k, v in kwargs.items())
            if nice_args:
                nice_args = f', with {nice_args}'

            print(f'[TEST STEP] {function.__name__}{nice_args}')
            if docstring:
                print(f'[DOC] {function.__doc__}')

            ext_logging = bool(int(os.environ.get('EXTENDED_LOGGING', '0')))

            if ext_logging and (snapshots or snapshot_before):
                BrowserSnapshot.new(args[0].browser)

            result = function(*args, **kwargs)

            if ext_logging and (snapshots or snapshot_after):
                BrowserSnapshot.new(args[0].browser)

            return result

        return wrapper

    return decorator