code: def detect_scheme_and_format(source):
      
  
      # Scheme: stream
      if hasattr(source, 'read'):
          return ('stream', None)
  
      # Format: inline
      if not isinstance(source, six.string_types):
          return (None, 'inline')
  
      # Format: gsheet
      if 'docs.google.com/spreadsheets' in source:
          if 'export' not in source and 'pub' not in source:
              return (None, 'gsheet')
          elif 'csv' in source:
              return ('https', 'csv')
  
      # Format: sql
      for sql_scheme in config.SQL_SCHEMES:
          if source.startswith('%s://' % sql_scheme):
              return (None, 'sql')
  
      # General
      parsed = urlparse(source)
      scheme = parsed.scheme.lower()
      if len(scheme) < 2:
          scheme = config.DEFAULT_SCHEME
      format = os.path.splitext(parsed.path or parsed.netloc)[1][1:].lower() or None
      if format is None:
          # Test if query string contains a "format=" parameter.
          query_string = parse_qs(parsed.query)
          query_string_format = query_string.get("format")
          if query_string_format is not None and len(query_string_format) == 1:
              format = query_string_format[0]
  
      # Format: datapackage
      if parsed.path.endswith('datapackage.json'):
          return (None, 'datapackage')
  
      return (scheme, format)
docs: Detect scheme and format based on source and return as a tuple.
  
      Scheme is a minimum 2 letters before `://` (will be lower cased).
      For example `http` from `http://example.com/table.csv`