def METHOD_NAME(
    self,
    resource_id: Optional[str] = None,
    resource_version: Optional[str] = None,
    gem5_version: Optional[str] = None,
) -> List[Dict[str, Any]]:
    url = f"{self.url}/action/find"
    data = {
        "dataSource": self.dataSource,
        "collection": self.collection,
        "database": self.database,
    }
    filter = {}
    if resource_id:
        filter["id"] = resource_id
        if resource_version is not None:
            filter["resource_version"] = resource_version
    if filter:
        data["filter"] = filter
    data = json.dumps(data).encode("utf-8")
    headers = {
        "Authorization": f"Bearer {self.get_token()}",
        "Content-Type": "application/json",
    }
    req = request.Request(url, data=data, headers=headers)
    try:
        response = request.urlopen(req)
    except HTTPError as e:
        self.verify_status_code(e.status)
        return None
    result = json.loads(response.read().decode("utf-8"))
    resources = result["documents"]
    # I do this as a lazy post-processing step because I can't figure out
    # how to do this via an Atlas query, which may be more efficient.
    return self.filter_incompatible_resources(
        resources_to_filter=resources, gem5_version=gem5_version
    )