@classmethod
def from_dict(cls, task_dict):
    """
        Create a new task description object from the given dictionary.
        The dictionary takes the form of:
            {
                "id": <task-template-id>,
                "name": <registered-task-name>,
                "config": <config-dict>,
                "topics": {[<>]|null}
            }

        The parameters 'topics' and 'config' are both optional.
        See below the behavior of a task at runtime according to the value of
        'topics':
            {"topics": None}
            the task will receive ALL data disptached by the broker
            ** default behavior **

            {"topics": []}
            the task will receive NO data from the broker

            {"topics": ["blob", "foo"]}
            the task will receive data dispatched by the broker in topics
            "blob" and "foo" only
        """
    uid = task_dict.get('id')
    name = task_dict['name']
    config = task_dict.get('config', {})
    topics = task_dict.get('topics', [])
    timeout = task_dict.get('timeout')
    return cls(name, uid=uid, config=config, timeout=timeout, topics=topics)
