import io
from typing import Union, Iterator
from pyoxigraph import Triple, Quad
from .pyoxigraph import parse as pyparse
def parse(
input: Union[io.RawIOBase, io.BufferedIOBase, str],
mime_type: str,
base_iri: Union[str, None] = None,
) -> Iterator[Union[Triple, Quad]]:
"""Parses RDF graph and dataset serialization formats.
It currently supports the following formats:
* `N-Triples `_ (``application/n-triples``)
* `N-Quads `_ (``application/n-quads``)
* `Turtle `_ (``text/turtle``)
* `TriG `_ (``application/trig``)
* `RDF/XML `_ (``application/rdf+xml``)
It supports also some MIME type aliases.
For example, ``application/turtle`` could also be used for `Turtle `_
and ``application/xml`` for `RDF/XML `_.
:param input: The binary I/O object or file path to read from. For example, it could be a file path as a string or a file reader opened in binary mode with ``open('my_file.ttl', 'rb')``.
:param mime_type: the MIME type of the RDF serialization.
:param base_iri: the base IRI used to resolve the relative IRIs in the file or :py:const:`None` if relative IRI resolution should not be done.
:return: an iterator of RDF triples or quads depending on the format.
:raises ValueError: if the MIME type is not supported.
:raises SyntaxError: if the provided data is invalid.
>>> input = io.BytesIO(b'