parameters: (env, key, account_token, credit, dbuuid=False, description=None, credit_template=None, ttl=4320)
docstring: Account charge context manager: takes a hold for ``credit``
      amount before executing the body, then captures it if there
      is no error, or cancels it if the body generates an exception.
  
      :param str key: service identifier
      :param str account_token: user identifier
      :param int credit: cost of the body's operation
      :param description: a description of the purpose of the charge,
                          the user will be able to see it in their
                          dashboard
      :type description: str
      :param credit_template: a QWeb template to render and show to the
                              user if their account does not have enough
                              credits for the requested operation
      :param int ttl: transaction time to live in hours.
                      If the credit are not captured when the transaction
                      expires, the transaction is canceled
      :type credit_template: str
docstring_summary: Account charge context manager: takes a hold for ``credit``
      amount before executing the body, then captures it if there
      is no error, or cancels it if the body generates an exception.
docstring_tokens: Account charge context manager : takes a hold for credit amount before executing the body then captures it if there is no error or cancels it if the body generates an exception .
function: def iap_charge(env, key, account_token, credit, dbuuid=False, description=None, credit_template=None, ttl=4320):
      """
      Account charge context manager: takes a hold for ``credit``
      amount before executing the body, then captures it if there
      is no error, or cancels it if the body generates an exception.
  
      :param str key: service identifier
      :param str account_token: user identifier
      :param int credit: cost of the body's operation
      :param description: a description of the purpose of the charge,
                          the user will be able to see it in their
                          dashboard
      :type description: str
      :param credit_template: a QWeb template to render and show to the
                              user if their account does not have enough
                              credits for the requested operation
      :param int ttl: transaction time to live in hours.
                      If the credit are not captured when the transaction
                      expires, the transaction is canceled
      :type credit_template: str
      """
      transaction_token = iap_authorize(env, key, account_token, credit, dbuuid, description, credit_template, ttl)
      try:
          transaction = IapTransaction()
          transaction.credit = credit
          yield transaction
      except Exception as e:
          r = iap_cancel(env,transaction_token, key)
          raise e
      else:
          r = iap_capture(env,transaction_token, key, transaction.credit)
function_tokens: def iap_charge ( env , key , account_token , credit , dbuuid = False , description = None , credit_template = None , ttl = 4320 ) : transaction_token = iap_authorize ( env , key , account_token , credit , dbuuid , description , credit_template , ttl ) try : transaction = IapTransaction ( ) transaction . credit = credit yield transaction except Exception as e : r = iap_cancel ( env , transaction_token , key ) raise e else : r = iap_capture ( env , transaction_token , key , transaction . credit )