reworked live api and removed some duplicate code.

The live api call now returns a list of dicts.The
dicts contain the kind and a corresponding object.
This commit is contained in:
Adi Sieker
2011-03-11 23:56:05 +01:00
parent bb871937d4
commit ef36a7a07c
3 changed files with 94 additions and 30 deletions
+18 -26
View File
@@ -102,27 +102,26 @@ class Groups(SyncedList):
return [g for g in self.data if g.joined]
def get(self, key):
r = get('groups', key)
group = models.Group()
group.import_from_api(deserialize(r.content)['group'])
group = self._create_group_from_api(deserialize(r.content)['group'])
return group
def sync(self):
self.data = []
r = get('groups')
for _group in deserialize(r.content)['groups']:
group = models.Group()
group.import_from_api(_group)
group.joined = True
group.topics = Topics(group)
group = self._create_group_from_api(_group)
self.data.append(group)
def _create_group_from_api(self, _group):
group = models.Group()
group.import_from_api(_group)
group.joined = True
group.topics = Topics(group)
return group
class Topics(SyncedList):
@@ -137,24 +136,24 @@ class Topics(SyncedList):
def get(self, key):
r = get('topics', key)
topic = models.Topic()
topic.import_from_api(deserialize(r.content)['topic'])
topic = self._create_topic_from_api(deserialize(r.content)['topic'])
return topic
def sync(self):
self.data = []
r = get('groups', self.group.id, 'topics')
for _topic in deserialize(r.content)['topics']:
topic = models.Topic()
topic.import_from_api(_topic)
topic.messages = Messages(topic)
topic.group = self.group
topic = self._create_topic_from_api(_topic)
self.data.append(topic)
def _create_topic_from_api(self, _topic):
topic = models.Topic()
topic.import_from_api(_topic)
topic.messages = Messages(topic)
topic.group = self.group
return topic
def create(self, name):
params = {'topic_id': self.group.id, 'name': name}
r = post(params ,'groups', self.group.id, 'topics', 'create')
@@ -175,13 +174,6 @@ class Messages(SyncedList):
def list(self):
return self.data
def get(self, key):
r = get('topics', key)
topic = models.Topic()
topic.import_from_api(deserialize(r.content)['topic'])
return topic
def sync(self):
self.data = []
+32 -1
View File
@@ -12,6 +12,7 @@
from convore.packages.anyjson import deserialize
import api
import models
__title__ = 'convore'
@@ -25,6 +26,13 @@ __docformat__ = 'restructuredtext'
__all__ = ('Convore',)
LIVE_TYPES = {
'read': models.Read,
'message': models.Message,
'topic': models.Topic,
'login': models.Login,
'logout': models.Logout,
}
class Convore(object):
"""The main Convore interface object."""
@@ -44,8 +52,31 @@ class Convore(object):
def live(self, cursor=None):
params= {}
next_cursor = None
live_messages = list()
if cursor <> None:
params['cursor'] = cursor
r = api.get('live', params=params)
return deserialize(r.content)
try:
for data in deserialize(r.content)['messages']:
class_ = LIVE_TYPES[data['kind']]
message = class_()
message.import_from_api(data)
if data['kind'] == 'read':
group = self.groups.get(data['group_id'])
message.topic = group.topics.get(data['topic_id'])
elif data['kind'] == 'topic':
message.group = self.groups.get(data['group_id'])
elif data['kind'] == 'message':
group = self.groups.get(data['group'])
message.topic = group.topics.get(data['topic']['id'])
live_messages.append({'kind': data['kind'],
'message': message})
next_cursor = data['_id']
except KeyError:
pass
return (live_messages, next_cursor)
+44 -3
View File
@@ -84,10 +84,10 @@ class Group(object):
_user.import_from_api(friend)
self.friends.append(_user)
def __repr__(self):
return '<group %s>' % (self.slug)
class Topic(object):
"""Convore topic object"""
@@ -142,8 +142,6 @@ class Message(object):
self.user.import_from_api(data.get('user', None))
class Category(object):
def __init__(self):
self.groups_count = None
@@ -159,3 +157,46 @@ class Category(object):
self.groups_count = d.get('groups_count', None)
self.slug = d.get('slug', None)
self.name = d.get('name', None)
class Read(object):
def __init__(self):
self.topic = None
self.when = None
self.user = None
def import_from_api(self, data):
"""Constructs object from deserialized API Response."""
self.when = datetime.utcfromtimestamp(
data.get('_ts', None)
)
self.user = User()
self.user.import_from_api(data.get('user', None))
class Login(object):
def __init__(self):
self.when = None
self.user = None
def import_from_api(self, data):
"""Constructs object from deserialized API Response."""
self.when = datetime.utcfromtimestamp(
data.get('_ts', None)
)
self.user = User()
self.user.import_from_api(data.get('user', None))
class Logout(object):
def __init__(self):
self.when = None
self.user = None
def import_from_api(self, data):
"""Constructs object from deserialized API Response."""
self.when = datetime.utcfromtimestamp(
data.get('_ts', None)
)
self.user = User()
self.user.import_from_api(data.get('user', None))