+++ /dev/null
-import diaspy.models
-import diaspy.streams
-import diaspy.connection
-from diaspy import notifications
-
-
-class Client:
- """This is the client class used to interact with Diaspora.
- It can be used as a reference implementation of client using diaspy.
- """
- def __init__(self, pod, username='', password=''):
- """
- `pod` can also be a diaspy.connection.Connection type and
- Client() will detect it. When giving a connection there is no need
- to pass username and password.
-
- :param pod: The complete url of the diaspora pod to use
- (or Connection() object).
- :type pod: str
- :param username: The username used to log in.
- :type username: str
- :param password: The password used to log in.
- :type password: str
- """
- if type(pod) == diaspy.connection.Connection:
- self.connection = pod
- else:
- self.connection = diaspy.connection.Connection(pod, username, password)
- self.connection.login()
- self.stream = diaspy.streams.Stream(self.connection, 'stream.json')
-
- def post(self, text, aspect_ids='public', photos=None, photo=''):
- """This function sends a post to an aspect
-
- :param text: text to post
- :type text: str
- :param aspect_ids: Aspect ids to send post to.
- :type aspect_ids: str
- :param photo: path to picture file
- :type photo: str
- :returns: diaspy.models.Post -- the Post which has been created
- """
- post = self.stream.post(text, aspect_ids, photos, photo)
- return post
-
- def get_activity(self):
- """This function returns activity stream.
-
- :returns: diaspy.streams.Activity
- """
- return diaspy.streams.Activity(self.connection, 'activity.json')
-
- def get_stream(self):
- """This functions returns stream.
-
- :returns: diaspy.streams.Stream
- """
- self.stream.update()
- return self.stream
-
- def get_aspects(self):
- """Returns aspects stream.
-
- :returns: diaspy.streams.Aspects
- """
- return diaspy.streams.Aspects(self.connection)
-
- def get_mentions(self):
- """Returns /mentions stream.
-
- :returns: diaspy.streams.Mentions
- """
- return diaspy.streams.Mentions(self.connection)
-
- def get_followed_tags(self):
- """Returns followed tags stream.
-
- :returns: diaspy.streams.FollowedTags
- """
- return diaspy.streams.FollowedTags(self.connection)
-
- def get_tag(self, tag):
- """This functions returns a list of posts containing the tag.
- :param tag: Name of the tag
- :type tag: str
-
- :returns: diaspy.streams.Generic -- stream containg posts with given tag
- """
- return diaspy.streams.Generic(self.connection, location='tags/{0}.json'.format(tag))
-
- def get_notifications(self):
- """This functions returns a list of notifications.
-
- :returns: list -- list of json formatted notifications
- """
- return notifications.Notifications(self.connection)
-
- def get_mailbox(self):
- """This functions returns a list of messages found in the conversation.
-
- :returns: list -- list of Conversation objects.
- """
- r = self.connection.get('conversations.json')
-
- if r.status_code != 200:
- raise Exception('wrong status code: {0}'.format(r.status_code))
-
- mailbox = r.json()
- return [diaspy.conversations.Conversation(self.connection, conversation['conversation']['id'])
- for conversation in mailbox]
-
- def add_aspect(self, aspect_name, visible=0):
- """This function adds a new aspect.
- """
- diaspy.streams.Aspects(self.connection).add(aspect_name, visible)
-
- def remove_aspect(self, aspect_id):
- """This function removes an aspect.
- """
- diaspy.streams.Aspects(self.connection).remove(aspect_id)
-
- def add_user_to_aspect(self, user_id, aspect_id):
- """ this function adds a user to an aspect.
-
- :param user_id: User ID
- :type user_id: str
- :param aspect_id: Aspect ID
- :type aspect_id: str
-
- """
- return diaspy.models.Aspect(self.connection, aspect_id).addUser(user_id)
-
- def remove_user_from_aspect(self, user_id, aspect_id):
- """ this function removes a user from an aspect.
-
- :param user_id: User ID
- :type user_id: str
- :param aspect_id: Aspect ID
- :type aspect_id: str
-
- """
- return diaspy.models.Aspect(self.connection, aspect_id).removeUser(user_id)
-
- def new_conversation(self, contacts, subject, text):
- """Start a new conversation.
-
- :param contacts: recipients ids, no guids, comma sperated.
- :type contacts: str
- :param subject: subject of the message.
- :type subject: str
- :param text: text of the message.
- :type text: str
- """
- data = {'contact_ids': contacts,
- 'conversation[subject]': subject,
- 'conversation[text]': text,
- 'utf8': '✓',
- 'authenticity_token': self.connection.get_token()}
-
- r = self.connection.post('conversations/',
- data=data,
- headers={'accept': 'application/json'})
- if r.status_code != 200:
- raise Exception('{0}: Conversation could not be started.'
- .format(r.status_code))
- return r.json()