def METHOD_NAME(
    project_doc,
    asset_doc=None,
    task_name=None,
    host_name=None,
    system_settings=None
):
    """Prepare data for templates filling from entered documents and info.
    This function does not "auto fill" any values except system settings and
    it's on purpose.
    Universal function to receive template data from passed arguments. Only
    required argument is project document all other arguments are optional
    and their values won't be added to template data if are not passed.
    Required document fields:
        Project: 'name', 'data.code', 'config.tasks'
        Asset: 'name', 'data.parents', 'data.tasks'
    Args:
        project_doc (Dict[str, Any]): Mongo document of project from MongoDB.
        asset_doc (Dict[str, Any]): Mongo document of asset from MongoDB.
        task_name (Union[str, None]): Task name under passed asset.
        host_name (Union[str, None]): Used to fill '{app}' key.
        system_settings (Union[Dict, None]): Prepared system settings.
            They're queried if not passed (may be slower).
    Returns:
        Dict[str, Any]: Data prepared for filling workdir template.
    """
    template_data = get_general_template_data(system_settings)
    template_data.update(get_project_template_data(project_doc))
    if asset_doc:
        template_data.update(get_asset_template_data(
            asset_doc, project_doc["name"]
        ))
        if task_name:
            template_data.update(get_task_template_data(
                project_doc, asset_doc, task_name
            ))
    if host_name:
        template_data["app"] = host_name
    return template_data