diff --git a/convore/api.py b/convore/api.py index 9731155..8e752d4 100644 --- a/convore/api.py +++ b/convore/api.py @@ -9,16 +9,8 @@ :license: ISC, see LICENSE for more details. """ -from convore.packages.anyjson import deserialize - import requests -from types import SyncedList -import models -import groups - - - API_URL = 'https://convore.com/api/' AUTH = None @@ -85,123 +77,3 @@ def login(username, password): # ========== # End Points # ========== - - -class Groups(SyncedList): - - __data_keys__ = ['id', 'slug'] - - def __init__(self): - super(Groups, self).__init__() - - self.discover = groups.GroupsDiscover() - self.discover.parent = self - - def joined(self): - """Returns list of Joined groups.""" - - return [g for g in self.data if g.joined] - - def get(self, key): - r = get('groups', key) - 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 = self._create_group_from_api(_group) - self.data.append(group) - self._synced = True - - 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): - - __data_keys__ = ['id', 'slug'] - - def __init__(self, group): - super(Topics, self).__init__() - self.group = group - - def list(self): - return self.data - - def insert(self, index, object): - return self.data.insert(index, object) - - def append(self, object): - return self.data.append(object) - - def get(self, key): - r = get('topics', key) - 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 = self._create_topic_from_api(_topic) - self.data.append(topic) - self._synced = True - - 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') - topic = self._create_topic_from_api(deserialize(r.content)['topic']) - self.data.insert(0,topic) - return True - - -class Messages(SyncedList): - - __data_keys__ = ['id'] - - def __init__(self, topic): - super(Messages, self).__init__() - self.topic = topic - - def list(self): - return self.data - - def sync(self): - self.data = [] - - r = get('topics', self.topic.id, 'messages') - messages = deserialize(r.content)['messages'] - idx = 0 - msg_count = len(messages) - unread_count = self.topic.unread - for message_data in messages: - idx = idx + 1 - message = models.Message() - message.import_from_api(message_data) - message.topic = self.topic - message.unread = idx > msg_count - unread_count - self.data.append(message) - self._synced = True - - def create(self, message): - params = {'topic_id': self.topic.id, 'message': message} - r = post(params ,'topics', self.topic.id, 'messages', 'create') - message = models.Message() - message.import_from_api(deserialize(r.content)['message']) - self.data.append(message) - return True diff --git a/convore/core.py b/convore/core.py index b9f618f..99a7063 100644 --- a/convore/core.py +++ b/convore/core.py @@ -11,8 +11,10 @@ from convore.packages.anyjson import deserialize +from types import SyncedList import api import models +import groups __title__ = 'convore' @@ -41,7 +43,7 @@ class Convore(object): self.username = username api.login(username, password) - self.groups = api.Groups() + self.groups = Groups() def account_verify(self): r = api.get('account', 'verify') @@ -90,3 +92,125 @@ class Convore(object): next_cursor = data['_id'] return (live_messages, next_cursor) + + + +class Groups(SyncedList): + + __data_keys__ = ['id', 'slug'] + + def __init__(self): + super(Groups, self).__init__() + + self.discover = groups.GroupsDiscover() + self.discover.parent = self + + def joined(self): + """Returns list of Joined groups.""" + + return [g for g in self.data if g.joined] + + def get(self, key): + r = api.get('groups', key) + group = self._create_group_from_api(deserialize(r.content)['group']) + return group + + def sync(self): + self.data = [] + + r = api.get('groups') + for _group in deserialize(r.content)['groups']: + group = self._create_group_from_api(_group) + self.data.append(group) + self._synced = True + + 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): + + __data_keys__ = ['id', 'slug'] + + def __init__(self, group): + super(Topics, self).__init__() + self.group = group + + def list(self): + return self.data + + def insert(self, index, object): + return self.data.insert(index, object) + + def append(self, object): + return self.data.append(object) + + def get(self, key): + r = api.get('topics', key) + topic = self._create_topic_from_api(deserialize(r.content)['topic']) + return topic + + def sync(self): + self.data = [] + + r = api.get('groups', self.group.id, 'topics') + for _topic in deserialize(r.content)['topics']: + topic = self._create_topic_from_api(_topic) + self.data.append(topic) + self._synced = True + + 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') + topic = self._create_topic_from_api(deserialize(r.content)['topic']) + self.data.insert(0,topic) + return True + + +class Messages(SyncedList): + + __data_keys__ = ['id'] + + def __init__(self, topic): + super(Messages, self).__init__() + self.topic = topic + + def list(self): + return self.data + + def sync(self): + self.data = [] + + r = api.get('topics', self.topic.id, 'messages') + messages = deserialize(r.content)['messages'] + idx = 0 + msg_count = len(messages) + unread_count = self.topic.unread + for message_data in messages: + idx = idx + 1 + message = models.Message() + message.import_from_api(message_data) + message.topic = self.topic + message.unread = idx > msg_count - unread_count + self.data.append(message) + self._synced = True + + def create(self, message): + params = {'topic_id': self.topic.id, 'message': message} + r = post(params ,'topics', self.topic.id, 'messages', 'create') + message = models.Message() + message.import_from_api(deserialize(r.content)['message']) + self.data.append(message) + return True +