Commit bee30843 authored by Antoine Millet's avatar Antoine Millet
Browse files

Added max_concurrent argument to background tag decorator

parent 3d934633
Loading
Loading
Loading
Loading
+22 −4
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ import inspect
import logging
import weakref
import threading
from functools import partial
from functools import partial, update_wrapper
from itertools import chain
from collections import defaultdict

@@ -245,10 +245,28 @@ def refresh(value):
    return decorator


def background(func):
def background(max_concurrent=None):

    def background_decorator(func):
        func.background = True
        semaphore = threading.Semaphore(max_concurrent) if max_concurrent else None

        if semaphore is not None:
            if not len(inspect.getargspec(func).args):
                def wrapper():
                    with semaphore:
                        return func()
            else:
                def wrapper(dom):
                    with semaphore:
                        return func(dom)
            wrapper = update_wrapper(wrapper, func)
            return wrapper
        else:
            return func

    return background_decorator


def get_tags(tags_dict, tags=None):
    """Helper to get tags.