Skip to content

Commit 8edd7f7

Browse files
author
Adam Reid
committed
2 parents 111b7d9 + 64af398 commit 8edd7f7

File tree

2 files changed

+96
-36
lines changed

2 files changed

+96
-36
lines changed

gitlab/__init__.py

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ def __init__(self, url, private_token=None,
122122
#: Whether SSL certificates should be validated
123123
self.ssl_verify = ssl_verify
124124

125+
#: Create a session object for requests
126+
self.session = requests.Session()
127+
125128
self.settings = ApplicationSettingsManager(self)
126129
self.user_keys = UserKeyManager(self)
127130
self.users = UserManager(self)
@@ -260,11 +263,11 @@ def _raw_get(self, path, content_type=None, **kwargs):
260263
headers = self._create_headers(content_type)
261264

262265
try:
263-
return requests.get(url,
264-
params=kwargs,
265-
headers=headers,
266-
verify=self.ssl_verify,
267-
timeout=self.timeout)
266+
return self.session.get(url,
267+
params=kwargs,
268+
headers=headers,
269+
verify=self.ssl_verify,
270+
timeout=self.timeout)
268271
except Exception as e:
269272
raise GitlabConnectionError(
270273
"Can't connect to GitLab server (%s)" % e)
@@ -298,10 +301,10 @@ def _raw_post(self, path, data=None, content_type=None, **kwargs):
298301
url = '%s%s' % (self._url, path)
299302
headers = self._create_headers(content_type)
300303
try:
301-
return requests.post(url, params=kwargs, data=data,
302-
headers=headers,
303-
verify=self.ssl_verify,
304-
timeout=self.timeout)
304+
return self.session.post(url, params=kwargs, data=data,
305+
headers=headers,
306+
verify=self.ssl_verify,
307+
timeout=self.timeout)
305308
except Exception as e:
306309
raise GitlabConnectionError(
307310
"Can't connect to GitLab server (%s)" % e)
@@ -311,10 +314,10 @@ def _raw_put(self, path, data=None, content_type=None, **kwargs):
311314
headers = self._create_headers(content_type)
312315

313316
try:
314-
return requests.put(url, data=data, params=kwargs,
315-
headers=headers,
316-
verify=self.ssl_verify,
317-
timeout=self.timeout)
317+
return self.session.put(url, data=data, params=kwargs,
318+
headers=headers,
319+
verify=self.ssl_verify,
320+
timeout=self.timeout)
318321
except Exception as e:
319322
raise GitlabConnectionError(
320323
"Can't connect to GitLab server (%s)" % e)
@@ -324,11 +327,11 @@ def _raw_delete(self, path, content_type=None, **kwargs):
324327
headers = self._create_headers(content_type)
325328

326329
try:
327-
return requests.delete(url,
328-
params=kwargs,
329-
headers=headers,
330-
verify=self.ssl_verify,
331-
timeout=self.timeout)
330+
return self.session.delete(url,
331+
params=kwargs,
332+
headers=headers,
333+
verify=self.ssl_verify,
334+
timeout=self.timeout)
332335
except Exception as e:
333336
raise GitlabConnectionError(
334337
"Can't connect to GitLab server (%s)" % e)
@@ -365,10 +368,14 @@ def list(self, obj_class, **kwargs):
365368
for attribute in obj_class.requiredUrlAttrs:
366369
del params[attribute]
367370

371+
# Also remove the next-url attribute that make queries fail
372+
if 'next_url' in params:
373+
del params['next_url']
374+
368375
try:
369-
r = requests.get(url, params=params, headers=headers,
370-
verify=self.ssl_verify,
371-
timeout=self.timeout)
376+
r = self.session.get(url, params=params, headers=headers,
377+
verify=self.ssl_verify,
378+
timeout=self.timeout)
372379
except Exception as e:
373380
raise GitlabConnectionError(
374381
"Can't connect to GitLab server (%s)" % e)
@@ -434,8 +441,8 @@ def get(self, obj_class, id=None, **kwargs):
434441
del params[attribute]
435442

436443
try:
437-
r = requests.get(url, params=params, headers=headers,
438-
verify=self.ssl_verify, timeout=self.timeout)
444+
r = self.session.get(url, params=params, headers=headers,
445+
verify=self.ssl_verify, timeout=self.timeout)
439446
except Exception as e:
440447
raise GitlabConnectionError(
441448
"Can't connect to GitLab server (%s)" % e)
@@ -487,11 +494,11 @@ def delete(self, obj, id=None, **kwargs):
487494
del params[attribute]
488495

489496
try:
490-
r = requests.delete(url,
491-
params=params,
492-
headers=headers,
493-
verify=self.ssl_verify,
494-
timeout=self.timeout)
497+
r = self.session.delete(url,
498+
params=params,
499+
headers=headers,
500+
verify=self.ssl_verify,
501+
timeout=self.timeout)
495502
except Exception as e:
496503
raise GitlabConnectionError(
497504
"Can't connect to GitLab server (%s)" % e)
@@ -535,10 +542,10 @@ def create(self, obj, **kwargs):
535542
data = obj._data_for_gitlab(extra_parameters=kwargs)
536543

537544
try:
538-
r = requests.post(url, data=data,
539-
headers=headers,
540-
verify=self.ssl_verify,
541-
timeout=self.timeout)
545+
r = self.session.post(url, data=data,
546+
headers=headers,
547+
verify=self.ssl_verify,
548+
timeout=self.timeout)
542549
except Exception as e:
543550
raise GitlabConnectionError(
544551
"Can't connect to GitLab server (%s)" % e)
@@ -585,10 +592,10 @@ def update(self, obj, **kwargs):
585592
data = obj._data_for_gitlab(extra_parameters=kwargs, update=True)
586593

587594
try:
588-
r = requests.put(url, data=data,
589-
headers=headers,
590-
verify=self.ssl_verify,
591-
timeout=self.timeout)
595+
r = self.session.put(url, data=data,
596+
headers=headers,
597+
verify=self.ssl_verify,
598+
timeout=self.timeout)
592599
except Exception as e:
593600
raise GitlabConnectionError(
594601
"Can't connect to GitLab server (%s)" % e)

gitlab/objects.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1473,6 +1473,59 @@ def blob(self, sha, filepath, **kwargs):
14731473
raise_error_from_response(r, GitlabGetError)
14741474
return r.content
14751475

1476+
def raw_blob(self, sha, **kwargs):
1477+
"""Returns the raw file contents for a blob by blob SHA.
1478+
1479+
Args:
1480+
sha(str): ID of the blob
1481+
1482+
Returns:
1483+
str: The blob content
1484+
1485+
Raises:
1486+
GitlabConnectionError: If the server cannot be reached.
1487+
GitlabGetError: If the server fails to perform the request.
1488+
"""
1489+
url = "/projects/%s/repository/raw_blobs/%s" % (self.id, sha)
1490+
r = self.gitlab._raw_get(url, **kwargs)
1491+
raise_error_from_response(r, GitlabGetError)
1492+
return r.content
1493+
1494+
def compare(self, from_, to, **kwargs):
1495+
"""Returns a diff between two branches/commits.
1496+
1497+
Args:
1498+
from_(str): orig branch/SHA
1499+
to(str): dest branch/SHA
1500+
1501+
Returns:
1502+
str: The diff
1503+
1504+
Raises:
1505+
GitlabConnectionError: If the server cannot be reached.
1506+
GitlabGetError: If the server fails to perform the request.
1507+
"""
1508+
url = "/projects/%s/repository/compare" % self.id
1509+
url = "%s?from=%s&to=%s" % (url, from_, to)
1510+
r = self.gitlab._raw_get(url, **kwargs)
1511+
raise_error_from_response(r, GitlabGetError)
1512+
return r.json()
1513+
1514+
def contributors(self):
1515+
"""Returns a list of contributors for the project.
1516+
1517+
Returns:
1518+
list: The contibutors
1519+
1520+
Raises:
1521+
GitlabConnectionError: If the server cannot be reached.
1522+
GitlabGetError: If the server fails to perform the request.
1523+
"""
1524+
url = "/projects/%s/repository/contributors" % self.id
1525+
r = self.gitlab._raw_get(url)
1526+
raise_error_from_response(r, GitlabListError)
1527+
return r.json()
1528+
14761529
def archive(self, sha=None, **kwargs):
14771530
"""Return a tarball of the repository.
14781531

0 commit comments

Comments
 (0)