From 6bf4351a454caa69d2660a214a8b7dfd716cbe0f Mon Sep 17 00:00:00 2001 From: Kenneth Reitz Date: Sat, 19 Feb 2011 16:23:41 -0500 Subject: [PATCH] complete api call restructure. --- convore/api.py | 105 ++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 99 insertions(+), 6 deletions(-) diff --git a/convore/api.py b/convore/api.py index 57af513..985f1c0 100644 --- a/convore/api.py +++ b/convore/api.py @@ -1,15 +1,105 @@ -import requests import json -import models - +from datetime import datetime from UserList import UserList +import requests + + + API_URL = 'https://convore.com/api/' +# ======= +# Helpers +# ======= + +def get(*path): + """ + api.get('groups') + api.get('groups', 'id') + api.get('accounts', 'verify') + """ + + url = '%s%s%s' % (API_URL, '/'.join(map(str, path)), '.json') + r = requests.get(url) + return r + + + def login(username, password): auth = requests.AuthObject(username, password) requests.add_autoauth(API_URL, auth) +# ====== +# Models +# ====== + +class User(object): + """Convore User object.""" + + def __init__(self): + self.username = None + self.url = None + self.id = None + self.img = None + + def import_from_api(self, d): + """Constructs User from Deserialized API Response.""" + self.username = d.get('username', None) + self.url = d.get('url', None) + self.id = d.get('id', None) + self.img = d.get('img', None) + + def __repr__(self): + return '' % (self.username) + + +class Group(object): + """Convore Group object.""" + + def __init__(self): + self.kind = None + self.members_count = None + self.name = None + self.creator = None + self.url = None + self.slug = None + self.date_latest_message = None + self.date_created = None + self.topics_count = None + self.unread = None + self.id = None + self.joined = False + + def import_from_api(self, d): + """Constructs Group from Deserialized API Response.""" + + self.creator = User() + + self.kind = d.get('kind', None) + self.members_count = d.get('members_count', None) + self.name = d.get('name', None) + self.creator.import_from_api(d.get('creator', None)) + self.url = d.get('url', None) + self.slug = d.get('slug', None) + self.date_latest_message = datetime.fromtimestamp( + d.get('date_latest_message', None) + ) + self.date_created = datetime.fromtimestamp( + d.get('date_created', None) + ) + self.topics_count = d.get('topics_count', None) + self.unread = d.get('unread', None) + self.id = d.get('id', None) + + def __repr__(self): + return '' % (self.slug) + + + +# ========== +# End Points +# ========== + class Groups(UserList): @@ -18,7 +108,9 @@ class Groups(UserList): self.sync() def joined(self): - """Returns list of """ + """Returns list of Joined groups.""" + + return [g for g in self.data if g.joined] def __getitem__(self, key): @@ -33,9 +125,10 @@ class Groups(UserList): r = requests.get(API_URL + 'groups/%s.json' % key) r.raise_for_status() - group = models.Group() + group = Group() group.import_from_api(json.loads(r.content)['group']) + self.data.append(group) return group except requests.HTTPError: @@ -65,7 +158,7 @@ class Groups(UserList): r = requests.get(API_URL + 'groups.json') for _group in json.loads(r.content)['groups']: - group = models.Group() + group = Group() group.import_from_api(_group) group.joined = True self.data.append(group)