summaryrefslogtreecommitdiff
path: root/gitlab.py
diff options
context:
space:
mode:
authorGauvain Pocentek <gauvain@pocentek.net>2013-02-12 16:17:24 +0100
committerGauvain Pocentek <gauvain@pocentek.net>2013-02-12 16:17:24 +0100
commiteb4cd36fc329793e124f589abaf80587925d7a6b (patch)
tree8851fd1ff530b5a268dbf2cc7c4d9903d63a43a8 /gitlab.py
parent653843d7e5e426009f648730877919f1a9ff1758 (diff)
downloadgitlab-eb4cd36fc329793e124f589abaf80587925d7a6b.tar.gz
rework authentication API
Diffstat (limited to 'gitlab.py')
-rw-r--r--gitlab.py42
1 files changed, 30 insertions, 12 deletions
diff --git a/gitlab.py b/gitlab.py
index e141211..c1eee7e 100644
--- a/gitlab.py
+++ b/gitlab.py
@@ -43,17 +43,19 @@ class Gitlab(object):
self.email = email
self.password = password
- if not self.private_token:
- self.authenticate
+ def auth(self):
+ r = False
+ if self.private_token:
+ r = self.token_auth()
- def authenticate(self, email=None, password=None):
- self.email = self.email or email
- self.password = self.password or password
+ if not r:
+ self.credentials_auth()
+ def credentials_auth(self):
if not self.email or not self.password:
raise GitlabAuthenticationError("Missing email/password")
- r = self.rawPost('/session', {'email': email, 'password': password})
+ r = self.rawPost('/session', {'email': self.email, 'password': self.password})
if r.status_code == 201:
self.user = CurrentUser(self, r.json)
else:
@@ -61,12 +63,23 @@ class Gitlab(object):
self.private_token = self.user.private_token
+ def token_auth(self):
+ try:
+ self.user = self.get(CurrentUser)
+ return True
+ except:
+ return False
+
def setUrl(self, url):
self.url = '%s/api/v3'%url
def setToken(self, token):
self.private_token = token
+ def setCredentials(self, email, password):
+ self.email = email
+ self.password = password
+
def rawPost(self, path, data):
url = '%s%s'%(self.url, path)
try:
@@ -104,11 +117,14 @@ class Gitlab(object):
else:
raise GitlabGetError('%d: %s'%(r.status_code, r.text))
- def get(self, objClass, id, **kwargs):
+ def get(self, objClass, id=None, **kwargs):
url = objClass.url
if kwargs:
url = objClass.url % kwargs
- url = '%s%s/%d?private_token=%s'%(self.url, url, id, self.private_token)
+ if id != None:
+ url = '%s%s/%d?private_token=%s'%(self.url, url, id, self.private_token)
+ else:
+ url = '%s%s?private_token=%s'%(self.url, url, self.private_token)
try:
r = requests.get(url)
@@ -273,10 +289,10 @@ class GitlabObject(object):
return self.gitlab.delete(self)
- def __init__(self, gl, data, **kwargs):
+ def __init__(self, gl, data=None, **kwargs):
self.gitlab = gl
- if isinstance(data, int):
+ if data is None or isinstance(data, int):
data = self.gitlab.get(self.__class__, data, **kwargs)
self.setFromDict(data)
@@ -442,14 +458,16 @@ class Project(GitlabObject):
return self.getListOrObject(ProjectTag, id, project_id=self.id)
if __name__ == '__main__':
- # quick "doc"
+ # Quick "doc"
#
# See https://github.com/gitlabhq/gitlabhq/tree/master/doc/api for the
# source
- # register a connection to a gitlab instance, using its URL and a user
+ # Register a connection to a gitlab instance, using its URL and a user
# private token
gl = Gitlab('http://192.168.123.107:8080', 'JVNSESs8EwWRx5yDxM5q')
+ # Connect to get the current user (as gl.user)
+ gl.auth()
# get a list of projects
for p in gl.Project():