Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
Adam Reid committed May 9, 2016
2 parents 111b7d9 + 64af398 commit 8edd7f7
Show file tree
Hide file tree
Showing 2 changed files with 96 additions and 36 deletions.
79 changes: 43 additions & 36 deletions gitlab/__init__.py
Expand Up @@ -122,6 +122,9 @@ def __init__(self, url, private_token=None,
#: 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)
Expand Down Expand Up @@ -260,11 +263,11 @@ def _raw_get(self, path, content_type=None, **kwargs):
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)
Expand Down Expand Up @@ -298,10 +301,10 @@ def _raw_post(self, path, data=None, content_type=None, **kwargs):
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)
Expand All @@ -311,10 +314,10 @@ def _raw_put(self, path, data=None, content_type=None, **kwargs):
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)
Expand All @@ -324,11 +327,11 @@ def _raw_delete(self, path, content_type=None, **kwargs):
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)
Expand Down Expand Up @@ -365,10 +368,14 @@ def list(self, obj_class, **kwargs):
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)
Expand Down Expand Up @@ -434,8 +441,8 @@ def get(self, obj_class, id=None, **kwargs):
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)
Expand Down Expand Up @@ -487,11 +494,11 @@ def delete(self, obj, id=None, **kwargs):
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)
Expand Down Expand Up @@ -535,10 +542,10 @@ def create(self, obj, **kwargs):
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)
Expand Down Expand Up @@ -585,10 +592,10 @@ def update(self, obj, **kwargs):
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)
Expand Down
53 changes: 53 additions & 0 deletions gitlab/objects.py
Expand Up @@ -1473,6 +1473,59 @@ def blob(self, sha, filepath, **kwargs):
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.
Expand Down

0 comments on commit 8edd7f7

Please sign in to comment.