class_docstr: Wrapper around Asana Python client library.
class_docstr_tok: ["Wrapper","around","Asana","Python","client","library","."]
docstr: Check that the user provided minimal search parameters.
  
  :param params: Dict of parameters to be used in the search
  :return: None; raises ValueError if search parameters do not contain minimum required attributes
docstr_tok: ["Check","that","the","user","provided","minimal","search","parameters",".",":","param","params",":","Dict","of","parameters","to","be","used","in","the","search",":","return",":","None",";","raises","ValueError","if","search","parameters","do","not","contain","minimum","required","attributes"]
code: def _validate_find_task_parameters(params: dict) -> None:
      """
      Check that the user provided minimal search parameters.
  
      :param params: Dict of parameters to be used in the search
      :return: None; raises ValueError if search parameters do not contain minimum required attributes
      """
      one_of_list = {"project", "section", "tag", "user_task_list"}
      both_of_list = {"assignee", "workspace"}
      contains_both = both_of_list.issubset(params)
      contains_one = not one_of_list.isdisjoint(params)
      if not (contains_both or contains_one):
          raise ValueError(
              f"You must specify at least one of {one_of_list} "
              f"or both of {both_of_list} in the find_task parameters."
          )
  
imports: from __future__ import annotations
  from functools import cached_property
  from typing import Any
  from asana import Client
  from asana.error import NotFoundError
  from airflow.hooks.base import BaseHook
label_desc: Use image node_id 13 for calling the AsanaHook obj's underlying member method code with example usage: obj._validate_find_task_parameters(params) without return types