opens a URL, no scheme is assumed to be a file
        no path will use stdin or stdout depending on mode, unless stdio is False

def open(self, url, mode='r', stdio=True):
        """
        opens a URL, no scheme is assumed to be a file
        no path will use stdin or stdout depending on mode, unless stdio is False
        """
        # doesn't need to use config, because the object is already created
        res = urlsplit(url)

        if not res.scheme:
            if not res.path or res.path == '-':
                if not stdio:
                    raise IOError("unable to open '%s'" % (url,))

                if 'w' in mode:
                    return sys.stdout
                return sys.stdin

            return open(res.path, mode)

        if res.scheme in ('https', 'http', 'ftp'):
            req = requests.get(res.geturl(), stream=True)
            # TODO error check
            return req.raw
            #return urllib2.urlopen(res.geturl())

        raise IOError("unable to open '%s'" % (url,))