def _read_input_urls(cls, session: AppSession, default_scheme='http'):
        '''Read the URLs provided by the user.'''

        url_string_iter = session.args.urls or ()
        # FIXME: url rewriter isn't created yet
        url_rewriter = session.factory.get('URLRewriter')

        if session.args.input_file:
            if session.args.force_html:
                lines = cls._input_file_as_html_links(session)
            else:
                lines = cls._input_file_as_lines(session)

            url_string_iter = itertools.chain(url_string_iter, lines)

        base_url = session.args.base

        for url_string in url_string_iter:
            _logger.debug(__('Parsing URL {0}', url_string))

            if base_url:
                url_string = wpull.url.urljoin(base_url, url_string)

            try:
                url_info = wpull.url.URLInfo.parse(
                    url_string, default_scheme=default_scheme)

                _logger.debug(__('Parsed URL {0}', url_info))

                if url_rewriter:
                    # TODO: this logic should be a hook
                    url_info = url_rewriter.rewrite(url_info)
                    _logger.debug(__('Rewritten URL {0}', url_info))

                yield url_info

            except ValueError as e:
                _logger.info(__('Invalid URL {0}: {1}', url_string, e))
Read the URLs provided by the user.