Conflicts:
	README.rst
This commit is contained in:
Kenneth Reitz
2011-02-14 03:02:03 -05:00
7 changed files with 438 additions and 10 deletions
+30 -10
View File
@@ -19,18 +19,38 @@ This is going to be awesome, and modeled after the excellent github2 module.
Usage
-----
Hmm.. ::
>>> from convore.client import ConvoreClient
>>> convore = ConvoreClient('username', 'password')
>>> groups = convore.groups()
>>> groups
[<ConvoreGroup ...]
>>> topics = groups[0].topics()
>>> topics
[<ConvoreTopic ...]
>>> len(topics)
14
>>> from convore import Convore
>>> convore = Convore('username', 'password')
>>> convore.groups
[<group id='123'>, ...]
convore.groups[id] ?
convore.groups.create(name, decription=None, slug=None)
>>> messages = topics[0].messages()
>>> messages
[<ConvoreMessage ...]
>>> new_topic = groups[0].topics.create(name="New Topic")
>>> new_topic
<ConvoreTopic New Topic, ...
>>> new_topic.messages.create(message="The first message")
>>> new_topic.messages.create(message="The 2nd one")
>>> len(new_topic.messages())
2
>>> convore.groups['292']
<ConvoreGroup 674,Python,...
>>> convore.groups.create(name, decription=None, slug=None)
(group creation doesn't work at this moment..)
+122
View File
@@ -0,0 +1,122 @@
# -*- coding: utf-8 -*-
'''
Copyringt 2011 Kenichi Sato <ksato9700 AT gmail.com>
'''
import urllib
import urllib2
import json
from group import ConvoreGroups
from topic import ConvoreTopics
from live import ConvoreLiveMessage
URL_PREFIX = "https://convore.com/api/"
#debug=100
debug=0
class ConvoreError(Exception):
pass
class ConvoreAuthError(Exception):
pass
class ConvoreClient(object):
def __init__(self, username, password):
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm='Convore',
uri=URL_PREFIX,
user=username,
passwd=password)
self.openr = urllib2.build_opener(auth_handler,
urllib2.HTTPCookieProcessor(),
urllib2.HTTPSHandler(debug))
self.groups = ConvoreGroups(self)
self.topics = ConvoreTopics(self)
def _make_request(self, command, params=None):
url = URL_PREFIX + command
if params:
data = urllib.urlencode(params)
else:
data = None
headers = {}
try:
f = self.openr.open(urllib2.Request(url = URL_PREFIX + command,
data=data,
headers=headers))
response = json.load(f)
if 'error' in response:
raise ConvoreError(response['error'])
return response
except urllib2.HTTPError as e:
if e.code == 401:
raise ConvoreAuthError()
else:
raise
def verify(self):
self._make_request(command="account/verify.json")
def live(self, group_id=None, cursor=None, topic_id=None):
data = {}
if group_id:
data['group_id'] = group_id
if cursor:
data['cursor'] = cursor
if topic_id:
data['topic_id'] = topic_id
response = self._make_request(command="live")
messages = []
for m in response['messages']:
messages.append(ConvoreLiveMessage(m))
return messages
if __name__ == '__main__':
import sys
try:
username, password = sys.argv[1:3]
except:
print "usage: python %s username password" % sys.argv[0]
sys.exit(1)
client = ConvoreClient(username, password)
#client.verify()
groups = client.groups()
print groups
#group = client.groups.create(name="MyTestGroup", description="desc", slug="the group")
#print repr(group)
# for group in groups:
# if "test" in group.slug:
# break
#print group
# print repr(group)
# topic = group.topics.create(name="Topic One")
# print repr(topic)
# topics = group.topics()
# print topics
# topic = client.topics[topics[-1].id]
# print topic
# print repr(topic)
# topic.messages.create(message="Wow, I'm the first")
# topic.messages.create(message="Hmm, I must be the second")
# messages = topic.messages()
# print messages
#for message in client.live():
# print message
+95
View File
@@ -0,0 +1,95 @@
# -*- coding: utf-8 -*-
'''
Copyringt 2011 Kenichi Sato <ksato9700 AT gmail.com>
'''
from user import ConvoreUser
from topic import ConvoreTopics
from datetime import datetime
class ConvoreGroups(object):
def __init__(self, client):
self.client = client
def __call__(self):
response = self.client._make_request(command="groups.json")
groups = []
for g in response['groups']:
group = ConvoreGroup(g, self.client)
groups.append(group)
return groups
def __getitem__(self, group_id):
response = self.client._make_request(command="groups/%s.json" % group_id)
return ConvoreGroup(response['group'], self.client)
def create(self, name, description=None, slug=None):
params = {'name': name}
if description:
params['description'] = description
if slug:
params['slug'] = slug
print params
response = self.client._make_request(command="groups/create.json",
params=params)
return ConvoreGroup(response['group'], self.client)
class ConvoreGroup(object):
def __init__(self, g, client):
self.members_count = g['members_count']
self.name = g['name']
self.creator = ConvoreUser(g['creator'])
self.url = g['url']
self.slug = g['slug']
self.date_latest_message = datetime.utcfromtimestamp(g['date_latest_message'])
self.date_created = datetime.utcfromtimestamp(g['date_created'])
self.topics_count = g['topics_count'] if 'topics_count' in g else None
self.unread = g['unread'] if 'unread' in g else None
self.id = g['id']
self.client = client
self.topics = ConvoreTopics(self.client, self.id)
def leave(self):
params = {'group_id': self.id}
response = self.client._make_request(command="groups/%s/leave.json" % self.id,
params=params)
print response
def __str__(self):
return "<ConvoreGroup id='%s'>" % self.id
def __repr__(self):
return "<ConvoreGroup " + ",".join(map(str,(
self.members_count,
self.name,
self.creator,
self.url,
self.slug,
self.date_latest_message,
self.date_created,
self.topics_count,
self.unread,
self.id,
))) + ">"
if __name__ == "__main__":
g = {"date_latest_message": 1297661354.6135991,
"topics_count": 16,
"members_count": 643,
"name": "Python",
"creator": {"username": "fdrake",
"url": "/users/fdrake/",
"id": "886",
"img": "https://convore2.s3.amazonaws.com/userpics/886/1297277206.jpg"},
"url": "/python/",
"date_created": 1297306311.4270909,
"unread": 0,
"id": "292",
"slug": "python"
}
group = ConvoreGroup(g, None)
print group
print repr(group)
+43
View File
@@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
'''
Copyringt 2011 Kenichi Sato <ksato9700 AT gmail.com>
'''
from user import ConvoreUser
from datetime import datetime
class ConvoreLiveMessage(object):
def __init__(self, m):
self.kind = m['kind']
self.group_ids = m['group_ids']
self.user = ConvoreUser(m['user'])
self._ts = datetime.utcfromtimestamp(m['_ts'])
self._id = m['_id']
def __str__(self):
return "<ConvoreLiveMessage _id='%s'>" % self._id
def __repr__(self):
return ",".join(map(str,(
self.kind,
self.group_ids,
self.user,
self._ts,
self._id,
)))
if __name__ == "__main__":
m = {"kind": "logout",
"group_ids": [292],
"user": {"username": "ksato9700",
"url": "/users/ksato9700/",
"id": 8849,
"img": "https://convore2.s3.amazonaws.com/userpics/8849/1297620465.jpg"},
"_ts": 1297638926.453522,
"_id": "2415aa7c-37c7-11e0-a4f2-4040006c4e80"
}
message = ConvoreLiveMessage(m)
print message
print repr(message)
+47
View File
@@ -0,0 +1,47 @@
# -*- coding: utf-8 -*-
'''
Copyringt 2011 Kenichi Sato <ksato9700 AT gmail.com>
'''
from user import ConvoreUser
from datetime import datetime
class ConvoreMessages(object):
def __init__(self, client, topic_id):
self.client = client
self.topic_id = topic_id
def __call__(self):
response = self.client._make_request(command="topics/%s/messages.json" % self.topic_id)
messages = []
for m in response['messages']:
message = ConvoreMessage(m)
messages.append(message)
return messages
def create(self, message):
params = {
'message': message,
'topic_id': self.topic_id
}
response = self.client._make_request(command="topics/%s/messages/create.json" % self.topic_id,
params=params)
return ConvoreMessage(response['message'])
class ConvoreMessage(object):
def __init__(self, m):
self.date_created = datetime.utcfromtimestamp(m['date_created'])
self.message = m['message']
self.user = ConvoreUser(m['user'])
self.id = m['id']
def __str__(self):
return "<ConvoreMessage id='%s'>" % self.id
def __repr__(self):
return "<ConvoreMessage " + ",".join(map(str,(
self.date_created,
self.message,
self.user,
self.id,
))) + ">"
+68
View File
@@ -0,0 +1,68 @@
# -*- coding: utf-8 -*-
'''
Copyringt 2011 Kenichi Sato <ksato9700 AT gmail.com>
'''
from user import ConvoreUser
from message import ConvoreMessages
from datetime import datetime
class ConvoreTopics(object):
def __init__(self, client, group_id=None):
self.client = client
self.group_id = group_id
def __call__(self):
response = self.client._make_request(command="groups/%s/topics.json" % self.group_id)
topics = []
for t in response['topics']:
topic = ConvoreTopic(t, self.client)
topics.append(topic)
return topics
def __getitem__(self, topic_id):
response = self.client._make_request(command="topics/%s.json" % topic_id)
return ConvoreTopic(response['topic'], self.client)
def create(self, name):
if self.group_id == None:
raise RuntimeError("topics should be created with group_id")
params = {
'name': name,
'group_id': self.group_id
}
response = self.client._make_request(command="groups/%s/topics/create.json" % self.group_id,
params=params)
return ConvoreTopic(response['topic'], self.client)
class ConvoreTopic(object):
def __init__(self, t, client):
self.name = t['name']
self.creator = ConvoreUser(t['creator'])
self.url = t['url']
self.slug = t['slug']
self.date_latest_message = datetime.utcfromtimestamp(t['date_latest_message'])
self.date_created = datetime.utcfromtimestamp(t['date_created'])
self.message_count = t['message_count'] if 'message_count' in t else None
self.unread = t['unread'] if 'unread' in t else None
self.id = t['id']
self.client = client
self.messages = ConvoreMessages(self.client, self.id)
def __str__(self):
return "<ConvoreTopic id='%s'>" % self.id
def __repr__(self):
return "<ConvoreTopic " + ",".join(map(str,(
self.name,
self.creator,
self.url,
self.slug,
self.date_latest_message,
self.date_created,
self.message_count,
self.unread,
self.id,
))) + ">"
+33
View File
@@ -0,0 +1,33 @@
# -*- coding: utf-8 -*-
"""
Copyringt 2011 Kenichi Sato <ksato9700 AT gmail.com>
"""
from datetime import datetime
class ConvoreUser(object):
def __init__(self, u):
self.username = u['username']
self.url = u['url']
self.id = u['id']
self.img = u['img']
def __str__(self):
return "<ConvoreUser id='%s'>" % self.id
def __repr__ (self):
return ",".join(map(str,(
self.username,
self.url,
self.id,
self.img)))
if __name__ == "__main__":
u = {"username": "ksato9700",
"url": "/users/ksato9700/",
"id": 8849,
"img": "https://convore2.s3.amazonaws.com/userpics/8849/1297620465.jpg"}
user = ConvoreUser(u)
print user
print repr(user)