'Scan the given uri collecting relevant metadata.
:param uri: URI of the resource to scan.
:type uri: string
:param timeout: timeout for scanning a URI in ms. Defaults to the
``timeout`` value used when creating the scanner.
:type timeout: int
:return: A named tuple containing
``(uri, tags, duration, seekable, mime)``.
``tags`` is a dictionary of lists for all the tags we found.
``duration`` is the length of the URI in milliseconds, or
:class:`None` if the URI has no duration. ``seekable`` is boolean.
indicating if a seek would succeed.'

def scan(self, uri, timeout=None):

    timeout = int((timeout or self._timeout_ms))
    (tags, duration, seekable, mime) = (None, None, None, None)
    (pipeline, signals) = _setup_pipeline(uri, self._proxy_config)
    try:
        _start_pipeline(pipeline)
        (tags, mime, have_audio, duration) = _process(pipeline, timeout)
        seekable = _query_seekable(pipeline)
    finally:
        signals.clear()
        pipeline.set_state(Gst.State.NULL)
        del pipeline
    return _Result(uri, tags, duration, seekable, mime, have_audio)
