From b9de48a0c44c0643f4a13c74b5cc95bf6e17aca4 Mon Sep 17 00:00:00 2001 From: arfrank Date: Wed, 17 Nov 2010 21:01:27 -0500 Subject: [PATCH 1/3] Adding App Engine support --- api.py | 54 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/api.py b/api.py index cadcf78..842a23c 100644 --- a/api.py +++ b/api.py @@ -7,6 +7,12 @@ API_VERSION = 'v4' +try: + from google.appengine.api import urlfetch + APPENGINE = True +except: + APPENGINE = False + def utc_to_local(dt): ''' Converts utc datetime to local''' secs = calendar.timegm(dt.timetuple()) @@ -37,25 +43,43 @@ def set_url(self, url): self.url = '%s/%s' % (self.base_url, url) def query(self, data=None, put=False): - opener = urllib2.build_opener(urllib2.HTTPHandler) - - req = urllib2.Request(url=self.get_url()) - req.add_header('User-agent', 'python-spreedly 1.0') - req.add_header('Authorization', 'Basic %s' % self.auth) + if not APPENGINE: + opener = urllib2.build_opener(urllib2.HTTPHandler) + + req = urllib2.Request(url=self.get_url()) + req.add_header('User-agent', 'python-spreedly 1.0') + req.add_header('Authorization', 'Basic %s' % self.auth) - # Convert to POST if we got some data - if data: - req.add_header('Content-Type', 'application/xml') - req.add_data(data) + # Convert to POST if we got some data + if data: + req.add_header('Content-Type', 'application/xml') + req.add_data(data) - if put: - req.get_method = lambda: 'PUT' + if put: + req.get_method = lambda: 'PUT' - f = opener.open(req) - self.response = f.read() - - + f = opener.open(req) + self.response = f.read() + else: + payload = {} + headers = { + 'User-agent' : 'python-spreedly 1.0', + 'Authorization':'Basic %s' % self.auth + } + method = 'GET' + if data: + method = "POST" + payload = data + if put: + method = "PUT" + rpc = urlfetch.create_rpc(deadline = 10) + urlfetch.make_fetch_call(rpc, self.get_url(), payload = payload, method = method,headers = headers) + try: + self.response = rpc.get_result().content + except urlfetch.DownloadError, e: + self.response = '' + def get_plans(self): self.set_url('subscription_plans.xml') self.query() From b0a4c3350647d4b962c21f0c568b45505893e597 Mon Sep 17 00:00:00 2001 From: arfrank Date: Wed, 17 Nov 2010 21:32:34 -0500 Subject: [PATCH 2/3] Doesnt need to be asyncronys, since the result will be needed ASAP in most cases and was just retrieving it right away anyway --- api.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/api.py b/api.py index 842a23c..a6e4674 100644 --- a/api.py +++ b/api.py @@ -70,15 +70,12 @@ def query(self, data=None, put=False): method = 'GET' if data: method = "POST" + headers['Content-Type'] = 'application/xml' payload = data if put: method = "PUT" - rpc = urlfetch.create_rpc(deadline = 10) - urlfetch.make_fetch_call(rpc, self.get_url(), payload = payload, method = method,headers = headers) - try: - self.response = rpc.get_result().content - except urlfetch.DownloadError, e: - self.response = '' + result = urlfetch.fetch(self.get_url(), payload = payload, method = method,headers = headers, deadline = 10) + self.response = result.content def get_plans(self): self.set_url('subscription_plans.xml') From 9cfaedd89b3635a995e6aa925069a3962c558bba Mon Sep 17 00:00:00 2001 From: arfrank Date: Thu, 18 Nov 2010 16:19:23 -0500 Subject: [PATCH 3/3] Adding add_fee_to_subscriber method --- api.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/api.py b/api.py index a6e4674..02dd161 100644 --- a/api.py +++ b/api.py @@ -4,6 +4,7 @@ from xml.etree.ElementTree import fromstring from xml.etree import ElementTree as ET from base64 import b64encode +import logging API_VERSION = 'v4' @@ -75,6 +76,7 @@ def query(self, data=None, put=False): if put: method = "PUT" result = urlfetch.fetch(self.get_url(), payload = payload, method = method,headers = headers, deadline = 10) + logging.info(result.status_code) self.response = result.content def get_plans(self): @@ -159,7 +161,7 @@ def create_subscriber(self, customer_id, screen_name): result.append(data) return result[0] - + def delete_subscriber(self, id): if 'test' in self.base_path: headers = {'Authorization': 'Basic %s' % self.auth} @@ -310,3 +312,8 @@ def get_or_create_subscriber(self, subscriber_id, screen_name): except urllib2.HTTPError, e: if e.code == 404: return self.create_subscriber(subscriber_id, screen_name) + + def add_fee_to_subscriber(self, subscriber_id, name = '', description = '', group = '', amount = ''): + data = """%s%s%s%s""" % (name,description, group, amount) + self.set_url('subscribers/%s/fees.xml' % subscriber_id) + self.query(data)