Returns a ``datetime`` object in the future (that is, 1 second from now) up
    to the specified ``end``. ``end`` can be a string, anotther datetime, or a
    timedelta. If it's a string, it must start with `+`, followed by and integer
    and a unit, Eg: ``'+30d'``. Defaults to `'+30d'`

    Valid units are:
    * ``'years'``, ``'y'``
    * ``'weeks'``, ``'w'``
    * ``'days'``, ``'d'``
    * ``'hours'``, ``'hours'``
    * ``'minutes'``, ``'m'``
    * ``'seconds'``, ``'s'``

def future_datetime(end='+30d'):
    """
    Returns a ``datetime`` object in the future (that is, 1 second from now) up
    to the specified ``end``. ``end`` can be a string, anotther datetime, or a
    timedelta. If it's a string, it must start with `+`, followed by and integer
    and a unit, Eg: ``'+30d'``. Defaults to `'+30d'`

    Valid units are:
    * ``'years'``, ``'y'``
    * ``'weeks'``, ``'w'``
    * ``'days'``, ``'d'``
    * ``'hours'``, ``'hours'``
    * ``'minutes'``, ``'m'``
    * ``'seconds'``, ``'s'``
    """
    return lambda n, f: f.future_datetime(
        end_date=end, tzinfo=get_timezone(),
    )