code: def get_expiration_seconds_v4(expiration):
      
      if not isinstance(expiration, _EXPIRATION_TYPES):
          raise TypeError(
              "Expected an integer timestamp, datetime, or "
              "timedelta. Got %s" % type(expiration)
          )
  
      now = NOW().replace(tzinfo=_helpers.UTC)
  
      if isinstance(expiration, six.integer_types):
          seconds = expiration
  
      if isinstance(expiration, datetime.datetime):
  
          if expiration.tzinfo is None:
              expiration = expiration.replace(tzinfo=_helpers.UTC)
  
          expiration = expiration - now
  
      if isinstance(expiration, datetime.timedelta):
          seconds = int(expiration.total_seconds())
  
      if seconds > SEVEN_DAYS:
          raise ValueError(
              "Max allowed expiration interval is seven days (%d seconds)".format(
                  SEVEN_DAYS
              )
          )
  
      return seconds
docs: Convert 'expiration' to a number of seconds offset from the current time.
  
      :type expiration: Union[Integer, datetime.datetime, datetime.timedelta]
      :param expiration: Point in time when the signed URL should expire.
  
      :raises: :exc:`TypeError` when expiration is not a valid type.
      :raises: :exc:`ValueError` when expiration is too large.
      :rtype: Integer
      :returns: seconds in the future when the signed URL will expire