docs: def post(self, uri, body=None, logon_required=True,
               wait_for_completion=True, operation_timeout=None):
          """
          Perform the HTTP POST method against the resource identified by a URI,
          using a provided request body, on the faked HMC.
  
          HMC operations using HTTP POST are either synchronous or asynchronous.
          Asynchronous operations return the URI of an asynchronously executing
          job that can be queried for status and result.
  
          Examples for synchronous operations:
  
          * With no response body: "Logon", "Update CPC Properties"
          * With a response body: "Create Partition"
  
          Examples for asynchronous operations:
  
          * With no ``job-results`` field in the completed job status response:
            "Start Partition"
          * With a ``job-results`` field in the completed job status response
            (under certain conditions): "Activate a Blade", or "Set CPC Power
            Save"
  
          The `wait_for_completion` parameter of this method can be used to deal
          with asynchronous HMC operations in a synchronous way.
  
          Parameters:
  
            uri (:term:`string`):
              Relative URI path of the resource, e.g. "/api/session".
              This URI is relative to the base URL of the session (see the
              :attr:`~zhmcclient.Session.base_url` property).
              Must not be `None`.
  
            body (:term:`json object`):
              JSON object to be used as the HTTP request body (payload).
              `None` means the same as an empty dictionary, namely that no HTTP
              body is included in the request.
  
            logon_required (bool):
              Boolean indicating whether the operation requires that the session
              is logged on to the HMC. For example, the "Logon" operation does
              not require that.
  
              Because this is a faked HMC, this does not perform a real logon,
              but it is still used to update the state in the faked HMC.
  
            wait_for_completion (bool):
              Boolean controlling whether this method should wait for completion
              of the requested HMC operation, as follows:
  
              * If `True`, this method will wait for completion of the requested
                operation, regardless of whether the operation is synchronous or
                asynchronous.
  
                This will cause an additional entry in the time statistics to be
                created for the asynchronous operation and waiting for its
                completion. This entry will have a URI that is the targeted URI,
                appended with "+completion".
  
              * If `False`, this method will immediately return the result of the
                HTTP POST method, regardless of whether the operation is
                synchronous or asynchronous.
  
            operation_timeout (:term:`number`):
              Timeout in seconds, when waiting for completion of an asynchronous
              operation. The special value 0 means that no timeout is set. `None`
              means that the default async operation timeout of the session is
              used.
  
              For `wait_for_completion=True`, a
              :exc:`~zhmcclient.OperationTimeout` is raised when the timeout
              expires.
  
              For `wait_for_completion=False`, this parameter has no effect.
  
          Returns:
  
            :term:`json object`:
  
              If `wait_for_completion` is `True`, returns a JSON object
              representing the response body of the synchronous operation, or the
              response body of the completed job that performed the asynchronous
              operation. If a synchronous operation has no response body, `None`
              is returned.
  
              If `wait_for_completion` is `False`, returns a JSON object
              representing the response body of the synchronous or asynchronous
              operation. In case of an asynchronous operation, the JSON object
              will have a member named ``job-uri``, whose value can be used with
              the :meth:`~zhmcclient.Session.query_job_status` method to
              determine the status of the job and the result of the original
              operation, once the job has completed.
  
              See the section in the :term:`HMC API` book about the specific HMC
              operation and about the 'Query Job Status' operation, for a
              description of the members of the returned JSON objects.
  
          Raises:
  
            :exc:`~zhmcclient.HTTPError`
            :exc:`~zhmcclient.ParseError` (not implemented)
            :exc:`~zhmcclient.AuthError` (not implemented)
            :exc:`~zhmcclient.ConnectionError`
          """
          try:
              return self._urihandler.post(self._hmc, uri, body, logon_required,
                                           wait_for_completion)
          except HTTPError as exc:
              raise zhmcclient.HTTPError(exc.response())
          except ConnectionError as exc:
              raise zhmcclient.ConnectionError(exc.message, None)