#!/usr/bin/env python # -*- encoding: utf-8 -*- from .base import Service class Keys(Service): """ Consume `Keys API `_ .. warning:: You must be authenticated for all requests """ def list(self): """ Get public keys :returns: A :doc:`result` """ request = self.make_request('users.keys.list') return self._get_result(request) def get(self, key_id): """ Get a public key :param int key_id: Key id """ request = self.make_request('users.keys.get', key_id=key_id) return self._get(request) def add(self, data): """ Add a public key :param dict data: Key (title and key attributes required) :: key_service.add(dict(title='host', key='ssh-rsa AAA...')) """ request = self.make_request('users.keys.add', body=data) return self._post(request) def update(self, key_id, data): """ Update a public key :param int key_id: Key id :param dict data: Key (title and key attributes required) :: key_service.update(42, dict(title='host', key='ssh-rsa AAA...')) """ request = self.make_request('users.keys.update', key_id=key_id, body=data) return self._patch(request) def delete(self, key_id): """ Delete a public key :param int key_id: Key id """ request = self.make_request('users.keys.delete', key_id=key_id) self._delete(request) class Followers(Service): """ Consume `Followers API `_ """ def list(self, user=None): """ Get user's followers :param str user: Username :returns: A :doc:`result` If you call it without user and you are authenticated, get the authenticated user's followers .. warning:: If you aren't authenticated and call without user, it returns 403 :: followers_service.list() followers_service.list('octocat') """ request = self.make_request('users.followers.list', user=user) return self._get_result(request) def list_following(self, user=None): """ Get who a user is following :param str user: Username :returns: A :doc:`result` If you call it without user and you are authenticated, get the authenticated user's followings .. warning:: If you aren't authenticated and call without user, it returns 403 :: followers_service.list_following() followers_service.list_following('octocat') """ request = self.make_request('users.followers.listfollowing', user=user) return self._get_result(request) def is_following(self, user): """ Check if you are following a user :param str user: Username """ request = self.make_request('users.followers.isfollowing', user=user) return self._bool(request) def follow(self, user): """ Follow a user :param str user: Username .. warning:: You must be authenticated """ request = self.make_request('users.followers.follow', user=user) self._put(request) def unfollow(self, user): """ Unfollow a user :param str user: Username .. warning:: You must be authenticated """ request = self.make_request('users.followers.unfollow', user=user) self._delete(request) class Emails(Service): """ Consume `Emails API `_ .. warning:: You must be authenticated for all requests """ def list(self): """ Get user's emails :returns: A :doc:`result` """ request = self.make_request('users.emails.list') return self._get_result(request) def add(self, *emails): """ Add emails :param list emails: Emails to add .. note:: It rejects non-valid emails :: email_service.add('test1@xample.com', 'test2@xample.com') """ request = self.make_request('users.emails.add', body=emails) return self._post(request) def delete(self, *emails): """ Delete emails :param list emails: List of emails :: email_service.delete('test1@xample.com', 'test2@xample.com') """ request = self.make_request('users.emails.delete', body=emails) self._delete(request) class User(Service): """ Consume `Users API `_ """ def __init__(self, **config): self.keys = Keys(**config) self.emails = Emails(**config) self.followers = Followers(**config) super(User, self).__init__(**config) def get(self, user=None): """ Get a single user :param str user: Username If you call it without user and you are authenticated, get the authenticated user. .. warning:: If you aren't authenticated and call without user, it returns 403 :: user_service.get('copitux') user_service.get() """ request = self.make_request('users.get', user=user) return self._get(request) def update(self, data): """ Update the authenticated user :param dict data: Input to update :: user_service.update(dict(name='new_name', bio='new_bio')) """ request = self.make_request('users.update', body=data) return self._patch(request)