def find(self, workflow_ids=None, labels=None, exclude_subworkflow=True):
    'Wrapper for the following three find functions.\n        - find_with_wildcard\n        - find_by_workflow_ids\n        - find_by_labels\n\n        Find workflows by matching workflow IDs or label (key, value) tuples.\n        Does OR search for both parameters.\n        Wildcards (? and *) in both parameters are allowed but Caper will\n        retrieve a list of all workflows, which can lead to HTTP 503 of\n        Cromwell server if there are many subworkflows and not `exclude_subworkflow`.\n\n        Args:\n            workflow_ids:\n                List of workflow ID (UUID) strings.\n                Lower-case only.\n            labels:\n                List of labels (key/value pairs).\n            exclude_subworkflow:\n                Exclude subworkflows.\n        Returns:\n            List of matched workflow JSONs.\n        '
    wildcard_found_in_workflow_ids = has_wildcard(workflow_ids)
    wildcard_found_in_labels = has_wildcard(([val for (key, val) in labels] if labels else None))
    if (wildcard_found_in_workflow_ids or wildcard_found_in_labels):
        return self.find_with_wildcard(workflow_ids=workflow_ids, labels=labels, exclude_subworkflow=exclude_subworkflow)
    result = []
    result_by_labels = self.find_by_labels(labels=labels, exclude_subworkflow=exclude_subworkflow)
    result.extend(result_by_labels)
    workflow_ids_found_by_labels = [workflow['id'] for workflow in result_by_labels]
    result.extend([workflow for workflow in self.find_by_workflow_ids(workflow_ids=workflow_ids, exclude_subworkflow=exclude_subworkflow) if (workflow['id'] not in workflow_ids_found_by_labels)])
    return result
Wrapper for the following three find functions.
- find_with_wildcard
- find_by_workflow_ids
- find_by_labels

Find workflows by matching workflow IDs or label (key, value) tuples.
Does OR search for both parameters.
Wildcards (? and *) in both parameters are allowed but Caper will
retrieve a list of all workflows, which can lead to HTTP 503 of
Cromwell server if there are many subworkflows and not `exclude_subworkflow`.

Args:
    workflow_ids:
        List of workflow ID (UUID) strings.
        Lower-case only.
    labels:
        List of labels (key/value pairs).
    exclude_subworkflow:
        Exclude subworkflows.
Returns:
    List of matched workflow JSONs.
def find(self, workflow_ids=None, labels=None, exclude_subworkflow=True):
    'Wrapper for the following three find functions.\n        - find_with_wildcard\n        - find_by_workflow_ids\n        - find_by_labels\n\n        Find workflows by matching workflow IDs or label (key, value) tuples.\n        Does OR search for both parameters.\n        Wildcards (? and *) in both parameters are allowed but Caper will\n        retrieve a list of all workflows, which can lead to HTTP 503 of\n        Cromwell server if there are many subworkflows and not `exclude_subworkflow`.\n\n        Args:\n            workflow_ids:\n                List of workflow ID (UUID) strings.\n                Lower-case only.\n            labels:\n                List of labels (key/value pairs).\n            exclude_subworkflow:\n                Exclude subworkflows.\n        Returns:\n            List of matched workflow JSONs.\n        '
    wildcard_found_in_workflow_ids = has_wildcard(workflow_ids)
    wildcard_found_in_labels = has_wildcard(([val for (key, val) in labels] if labels else None))
    if (wildcard_found_in_workflow_ids or wildcard_found_in_labels):
        return self.find_with_wildcard(workflow_ids=workflow_ids, labels=labels, exclude_subworkflow=exclude_subworkflow)
    result = []
    result_by_labels = self.find_by_labels(labels=labels, exclude_subworkflow=exclude_subworkflow)
    result.extend(result_by_labels)
    workflow_ids_found_by_labels = [workflow['id'] for workflow in result_by_labels]
    result.extend([workflow for workflow in self.find_by_workflow_ids(workflow_ids=workflow_ids, exclude_subworkflow=exclude_subworkflow) if (workflow['id'] not in workflow_ids_found_by_labels)])
    return result