<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def add(self, func: AsyncCallback, event_type: str, **data_detail: Any) -> None: """Add a new route. After registering 'func' for the specified event_type, an optional data_detail may be provided. By providing an extra keyword argument, dispatching can occur based on a top-level key of the data in the event being dispatched. """

        if len(data_detail) > 1:
            msg = ()
            raise TypeError("dispatching based on data details is only "
                            "supported up to one level deep; "
                            f"{len(data_detail)} levels specified")
        elif not data_detail:
            callbacks = self._shallow_routes.setdefault(event_type, [])
            callbacks.append(func)
        else:
            data_key, data_value = data_detail.popitem()
            data_details = self._deep_routes.setdefault(event_type, {})
            specific_detail = data_details.setdefault(data_key, {})
            callbacks = specific_detail.setdefault(data_value, [])
            callbacks.append(func)