moved the Group,Topics and Messages lists core module

the api module will only contain low level api stuff i.e.
fetching from convore and deserializing the json.
This commit is contained in:
Adi Sieker
2011-05-16 20:54:05 +02:00
parent a76240eedf
commit 3e7bc8782e
2 changed files with 125 additions and 129 deletions
-128
View File
@@ -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
+125 -1
View File
@@ -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