def synced(func):
    '''
    Decorator for functions that should be called synchronously from another thread

    :param func: function to call
    '''

    def wrapper(self, *args, **kwargs):
        '''
        Actual wrapper for the synchronous function
        '''
        task = DataManagerTask(func, *args, **kwargs)
        self.submit_task(task)
        return task.get_results()
    return wrapper
Decorator for functions that should be called synchronously from another thread

    :param func: function to call