docs: def push(self, repository, tag=None, stream=False, auth_config=None,
               decode=False):
          """
          Push an image or a repository to the registry. Similar to the ``docker
          push`` command.
  
          Args:
              repository (str): The repository to push to
              tag (str): An optional tag to push
              stream (bool): Stream the output as a blocking generator
              auth_config (dict): Override the credentials that are found in the
                  config for this request.  ``auth_config`` should contain the
                  ``username`` and ``password`` keys to be valid.
              decode (bool): Decode the JSON data from the server into dicts.
                  Only applies with ``stream=True``
  
          Returns:
              (generator or str): The output from the server.
  
          Raises:
              :py:class:`docker.errors.APIError`
                  If the server returns an error.
  
          Example:
              >>> for line in cli.push('yourname/app', stream=True, decode=True):
              ...   print(line)
              {'status': 'Pushing repository yourname/app (1 tags)'}
              {'status': 'Pushing','progressDetail': {}, 'id': '511136ea3c5a'}
              {'status': 'Image already pushed, skipping', 'progressDetail':{},
               'id': '511136ea3c5a'}
              ...
  
          """
          if not tag:
              repository, tag = utils.parse_repository_tag(repository)
          registry, repo_name = auth.resolve_repository_name(repository)
          u = self._url("/images/{0}/push", repository)
          params = {
              'tag': tag
          }
          headers = {}
  
          if auth_config is None:
              header = auth.get_config_header(self, registry)
              if header:
                  headers['X-Registry-Auth'] = header
          else:
              log.debug('Sending supplied auth config')
              headers['X-Registry-Auth'] = auth.encode_header(auth_config)
  
          response = self._post_json(
              u, None, headers=headers, stream=stream, params=params
          )
  
          self._raise_for_status(response)
  
          if stream:
              return self._stream_helper(response, decode=decode)
  
          return self._result(response)