Skip to content

Commit 0d20a06

Browse files
Denis AbakumovDenis Abakumov
authored andcommitted
[Bitbucket] Added Download class to retrieve pipeline-generated artifacts (Cloud)
1 parent a8eabbf commit 0d20a06

File tree

3 files changed

+125
-3
lines changed

3 files changed

+125
-3
lines changed

atlassian/bitbucket/cloud/common/users.py

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
from datetime import datetime
2+
13
from ..base import BitbucketCloudBase
24

35

@@ -31,6 +33,49 @@ def avatar(self):
3133
return self.get_data("links")["avatar"]["href"]
3234

3335

36+
class AppUser(BitbucketCloudBase):
37+
def __init__(self, url, data, *args, **kwargs):
38+
super(AppUser, self).__init__(url, *args, data=data, expected_type="app_user", **kwargs)
39+
40+
@property
41+
def display_name(self):
42+
"""User display name"""
43+
return str(self.get_data("display_name"))
44+
45+
@property
46+
def account_id(self):
47+
"""User account id"""
48+
return self.get_data("account_id")
49+
50+
@property
51+
def account_status(self):
52+
"""User account status"""
53+
return self.get_data("account_status")
54+
55+
@property
56+
def created_on(self):
57+
"""User creation date"""
58+
created_on = self.get_data("created_on")
59+
if created_on is None:
60+
return None
61+
return datetime.strptime(created_on, self.CONF_TIMEFORMAT)
62+
63+
@property
64+
def uuid(self):
65+
"""User id"""
66+
return self.get_data("uuid")
67+
68+
@property
69+
def kind(self):
70+
"""User kind"""
71+
return self.get_data("kind")
72+
73+
@property
74+
def links(self):
75+
"""User links"""
76+
return self.get_data("links")
77+
78+
3479
class Participant(BitbucketCloudBase):
3580
ROLE_REVIEWER = "REVIEWER"
3681
ROLE_PARTICIPANT = "PARTICIPANT"

atlassian/bitbucket/cloud/repositories/__init__.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,20 @@
11
# coding=utf-8
22

33
from requests import HTTPError
4-
from ..base import BitbucketCloudBase
5-
from .issues import Issues
4+
65
from .branchRestrictions import BranchRestrictions
76
from .commits import Commits
8-
from .hooks import Hooks
97
from .defaultReviewers import DefaultReviewers
108
from .deploymentEnvironments import DeploymentEnvironments
9+
from .downloads import Downloads
1110
from .groupPermissions import GroupPermissions
11+
from .hooks import Hooks
12+
from .issues import Issues
1213
from .pipelines import Pipelines
1314
from .pullRequests import PullRequests
1415
from .refs import Branches, Tags
1516
from .repositoryVariables import RepositoryVariables
17+
from ..base import BitbucketCloudBase
1618

1719

1820
class RepositoriesBase(BitbucketCloudBase):
@@ -277,6 +279,7 @@ def __init__(self, data, *args, **kwargs):
277279
f"{self.url}/pipelines_config/variables", **self._new_session_args
278280
)
279281
self.__tags = Tags(f"{self.url}/refs/tags", **self._new_session_args)
282+
self.__downloads = Downloads(f"{self.url}/downloads", **self._new_session_args)
280283

281284
def update(self, **kwargs):
282285
"""
@@ -433,3 +436,8 @@ def repository_variables(self):
433436
def tags(self):
434437
"""The repository tags."""
435438
return self.__tags
439+
440+
@property
441+
def downloads(self):
442+
"""The repository downloads"""
443+
return self.__downloads
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
from datetime import datetime
2+
3+
from ..base import BitbucketCloudBase
4+
from ..common.users import AppUser
5+
6+
7+
class Download(BitbucketCloudBase):
8+
def __init__(self, url, data, *args, **kwargs):
9+
super(Download, self).__init__(
10+
url, *args, data=data, expected_type="download", **kwargs
11+
)
12+
13+
@property
14+
def name(self):
15+
"""The download file name"""
16+
return self.get_data("name")
17+
18+
@property
19+
def size(self):
20+
"""The download size in bytes"""
21+
return self.get_data("size")
22+
23+
@property
24+
def created_on(self):
25+
"""The download created date"""
26+
created_on = self.get_data("created_on")
27+
if created_on is None:
28+
return None
29+
return datetime.strptime(created_on, self.CONF_TIMEFORMAT)
30+
31+
@property
32+
def user(self):
33+
"""The user who created this download"""
34+
return AppUser(None, self.get_data("user"))
35+
36+
@property
37+
def downloads(self):
38+
"""The number of times this file was downloaded"""
39+
return self.get_data("downloads")
40+
41+
@property
42+
def links(self):
43+
"""The download links"""
44+
return self.get_data("links")
45+
46+
47+
class Downloads(BitbucketCloudBase):
48+
def __init__(self, url, *args, **kwargs):
49+
super(Downloads, self).__init__(url, *args, **kwargs)
50+
51+
def __get_object(self, data):
52+
return Download(
53+
self.url_joiner(self.url, data["links"]["self"]),
54+
data,
55+
**self._new_session_args
56+
) # fmt: skip
57+
58+
def each(self):
59+
"""
60+
Returns the list of downloads in this repository.
61+
62+
:return: A generator for the Download objects
63+
64+
API docs: https://developer.atlassian.com/cloud/bitbucket/rest/api-group-downloads/#api-repositories-workspace-repo-slug-downloads-get
65+
"""
66+
for issue in self._get_paged(None):
67+
yield self.__get_object(issue)
68+
69+
return

0 commit comments

Comments
 (0)