Source code for astrid

import requests
import time
import hashlib

from urllib import urlencode


[docs]class AstridAPI(object): '''Connect to the Astrid Tasks API and issue requests to a specific user's account. Python Astrid API lives at https://bitbucket.org/dusty/python-astrid/ and documentation is available at https://python-astrid.readthedocs.org/ ''' def __init__(self, conf): ''' :param conf: a dictionary of configuration values for connecting to the API. The conf dictionary must contain:: { "apikey": "<astrid api key>", "apisecret": "<astrid api secret>", "email": "you@example.com", # your astrid e-mail "password": "<astrid password>" } The apikey and secret can come from http://astrid.com/api_keys The user associated with the email and password provided in the configuration dictionary will be automatically signed in. The token received from signin is stored on the class and automatically sent with future requests. ''' self.server = 'https://astrid.com' self.astrid_api_version = 7 self.apikey = conf['apikey'] self.apisecret = conf['apisecret'] try: self.token = self.request("user_signin", email=conf['email'], provider="password", secret=conf['password'])['token'] except KeyError: raise AttributeError("Unable to sign into astrid. Ensure your " "api key, api secret, email, and password are correct.")
[docs] def request(self, method, **params): '''Send a request to the astrid API. The available methods and their parameters are described in http://astrid.com/apidoc/ApiController.html This method does the necessary work to create an astrid signature line as required by the API. It then issues the request in the format Astrid expects. :param method: the method name to call in the Astrid API :param params: keyword arguments mapping parameters to values as required by the *method* :return: json decoded response of your Astrid API request :rtype: dict ''' signature = [] params['app_id'] = self.apikey params['time'] = time.time() if hasattr(self, 'token'): params['token'] = self.token for param in sorted(params): value = params[param] if isinstance(value, list): signature.extend([("%s[]%s" % (param, v)) for v in value]) else: signature.append("%s%s" % (param, value)) sig = "%s%s%s" % (method, "".join(signature), self.apisecret) sig = hashlib.md5(sig).hexdigest() params['sig'] = sig url = "%s/api/%s/%s?%s" % ( self.server, self.astrid_api_version, method, urlencode(params)) return requests.post(url, data=params).json