docs: def login(self, username, password=None, email=None, registry=None,
                reauth=False, dockercfg_path=None):
          """
          Authenticate with a registry. Similar to the ``docker login`` command.
  
          Args:
              username (str): The registry username
              password (str): The plaintext password
              email (str): The email for the registry account
              registry (str): URL to the registry.  E.g.
                  ``https://index.docker.io/v1/``
              reauth (bool): Whether or not to refresh existing authentication on
                  the Docker server.
              dockercfg_path (str): Use a custom path for the Docker config file
                  (default ``$HOME/.docker/config.json`` if present,
                  otherwise``$HOME/.dockercfg``)
  
          Returns:
              (dict): The response from the login request
  
          Raises:
              :py:class:`docker.errors.APIError`
                  If the server returns an error.
          """
  
          # If we don't have any auth data so far, try reloading the config file
          # one more time in case anything showed up in there.
          # If dockercfg_path is passed check to see if the config file exists,
          # if so load that config.
          if dockercfg_path and os.path.exists(dockercfg_path):
              self._auth_configs = auth.load_config(
                  dockercfg_path, credstore_env=self.credstore_env
              )
          elif not self._auth_configs or self._auth_configs.is_empty:
              self._auth_configs = auth.load_config(
                  credstore_env=self.credstore_env
              )
  
          authcfg = self._auth_configs.resolve_authconfig(registry)
          # If we found an existing auth config for this registry and username
          # combination, we can return it immediately unless reauth is requested.
          if authcfg and authcfg.get('username', None) == username \
                  and not reauth:
              return authcfg
  
          req_data = {
              'username': username,
              'password': password,
              'email': email,
              'serveraddress': registry,
          }
  
          response = self._post_json(self._url('/auth'), data=req_data)
          if response.status_code == 200:
              self._auth_configs.add_auth(registry or auth.INDEX_NAME, req_data)
          return self._result(response, json=True)