summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gitlab/__init__.py79
-rw-r--r--gitlab/objects.py53
2 files changed, 96 insertions, 36 deletions
diff --git a/gitlab/__init__.py b/gitlab/__init__.py
index 6c75195..1994d55 100644
--- a/gitlab/__init__.py
+++ b/gitlab/__init__.py
@@ -122,6 +122,9 @@ class Gitlab(object):
#: Whether SSL certificates should be validated
self.ssl_verify = ssl_verify
+ #: Create a session object for requests
+ self.session = requests.Session()
+
self.settings = ApplicationSettingsManager(self)
self.user_keys = UserKeyManager(self)
self.users = UserManager(self)
@@ -260,11 +263,11 @@ class Gitlab(object):
headers = self._create_headers(content_type)
try:
- return requests.get(url,
- params=kwargs,
- headers=headers,
- verify=self.ssl_verify,
- timeout=self.timeout)
+ return self.session.get(url,
+ params=kwargs,
+ headers=headers,
+ verify=self.ssl_verify,
+ timeout=self.timeout)
except Exception as e:
raise GitlabConnectionError(
"Can't connect to GitLab server (%s)" % e)
@@ -298,10 +301,10 @@ class Gitlab(object):
url = '%s%s' % (self._url, path)
headers = self._create_headers(content_type)
try:
- return requests.post(url, params=kwargs, data=data,
- headers=headers,
- verify=self.ssl_verify,
- timeout=self.timeout)
+ return self.session.post(url, params=kwargs, data=data,
+ headers=headers,
+ verify=self.ssl_verify,
+ timeout=self.timeout)
except Exception as e:
raise GitlabConnectionError(
"Can't connect to GitLab server (%s)" % e)
@@ -311,10 +314,10 @@ class Gitlab(object):
headers = self._create_headers(content_type)
try:
- return requests.put(url, data=data, params=kwargs,
- headers=headers,
- verify=self.ssl_verify,
- timeout=self.timeout)
+ return self.session.put(url, data=data, params=kwargs,
+ headers=headers,
+ verify=self.ssl_verify,
+ timeout=self.timeout)
except Exception as e:
raise GitlabConnectionError(
"Can't connect to GitLab server (%s)" % e)
@@ -324,11 +327,11 @@ class Gitlab(object):
headers = self._create_headers(content_type)
try:
- return requests.delete(url,
- params=kwargs,
- headers=headers,
- verify=self.ssl_verify,
- timeout=self.timeout)
+ return self.session.delete(url,
+ params=kwargs,
+ headers=headers,
+ verify=self.ssl_verify,
+ timeout=self.timeout)
except Exception as e:
raise GitlabConnectionError(
"Can't connect to GitLab server (%s)" % e)
@@ -365,10 +368,14 @@ class Gitlab(object):
for attribute in obj_class.requiredUrlAttrs:
del params[attribute]
+ # Also remove the next-url attribute that make queries fail
+ if 'next_url' in params:
+ del params['next_url']
+
try:
- r = requests.get(url, params=params, headers=headers,
- verify=self.ssl_verify,
- timeout=self.timeout)
+ r = self.session.get(url, params=params, headers=headers,
+ verify=self.ssl_verify,
+ timeout=self.timeout)
except Exception as e:
raise GitlabConnectionError(
"Can't connect to GitLab server (%s)" % e)
@@ -434,8 +441,8 @@ class Gitlab(object):
del params[attribute]
try:
- r = requests.get(url, params=params, headers=headers,
- verify=self.ssl_verify, timeout=self.timeout)
+ r = self.session.get(url, params=params, headers=headers,
+ verify=self.ssl_verify, timeout=self.timeout)
except Exception as e:
raise GitlabConnectionError(
"Can't connect to GitLab server (%s)" % e)
@@ -487,11 +494,11 @@ class Gitlab(object):
del params[attribute]
try:
- r = requests.delete(url,
- params=params,
- headers=headers,
- verify=self.ssl_verify,
- timeout=self.timeout)
+ r = self.session.delete(url,
+ params=params,
+ headers=headers,
+ verify=self.ssl_verify,
+ timeout=self.timeout)
except Exception as e:
raise GitlabConnectionError(
"Can't connect to GitLab server (%s)" % e)
@@ -535,10 +542,10 @@ class Gitlab(object):
data = obj._data_for_gitlab(extra_parameters=kwargs)
try:
- r = requests.post(url, data=data,
- headers=headers,
- verify=self.ssl_verify,
- timeout=self.timeout)
+ r = self.session.post(url, data=data,
+ headers=headers,
+ verify=self.ssl_verify,
+ timeout=self.timeout)
except Exception as e:
raise GitlabConnectionError(
"Can't connect to GitLab server (%s)" % e)
@@ -585,10 +592,10 @@ class Gitlab(object):
data = obj._data_for_gitlab(extra_parameters=kwargs, update=True)
try:
- r = requests.put(url, data=data,
- headers=headers,
- verify=self.ssl_verify,
- timeout=self.timeout)
+ r = self.session.put(url, data=data,
+ headers=headers,
+ verify=self.ssl_verify,
+ timeout=self.timeout)
except Exception as e:
raise GitlabConnectionError(
"Can't connect to GitLab server (%s)" % e)
diff --git a/gitlab/objects.py b/gitlab/objects.py
index 6924341..c537b42 100644
--- a/gitlab/objects.py
+++ b/gitlab/objects.py
@@ -1473,6 +1473,59 @@ class Project(GitlabObject):
raise_error_from_response(r, GitlabGetError)
return r.content
+ def raw_blob(self, sha, **kwargs):
+ """Returns the raw file contents for a blob by blob SHA.
+
+ Args:
+ sha(str): ID of the blob
+
+ Returns:
+ str: The blob content
+
+ Raises:
+ GitlabConnectionError: If the server cannot be reached.
+ GitlabGetError: If the server fails to perform the request.
+ """
+ url = "/projects/%s/repository/raw_blobs/%s" % (self.id, sha)
+ r = self.gitlab._raw_get(url, **kwargs)
+ raise_error_from_response(r, GitlabGetError)
+ return r.content
+
+ def compare(self, from_, to, **kwargs):
+ """Returns a diff between two branches/commits.
+
+ Args:
+ from_(str): orig branch/SHA
+ to(str): dest branch/SHA
+
+ Returns:
+ str: The diff
+
+ Raises:
+ GitlabConnectionError: If the server cannot be reached.
+ GitlabGetError: If the server fails to perform the request.
+ """
+ url = "/projects/%s/repository/compare" % self.id
+ url = "%s?from=%s&to=%s" % (url, from_, to)
+ r = self.gitlab._raw_get(url, **kwargs)
+ raise_error_from_response(r, GitlabGetError)
+ return r.json()
+
+ def contributors(self):
+ """Returns a list of contributors for the project.
+
+ Returns:
+ list: The contibutors
+
+ Raises:
+ GitlabConnectionError: If the server cannot be reached.
+ GitlabGetError: If the server fails to perform the request.
+ """
+ url = "/projects/%s/repository/contributors" % self.id
+ r = self.gitlab._raw_get(url)
+ raise_error_from_response(r, GitlabListError)
+ return r.json()
+
def archive(self, sha=None, **kwargs):
"""Return a tarball of the repository.