Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Split Authorization class into it's own module.

Because of this, create tests for it and documentation.
  • Loading branch information...
commit 8dc24b24cfed26cea54402c74de0e585e93e5c9c 1 parent c2bf97f
@sigmavirus24 authored
View
11 docs/auths.rst
@@ -0,0 +1,11 @@
+.. module:: github3
+.. module:: github3.auths
+
+Authorization
+=============
+
+This part of the documentation covers the
+:class:`Authorization <Authorization>` object.
+
+.. autoclass:: Authorization
+ :inherited-members:
View
5 docs/github.rst
@@ -22,10 +22,5 @@ GitHub Object
.. autoclass:: GitHub
:inherited-members:
-------
-
-.. autoclass:: Authorization
- :inherited-members:
-
.. links
.. _here: examples/githubex.html
View
7 docs/index.rst
@@ -62,6 +62,7 @@ Modules
:maxdepth: 1
api
+ auths
events
gists
git
@@ -205,7 +206,7 @@ To run the tests as they would be run by Travis CI::
CI=true ./unittests.py
-To test functions that require proper authorization::
+To test functions that require proper authentication::
./unittests.py
@@ -214,7 +215,9 @@ The latter will prompt you for your username and password, e.g.::
[ sigma: ~/sandbox/github3.py ] ./unittests.py
Enter GitHub username: sigmavirus24
Password for sigmavirus24:
- === Starting unittest suite ===
+
+This will generally fail until we can generalize the authenticated tests via a
+config file.
Contact
View
88 github3/auths.py
@@ -0,0 +1,88 @@
+"""
+github3.auths
+=============
+
+This module contains the Authorization object.
+
+"""
+
+from github3.models import GitHubCore
+from json import dumps
+
+
+class Authorization(GitHubCore):
+ """The :class:`Authorization <Authorization>` object."""
+ def __init__(self, auth, session):
+ super(Authorization, self).__init__(auth, session)
+ #: Details about the application (name, url)
+ self.app = auth.get('app', {})
+ #: Returns the Authorization token
+ self.token = auth.get('token', '')
+ #: App name
+ self.name = auth.app.get('name', '')
+ #: URL about the note
+ self.note_url = auth.get('note_url', '')
+ #: Note about the authorization
+ self.note = auth.get('note', '')
+ #: List of scopes this applies to
+ self.scopes = auth.get('scopes', [])
+ #: Unique id of the authorization
+ self.id = auth.get('id', 0)
+ self._api = self._build_url('authorizations', str(self.id))
+ #: datetime object representing when the authorization was created.
+ self.created_at = None
+ if auth.get('created_at'):
+ self.created_at = self._strptime(auth.get('created_at'))
+ #: datetime object representing when the authorization was created.
+ self.updated_at = None
+ if auth.get('updated_at'):
+ self.updated_at = self._strptime(auth.get('updated_at'))
+
+ def __repr__(self):
+ return '<Authorization [{0}]>'.format(self.name)
+
+ def _update_(self, auth):
+ self.__init__(auth, self._session)
+
+ def delete(self):
+ """delete this authorization"""
+ return self._boolean(self._delete(self._api), 204, 404)
+
+ def update(self, scopes=[], add_scopes=[], rm_scopes=[], note='',
+ note_url=''):
+ """Update this authorization.
+
+ :param scopes: (optional), replaces the authorization scopes with these
+ :type scopes: list
+ :param add_scopes: (optional), scopes to be added
+ :type add_scopes: list
+ :param rm_scopes: (optional), scopes to be removed
+ :type rm_scopes: list
+ :param note: (optional), new note about authorization
+ :type note: str
+ :param note_url: (optional), new note URL about this authorization
+ :type note_url: str
+ :returns: bool
+ """
+ success = False
+ if scopes:
+ d = dumps({'scopes': scopes})
+ json = self._json(self._get(self._api, data=d), 200)
+ self._update_(json)
+ success = True
+ if add_scopes:
+ d = dumps({'add_scopes': add_scopes})
+ json = self._json(self._get(self._api, data=d), 200)
+ self._update_(json)
+ success = True
+ if rm_scopes:
+ d = dumps({'remove_scopes': rm_scopes})
+ json = self._json(self._get(self._api, data=d), 200)
+ self._update_(json)
+ success = True
+ if note or note_url:
+ d = dumps({'note': note, 'note_url': note_url})
+ json = self._json(self._get(self._api, data=d), 200)
+ self._update_(json)
+ success = True
+ return success
View
80 github3/github.py
@@ -8,6 +8,7 @@
from requests import session
from json import dumps
+from github3.auths import Authorization
from github3.events import Event
from github3.gists import Gist
from github3.issues import Issue, issue_params
@@ -677,7 +678,8 @@ def list_repos(self, login=None, type='', sort='', direction=''):
json = self._json(self._get(url, params=params), 200)
return [Repository(repo, self) for repo in json]
- def iter_repos(self, login=None, type='', sort='', direction='', number=-1):
+ def iter_repos(self, login=None, type='', sort='', direction='',
+ number=-1):
"""List public repositories for the specified ``login`` or all
repositories for the authenticated user if ``login`` is not
provided.
@@ -1039,79 +1041,3 @@ def watch(self, login, repo):
def unwatch(self, login, repo):
"""DEPRECATED: Use unsubscribe/unstar instead."""
raise DeprecationWarning('Use unsubscribe/unstar instead.')
-
-
-class Authorization(GitHubCore):
- """The :class:`Authorization <Authorization>` object."""
- def __init__(self, auth, session):
- super(Authorization, self).__init__(auth, session)
- #: Details about the application
- self.app = auth.get('app', {})
- #: Returns the Authorization token
- self.token = auth.get('token', '')
- #: URL about the note
- self.note_url = auth.get('note_url', '')
- #: Note about the authorization
- self.note = auth.get('note', '')
- #: List of scopes this applies to
- self.scopes = auth.get('scopes', [])
- #: Unique id of the authorization
- self.id = auth.get('id', 0)
- self._api = self._build_url('authorizations', str(self.id))
- #: datetime object representing when the authorization was created.
- self.created_at = None
- if auth.get('created_at'):
- self.created_at = self._strptime(auth.get('created_at'))
- #: datetime object representing when the authorization was created.
- self.updated_at = None
- if auth.get('updated_at'):
- self.updated_at = self._strptime(auth.get('updated_at'))
-
- def __repr__(self):
- return '<Authorization [{0}]>'.format(self.app.get('name', ''))
-
- def _update_(self, auth):
- self.__init__(auth, self._session)
-
- def delete(self):
- """delete this authorization"""
- return self._boolean(self._delete(self._api), 204, 404)
-
- def update(self, scopes=[], add_scopes=[], rm_scopes=[], note='',
- note_url=''):
- """Update this authorization.
-
- :param scopes: (optional), replaces the authorization scopes with these
- :type scopes: list
- :param add_scopes: (optional), scopes to be added
- :type add_scopes: list
- :param rm_scopes: (optional), scopes to be removed
- :type rm_scopes: list
- :param note: (optional), new note about authorization
- :type note: str
- :param note_url: (optional), new note URL about this authorization
- :type note_url: str
- :returns: bool
- """
- success = False
- if scopes:
- d = dumps({'scopes': scopes})
- json = self._json(self._get(self._api, data=d), 200)
- self._update_(json)
- success = True
- if add_scopes:
- d = dumps({'add_scopes': add_scopes})
- json = self._json(self._get(self._api, data=d), 200)
- self._update_(json)
- success = True
- if rm_scopes:
- d = dumps({'remove_scopes': rm_scopes})
- json = self._json(self._get(self._api, data=d), 200)
- self._update_(json)
- success = True
- if note or note_url:
- d = dumps({'note': note, 'note_url': note_url})
- json = self._json(self._get(self._api, data=d), 200)
- self._update_(json)
- success = True
- return success
View
66 tests/test_auths.py
@@ -0,0 +1,66 @@
+from .base import expect, BaseTest
+from datetime import datetime
+from github3.auths import Authorization
+
+
+class TestAuthorization(BaseTest):
+ def __init__(self, methodName='runTest'):
+ if not self.auth:
+ json = {'scopes': ['public_repo'],
+ 'url': 'https://api.github.com',
+ 'app': {'url': 'travis-ci.org', 'name': 'Travis'},
+ 'updated_at': '2012-09-28T03:43:11Z',
+ 'id': 0,
+ 'note': None,
+ 'note_url': None,
+ 'token': 'upupdowndownleftrightba',
+ 'created_at': '2012-02-28T01:45:49Z',
+ }
+ self.authorization = Authorization(json)
+ else:
+ self.authorization = self.g.authorize(self.user, self.pw, [])
+ self.deleted = False
+
+ def test_authorization(self):
+ expect(self.authorization).isinstance(Authorization)
+ expect(repr(self.authorization)) != ''
+
+ def test_app(self):
+ expect(self.authorization.app).isinstance(dict)
+
+ def test_name(self):
+ expect(self.authorization.name) == self.authorization.app.get('name',
+ '')
+
+ def test_token(self):
+ expect(self.authorization.token) != ''
+
+ def test_updated_at(self):
+ expect(self.authorization.updated_at).isinstance(datetime)
+
+ def test_created_at(self):
+ expect(self.authorization.created_at).isinstance(datetime)
+
+ def test_note(self):
+ expect(self.authorization.note) >= ''
+
+ def test_note_url(self):
+ expect(self.authorization.note_url) >= ''
+
+ def test_scopes(self):
+ expect(self.authorization.scopes).isinstance(list)
+
+ def test_update(self):
+ if not self.auth:
+ return
+ if self.deleted:
+ self.authorization = self._g.authorize(None, None, [])
+ self.authorization.update(['repo', 'repo:status'], ['user'],
+ ['repo:status'], 'https://github.com/sigmavirus24/github3.py')
+ if self.deleted:
+ self.authorization.delete()
+
+ def test_delelte(self):
+ if not self.auth:
+ return
+ expect(self.authorization.delete()).is_True()
View
18 tests/test_github.py
@@ -2,6 +2,7 @@
from .base import expect, expect_str, BaseTest
from github3.repos import Repository
from github3.events import Event
+from github3.auths import Authorization
class TestGitHub(BaseTest):
@@ -223,10 +224,25 @@ def test_create_repo(self):
r.delete()
def test_authorizations_requires_auth(self):
- self.raisesGHE(self.g.list_authorizations)
self.raisesGHE(self.g.authorization, -1)
self.raisesGHE(self.g.authorize, 'foo', 'bar', ['gist', 'user'])
+ def test_iter_authorizations(self):
+ self.raisesGHE(self.g.iter_authorizations)
+
+ if not self.auth:
+ return
+
+ expect(next(self._g.iter_authorizations())).isinstance(Authorization)
+
+ def test_list_authorizations(self):
+ self.raisesGHE(self.g.list_authorizations)
+
+ if not self.auth:
+ return
+
+ expect(self._g.list_authorizations()).list_of(Authorization)
+
def test_list_emails(self):
self.raisesGHE(self.g.list_emails)
Please sign in to comment.
Something went wrong with that request. Please try again.