# Path: feature_toggle/constants.py
# class Attribute(Container):
# class Environment(Container):
#     def __init__(self):
#     def __init__(self):
# 
# Path: feature_toggle/utilities.py
# def utc_now():
#     return datetime.datetime.now(tz=pytz.utc)


import datetime
import warnings
from feature_toggle.constants import Environments
from feature_toggle.utilities import utc_now
        super().__init__(uid, name, environment, is_active, attributes, **kwargs)

    def __bool__(self):
        active = super().__bool__()

        if self.end_date_time and self.end_date_time < utc_now():
            # this check because toggles can quickly get overwhelming
            warnings.warn('{t} has expired. Get rid of me and help me attain salvation'.format(t=str(self)))

        return active


class TimeBombToggle(Toggle):
    """
    This is a time bomb toggle by default.

    A time bomb toggle stops working after the end date. Generally toggle's lifetime should be predetermined.
    If not toggles can pollute the code base. A bit of discipline is needed to maintain toggles and time bomb
    helps enforce it.

    This toggle will spit a warning if not time bomb and will get disabled if it is a time bomb.
    i.e., `if toggle` will return false even if it is active
    So don't blame the poor toggle now.

    """

    def __bool__(self):
        active = super().__bool__()

        if active:

# Path: feature_toggle/constants.py
# class Attribute(Container):
# class Environment(Container):
#     def __init__(self):
#     def __init__(self):
# 
# Path: feature_toggle/utilities.py
# def utc_now():
#     return datetime.datetime.now(tz=pytz.utc)


# Path: feature_toggle/toggle.py
import datetime
import warnings
from feature_toggle.constants import Environments
from feature_toggle.utilities import utc_now

        super().__init__(uid, name, environment, is_active, attributes, **kwargs)

    def __bool__(self):
        active = super().__bool__()

        if self.end_date_time and self.end_date_time < utc_now():
            # this check because toggles can quickly get overwhelming
            warnings.warn('{t} has expired. Get rid of me and help me attain salvation'.format(t=str(self)))

        return active


class TimeBombToggle(Toggle):
    """
    This is a time bomb toggle by default.

    A time bomb toggle stops working after the end date. Generally toggle's lifetime should be predetermined.
    If not toggles can pollute the code base. A bit of discipline is needed to maintain toggles and time bomb
    helps enforce it.

    This toggle will spit a warning if not time bomb and will get disabled if it is a time bomb.
    i.e., `if toggle` will return false even if it is active
    So don't blame the poor toggle now.

    """

    def __bool__(self):
        active = super().__bool__()

        if active:

            return self.start_date_time <= utc_now() <= self.end_date_time