-
-
Notifications
You must be signed in to change notification settings - Fork 28.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
6 changed files
with
843 additions
and
843 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,82 +1,82 @@ | ||
""" | ||
Demo platform that has two fake binary sensors. | ||
For more details about this platform, please refer to the documentation | ||
https://home-assistant.io/components/demo/ | ||
""" | ||
import homeassistant.util.dt as dt_util | ||
from homeassistant.components.calendar import CalendarEventDevice | ||
from homeassistant.components.google import CONF_DEVICE_ID, CONF_NAME | ||
|
||
|
||
def setup_platform(hass, config, add_devices, discovery_info=None): | ||
"""Set up the Demo Calendar platform.""" | ||
calendar_data_future = DemoGoogleCalendarDataFuture() | ||
calendar_data_current = DemoGoogleCalendarDataCurrent() | ||
add_devices([ | ||
DemoGoogleCalendar(hass, calendar_data_future, { | ||
CONF_NAME: 'Future Event', | ||
CONF_DEVICE_ID: 'future_event', | ||
}), | ||
|
||
DemoGoogleCalendar(hass, calendar_data_current, { | ||
CONF_NAME: 'Current Event', | ||
CONF_DEVICE_ID: 'current_event', | ||
}), | ||
]) | ||
|
||
|
||
class DemoGoogleCalendarData(object): | ||
"""Representation of a Demo Calendar element.""" | ||
|
||
# pylint: disable=no-self-use | ||
def update(self): | ||
"""Return true so entity knows we have new data.""" | ||
return True | ||
|
||
|
||
class DemoGoogleCalendarDataFuture(DemoGoogleCalendarData): | ||
"""Representation of a Demo Calendar for a future event.""" | ||
|
||
def __init__(self): | ||
"""Set the event to a future event.""" | ||
one_hour_from_now = dt_util.now() \ | ||
+ dt_util.dt.timedelta(minutes=30) | ||
self.event = { | ||
'start': { | ||
'dateTime': one_hour_from_now.isoformat() | ||
}, | ||
'end': { | ||
'dateTime': (one_hour_from_now + dt_util.dt. | ||
timedelta(minutes=60)).isoformat() | ||
}, | ||
'summary': 'Future Event', | ||
} | ||
|
||
|
||
class DemoGoogleCalendarDataCurrent(DemoGoogleCalendarData): | ||
"""Representation of a Demo Calendar for a current event.""" | ||
|
||
def __init__(self): | ||
"""Set the event data.""" | ||
middle_of_event = dt_util.now() \ | ||
- dt_util.dt.timedelta(minutes=30) | ||
self.event = { | ||
'start': { | ||
'dateTime': middle_of_event.isoformat() | ||
}, | ||
'end': { | ||
'dateTime': (middle_of_event + dt_util.dt. | ||
timedelta(minutes=60)).isoformat() | ||
}, | ||
'summary': 'Current Event', | ||
} | ||
|
||
|
||
class DemoGoogleCalendar(CalendarEventDevice): | ||
"""Representation of a Demo Calendar element.""" | ||
|
||
def __init__(self, hass, calendar_data, data): | ||
"""Initialize Google Calendar but without the API calls.""" | ||
self.data = calendar_data | ||
super().__init__(hass, data) | ||
""" | ||
Demo platform that has two fake binary sensors. | ||
For more details about this platform, please refer to the documentation | ||
https://home-assistant.io/components/demo/ | ||
""" | ||
import homeassistant.util.dt as dt_util | ||
from homeassistant.components.calendar import CalendarEventDevice | ||
from homeassistant.components.google import CONF_DEVICE_ID, CONF_NAME | ||
|
||
|
||
def setup_platform(hass, config, add_devices, discovery_info=None): | ||
"""Set up the Demo Calendar platform.""" | ||
calendar_data_future = DemoGoogleCalendarDataFuture() | ||
calendar_data_current = DemoGoogleCalendarDataCurrent() | ||
add_devices([ | ||
DemoGoogleCalendar(hass, calendar_data_future, { | ||
CONF_NAME: 'Future Event', | ||
CONF_DEVICE_ID: 'future_event', | ||
}), | ||
|
||
DemoGoogleCalendar(hass, calendar_data_current, { | ||
CONF_NAME: 'Current Event', | ||
CONF_DEVICE_ID: 'current_event', | ||
}), | ||
]) | ||
|
||
|
||
class DemoGoogleCalendarData(object): | ||
"""Representation of a Demo Calendar element.""" | ||
|
||
# pylint: disable=no-self-use | ||
def update(self): | ||
"""Return true so entity knows we have new data.""" | ||
return True | ||
|
||
|
||
class DemoGoogleCalendarDataFuture(DemoGoogleCalendarData): | ||
"""Representation of a Demo Calendar for a future event.""" | ||
|
||
def __init__(self): | ||
"""Set the event to a future event.""" | ||
one_hour_from_now = dt_util.now() \ | ||
+ dt_util.dt.timedelta(minutes=30) | ||
self.event = { | ||
'start': { | ||
'dateTime': one_hour_from_now.isoformat() | ||
}, | ||
'end': { | ||
'dateTime': (one_hour_from_now + dt_util.dt. | ||
timedelta(minutes=60)).isoformat() | ||
}, | ||
'summary': 'Future Event', | ||
} | ||
|
||
|
||
class DemoGoogleCalendarDataCurrent(DemoGoogleCalendarData): | ||
"""Representation of a Demo Calendar for a current event.""" | ||
|
||
def __init__(self): | ||
"""Set the event data.""" | ||
middle_of_event = dt_util.now() \ | ||
- dt_util.dt.timedelta(minutes=30) | ||
self.event = { | ||
'start': { | ||
'dateTime': middle_of_event.isoformat() | ||
}, | ||
'end': { | ||
'dateTime': (middle_of_event + dt_util.dt. | ||
timedelta(minutes=60)).isoformat() | ||
}, | ||
'summary': 'Current Event', | ||
} | ||
|
||
|
||
class DemoGoogleCalendar(CalendarEventDevice): | ||
"""Representation of a Demo Calendar element.""" | ||
|
||
def __init__(self, hass, calendar_data, data): | ||
"""Initialize Google Calendar but without the API calls.""" | ||
self.data = calendar_data | ||
super().__init__(hass, data) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,78 +1,78 @@ | ||
""" | ||
Support for Google Calendar Search binary sensors. | ||
For more details about this platform, please refer to the documentation at | ||
https://home-assistant.io/components/binary_sensor.google_calendar/ | ||
""" | ||
# pylint: disable=import-error | ||
import logging | ||
from datetime import timedelta | ||
|
||
from homeassistant.components.calendar import CalendarEventDevice | ||
from homeassistant.components.google import ( | ||
CONF_CAL_ID, CONF_ENTITIES, CONF_TRACK, TOKEN_FILE, | ||
GoogleCalendarService) | ||
from homeassistant.util import Throttle, dt | ||
|
||
_LOGGER = logging.getLogger(__name__) | ||
|
||
DEFAULT_GOOGLE_SEARCH_PARAMS = { | ||
'orderBy': 'startTime', | ||
'maxResults': 1, | ||
'singleEvents': True, | ||
} | ||
|
||
MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=15) | ||
|
||
|
||
def setup_platform(hass, config, add_devices, disc_info=None): | ||
"""Set up the calendar platform for event devices.""" | ||
if disc_info is None: | ||
return | ||
|
||
if not any([data[CONF_TRACK] for data in disc_info[CONF_ENTITIES]]): | ||
return | ||
|
||
calendar_service = GoogleCalendarService(hass.config.path(TOKEN_FILE)) | ||
add_devices([GoogleCalendarEventDevice(hass, calendar_service, | ||
disc_info[CONF_CAL_ID], data) | ||
for data in disc_info[CONF_ENTITIES] if data[CONF_TRACK]]) | ||
|
||
|
||
# pylint: disable=too-many-instance-attributes | ||
class GoogleCalendarEventDevice(CalendarEventDevice): | ||
"""A calendar event device.""" | ||
|
||
def __init__(self, hass, calendar_service, calendar, data): | ||
"""Create the Calendar event device.""" | ||
self.data = GoogleCalendarData(calendar_service, calendar, | ||
data.get('search', None)) | ||
super().__init__(hass, data) | ||
|
||
|
||
class GoogleCalendarData(object): | ||
"""Class to utilize calendar service object to get next event.""" | ||
|
||
def __init__(self, calendar_service, calendar_id, search=None): | ||
"""Set up how we are going to search the google calendar.""" | ||
self.calendar_service = calendar_service | ||
self.calendar_id = calendar_id | ||
self.search = search | ||
self.event = None | ||
|
||
@Throttle(MIN_TIME_BETWEEN_UPDATES) | ||
def update(self): | ||
"""Get the latest data.""" | ||
service = self.calendar_service.get() | ||
params = dict(DEFAULT_GOOGLE_SEARCH_PARAMS) | ||
params['timeMin'] = dt.now().isoformat('T') | ||
params['calendarId'] = self.calendar_id | ||
if self.search: | ||
params['q'] = self.search | ||
|
||
events = service.events() # pylint: disable=no-member | ||
result = events.list(**params).execute() | ||
|
||
items = result.get('items', []) | ||
self.event = items[0] if len(items) == 1 else None | ||
return True | ||
""" | ||
Support for Google Calendar Search binary sensors. | ||
For more details about this platform, please refer to the documentation at | ||
https://home-assistant.io/components/binary_sensor.google_calendar/ | ||
""" | ||
# pylint: disable=import-error | ||
import logging | ||
from datetime import timedelta | ||
|
||
from homeassistant.components.calendar import CalendarEventDevice | ||
from homeassistant.components.google import ( | ||
CONF_CAL_ID, CONF_ENTITIES, CONF_TRACK, TOKEN_FILE, | ||
GoogleCalendarService) | ||
from homeassistant.util import Throttle, dt | ||
|
||
_LOGGER = logging.getLogger(__name__) | ||
|
||
DEFAULT_GOOGLE_SEARCH_PARAMS = { | ||
'orderBy': 'startTime', | ||
'maxResults': 1, | ||
'singleEvents': True, | ||
} | ||
|
||
MIN_TIME_BETWEEN_UPDATES = timedelta(minutes=15) | ||
|
||
|
||
def setup_platform(hass, config, add_devices, disc_info=None): | ||
"""Set up the calendar platform for event devices.""" | ||
if disc_info is None: | ||
return | ||
|
||
if not any([data[CONF_TRACK] for data in disc_info[CONF_ENTITIES]]): | ||
return | ||
|
||
calendar_service = GoogleCalendarService(hass.config.path(TOKEN_FILE)) | ||
add_devices([GoogleCalendarEventDevice(hass, calendar_service, | ||
disc_info[CONF_CAL_ID], data) | ||
for data in disc_info[CONF_ENTITIES] if data[CONF_TRACK]]) | ||
|
||
|
||
# pylint: disable=too-many-instance-attributes | ||
class GoogleCalendarEventDevice(CalendarEventDevice): | ||
"""A calendar event device.""" | ||
|
||
def __init__(self, hass, calendar_service, calendar, data): | ||
"""Create the Calendar event device.""" | ||
self.data = GoogleCalendarData(calendar_service, calendar, | ||
data.get('search', None)) | ||
super().__init__(hass, data) | ||
|
||
|
||
class GoogleCalendarData(object): | ||
"""Class to utilize calendar service object to get next event.""" | ||
|
||
def __init__(self, calendar_service, calendar_id, search=None): | ||
"""Set up how we are going to search the google calendar.""" | ||
self.calendar_service = calendar_service | ||
self.calendar_id = calendar_id | ||
self.search = search | ||
self.event = None | ||
|
||
@Throttle(MIN_TIME_BETWEEN_UPDATES) | ||
def update(self): | ||
"""Get the latest data.""" | ||
service = self.calendar_service.get() | ||
params = dict(DEFAULT_GOOGLE_SEARCH_PARAMS) | ||
params['timeMin'] = dt.now().isoformat('T') | ||
params['calendarId'] = self.calendar_id | ||
if self.search: | ||
params['q'] = self.search | ||
|
||
events = service.events() # pylint: disable=no-member | ||
result = events.list(**params).execute() | ||
|
||
items = result.get('items', []) | ||
self.event = items[0] if len(items) == 1 else None | ||
return True |
Oops, something went wrong.