forked from platypush/platypush
Added an `add_dependencies` plugin to the Sphinx build process that parses the manifest files of the scanned backends and plugins and automatically generates the documentation for the required dependencies and triggered events. This means that those dependencies are no longer required to be listed in the docstring of the class itself. Also in this commit: - Black/LINT for some integrations that hadn't been touched in a long time. - Deleted some leftovers from previous refactors (deprecated `backend.mqtt`, `backend.zwave.mqtt`, `backend.http.request.rss`). - Deleted deprecated `inotify` backend - replaced by `file.monitor` (see #289).
54 lines
1.7 KiB
Python
54 lines
1.7 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.
|
|
|
|
"""
|
|
|
|
_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:
|