class_docstr: Helper class with a platform abstraction for GitHub-like services
      
class_docstr_tok: ["Helper","class","with","a","platform","abstraction","for","GitHub-like","services"]
code: def __init__(
      self, url, credential, require_token=True, token_info=None
  ):
      if self.name is None or self.fullname is None:
          raise NotImplementedError(
              "GitHub-like platform must have name and fullname properties"
          )
      if not url:
          raise ValueError(f"API URL required for {self.fullname}")
  
      self.api_url = url
      self._user_info = None
      self._set_request_headers(
          credential,
          f"An access token is required for {url}" + f". {token_info}"
          if token_info
          else "",
          require_token,
      )
      self._set_extra_remote_settings()
  
imports: import logging
  import re
  from urllib.parse import urljoin, urlparse
  import requests
  from datalad import cfg
  from datalad.distribution.dataset import EnsureDataset, require_dataset
  from datalad.downloaders.credentials import Token
  from datalad.downloaders.http import DEFAULT_USER_AGENT
  from datalad.interface.common_opts import publish_depends, recursion_flag, recursion_limit
  from datalad.interface.results import get_status_dict
  from datalad.support.constraints import EnsureChoice, EnsureNone, EnsureStr
  from datalad.support.param import Parameter
  from datalad.ui import ui
  from datalad.utils import todo_interface_for_extensions
label_desc: Use image node_id 1 to create a new _GitHubLike object from inherited base classes: object with example: obj = _GitHubLike(url, credential, require_token, token_info)