mirror of
https://github.com/kennethreitz-archive/python-convore.git
synced 2026-06-05 23:40:18 +00:00
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:
+18
-26
@@ -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
@@ -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
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user