Skip to content

Commit d31f0b9

Browse files
committed
🚧 Updated
1 parent 5bebbc3 commit d31f0b9

File tree

1 file changed

+19
-24
lines changed

1 file changed

+19
-24
lines changed

git_repo/services/ext/bitbucket.py

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,40 +6,34 @@
66
from ..service import register_target, RepositoryService
77
from ...exceptions import ResourceError, ResourceExistsError, ResourceNotFoundError
88

9-
from pybitbucket.bitbucket import Client
9+
from pybitbucket.bitbucket import Client, Bitbucket
1010
from pybitbucket.auth import BasicAuthenticator
11-
from pybitbucket.user import User
1211
from pybitbucket.repository import Repository, RepositoryForkPolicy
1312

1413
from requests import Request, Session
1514
from requests.exceptions import HTTPError
1615
import json
1716

18-
# bitbucket.URLS.update({
19-
# 'GET_REPO' : 'repositories/%(username)s/%(repo_slug)s/',
20-
# 'DELETE_REPO' : 'repositories/%(accountname)s/%(repo_slug)s',
21-
# 'FORK_REPO' : 'repositories/%(username)s/%(repo_slug)s/fork',
22-
# })
23-
2417

2518
@register_target('bb', 'bitbucket')
2619
class BitbucketService(RepositoryService):
2720
fqdn = 'bitbucket.org'
2821

2922
def __init__(self, *args, **kwarg):
30-
self.bb = Client()
23+
self.bb_client = Client()
24+
self.bb = Bitbucket(self.bb_client)
3125
super(BitbucketService, self).__init__(*args, **kwarg)
3226

3327
def connect(self):
3428
if not self._privatekey:
3529
raise ConnectionError('Could not connect to BitBucket. Please configure .gitconfig with your bitbucket credentials.')
3630
if not ':' in self._privatekey:
3731
raise ConnectionError('Could not connect to BitBucket. Please setup your private key with login:password')
38-
self.bb.config = BasicAuthenticator(*self._privatekey.split(':')+['z+git-repo+pub@m0g.net'])
39-
self.bb.session = self.bb.config.session
32+
self.bb_client.config = BasicAuthenticator(*self._privatekey.split(':')+['z+git-repo+pub@m0g.net'])
33+
self.bb_client.session = self.bb_client.config.session
4034
try:
41-
User.find_current_user(client=self.bb)
42-
except HTTPError as err:
35+
self.user
36+
except ResourceError as err:
4337
raise ConnectionError('Could not connect to BitBucket. Not authorized, wrong credentials.') from err
4438

4539
def create(self, user, repo, add=False):
@@ -48,36 +42,36 @@ def create(self, user, repo, add=False):
4842
repo,
4943
fork_policy=RepositoryForkPolicy.ALLOW_FORKS,
5044
is_private=False,
51-
client=self.bb
45+
client=self.bb_client
5246
)
5347
if add:
5448
self.add(user=user, repo=repo, tracking=self.name)
5549
except HTTPError as err:
56-
if err.status_code == 400:
50+
if '400' in err.args[0].split(' '):
5751
raise ResourceExistsError('Project {} already exists on this account.'.format(repo)) from err
5852
raise ResourceError("Couldn't complete creation: {}".format(err)) from err
5953

6054
def fork(self, user, repo):
6155
raise NotImplementedError('No support yet by the underlying library.')
6256
try:
63-
Repository.find_repository_by_name_and_owner(repo, owner=user, client=self.bb).fork()
57+
self.get_repository(user, repo).fork()
6458
except HTTPError as err:
65-
raise ResourceError("Couldn't complete creation: {}".format(err)) from err
59+
raise ResourceError("Couldn't complete fork: {}".format(err)) from err
6660
return '/'.join([result['owner'], result['slug']])
6761

6862
def delete(self, repo, user=None):
6963
if not user:
7064
user = self.user
7165
try:
72-
Repository.find_repository_by_name_and_owner(repo, owner=user, client=self.bb).delete()
66+
self.get_repository(user, repo).delete()
7367
except HTTPError as err:
74-
if err.status_code == 404:
68+
if '404' in err.args[0].split(' '):
7569
raise ResourceNotFoundError("Cannot delete: repository {}/{} does not exists.".format(user, repo)) from err
76-
raise ResourceError("Couldn't complete creation: {}".format(err)) from err
70+
raise ResourceError("Couldn't complete deletion: {}".format(err)) from err
7771

7872
def get_repository(self, user, repo):
7973
try:
80-
return Repository.find_repository_by_name_and_owner(repo, owner=user, client=self.bb)
74+
return next(self.bb.repositoryByOwnerAndRepositoryName(owner=user, repository_name=repo))
8175
except HTTPError as err:
8276
raise ResourceNotFoundError('Cannot retrieve repository: {}/{} does not exists.'.format(user, repo))
8377

@@ -89,8 +83,9 @@ def get_auth_token(cls, login, password, prompt=None):
8983
@property
9084
def user(self):
9185
try:
92-
return User.find_current_user(client=self.bb).username
93-
except HTTPError as err:
94-
raise ResourceError("Couldn't complete creation: {}".format(err)) from err
86+
user = next(self.bb.userForMyself()).username
87+
return user
88+
except (HTTPError, AttributeError) as err:
89+
raise ResourceError("Couldn't find the current user: {}".format(err)) from err
9590

9691

0 commit comments

Comments
 (0)