code: def start_root_token_generation(self, otp=None, pgp_key=None):
          
          params = {}
          if otp is not None and pgp_key is not None:
              raise ParamValidationError('one (and only one) of otp or pgp_key arguments are required')
          if otp is not None:
              params['otp'] = otp
          if pgp_key is not None:
              params['pgp_key'] = pgp_key
  
          api_path = '/v1/sys/generate-root/attempt'
          response = self._adapter.put(
              url=api_path,
              json=params
          )
          return response.json()
docs: Initialize a new root generation attempt.
  
          Only a single root generation attempt can take place at a time. One (and only one) of otp or pgp_key are
          required.
  
          Supported methods:
              PUT: /sys/generate-root/attempt. Produces: 200 application/json
  
          :param otp: Specifies a base64-encoded 16-byte value. The raw bytes of the token will be XOR'd with this value
              before being returned to the final unseal key provider.
          :type otp: str | unicode
          :param pgp_key: Specifies a base64-encoded PGP public key. The raw bytes of the token will be encrypted with
              this value before being returned to the final unseal key provider.
          :type pgp_key: str | unicode
          :return: The JSON response of the request.
          :rtype: dict