def METHOD_NAME(csv_path: str) -> Generator[Product, None, None]:
    """Parses the CSV and returns a dict of name: yaml_file_path"""
    with fsspec.open(csv_path, mode="r") as f:
        reader = DictReader(f)
        for row in reader:
            names = row["product"].split(";")
            content = _get_product(row["definition"])
            # Do some QA
            fail = False
            # Only return value if we find contents in the document
            if content is None:
                fail = True
            # Check we have the same number of names as content
            if len(names) != len(content):
                logging.error(
                    "%s product names and %s documents found. This is different!",
                    len(names),
                    len(content),
                )
                fail = True
            # Check we have the same names as are in the product definitions
            content_names = [d["name"] for d in content]
            if Counter(content_names) != Counter(names):
                logging.error("%s is not the same as %s", names, content_names)
                fail = True
            if fail:
                yield Product(row["product"], None)
                continue
            # There's only one name in names, so yield it
            if len(names) == 1:
                yield Product(names[0], content[0])
            else:
                # Handle multiple documents in a single file
                for doc in content:
                    # Since we checked all the names, we can do this safely
                    yield Product(doc["name"], doc)