forked from platypush/platypush
1e342cc8a5
Backends that simply poll for changes and wait some time between checks can just implement a `loop()` method and, optionally, `__enter__` and `__exit__` methods, so they can perform initialization/cleanup logic within a context manager.
52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
from typing import Optional
|
|
|
|
from platypush.backend import Backend
|
|
from platypush.context import get_plugin
|
|
from platypush.message.event.foursquare import FoursquareCheckinEvent
|
|
|
|
|
|
class FoursquareBackend(Backend):
|
|
"""
|
|
This backend polls for new check-ins on the user's Foursquare account and triggers an event when a new check-in
|
|
occurs.
|
|
|
|
Requires:
|
|
|
|
* The :class:`platypush.plugins.foursquare.FoursquarePlugin` plugin configured and enabled.
|
|
|
|
Triggers:
|
|
|
|
- :class:`platypush.message.event.foursquare.FoursquareCheckinEvent` when a new check-in occurs.
|
|
|
|
"""
|
|
|
|
_last_created_at_varname = '_foursquare_checkin_last_created_at'
|
|
|
|
def __init__(self, poll_seconds: Optional[float] = 60.0, *args, **kwargs):
|
|
"""
|
|
:param poll_seconds: How often the backend should check for new check-ins (default: one minute).
|
|
"""
|
|
super().__init__(*args, poll_seconds=poll_seconds, **kwargs)
|
|
self._last_created_at = None
|
|
|
|
def __enter__(self):
|
|
self._last_created_at = int(get_plugin('variable').get(self._last_created_at_varname).
|
|
output.get(self._last_created_at_varname) or 0)
|
|
self.logger.info('Started Foursquare backend')
|
|
|
|
def loop(self):
|
|
checkins = get_plugin('foursquare').get_checkins().output
|
|
if not checkins:
|
|
return
|
|
|
|
last_checkin = checkins[0]
|
|
last_checkin_created_at = last_checkin.get('createdAt', 0)
|
|
if self._last_created_at and last_checkin_created_at <= self._last_created_at:
|
|
return
|
|
|
|
self.bus.post(FoursquareCheckinEvent(checkin=last_checkin))
|
|
self._last_created_at = last_checkin_created_at
|
|
get_plugin('variable').set(**{self._last_created_at_varname: self._last_created_at})
|
|
|
|
|
|
# vim:sw=4:ts=4:et:
|