Esempio n. 1
0
    def __call__(self, func):
        widget_name = func.__name__.replace('_widget', '')
        widget = Widget(name=widget_name, func=func)
        if widget_name in widgets:
            raise Exception('widget {} already registered by {}'.format(
                widget_name, widgets[widget_name].registered_by))

        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            return widget.render(*args, **kwargs)

        loading_component_name = veil_component.get_loading_component_name()
        if loading_component_name:
            namespace = loading_component_name
        else:
            namespace = None
        if self.is_abstract:
            def report_abstract_error(*args, **kwargs):
                raise Exception('widget {}.{} is not implemented yet'.format(namespace, widget_name))

            widgets.setdefault(namespace, {})[widget_name] = report_abstract_error
            func.IS_ABSTRACT_WIDGET = 'true'
            func.namespace = namespace
            return func
        else:
            if self.implements:
                expected_args = inspect.getargspec(self.implements).args
                actual_args = inspect.getargspec(func).args
                assert expected_args == actual_args, '{} does not implement {}, expected args: {}, actual args: {}'.format(
                    func, self.implements, expected_args, actual_args)
                target_widget_namespace = self.implements.namespace
                target_widget_name = self.implements.__name__.replace('_widget', '')
                widgets.setdefault(target_widget_namespace, {})[target_widget_name] = wrapper
            widgets.setdefault(namespace, {})[widget_name] = wrapper
            return wrapper
Esempio n. 2
0
 def register(func):
     record_dynamic_dependency_provider(get_loading_component_name(), 'document-statement', statement_name)
     register_document_statement(statement_name, func)
     @wraps(func)
     def wrapper(*args, **kwargs):
         return func(*args, **kwargs)
     return wrapper
Esempio n. 3
0
 def __init__(self, name, func):
     self.name = name
     self.func = func
     self.registered_by = str('\n').join(traceback.format_stack())
     loading_component_name = veil_component.get_loading_component_name()
     if loading_component_name:
         self.namespace = loading_component_name
     else:
         self.namespace = None
Esempio n. 4
0
 def __init__(self, name, func):
     self.name = name
     self.func = func
     self.registered_by = to_unicode(b"".join(traceback.format_stack()))
     loading_component_name = get_loading_component_name()
     if loading_component_name:
         self.namespace = loading_component_name
     else:
         self.namespace = None
Esempio n. 5
0
def import_widget(widget_handler):
    if is_abstract_widget(widget_handler):
        raise Exception('can not import abstract widget: {}'.format(widget_handler))
    loading_component_name = veil_component.get_loading_component_name()
    if loading_component_name:
        namespace = loading_component_name
    else:
        namespace = None
    widget_name = widget_handler.__name__.replace('_widget', '')
    widgets.setdefault(namespace, {})[widget_name] = widget_handler
Esempio n. 6
0
 def __init__(self, method, path_template, website, tags=(), delegates_to=None, **path_template_params):
     assert website
     self.method = method
     self.path_template = path_template
     self.website = website.lower()
     self.tags = tags
     self.delegates_to = delegates_to
     self.path_template_params = path_template_params
     veil_component.record_dynamic_dependency_provider(veil_component.get_loading_component_name(), 'website', self.website)
     publish_new_website_event(self.website)
Esempio n. 7
0
 def __init__(self, name, func):
     self.name = name
     self.func = func
     self.registered_by = to_unicode(b''.join(traceback.format_stack()),
                                     strict=False)
     loading_component_name = get_loading_component_name()
     if loading_component_name:
         self.namespace = loading_component_name
     else:
         self.namespace = None
Esempio n. 8
0
    def register(func):
        record_dynamic_dependency_provider(get_loading_component_name(),
                                           'document-statement',
                                           statement_name)
        register_document_statement(statement_name, func)

        @wraps(func)
        def wrapper(*args, **kwargs):
            return func(*args, **kwargs)

        return wrapper
Esempio n. 9
0
def import_widget(widget_handler):
    if is_abstract_widget(widget_handler):
        raise Exception(
            'can not import abstract widget: {}'.format(widget_handler))
    loading_component_name = get_loading_component_name()
    if loading_component_name:
        namespace = loading_component_name
    else:
        namespace = None
    widget_name = widget_handler.__name__.replace('_widget', '')
    widgets.setdefault(namespace, {})[widget_name] = widget_handler
Esempio n. 10
0
    def wrapper(func):
        job_queue = JobQueue.instance()

        record_dynamic_dependency_provider(get_loading_component_name(), 'job', queue)

        def _delay(f, when=None):
            @functools.wraps(f)
            def _delay_inner(*args, **kwargs):
                _queue = kwargs.pop('queue', None)
                _hard_timeout = kwargs.pop('hard_timeout', None)
                _unique = kwargs.pop('unique', None)
                _lock = kwargs.pop('lock', None)
                _lock_key = kwargs.pop('lock_key', None)
                _when = kwargs.pop('when', None) or when
                _retry = kwargs.pop('retry', None)
                _retry_on = kwargs.pop('retry_on', None)
                _retry_method = kwargs.pop('retry_method', None)
                return job_queue.delay(f, args=args, kwargs=kwargs, queue=_queue, hard_timeout=_hard_timeout, unique=_unique, lock=_lock, lock_key=_lock_key,
                                       when=_when, retry=_retry, retry_on=_retry_on, retry_method=_retry_method)

            return _delay_inner

        def _wrap(f):
            @functools.wraps(f)
            def func_wrapper(*_args, **_kwargs):
                frm = inspect.stack()[1]
                mod = inspect.getmodule(frm[0])
                if mod.__name__ == 'tasktiger.worker' or job_queue.config['ALWAYS_EAGER']:
                    # ALWAYS_EAGER means sync and async call, tasktiger.worker means async call
                    if _args and isinstance(_args[0], dict) and 'a' in _args[0] and 'k' in _args[0]:
                        a = [from_json(a) for a in _args[0]['a']]
                        k = {k: from_json(v) for k, v in _args[0]['k'].items()}
                    else:
                        a = _args
                        k = _kwargs
                    expired_at = k.pop('expired_at', None)
                    current_time = get_current_time()
                    if expired_at and expired_at <= current_time:
                        LOGGER.debug('ignore expired task: %(expired_at)s, %(current)s', {'expired_at': expired_at, 'current': current_time})
                        return
                else:
                    a = _args
                    k = _kwargs
                return f(*a, **k)

            _func_wrapper = job_queue.task(queue=queue, hard_timeout=hard_timeout, unique=unique, lock=lock, lock_key=lock_key, retry=retry, retry_on=retry_on,
                                           retry_method=retry_method, schedule=schedule, batch=batch)(func_wrapper)
            _func_wrapper.delay = _delay(_func_wrapper)
            _func_wrapper.delay_after = _delay(_func_wrapper, when=ENQUEUE_AFTER_TIMEDELTA)

            return _func_wrapper

        return _wrap(func)
Esempio n. 11
0
    def __call__(self, func):
        target = self.delegates_to or func
        widget_namespace = veil_component.get_loading_component_name() or None

        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            with require_current_template_directory_relative_to(target):
                with require_current_widget_namespace_being(widget_namespace):
                    return func(*args, **kwargs)
        if self.delegates_to:
            wrapper.__name__ = b'{}-{}'.format(func.__name__, self.delegates_to.__name__)

        new_route = Route(route_handler=wrapper, method=self.method, path_template=self.path_template, tags=self.tags, **self.path_template_params)
        routes.setdefault(self.website, []).append(new_route)
        return wrapper
Esempio n. 12
0
    def __call__(self, func):
        widget_name = func.__name__.replace('_widget', '')
        widget = Widget(name=widget_name, func=func)
        if widget_name in widgets:
            raise Exception('widget {} already registered by {}'.format(
                widget_name, widgets[widget_name].registered_by))

        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            return widget.render(*args, **kwargs)

        loading_component_name = get_loading_component_name()
        if loading_component_name:
            namespace = loading_component_name
        else:
            namespace = None
        if self.is_abstract:

            def report_abstract_error(*args, **kwargs):
                raise Exception('widget {}.{} is not implemented yet'.format(
                    namespace, widget_name))

            widgets.setdefault(namespace,
                               {})[widget_name] = report_abstract_error
            func.IS_ABSTRACT_WIDGET = 'true'
            func.namespace = namespace
            return func
        else:
            if self.implements:
                expected_args = inspect.getargspec(self.implements).args
                actual_args = inspect.getargspec(func).args
                assert expected_args == actual_args, '{} does not implement {}, expected args: {}, actual args: {}'.format(
                    func, self.implements, expected_args, actual_args)
                target_widget_namespace = self.implements.namespace
                target_widget_name = self.implements.__name__.replace(
                    '_widget', '')
                widgets.setdefault(target_widget_namespace,
                                   {})[target_widget_name] = wrapper
            widgets.setdefault(namespace, {})[widget_name] = wrapper
            return wrapper
Esempio n. 13
0
    def __call__(self, func):
        target = self.delegates_to or func
        loading_component_name = veil_component.get_loading_component_name()
        if loading_component_name:
            veil_component.record_dynamic_dependency_provider(loading_component_name, "website", self.website)
            widget_namespace = loading_component_name
        else:
            widget_namespace = None

        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            with require_current_template_directory_relative_to(target):
                with require_current_widget_namespace_being(widget_namespace):
                    return func(*args, **kwargs)

        new_route = Route(
            route_handler=wrapper,
            method=self.method,
            path_template=self.path_template,
            tags=self.tags,
            **self.path_template_params
        )
        routes.setdefault(self.website, []).append(new_route)
        return wrapper
Esempio n. 14
0
 def __call__(self, provider):
     record_dynamic_dependency_provider(get_loading_component_name(),
                                        'fixture-type', self.fixture_type)
     return FixtureProvider(self.fixture_type, self.fixture_name
                            or provider.__name__, provider)
Esempio n. 15
0
    def wrapper(func):
        record_dynamic_dependency_provider(get_loading_component_name(), 'job',
                                           queue)

        def _delay(f, when=None):
            @functools.wraps(f)
            def _delay_inner(*args, **kwargs):
                _queue = kwargs.pop('queue', None)
                _hard_timeout = kwargs.pop('hard_timeout', None)
                _unique = kwargs.pop('unique', None)
                _lock = kwargs.pop('lock', None)
                _lock_key = kwargs.pop('lock_key', None)
                _when = kwargs.pop('when', None) or when
                _retry = kwargs.pop('retry', None)
                _retry_on = kwargs.pop('retry_on', None)
                _retry_method = kwargs.pop('retry_method', None)
                return job_queue.delay(f,
                                       args=args,
                                       kwargs=kwargs,
                                       queue=_queue,
                                       hard_timeout=_hard_timeout,
                                       unique=_unique,
                                       lock=_lock,
                                       lock_key=_lock_key,
                                       when=_when,
                                       retry=_retry,
                                       retry_on=_retry_on,
                                       retry_method=_retry_method)

            return _delay_inner

        def _wrap(f):
            @functools.wraps(f)
            def func_wrapper(*_args, **_kwargs):
                frm = inspect.stack()[1]
                mod = inspect.getmodule(frm[0])
                if mod.__name__ == 'tasktiger.worker' or job_queue.config[
                        'ALWAYS_EAGER']:
                    # ALWAYS_EAGER means sync and async call, tasktiger.worker means async call
                    if _args and isinstance(
                            _args[0],
                            dict) and 'a' in _args[0] and 'k' in _args[0]:
                        a = [from_json(a) for a in _args[0]['a']]
                        k = {k: from_json(v) for k, v in _args[0]['k'].items()}
                    else:
                        a = _args
                        k = _kwargs
                    expired_at = k.pop('expired_at', None)
                    current_time = get_current_time()
                    if expired_at and expired_at <= current_time:
                        LOGGER.debug(
                            'ignore expired task: %(expired_at)s, %(current)s',
                            {
                                'expired_at': expired_at,
                                'current': current_time
                            })
                        return
                else:
                    a = _args
                    k = _kwargs
                return f(*a, **k)

            _func_wrapper = job_queue.task(queue=queue,
                                           hard_timeout=hard_timeout,
                                           unique=unique,
                                           lock=lock,
                                           lock_key=lock_key,
                                           retry=retry,
                                           retry_on=retry_on,
                                           retry_method=retry_method,
                                           schedule=schedule,
                                           batch=batch)(func_wrapper)
            _func_wrapper.delay = _delay(_func_wrapper)
            _func_wrapper.delay_after = _delay(_func_wrapper,
                                               when=ENQUEUE_AFTER_TIMEDELTA)

            return _func_wrapper

        return _wrap(func)