Source code for expyrimenter.apps.pushbullet

import logging
import requests
import json
from expyrimenter import Config
from os.path import getmtime, expanduser
import time


[docs]class Pushbullet: """ Requires ``[pushbullet]`` section with ``token`` value in config. Check :class:`expyrimenter.Config` for more details about configuration. """ _url = 'https://api.pushbullet.com/v2/pushes' def __init__(self): self._log = logging.getLogger('pushbullet') token = Config('pushbullet').get('token') if token is None: msg = 'No pushbullet access token found. Check Config docs.' self._log.error(msg) raise AttributeError(msg) self._token = token
[docs] def send_note(self, title='', body=''): """ Sends a message using pushbullet *note* type. :param str title: Optional message title :param str body: Optional message body content """ note = json.dumps({'type': 'note', 'title': title, 'body': body}) headers = {'Content-Type': 'application/json'} res = requests.post(Pushbullet._url, data=note, headers=headers, auth=(self._token, '')) if res.status_code == requests.codes.ok: self._log.info('Note sent to pushbullet') else: error_json = json.dumps(res.json(), ensure_ascii=False, indent=4) self._log.error('Error sending note to pushbullet:\n' + error_json)
[docs] def monitor_file(self, filename, max_mod_interval, title=None, body=None): """ Sends a message if *filename* is not modified within *max_mod_interval* seconds. When a message is sent, it stops monitoring the file. Otherwise, it keeps running until it is killed. :param str filename: The filename to be monitored :param int max_mod_interval: If *filename* is not modified within *max_mod_interval* seconds, a message will be sent :param str title: Optional message title :param str body: Optional message body content """ if title is None: title = filename if body is None: body = 'File not changed in %d seconds.' % max_mod_interval filename = expanduser(filename) note_sent = False while not note_sent: # onde message is enough # time since last file modification time_since = time.time() - getmtime(filename) if time_since >= max_mod_interval: self._log.info('File %s not modified' % filename) self.send_note(title, body) note_sent = True else: # Wait until max_mod_interval after last modification sleep = max_mod_interval - time_since # we know this is > 0 time.sleep(sleep)